From 4ee391e7b5cf4bbae5e2ee22391eae6283a4a47e Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sun, 10 Dec 2023 19:04:40 -0800 Subject: [PATCH 001/146] nostrdb/build: fix additional compiler errors When trying to build from rust Signed-off-by: William Casarin --- nostrdb/nostrdb.c | 9 +++++---- nostrdb/nostrdb.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c index 099317116..8bbbea144 100644 --- a/nostrdb/nostrdb.c +++ b/nostrdb/nostrdb.c @@ -1671,7 +1671,7 @@ static int ndb_ingester_process_event(secp256k1_context *ctx, ndb_client_event_from_json(ev->json, ev->len, &fce, buf, bufsize, &cb) : ndb_ws_event_from_json(ev->json, ev->len, &tce, buf, bufsize, &cb); - if (note_size == -42) { + if ((int)note_size == -42) { // we already have this! //ndb_debug("already have id??\n"); goto cleanup; @@ -2256,6 +2256,7 @@ static int ndb_write_note_fulltext_index(struct ndb_txn *txn, static int ndb_parse_search_words(void *ctx, const char *word_str, int word_len, int word_index) { + (void)word_index; struct ndb_search_words *words = ctx; struct ndb_word *word; @@ -3066,7 +3067,7 @@ static int ndb_queue_write_version(struct ndb *ndb, uint64_t version) static int ndb_run_migrations(struct ndb *ndb) { - uint64_t version, latest_version, i; + int64_t version, latest_version, i; latest_version = sizeof(MIGRATIONS) / sizeof(MIGRATIONS[0]); @@ -3259,7 +3260,7 @@ static inline int cursor_push_tag(struct cursor *cur, struct ndb_tag *tag) } int ndb_builder_init(struct ndb_builder *builder, unsigned char *buf, - int bufsize) + size_t bufsize) { struct ndb_note *note; int half, size, str_indices_size; @@ -4240,7 +4241,7 @@ int ndb_stat(struct ndb *ndb, struct ndb_stat *stat) common_kind = ndb_kind_to_common_kind(note->kind); // uncommon kind? just count them in bulk - if (common_kind == -1) { + if ((int)common_kind == -1) { stat->other_kinds.count++; stat->other_kinds.key_size += k.mv_size; stat->other_kinds.value_size += v.mv_size; diff --git a/nostrdb/nostrdb.h b/nostrdb/nostrdb.h index 483d3edc1..c532a0f95 100644 --- a/nostrdb/nostrdb.h +++ b/nostrdb/nostrdb.h @@ -364,7 +364,7 @@ int ndb_parse_json_note(struct ndb_json_parser *, struct ndb_note **); int ndb_client_event_from_json(const char *json, int len, struct ndb_fce *fce, unsigned char *buf, int bufsize, struct ndb_id_cb *cb); int ndb_ws_event_from_json(const char *json, int len, struct ndb_tce *tce, unsigned char *buf, int bufsize, struct ndb_id_cb *); int ndb_note_from_json(const char *json, int len, struct ndb_note **, unsigned char *buf, int buflen); -int ndb_builder_init(struct ndb_builder *builder, unsigned char *buf, int bufsize); +int ndb_builder_init(struct ndb_builder *builder, unsigned char *buf, size_t bufsize); int ndb_builder_finalize(struct ndb_builder *builder, struct ndb_note **note, struct ndb_keypair *privkey); int ndb_builder_set_content(struct ndb_builder *builder, const char *content, int len); void ndb_builder_set_created_at(struct ndb_builder *builder, uint64_t created_at); From 8f0ab4bec913a1c035cb78f0aec86cca165d6bc4 Mon Sep 17 00:00:00 2001 From: Yasuhiro Matsumoto Date: Sun, 3 Dec 2023 23:33:57 +0900 Subject: [PATCH 002/146] nostrdb/add "import -" Closes: https://github.com/damus-io/nostrdb/pull/21 Signed-off-by: William Casarin --- nostrdb/nostrdb.c | 18 ++++++++++++++++++ nostrdb/nostrdb.h | 1 + 2 files changed, 19 insertions(+) diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c index 8bbbea144..745e3e908 100644 --- a/nostrdb/nostrdb.c +++ b/nostrdb/nostrdb.c @@ -3244,6 +3244,24 @@ int _ndb_process_events(struct ndb *ndb, const char *ldjson, size_t json_len, in return 1; } +int ndb_process_events_stream(struct ndb *ndb, FILE* fp) +{ + char *line = NULL; + size_t len = 0; + ssize_t nread; + + while ((nread = getline(&line, &len, stdin)) != -1) { + if (line == NULL) + break; + ndb_process_event(ndb, line, len); + } + + if (line) + free(line); + + return 1; +} + int ndb_process_client_events(struct ndb *ndb, const char *ldjson, size_t json_len) { return _ndb_process_events(ndb, ldjson, json_len, 1); diff --git a/nostrdb/nostrdb.h b/nostrdb/nostrdb.h index c532a0f95..ed61416e0 100644 --- a/nostrdb/nostrdb.h +++ b/nostrdb/nostrdb.h @@ -341,6 +341,7 @@ int ndb_init(struct ndb **ndb, const char *dbdir, struct ndb_config *); int ndb_db_version(struct ndb *ndb); int ndb_process_event(struct ndb *, const char *json, int len); int ndb_process_events(struct ndb *, const char *ldjson, size_t len); +int ndb_process_events_stream(struct ndb *, FILE* fp); int ndb_process_client_event(struct ndb *, const char *json, int len); int ndb_process_client_events(struct ndb *, const char *json, size_t len); int ndb_begin_query(struct ndb *, struct ndb_txn *); From 2d0d3c9b5672de342d2f422d4918c02b3a73f177 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 13 Dec 2023 17:53:46 -0800 Subject: [PATCH 003/146] nostrdb/stream: actually use file pointer in stream api Right now it's accidently hardcoded. Fixes: 8376e5bca05c ("add "import -"") Signed-off-by: William Casarin --- nostrdb/nostrdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c index 745e3e908..63f683135 100644 --- a/nostrdb/nostrdb.c +++ b/nostrdb/nostrdb.c @@ -3250,7 +3250,7 @@ int ndb_process_events_stream(struct ndb *ndb, FILE* fp) size_t len = 0; ssize_t nread; - while ((nread = getline(&line, &len, stdin)) != -1) { + while ((nread = getline(&line, &len, fp)) != -1) { if (line == NULL) break; ndb_process_event(ndb, line, len); From a822261f5d510df6f4a96549fdb1a40c4feeca8b Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 14:01:03 -0800 Subject: [PATCH 004/146] c: move cursor.h to nostrdb subdir everything will be in here soon --- {damus-c => nostrdb}/cursor.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {damus-c => nostrdb}/cursor.h (100%) diff --git a/damus-c/cursor.h b/nostrdb/cursor.h similarity index 100% rename from damus-c/cursor.h rename to nostrdb/cursor.h From a58b674cc186388e7f971c6a01336413dcd4e13c Mon Sep 17 00:00:00 2001 From: William Casarin Date: Tue, 12 Dec 2023 13:19:58 -0800 Subject: [PATCH 005/146] nostrdb/api: don't expose many internals, like note rust doesn't like packed structures, so hide this from bindgen This also buttons up the API so less things are exposed which is good. Signed-off-by: William Casarin --- nostrdb/nostrdb.c | 276 +++++++++++++++++++++++- nostrdb/nostrdb.h | 538 ++++++++++++++-------------------------------- 2 files changed, 430 insertions(+), 384 deletions(-) diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c index 63f683135..d48e79a5e 100644 --- a/nostrdb/nostrdb.c +++ b/nostrdb/nostrdb.c @@ -51,6 +51,52 @@ typedef int (*ndb_migrate_fn)(struct ndb *); typedef int (*ndb_word_parser_fn)(void *, const char *word, int word_len, int word_index); +// these must be byte-aligned, they are directly accessing the serialized data +// representation +#pragma pack(push, 1) + + +union ndb_packed_str { + struct { + char str[3]; + // we assume little endian everywhere. sorry not sorry. + unsigned char flag; // NDB_PACKED_STR, etc + } packed; + + uint32_t offset; + unsigned char bytes[4]; +}; + +struct ndb_tag { + uint16_t count; + union ndb_packed_str strs[0]; +}; + +struct ndb_tags { + uint16_t padding; + uint16_t count; + struct ndb_tag tag[0]; +}; + +// v1 +struct ndb_note { + unsigned char version; // v=1 + unsigned char padding[3]; // keep things aligned + unsigned char id[32]; + unsigned char pubkey[32]; + unsigned char sig[64]; + + uint64_t created_at; + uint32_t kind; + uint32_t content_length; + union ndb_packed_str content; + uint32_t strings; + // nothing can come after tags since it contains variadic data + struct ndb_tags tags; +}; + +#pragma pack(pop) + struct ndb_migration { ndb_migrate_fn fn; }; @@ -674,7 +720,7 @@ static int ndb_generic_filter_matches(struct ndb_filter_elements *els, if (it->tag->count < 2) continue; - str = ndb_note_str(note, &it->tag->strs[0]); + str = ndb_tag_str(note, it->tag, 0); // we only care about packed strings (single char, etc) if (str.flag != NDB_PACKED_STR) @@ -684,7 +730,7 @@ static int ndb_generic_filter_matches(struct ndb_filter_elements *els, if (str.str[0] != els->field.generic || str.str[1] != 0) continue; - str = ndb_note_str(note, &it->tag->strs[1]); + str = ndb_tag_str(note, it->tag, 1); switch (els->field.elem_type) { case NDB_ELEMENT_ID: @@ -1966,11 +2012,11 @@ static unsigned char *ndb_note_last_id_tag(struct ndb_note *note, char type) if (iter.tag->count < 2) continue; - str = ndb_note_str(note, &iter.tag->strs[0]); + str = ndb_tag_str(note, iter.tag, 0); // assign liked to the last e tag if (str.flag == NDB_PACKED_STR && str.str[0] == type) { - str = ndb_note_str(note, &iter.tag->strs[1]); + str = ndb_tag_str(note, iter.tag, 1); if (str.flag == NDB_PACKED_ID) last = str.id; } @@ -3481,7 +3527,7 @@ static int cursor_push_json_tag(struct cursor *cur, struct ndb_note *note, return 0; for (i = 0; i < tag->count; i++) { - if (!cursor_push_json_tag_str(cur, ndb_note_str(note, &tag->strs[i]))) + if (!cursor_push_json_tag_str(cur, ndb_tag_str(note, tag, i))) return 0; if (i != tag->count-1 && !cursor_push_byte(cur, ',')) return 0; @@ -3652,6 +3698,16 @@ struct ndb_note * ndb_builder_note(struct ndb_builder *builder) return builder->note; } +static union ndb_packed_str ndb_offset_str(uint32_t offset) +{ + // ensure accidents like -1 don't corrupt our packed_str + union ndb_packed_str str; + // most significant byte is reserved for ndb_packtype + str.offset = offset & 0xFFFFFF; + return str; +} + + /// find an existing string via str_indices. these indices only exist in the /// builder phase just for this purpose. static inline int ndb_builder_find_str(struct ndb_builder *builder, @@ -3715,6 +3771,25 @@ static int ndb_builder_push_packed_id(struct ndb_builder *builder, return 0; } +union ndb_packed_str ndb_chars_to_packed_str(char c1, char c2) +{ + union ndb_packed_str str; + str.packed.flag = NDB_PACKED_STR; + str.packed.str[0] = c1; + str.packed.str[1] = c2; + str.packed.str[2] = '\0'; + return str; +} + +static union ndb_packed_str ndb_char_to_packed_str(char c) +{ + union ndb_packed_str str; + str.packed.flag = NDB_PACKED_STR; + str.packed.str[0] = c; + str.packed.str[1] = '\0'; + return str; +} + /// Check for small strings to pack static inline int ndb_builder_try_compact_str(struct ndb_builder *builder, @@ -4358,3 +4433,194 @@ int ndb_print_search_keys(struct ndb_txn *txn) return 1; } + +struct ndb_tags *ndb_note_tags(struct ndb_note *note) +{ + return ¬e->tags; +} + +struct ndb_str ndb_note_str(struct ndb_note *note, union ndb_packed_str *pstr) +{ + struct ndb_str str; + str.flag = pstr->packed.flag; + + if (str.flag == NDB_PACKED_STR) { + str.str = pstr->packed.str; + return str; + } + + str.str = ((const char *)note) + note->strings + (pstr->offset & 0xFFFFFF); + return str; +} + +struct ndb_str ndb_tag_str(struct ndb_note *note, struct ndb_tag *tag, int ind) +{ + return ndb_note_str(note, &tag->strs[ind]); +} + +struct ndb_str ndb_iter_tag_str(struct ndb_iterator *iter, int ind) +{ + return ndb_tag_str(iter->note, iter->tag, ind); +} + +unsigned char * ndb_note_id(struct ndb_note *note) +{ + return note->id; +} + +unsigned char * ndb_note_pubkey(struct ndb_note *note) +{ + return note->pubkey; +} + +unsigned char * ndb_note_sig(struct ndb_note *note) +{ + return note->sig; +} + +uint32_t ndb_note_created_at(struct ndb_note *note) +{ + return note->created_at; +} + +uint32_t ndb_note_kind(struct ndb_note *note) +{ + return note->kind; +} + +void _ndb_note_set_kind(struct ndb_note *note, uint32_t kind) +{ + note->kind = kind; +} + +const char *ndb_note_content(struct ndb_note *note) +{ + return ndb_note_str(note, ¬e->content).str; +} + +uint32_t ndb_note_content_length(struct ndb_note *note) +{ + return note->content_length; +} + +struct ndb_note * ndb_note_from_bytes(unsigned char *bytes) +{ + struct ndb_note *note = (struct ndb_note *)bytes; + if (note->version != 1) + return 0; + return note; +} + +void ndb_tags_iterate_start(struct ndb_note *note, struct ndb_iterator *iter) +{ + iter->note = note; + iter->tag = NULL; + iter->index = -1; +} + +int ndb_tags_iterate_next(struct ndb_iterator *iter) +{ + if (iter->tag == NULL || iter->index == -1) { + iter->tag = iter->note->tags.tag; + iter->index = 0; + return iter->note->tags.count != 0; + } + + struct ndb_tags *tags = &iter->note->tags; + + if (++iter->index < tags->count) { + uint32_t tag_data_size = iter->tag->count * sizeof(iter->tag->strs[0]); + iter->tag = (struct ndb_tag *)(iter->tag->strs[0].bytes + tag_data_size); + return 1; + } + + return 0; +} + +uint16_t ndb_tags_count(struct ndb_tags *tags) +{ + return tags->count; +} + +uint16_t ndb_tag_count(struct ndb_tag *tags) +{ + return tags->count; +} + +enum ndb_common_kind ndb_kind_to_common_kind(int kind) +{ + switch (kind) + { + case 0: return NDB_CKIND_PROFILE; + case 1: return NDB_CKIND_TEXT; + case 3: return NDB_CKIND_CONTACTS; + case 4: return NDB_CKIND_DM; + case 5: return NDB_CKIND_DELETE; + case 6: return NDB_CKIND_REPOST; + case 7: return NDB_CKIND_REACTION; + case 9735: return NDB_CKIND_ZAP; + case 9734: return NDB_CKIND_ZAP_REQUEST; + case 23194: return NDB_CKIND_NWC_REQUEST; + case 23195: return NDB_CKIND_NWC_RESPONSE; + case 27235: return NDB_CKIND_HTTP_AUTH; + case 30000: return NDB_CKIND_LIST; + case 30023: return NDB_CKIND_LONGFORM; + case 30315: return NDB_CKIND_STATUS; + } + + return -1; +} + +const char *ndb_kind_name(enum ndb_common_kind ck) +{ + switch (ck) { + case NDB_CKIND_PROFILE: return "profile"; + case NDB_CKIND_TEXT: return "text"; + case NDB_CKIND_CONTACTS: return "contacts"; + case NDB_CKIND_DM: return "dm"; + case NDB_CKIND_DELETE: return "delete"; + case NDB_CKIND_REPOST: return "repost"; + case NDB_CKIND_REACTION: return "reaction"; + case NDB_CKIND_ZAP: return "zap"; + case NDB_CKIND_ZAP_REQUEST: return "zap_request"; + case NDB_CKIND_NWC_REQUEST: return "nwc_request"; + case NDB_CKIND_NWC_RESPONSE: return "nwc_response"; + case NDB_CKIND_HTTP_AUTH: return "http_auth"; + case NDB_CKIND_LIST: return "list"; + case NDB_CKIND_LONGFORM: return "longform"; + case NDB_CKIND_STATUS: return "status"; + case NDB_CKIND_COUNT: return "unknown"; + } + + return "unknown"; +} + +const char *ndb_db_name(enum ndb_dbs db) +{ + switch (db) { + case NDB_DB_NOTE: + return "note"; + case NDB_DB_META: + return "note_metadata"; + case NDB_DB_PROFILE: + return "profile"; + case NDB_DB_NOTE_ID: + return "note_index"; + case NDB_DB_PROFILE_PK: + return "profile_pubkey_index"; + case NDB_DB_NDB_META: + return "nostrdb_metadata"; + case NDB_DB_PROFILE_SEARCH: + return "profile_search"; + case NDB_DB_PROFILE_LAST_FETCH: + return "profile_last_fetch"; + case NDB_DB_NOTE_KIND: + return "note_kind_index"; + case NDB_DB_NOTE_TEXT: + return "note_fulltext"; + case NDB_DBS: + return "count"; + } + + return "unknown"; +} diff --git a/nostrdb/nostrdb.h b/nostrdb/nostrdb.h index ed61416e0..a5f2833fc 100644 --- a/nostrdb/nostrdb.h +++ b/nostrdb/nostrdb.h @@ -20,70 +20,42 @@ struct ndb_json_parser; struct ndb; +struct ndb_note; +struct ndb_tag; +struct ndb_tags; +struct ndb_lmdb; +union ndb_packed_str; // sorry, swift needs help with forward declared pointers like this struct ndb_t { struct ndb *ndb; }; -struct ndb_search_key -{ - char search[24]; - unsigned char id[32]; - uint64_t timestamp; -}; - -enum ndb_dbs { - NDB_DB_NOTE, - NDB_DB_META, - NDB_DB_PROFILE, - NDB_DB_NOTE_ID, - NDB_DB_PROFILE_PK, // profile pk index - NDB_DB_NDB_META, - NDB_DB_PROFILE_SEARCH, - NDB_DB_PROFILE_LAST_FETCH, - NDB_DB_NOTE_KIND, // note kind index - NDB_DB_NOTE_TEXT, // note fulltext index - NDB_DBS, -}; - -// common kinds. we collect stats on these in ndb_stat. mainly because I don't -// want to deal with including a hashtable to the project. -enum ndb_common_kind { - NDB_CKIND_PROFILE, - NDB_CKIND_TEXT, - NDB_CKIND_CONTACTS, - NDB_CKIND_DM, - NDB_CKIND_DELETE, - NDB_CKIND_REPOST, - NDB_CKIND_REACTION, - NDB_CKIND_ZAP, - NDB_CKIND_ZAP_REQUEST, - NDB_CKIND_NWC_REQUEST, - NDB_CKIND_NWC_RESPONSE, - NDB_CKIND_HTTP_AUTH, - NDB_CKIND_LIST, - NDB_CKIND_LONGFORM, - NDB_CKIND_STATUS, - NDB_CKIND_COUNT, // should always be last +struct ndb_str { + unsigned char flag; + union { + const char *str; + unsigned char *id; + }; }; -struct ndb_stat_counts { - size_t key_size; - size_t value_size; - size_t count; +struct ndb_keypair { + unsigned char pubkey[32]; + unsigned char secret[32]; + + // this corresponds to secp256k1's keypair type. it's guaranteed to + // be 96 bytes according to their docs. I don't want to depend on + // the secp256k1 header here so we just use raw bytes. + unsigned char pair[96]; }; -struct ndb_stat { - struct ndb_stat_counts dbs[NDB_DBS]; - struct ndb_stat_counts common_kinds[NDB_CKIND_COUNT]; - struct ndb_stat_counts other_kinds; -}; +// function pointer for controlling what to do after we parse an id +typedef enum ndb_idres (*ndb_id_fn)(void *, const char *); -struct ndb_search { - struct ndb_search_key *key; - uint64_t profile_key; - void *cursor; // MDB_cursor * +// id callback + closure data +struct ndb_id_cb { + ndb_id_fn fn; + void *data; }; // required to keep a read @@ -92,6 +64,16 @@ struct ndb_txn { void *mdb_txn; }; +struct ndb_event { + struct ndb_note *note; +}; + +struct ndb_command_result { + int ok; + const char *msg; + int msglen; +}; + // From-client event types enum fce_type { NDB_FCE_EVENT = 0x1 @@ -112,34 +94,19 @@ enum ndb_ingest_filter_action { NDB_INGEST_SKIP_VALIDATION }; -// function pointer for controlling what to do after we parse an id -typedef enum ndb_idres (*ndb_id_fn)(void *, const char *); - -// id callback + closure data -struct ndb_id_cb { - ndb_id_fn fn; - void *data; -}; - -struct ndb_str { - unsigned char flag; - union { - const char *str; - unsigned char *id; - }; -}; - -struct ndb_event { - struct ndb_note *note; +struct ndb_search_key +{ + char search[24]; + unsigned char id[32]; + uint64_t timestamp; }; -struct ndb_command_result { - int ok; - const char *msg; - int msglen; +struct ndb_search { + struct ndb_search_key *key; + uint64_t profile_key; + void *cursor; // MDB_cursor * }; - // From-client event struct ndb_fce { enum fce_type evtype; @@ -160,88 +127,67 @@ struct ndb_tce { }; }; -struct ndb_keypair { - unsigned char pubkey[32]; - unsigned char secret[32]; - - // this corresponds to secp256k1's keypair type. it's guaranteed to - // be 96 bytes according to their docs. I don't want to depend on - // the secp256k1 header here so we just use raw bytes. - unsigned char pair[96]; -}; - -#define MAX_TEXT_SEARCH_RESULTS 128 -#define MAX_TEXT_SEARCH_WORDS 8 - -// unpacked form of the actual lmdb fulltext search key -// see `ndb_make_text_search_key` for how the packed version is constructed -struct ndb_text_search_key -{ - int str_len; - const char *str; - uint64_t timestamp; - uint64_t note_id; - int word_index; -}; - -struct ndb_text_search_result { - struct ndb_text_search_key key; - int prefix_chars; -}; +typedef enum ndb_ingest_filter_action (*ndb_ingest_filter_fn)(void *, struct ndb_note *); -struct ndb_text_search_results { - struct ndb_text_search_result results[MAX_TEXT_SEARCH_RESULTS]; - int num_results; +enum ndb_filter_fieldtype { + NDB_FILTER_IDS = 1, + NDB_FILTER_AUTHORS = 2, + NDB_FILTER_KINDS = 3, + NDB_FILTER_GENERIC = 4, + NDB_FILTER_SINCE = 5, + NDB_FILTER_UNTIL = 6, + NDB_FILTER_LIMIT = 7, }; +#define NDB_NUM_FILTERS 7 -// these must be byte-aligned, they are directly accessing the serialized data -// representation -#pragma pack(push, 1) - - -union ndb_packed_str { - struct { - char str[3]; - // we assume little endian everywhere. sorry not sorry. - unsigned char flag; // NDB_PACKED_STR, etc - } packed; - - uint32_t offset; - unsigned char bytes[4]; +// when matching generic tags, we need to know if we're dealing with +// a pointer to a 32-byte ID or a null terminated string +enum ndb_generic_element_type { + NDB_ELEMENT_UNKNOWN = 0, + NDB_ELEMENT_STRING = 1, + NDB_ELEMENT_ID = 2, }; -struct ndb_tag { - uint16_t count; - union ndb_packed_str strs[0]; +enum ndb_search_order { + NDB_ORDER_DESCENDING, + NDB_ORDER_ASCENDING, }; -struct ndb_tags { - uint16_t padding; - uint16_t count; - struct ndb_tag tag[0]; +enum ndb_dbs { + NDB_DB_NOTE, + NDB_DB_META, + NDB_DB_PROFILE, + NDB_DB_NOTE_ID, + NDB_DB_PROFILE_PK, // profile pk index + NDB_DB_NDB_META, + NDB_DB_PROFILE_SEARCH, + NDB_DB_PROFILE_LAST_FETCH, + NDB_DB_NOTE_KIND, // note kind index + NDB_DB_NOTE_TEXT, // note fulltext index + NDB_DBS, }; -// v1 -struct ndb_note { - unsigned char version; // v=1 - unsigned char padding[3]; // keep things aligned - unsigned char id[32]; - unsigned char pubkey[32]; - unsigned char sig[64]; - - uint64_t created_at; - uint32_t kind; - uint32_t content_length; - union ndb_packed_str content; - uint32_t strings; - // nothing can come after tags since it contains variadic data - struct ndb_tags tags; +// common kinds. we collect stats on these in ndb_stat. mainly because I don't +// want to deal with including a hashtable to the project. +enum ndb_common_kind { + NDB_CKIND_PROFILE, + NDB_CKIND_TEXT, + NDB_CKIND_CONTACTS, + NDB_CKIND_DM, + NDB_CKIND_DELETE, + NDB_CKIND_REPOST, + NDB_CKIND_REACTION, + NDB_CKIND_ZAP, + NDB_CKIND_ZAP_REQUEST, + NDB_CKIND_NWC_REQUEST, + NDB_CKIND_NWC_RESPONSE, + NDB_CKIND_HTTP_AUTH, + NDB_CKIND_LIST, + NDB_CKIND_LONGFORM, + NDB_CKIND_STATUS, + NDB_CKIND_COUNT, // should always be last }; -#pragma pack(pop) - -typedef enum ndb_ingest_filter_action (*ndb_ingest_filter_fn)(void *, struct ndb_note *); - struct ndb_builder { struct cursor mem; struct cursor note_cur; @@ -259,30 +205,6 @@ struct ndb_iterator { int index; }; -enum ndb_filter_fieldtype { - NDB_FILTER_IDS = 1, - NDB_FILTER_AUTHORS = 2, - NDB_FILTER_KINDS = 3, - NDB_FILTER_GENERIC = 4, - NDB_FILTER_SINCE = 5, - NDB_FILTER_UNTIL = 6, - NDB_FILTER_LIMIT = 7, -}; -#define NDB_NUM_FILTERS 7 - -// when matching generic tags, we need to know if we're dealing with -// a pointer to a 32-byte ID or a null terminated string -enum ndb_generic_element_type { - NDB_ELEMENT_UNKNOWN = 0, - NDB_ELEMENT_STRING = 1, - NDB_ELEMENT_ID = 2, -}; - -enum ndb_search_order { - NDB_ORDER_DESCENDING, - NDB_ORDER_ASCENDING, -}; - union ndb_filter_element { const char *string; const unsigned char *id; @@ -322,6 +244,43 @@ struct ndb_text_search_config { int limit; }; +struct ndb_stat_counts { + size_t key_size; + size_t value_size; + size_t count; +}; + +struct ndb_stat { + struct ndb_stat_counts dbs[NDB_DBS]; + struct ndb_stat_counts common_kinds[NDB_CKIND_COUNT]; + struct ndb_stat_counts other_kinds; +}; + +#define MAX_TEXT_SEARCH_RESULTS 128 +#define MAX_TEXT_SEARCH_WORDS 8 + +// unpacked form of the actual lmdb fulltext search key +// see `ndb_make_text_search_key` for how the packed version is constructed +struct ndb_text_search_key +{ + int str_len; + const char *str; + uint64_t timestamp; + uint64_t note_id; + int word_index; +}; + +struct ndb_text_search_result { + struct ndb_text_search_key key; + int prefix_chars; +}; + +struct ndb_text_search_results { + struct ndb_text_search_result results[MAX_TEXT_SEARCH_RESULTS]; + int num_results; +}; + + // CONFIG void ndb_default_config(struct ndb_config *); void ndb_config_set_ingest_threads(struct ndb_config *config, int threads); @@ -386,7 +345,7 @@ int ndb_filter_start_generic_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); void ndb_filter_reset(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); -void ndb_filter_free(struct ndb_filter *filter); +void ndb_filter_free(struct ndb_filter *); // FULLTEXT SEARCH int ndb_text_search(struct ndb_txn *txn, const char *query, struct ndb_text_search_results *, struct ndb_text_search_config *); @@ -394,214 +353,35 @@ void ndb_default_text_search_config(struct ndb_text_search_config *); void ndb_text_search_config_set_order(struct ndb_text_search_config *, enum ndb_search_order); void ndb_text_search_config_set_limit(struct ndb_text_search_config *, int limit); -// stats +// STATS int ndb_stat(struct ndb *ndb, struct ndb_stat *stat); void ndb_stat_counts_init(struct ndb_stat_counts *counts); -static inline struct ndb_str ndb_note_str(struct ndb_note *note, - union ndb_packed_str *pstr) -{ - struct ndb_str str; - str.flag = pstr->packed.flag; - - if (str.flag == NDB_PACKED_STR) { - str.str = pstr->packed.str; - return str; - } - - str.str = ((const char *)note) + note->strings + (pstr->offset & 0xFFFFFF); - return str; -} - -static inline struct ndb_str ndb_tag_str(struct ndb_note *note, - struct ndb_tag *tag, int ind) -{ - return ndb_note_str(note, &tag->strs[ind]); -} - -static inline struct ndb_str ndb_iter_tag_str(struct ndb_iterator *iter, - int ind) -{ - return ndb_tag_str(iter->note, iter->tag, ind); -} - -static inline unsigned char * ndb_note_id(struct ndb_note *note) -{ - return note->id; -} - -static inline unsigned char * ndb_note_pubkey(struct ndb_note *note) -{ - return note->pubkey; -} - -static inline unsigned char * ndb_note_sig(struct ndb_note *note) -{ - return note->sig; -} - -static inline uint32_t ndb_note_created_at(struct ndb_note *note) -{ - return note->created_at; -} - -static inline uint32_t ndb_note_kind(struct ndb_note *note) -{ - return note->kind; -} - -static inline const char *ndb_note_content(struct ndb_note *note) -{ - return ndb_note_str(note, ¬e->content).str; -} - -static inline uint32_t ndb_note_content_length(struct ndb_note *note) -{ - return note->content_length; -} - -static inline struct ndb_note * ndb_note_from_bytes(unsigned char *bytes) -{ - struct ndb_note *note = (struct ndb_note *)bytes; - if (note->version != 1) - return 0; - return note; -} - -static inline union ndb_packed_str ndb_offset_str(uint32_t offset) -{ - // ensure accidents like -1 don't corrupt our packed_str - union ndb_packed_str str; - // most significant byte is reserved for ndb_packtype - str.offset = offset & 0xFFFFFF; - return str; -} - -static inline union ndb_packed_str ndb_char_to_packed_str(char c) -{ - union ndb_packed_str str; - str.packed.flag = NDB_PACKED_STR; - str.packed.str[0] = c; - str.packed.str[1] = '\0'; - return str; -} - -static inline union ndb_packed_str ndb_chars_to_packed_str(char c1, char c2) -{ - union ndb_packed_str str; - str.packed.flag = NDB_PACKED_STR; - str.packed.str[0] = c1; - str.packed.str[1] = c2; - str.packed.str[2] = '\0'; - return str; -} - -static inline void ndb_tags_iterate_start(struct ndb_note *note, - struct ndb_iterator *iter) -{ - iter->note = note; - iter->tag = NULL; - iter->index = -1; -} - -static inline int ndb_tags_iterate_next(struct ndb_iterator *iter) -{ - if (iter->tag == NULL || iter->index == -1) { - iter->tag = iter->note->tags.tag; - iter->index = 0; - return iter->note->tags.count != 0; - } - - struct ndb_tags *tags = &iter->note->tags; - - if (++iter->index < tags->count) { - uint32_t tag_data_size = iter->tag->count * sizeof(iter->tag->strs[0]); - iter->tag = (struct ndb_tag *)(iter->tag->strs[0].bytes + tag_data_size); - return 1; - } - - return 0; -} - -static inline enum ndb_common_kind -ndb_kind_to_common_kind(int kind) -{ - switch (kind) - { - case 0: return NDB_CKIND_PROFILE; - case 1: return NDB_CKIND_TEXT; - case 3: return NDB_CKIND_CONTACTS; - case 4: return NDB_CKIND_DM; - case 5: return NDB_CKIND_DELETE; - case 6: return NDB_CKIND_REPOST; - case 7: return NDB_CKIND_REACTION; - case 9735: return NDB_CKIND_ZAP; - case 9734: return NDB_CKIND_ZAP_REQUEST; - case 23194: return NDB_CKIND_NWC_REQUEST; - case 23195: return NDB_CKIND_NWC_RESPONSE; - case 27235: return NDB_CKIND_HTTP_AUTH; - case 30000: return NDB_CKIND_LIST; - case 30023: return NDB_CKIND_LONGFORM; - case 30315: return NDB_CKIND_STATUS; - } - - return -1; -} - -static inline const char * -ndb_kind_name(enum ndb_common_kind ck) -{ - switch (ck) { - case NDB_CKIND_PROFILE: return "profile"; - case NDB_CKIND_TEXT: return "text"; - case NDB_CKIND_CONTACTS: return "contacts"; - case NDB_CKIND_DM: return "dm"; - case NDB_CKIND_DELETE: return "delete"; - case NDB_CKIND_REPOST: return "repost"; - case NDB_CKIND_REACTION: return "reaction"; - case NDB_CKIND_ZAP: return "zap"; - case NDB_CKIND_ZAP_REQUEST: return "zap_request"; - case NDB_CKIND_NWC_REQUEST: return "nwc_request"; - case NDB_CKIND_NWC_RESPONSE: return "nwc_response"; - case NDB_CKIND_HTTP_AUTH: return "http_auth"; - case NDB_CKIND_LIST: return "list"; - case NDB_CKIND_LONGFORM: return "longform"; - case NDB_CKIND_STATUS: return "status"; - case NDB_CKIND_COUNT: return "unknown"; - } - - return "unknown"; -} - -static inline const char * -ndb_db_name(enum ndb_dbs db) -{ - switch (db) { - case NDB_DB_NOTE: - return "note"; - case NDB_DB_META: - return "note_metadata"; - case NDB_DB_PROFILE: - return "profile"; - case NDB_DB_NOTE_ID: - return "note_index"; - case NDB_DB_PROFILE_PK: - return "profile_pubkey_index"; - case NDB_DB_NDB_META: - return "nostrdb_metadata"; - case NDB_DB_PROFILE_SEARCH: - return "profile_search"; - case NDB_DB_PROFILE_LAST_FETCH: - return "profile_last_fetch"; - case NDB_DB_NOTE_KIND: - return "note_kind_index"; - case NDB_DB_NOTE_TEXT: - return "note_fulltext"; - case NDB_DBS: - return "count"; - } - - return "unknown"; -} +// NOTE +const char *ndb_note_content(struct ndb_note *note); +struct ndb_str ndb_note_str(struct ndb_note *note, union ndb_packed_str *pstr); +uint32_t ndb_note_content_length(struct ndb_note *note); +uint32_t ndb_note_created_at(struct ndb_note *note); +uint32_t ndb_note_kind(struct ndb_note *note); +unsigned char *ndb_note_id(struct ndb_note *note); +unsigned char *ndb_note_pubkey(struct ndb_note *note); +unsigned char *ndb_note_sig(struct ndb_note *note); +void _ndb_note_set_kind(struct ndb_note *note, uint32_t kind); +struct ndb_tags *ndb_note_tags(struct ndb_note *note); + +// TAGS +void ndb_tags_iterate_start(struct ndb_note *note, struct ndb_iterator *iter); +uint16_t ndb_tags_count(struct ndb_tags *); +uint16_t ndb_tag_count(struct ndb_tag *); + +// ITER +int ndb_tags_iterate_next(struct ndb_iterator *iter); +struct ndb_str ndb_iter_tag_str(struct ndb_iterator *iter, int ind); +struct ndb_str ndb_tag_str(struct ndb_note *note, struct ndb_tag *tag, int ind); + +// NAMES +const char *ndb_db_name(enum ndb_dbs db); +const char *ndb_kind_name(enum ndb_common_kind ck); +enum ndb_common_kind ndb_kind_to_common_kind(int kind); #endif From fb493c643e2d46af50031f177335df16c6500d63 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 13 Dec 2023 17:56:57 -0800 Subject: [PATCH 006/146] nostrdb/cursor: fix warning that build.rs is complaining about Signed-off-by: William Casarin --- nostrdb/cursor.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nostrdb/cursor.h b/nostrdb/cursor.h index 69e88eaed..7de80e306 100644 --- a/nostrdb/cursor.h +++ b/nostrdb/cursor.h @@ -463,9 +463,8 @@ static inline int pull_bytes(struct cursor *cur, int count, const u8 **bytes) { } static inline int parse_str(struct cursor *cur, const char *str) { - int i; char c, cs; - unsigned long len; + unsigned long i, len; len = strlen(str); From d2d1c57761ea4e9b6b5e00dc98d806d90d03d560 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 14 Dec 2023 11:59:25 -0800 Subject: [PATCH 007/146] nostrdb/rust: initial api for Ndb and NdbConfig This is the start of our rust library for nostrdb. Implement idiomatic interfaces for Ndb and NdbConfig. Changelog-Added: Add initial rust library Signed-off-by: William Casarin --- nostrdb/nostrdb.c | 2 +- nostrdb/nostrdb.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c index d48e79a5e..b6d0f4395 100644 --- a/nostrdb/nostrdb.c +++ b/nostrdb/nostrdb.c @@ -3155,7 +3155,7 @@ static int ndb_run_migrations(struct ndb *ndb) return 1; } -int ndb_init(struct ndb **pndb, const char *filename, struct ndb_config *config) +int ndb_init(struct ndb **pndb, const char *filename, const struct ndb_config *config) { struct ndb *ndb; //MDB_dbi ind_id; // TODO: ind_pk, etc diff --git a/nostrdb/nostrdb.h b/nostrdb/nostrdb.h index a5f2833fc..88cec55a8 100644 --- a/nostrdb/nostrdb.h +++ b/nostrdb/nostrdb.h @@ -296,7 +296,7 @@ int ndb_decode_key(const char *secstr, struct ndb_keypair *keypair); int ndb_note_verify(void *secp_ctx, unsigned char pubkey[32], unsigned char id[32], unsigned char signature[64]); // NDB -int ndb_init(struct ndb **ndb, const char *dbdir, struct ndb_config *); +int ndb_init(struct ndb **ndb, const char *dbdir, const struct ndb_config *); int ndb_db_version(struct ndb *ndb); int ndb_process_event(struct ndb *, const char *json, int len); int ndb_process_events(struct ndb *, const char *ldjson, size_t len); From 6a97b202e2dffd7cd3537f9f24e578b060f1bfd8 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 14 Dec 2023 12:10:35 -0800 Subject: [PATCH 008/146] nostrdb/build: fix constness on config pointer in ingester thread otherwise build fails Signed-off-by: William Casarin --- nostrdb/nostrdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c index b6d0f4395..8a8573f5c 100644 --- a/nostrdb/nostrdb.c +++ b/nostrdb/nostrdb.c @@ -2932,7 +2932,7 @@ static int ndb_writer_init(struct ndb_writer *writer, struct ndb_lmdb *lmdb) // initialize the ingester queue and then spawn the thread static int ndb_ingester_init(struct ndb_ingester *ingester, struct ndb_writer *writer, - struct ndb_config *config) + const struct ndb_config *config) { int elem_size, num_elems; static struct ndb_ingester_msg quit_msg = { .type = NDB_INGEST_QUIT }; From 9bf8e8f5fce44f8af001921c5a9ad5e18ce5ff66 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sun, 17 Dec 2023 13:29:40 -0800 Subject: [PATCH 009/146] nostrdb/re-apply ispunct crash fix since it was overwritten when we synced with damus Signed-off-by: William Casarin --- nostrdb/cursor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/cursor.h b/nostrdb/cursor.h index 7de80e306..4fb2038f3 100644 --- a/nostrdb/cursor.h +++ b/nostrdb/cursor.h @@ -595,7 +595,7 @@ static inline int is_punctuation(unsigned int codepoint) { return 0; // Check for ASCII punctuation - if (ispunct(codepoint)) + if (codepoint <= 128 && ispunct(codepoint)) return 1; // Check for Unicode punctuation exceptions (punctuation allowed in hashtags) From f625cf99139edd478e3bfe17a818e28f49e37046 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 14:18:05 -0800 Subject: [PATCH 010/146] c: move compiler to nostrdb dir we will be applying a patch here as well --- {damus-c => nostrdb}/compiler.h | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {damus-c => nostrdb}/compiler.h (100%) diff --git a/damus-c/compiler.h b/nostrdb/compiler.h similarity index 100% rename from damus-c/compiler.h rename to nostrdb/compiler.h From aff63c0029605745aae8012d7aa0521cba3fb973 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 14:23:36 -0800 Subject: [PATCH 011/146] nostrdb: add supporting files before the move commit --- nostrdb/bech32.c | 217 ++++++++++++++++++++++++++++ nostrdb/bech32.h | 142 +++++++++++++++++++ nostrdb/compiler.h | 342 ++++++++------------------------------------- nostrdb/cursor.h | 60 ++------ 4 files changed, 426 insertions(+), 335 deletions(-) create mode 100644 nostrdb/bech32.c create mode 100644 nostrdb/bech32.h diff --git a/nostrdb/bech32.c b/nostrdb/bech32.c new file mode 100644 index 000000000..3ec6a1fbd --- /dev/null +++ b/nostrdb/bech32.c @@ -0,0 +1,217 @@ +/* Stolen from https://github.com/sipa/bech32/blob/master/ref/c/segwit_addr.c, + * with only the two ' > 90' checks hoisted, and more internals exposed */ + +/* Copyright (c) 2017, 2021 Pieter Wuille + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#include "config.h" +#include +#include "bech32.h" +#include + +static uint32_t bech32_polymod_step(uint32_t pre) { + uint8_t b = pre >> 25; + return ((pre & 0x1FFFFFF) << 5) ^ + (-((b >> 0) & 1) & 0x3b6a57b2UL) ^ + (-((b >> 1) & 1) & 0x26508e6dUL) ^ + (-((b >> 2) & 1) & 0x1ea119faUL) ^ + (-((b >> 3) & 1) & 0x3d4233ddUL) ^ + (-((b >> 4) & 1) & 0x2a1462b3UL); +} + +static uint32_t bech32_final_constant(bech32_encoding enc) { + if (enc == BECH32_ENCODING_BECH32) return 1; + if (enc == BECH32_ENCODING_BECH32M) return 0x2bc830a3; + assert(0); +} + +const char bech32_charset[] = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; + +const int8_t bech32_charset_rev[128] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 15, -1, 10, 17, 21, 20, 26, 30, 7, 5, -1, -1, -1, -1, -1, -1, + -1, 29, -1, 24, 13, 25, 9, 8, 23, -1, 18, 22, 31, 27, 19, -1, + 1, 0, 3, 16, 11, 28, 12, 14, 6, 4, 2, -1, -1, -1, -1, -1, + -1, 29, -1, 24, 13, 25, 9, 8, 23, -1, 18, 22, 31, 27, 19, -1, + 1, 0, 3, 16, 11, 28, 12, 14, 6, 4, 2, -1, -1, -1, -1, -1 +}; + +int bech32_encode(char *output, const char *hrp, const uint8_t *data, size_t data_len, size_t max_input_len, bech32_encoding enc) { + uint32_t chk = 1; + size_t i = 0; + while (hrp[i] != 0) { + int ch = hrp[i]; + if (ch < 33 || ch > 126) { + return 0; + } + + if (ch >= 'A' && ch <= 'Z') return 0; + chk = bech32_polymod_step(chk) ^ (ch >> 5); + ++i; + } + if (i + 7 + data_len > max_input_len) return 0; + chk = bech32_polymod_step(chk); + while (*hrp != 0) { + chk = bech32_polymod_step(chk) ^ (*hrp & 0x1f); + *(output++) = *(hrp++); + } + *(output++) = '1'; + for (i = 0; i < data_len; ++i) { + if (*data >> 5) return 0; + chk = bech32_polymod_step(chk) ^ (*data); + *(output++) = bech32_charset[*(data++)]; + } + for (i = 0; i < 6; ++i) { + chk = bech32_polymod_step(chk); + } + chk ^= bech32_final_constant(enc); + for (i = 0; i < 6; ++i) { + *(output++) = bech32_charset[(chk >> ((5 - i) * 5)) & 0x1f]; + } + *output = 0; + return 1; +} + +bech32_encoding bech32_decode_len(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t input_len) { + uint32_t chk = 1; + size_t i; + size_t hrp_len; + int have_lower = 0, have_upper = 0; + if (input_len < 8) { + return BECH32_ENCODING_NONE; + } + *data_len = 0; + while (*data_len < input_len && input[(input_len - 1) - *data_len] != '1') { + ++(*data_len); + } + hrp_len = input_len - (1 + *data_len); + if (1 + *data_len >= input_len || *data_len < 6) { + return BECH32_ENCODING_NONE; + } + *(data_len) -= 6; + for (i = 0; i < hrp_len; ++i) { + int ch = input[i]; + if (ch < 33 || ch > 126) { + return BECH32_ENCODING_NONE; + } + if (ch >= 'a' && ch <= 'z') { + have_lower = 1; + } else if (ch >= 'A' && ch <= 'Z') { + have_upper = 1; + ch = (ch - 'A') + 'a'; + } + hrp[i] = ch; + chk = bech32_polymod_step(chk) ^ (ch >> 5); + } + hrp[i] = 0; + chk = bech32_polymod_step(chk); + for (i = 0; i < hrp_len; ++i) { + chk = bech32_polymod_step(chk) ^ (input[i] & 0x1f); + } + ++i; + while (i < input_len) { + int v = (input[i] & 0x80) ? -1 : bech32_charset_rev[(int)input[i]]; + if (input[i] >= 'a' && input[i] <= 'z') have_lower = 1; + if (input[i] >= 'A' && input[i] <= 'Z') have_upper = 1; + if (v == -1) { + return BECH32_ENCODING_NONE; + } + chk = bech32_polymod_step(chk) ^ v; + if (i + 6 < input_len) { + data[i - (1 + hrp_len)] = v; + } + ++i; + } + if (have_lower && have_upper) { + return BECH32_ENCODING_NONE; + } + if (chk == bech32_final_constant(BECH32_ENCODING_BECH32)) { + return BECH32_ENCODING_BECH32; + } else if (chk == bech32_final_constant(BECH32_ENCODING_BECH32M)) { + return BECH32_ENCODING_BECH32M; + } else { + return BECH32_ENCODING_NONE; + } +} + +bech32_encoding bech32_decode(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t max_input_len) { + size_t len = strlen(input); + if (len > max_input_len) { + return BECH32_ENCODING_NONE; + } + return bech32_decode_len(hrp, data, data_len, input, len); +} + +int bech32_convert_bits(uint8_t* out, size_t* outlen, int outbits, const uint8_t* in, size_t inlen, int inbits, int pad) { + uint32_t val = 0; + int bits = 0; + uint32_t maxv = (((uint32_t)1) << outbits) - 1; + while (inlen--) { + val = (val << inbits) | *(in++); + bits += inbits; + while (bits >= outbits) { + bits -= outbits; + out[(*outlen)++] = (val >> bits) & maxv; + } + } + if (pad) { + if (bits) { + out[(*outlen)++] = (val << (outbits - bits)) & maxv; + } + } else if (((val << (outbits - bits)) & maxv) || bits >= inbits) { + return 0; + } + return 1; +} + +int segwit_addr_encode(char *output, const char *hrp, int witver, const uint8_t *witprog, size_t witprog_len) { + uint8_t data[65]; + size_t datalen = 0; + bech32_encoding enc = BECH32_ENCODING_BECH32; + if (witver > 16) return 0; + if (witver == 0 && witprog_len != 20 && witprog_len != 32) return 0; + if (witprog_len < 2 || witprog_len > 40) return 0; + if (witver > 0) enc = BECH32_ENCODING_BECH32M; + data[0] = witver; + bech32_convert_bits(data + 1, &datalen, 5, witprog, witprog_len, 8, 1); + ++datalen; + return bech32_encode(output, hrp, data, datalen, 90, enc); +} + +int segwit_addr_decode(int* witver, uint8_t* witdata, size_t* witdata_len, const char* hrp, const char* addr) { + uint8_t data[84]; + char hrp_actual[84]; + size_t data_len; + bech32_encoding enc = bech32_decode(hrp_actual, data, &data_len, addr, 90); + if (enc == BECH32_ENCODING_NONE) return 0; + if (data_len == 0 || data_len > 65) return 0; + if (strncmp(hrp, hrp_actual, 84) != 0) return 0; + if (data[0] > 16) return 0; + if (data[0] == 0 && enc != BECH32_ENCODING_BECH32) return 0; + if (data[0] > 0 && enc != BECH32_ENCODING_BECH32M) return 0; + *witdata_len = 0; + if (!bech32_convert_bits(witdata, witdata_len, 8, data + 1, data_len - 1, 5, 0)) return 0; + if (*witdata_len < 2 || *witdata_len > 40) return 0; + if (data[0] == 0 && *witdata_len != 20 && *witdata_len != 32) return 0; + *witver = data[0]; + return 1; +} diff --git a/nostrdb/bech32.h b/nostrdb/bech32.h new file mode 100644 index 000000000..d782211c8 --- /dev/null +++ b/nostrdb/bech32.h @@ -0,0 +1,142 @@ +/* Stolen from https://github.com/sipa/bech32/blob/master/ref/c/segwit_addr.h, + * with only the two ' > 90' checks hoisted */ + +/* Copyright (c) 2017, 2021 Pieter Wuille + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef LIGHTNING_COMMON_BECH32_H +#define LIGHTNING_COMMON_BECH32_H +#include "config.h" + +#include +#include + +/** Encode a SegWit address + * + * Out: output: Pointer to a buffer of size 73 + strlen(hrp) that will be + * updated to contain the null-terminated address. + * In: hrp: Pointer to the null-terminated human readable part to use + * (chain/network specific). + * ver: Version of the witness program (between 0 and 16 inclusive). + * prog: Data bytes for the witness program (between 2 and 40 bytes). + * prog_len: Number of data bytes in prog. + * Returns 1 if successful. + */ +int segwit_addr_encode( + char *output, + const char *hrp, + int ver, + const uint8_t *prog, + size_t prog_len +); + +/** Decode a SegWit address + * + * Out: ver: Pointer to an int that will be updated to contain the witness + * program version (between 0 and 16 inclusive). + * prog: Pointer to a buffer of size 40 that will be updated to + * contain the witness program bytes. + * prog_len: Pointer to a size_t that will be updated to contain the length + * of bytes in prog. + * hrp: Pointer to the null-terminated human readable part that is + * expected (chain/network specific). + * addr: Pointer to the null-terminated address. + * Returns 1 if successful. + */ +int segwit_addr_decode( + int* ver, + uint8_t* prog, + size_t* prog_len, + const char* hrp, + const char* addr +); + +/** Supported encodings. */ +typedef enum { + BECH32_ENCODING_NONE, + BECH32_ENCODING_BECH32, + BECH32_ENCODING_BECH32M +} bech32_encoding; + +/** Encode a Bech32 or Bech32m string + * + * Out: output: Pointer to a buffer of size strlen(hrp) + data_len + 8 that + * will be updated to contain the null-terminated Bech32 string. + * In: hrp : Pointer to the null-terminated human readable part. + * data : Pointer to an array of 5-bit values. + * data_len: Length of the data array. + * max_input_len: Maximum valid length of input (90 for segwit usage). + * enc: Which encoding to use (BECH32_ENCODING_BECH32{,M}). + * Returns 1 if successful. + */ +int bech32_encode( + char *output, + const char *hrp, + const uint8_t *data, + size_t data_len, + size_t max_input_len, + bech32_encoding enc +); + +/** Decode a Bech32 or Bech32m string + * + * Out: hrp: Pointer to a buffer of size strlen(input) - 6. Will be + * updated to contain the null-terminated human readable part. + * data: Pointer to a buffer of size strlen(input) - 8 that will + * hold the encoded 5-bit data values. + * data_len: Pointer to a size_t that will be updated to be the number + * of entries in data. + * In: input: Pointer to a null-terminated Bech32 string. + * max_input_len: Maximum valid length of input (90 for segwit usage). + * Returns BECH32_ENCODING_BECH32{,M} to indicate decoding was successful + * with the specified encoding standard. BECH32_ENCODING_NONE is returned if + * decoding failed. + */ +bech32_encoding bech32_decode( + char *hrp, + uint8_t *data, + size_t *data_len, + const char *input, + size_t max_input_len +); + +bech32_encoding bech32_decode_len( + char *hrp, + uint8_t *data, + size_t *data_len, + const char *input, + size_t input_len +); + +/* Helper from bech32: translates inbits-bit bytes to outbits-bit bytes. + * @outlen is incremented as bytes are added. + * @pad is true if we're to pad, otherwise truncate last byte if necessary + */ +int bech32_convert_bits(uint8_t* out, size_t* outlen, int outbits, + const uint8_t* in, size_t inlen, int inbits, + int pad); + +/* The charset, and reverse mapping */ +extern const char bech32_charset[32]; +extern const int8_t bech32_charset_rev[128]; + +#endif /* LIGHTNING_COMMON_BECH32_H */ + diff --git a/nostrdb/compiler.h b/nostrdb/compiler.h index a9b5aa700..deb0621e5 100644 --- a/nostrdb/compiler.h +++ b/nostrdb/compiler.h @@ -1,317 +1,85 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_COMPILER_H -#define CCAN_COMPILER_H -#include "config.h" -#ifndef COLD -#if HAVE_ATTRIBUTE_COLD -/** - * COLD - a function is unlikely to be called. - * - * Used to mark an unlikely code path and optimize appropriately. - * It is usually used on logging or error routines. - * - * Example: - * static void COLD moan(const char *reason) - * { - * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); - * } - */ -#define COLD __attribute__((__cold__)) -#else -#define COLD -#endif -#endif +#ifndef COMPILER_H +#define COMPILER_H -#ifndef NORETURN -#if HAVE_ATTRIBUTE_NORETURN -/** - * NORETURN - a function does not return - * - * Used to mark a function which exits; useful for suppressing warnings. - * - * Example: - * static void NORETURN fail(const char *reason) - * { - * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); - * exit(1); - * } - */ -#define NORETURN __attribute__((__noreturn__)) -#else -#define NORETURN -#endif -#endif - -#ifndef PRINTF_FMT -#if HAVE_ATTRIBUTE_PRINTF -/** - * PRINTF_FMT - a function takes printf-style arguments - * @nfmt: the 1-based number of the function's format argument. - * @narg: the 1-based number of the function's first variable argument. - * - * This allows the compiler to check your parameters as it does for printf(). - * - * Example: - * void PRINTF_FMT(2,3) my_printf(const char *prefix, const char *fmt, ...); - */ -#define PRINTF_FMT(nfmt, narg) \ - __attribute__((format(__printf__, nfmt, narg))) -#else -#define PRINTF_FMT(nfmt, narg) -#endif -#endif - -#ifndef CONST_FUNCTION -#if HAVE_ATTRIBUTE_CONST -/** - * CONST_FUNCTION - a function's return depends only on its argument - * - * This allows the compiler to assume that the function will return the exact - * same value for the exact same arguments. This implies that the function - * must not use global variables, or dereference pointer arguments. - */ -#define CONST_FUNCTION __attribute__((__const__)) -#else -#define CONST_FUNCTION -#endif - -#ifndef PURE_FUNCTION -#if HAVE_ATTRIBUTE_PURE -/** - * PURE_FUNCTION - a function is pure - * - * A pure function is one that has no side effects other than it's return value - * and uses no inputs other than it's arguments and global variables. - */ -#define PURE_FUNCTION __attribute__((__pure__)) -#else -#define PURE_FUNCTION -#endif -#endif -#endif - -#if HAVE_ATTRIBUTE_UNUSED -#ifndef UNNEEDED -/** - * UNNEEDED - a variable/function may not be needed - * - * This suppresses warnings about unused variables or functions, but tells - * the compiler that if it is unused it need not emit it into the source code. - * - * Example: - * // With some preprocessor options, this is unnecessary. - * static UNNEEDED int counter; - * - * // With some preprocessor options, this is unnecessary. - * static UNNEEDED void add_to_counter(int add) - * { - * counter += add; - * } - */ -#define UNNEEDED __attribute__((__unused__)) -#endif +#include +#include +#include +#include "config.h" -#ifndef NEEDED -#if HAVE_ATTRIBUTE_USED -/** - * NEEDED - a variable/function is needed - * - * This suppresses warnings about unused variables or functions, but tells - * the compiler that it must exist even if it (seems) unused. - * - * Example: - * // Even if this is unused, these are vital for debugging. - * static NEEDED int counter; - * static NEEDED void dump_counter(void) - * { - * printf("Counter is %i\n", counter); - * } - */ -#define NEEDED __attribute__((__used__)) +#if HAVE_UNALIGNED_ACCESS +#define alignment_ok(p, n) 1 #else -/* Before used, unused functions and vars were always emitted. */ -#define NEEDED __attribute__((__unused__)) -#endif +#define alignment_ok(p, n) ((size_t)(p) % (n) == 0) #endif -#ifndef UNUSED -/** - * UNUSED - a parameter is unused - * - * Some compilers (eg. gcc with -W or -Wunused) warn about unused - * function parameters. This suppresses such warnings and indicates - * to the reader that it's deliberate. - * - * Example: - * // This is used as a callback, so needs to have this prototype. - * static int some_callback(void *unused UNUSED) - * { - * return 0; - * } - */ #define UNUSED __attribute__((__unused__)) -#endif -#else -#ifndef UNNEEDED -#define UNNEEDED -#endif -#ifndef NEEDED -#define NEEDED -#endif -#ifndef UNUSED -#define UNUSED -#endif -#endif - -#ifndef IS_COMPILE_CONSTANT -#if HAVE_BUILTIN_CONSTANT_P -/** - * IS_COMPILE_CONSTANT - does the compiler know the value of this expression? - * @expr: the expression to evaluate - * - * When an expression manipulation is complicated, it is usually better to - * implement it in a function. However, if the expression being manipulated is - * known at compile time, it is better to have the compiler see the entire - * expression so it can simply substitute the result. - * - * This can be done using the IS_COMPILE_CONSTANT() macro. - * - * Example: - * enum greek { ALPHA, BETA, GAMMA, DELTA, EPSILON }; - * - * // Out-of-line version. - * const char *greek_name(enum greek greek); - * - * // Inline version. - * static inline const char *_greek_name(enum greek greek) - * { - * switch (greek) { - * case ALPHA: return "alpha"; - * case BETA: return "beta"; - * case GAMMA: return "gamma"; - * case DELTA: return "delta"; - * case EPSILON: return "epsilon"; - * default: return "**INVALID**"; - * } - * } - * - * // Use inline if compiler knows answer. Otherwise call function - * // to avoid copies of the same code everywhere. - * #define greek_name(g) \ - * (IS_COMPILE_CONSTANT(greek) ? _greek_name(g) : greek_name(g)) - */ -#define IS_COMPILE_CONSTANT(expr) __builtin_constant_p(expr) -#else -/* If we don't know, assume it's not. */ -#define IS_COMPILE_CONSTANT(expr) 0 -#endif -#endif - -#ifndef WARN_UNUSED_RESULT -#if HAVE_WARN_UNUSED_RESULT -/** - * WARN_UNUSED_RESULT - warn if a function return value is unused. - * - * Used to mark a function where it is extremely unlikely that the caller - * can ignore the result, eg realloc(). - * - * Example: - * // buf param may be freed by this; need return value! - * static char *WARN_UNUSED_RESULT enlarge(char *buf, unsigned *size) - * { - * return realloc(buf, (*size) *= 2); - * } - */ -#define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) -#else -#define WARN_UNUSED_RESULT -#endif -#endif - -#if HAVE_ATTRIBUTE_DEPRECATED /** - * WARN_DEPRECATED - warn that a function/type/variable is deprecated when used. + * BUILD_ASSERT - assert a build-time dependency. + * @cond: the compile-time condition which must be true. * - * Used to mark a function, type or variable should not be used. + * Your compile will fail if the condition isn't true, or can't be evaluated + * by the compiler. This can only be used within a function. * * Example: - * WARN_DEPRECATED char *oldfunc(char *buf); + * #include + * ... + * static char *foo_to_char(struct foo *foo) + * { + * // This code needs string to be at start of foo. + * BUILD_ASSERT(offsetof(struct foo, string) == 0); + * return (char *)foo; + * } */ -#define WARN_DEPRECATED __attribute__((__deprecated__)) -#else -#define WARN_DEPRECATED -#endif - +#define BUILD_ASSERT(cond) \ + do { (void) sizeof(char [1 - 2*!(cond)]); } while(0) -#if HAVE_ATTRIBUTE_NONNULL /** - * NO_NULL_ARGS - specify that no arguments to this function can be NULL. + * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression. + * @cond: the compile-time condition which must be true. * - * The compiler will warn if any pointer args are NULL. + * Your compile will fail if the condition isn't true, or can't be evaluated + * by the compiler. This can be used in an expression: its value is "0". * * Example: - * NO_NULL_ARGS char *my_copy(char *buf); + * #define foo_to_char(foo) \ + * ((char *)(foo) \ + * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0)) */ -#define NO_NULL_ARGS __attribute__((__nonnull__)) +#define BUILD_ASSERT_OR_ZERO(cond) \ + (sizeof(char [1 - 2*!(cond)]) - 1) -/** - * NON_NULL_ARGS - specify that some arguments to this function can't be NULL. - * @...: 1-based argument numbers for which args can't be NULL. - * - * The compiler will warn if any of the specified pointer args are NULL. - * - * Example: - * char *my_copy2(char *buf, char *maybenull) NON_NULL_ARGS(1); - */ -#define NON_NULL_ARGS(...) __attribute__((__nonnull__(__VA_ARGS__))) -#else -#define NO_NULL_ARGS -#define NON_NULL_ARGS(...) -#endif +#define memclear(mem, size) memset(mem, 0, size) +#define memclear_2(m1, s1, m2, s2) { memclear(m1, s1); memclear(m2, s2); } +#define memclear_3(m1, s1, m2, s2, m3, s3) { memclear(m1, s1); memclear(m2, s2); memclear(m3, s3); } -#if HAVE_ATTRIBUTE_RETURNS_NONNULL -/** - * RETURNS_NONNULL - specify that this function cannot return NULL. - * - * Mainly an optimization opportunity, but can also suppress warnings. - * - * Example: - * RETURNS_NONNULL char *my_copy(char *buf); - */ -#define RETURNS_NONNULL __attribute__((__returns_nonnull__)) -#else -#define RETURNS_NONNULL -#endif +static inline void *memcheck_(const void *data, size_t len) +{ + (void)len; + return (void *)data; +} -#if HAVE_ATTRIBUTE_SENTINEL +#if HAVE_TYPEOF /** - * LAST_ARG_NULL - specify the last argument of a variadic function must be NULL. + * memcheck - check that a memory region is initialized + * @data: start of region + * @len: length in bytes * - * The compiler will warn if the last argument isn't NULL. + * When running under valgrind, this causes an error to be printed + * if the entire region is not defined. Otherwise valgrind only + * reports an error when an undefined value is used for a branch, or + * written out. * * Example: - * char *join_string(char *buf, ...) LAST_ARG_NULL; + * // Search for space, but make sure it's all initialized. + * if (memchr(memcheck(somebytes, bytes_len), ' ', bytes_len)) { + * printf("space was found!\n"); + * } */ -#define LAST_ARG_NULL __attribute__((__sentinel__)) +#define memcheck(data, len) ((__typeof__((data)+0))memcheck_((data), (len))) #else -#define LAST_ARG_NULL +#define memcheck(data, len) memcheck_((data), (len)) #endif -#if HAVE_BUILTIN_CPU_SUPPORTS -/** - * cpu_supports - test if current CPU supports the named feature. - * - * This takes a literal string, and currently only works on glibc platforms. - * - * Example: - * if (cpu_supports("mmx")) - * printf("MMX support engaged!\n"); - */ -#define cpu_supports(x) __builtin_cpu_supports(x) -#else -#define cpu_supports(x) 0 -#endif /* HAVE_BUILTIN_CPU_SUPPORTS */ - -#endif /* CCAN_COMPILER_H */ +#endif /* COMPILER_H */ diff --git a/nostrdb/cursor.h b/nostrdb/cursor.h index 4fb2038f3..2be7f191e 100644 --- a/nostrdb/cursor.h +++ b/nostrdb/cursor.h @@ -3,7 +3,6 @@ #define JB55_CURSOR_H #include "typedefs.h" -#include "varint.h" #include #include @@ -484,37 +483,11 @@ static inline int parse_str(struct cursor *cur, const char *str) { return 1; } -static inline int is_whitespace(int c) { +static inline int is_whitespace(char c) { return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; } - -static inline int next_char_is_whitespace(unsigned char *curChar, unsigned char *endChar) { - unsigned char * next = curChar + 1; - if(next > endChar) return 0; - else if(next == endChar) return 1; - return is_whitespace(*next); -} - -static int char_disallowed_at_end_url(char c){ - return c == '.' || c == ','; -} - -static inline int is_final_url_char(unsigned char *curChar, unsigned char *endChar){ - if(is_whitespace(*curChar)){ - return 1; - } - else if(next_char_is_whitespace(curChar, endChar)) { - // next char is whitespace so this char could be the final char in the url - return char_disallowed_at_end_url(*curChar); - } - else{ - // next char isn't whitespace so it can't be a final char - return 0; - } -} - -static inline int is_underscore(int c) { +static inline int is_underscore(char c) { return c == '_'; } @@ -549,7 +522,7 @@ static inline int parse_utf8_char(struct cursor *cursor, unsigned int *code_poin remaining_bytes = 0; *utf8_length = 1; // Assume 1 byte length for unrecognized UTF-8 characters // TODO: We need to gracefully handle unrecognized UTF-8 characters - printf("Invalid UTF-8 byte: %x\n", *code_point); + //printf("Invalid UTF-8 byte: %x\n", *code_point); *code_point = ((first_byte & 0xF0) << 6); // Prevent testing as punctuation return 0; // Invalid first byte } @@ -660,7 +633,7 @@ static inline int consume_until_boundary(struct cursor *cur) { if (!parse_utf8_char(cur, &c, utf8_char_length)) { if (!is_right_boundary(c)){ // TODO: We should work towards handling all UTF-8 characters. - printf("Invalid UTF-8 code point: %x\n", c); + //printf("Invalid UTF-8 code point: %x\n", c); } } } @@ -695,23 +668,6 @@ static inline int consume_until_whitespace(struct cursor *cur, int or_end) { return or_end; } -static inline int consume_until_end_url(struct cursor *cur, int or_end) { - char c; - int consumedAtLeastOne = 0; - - while (cur->p < cur->end) { - c = *cur->p; - - if (is_final_url_char(cur->p, cur->end)) - return consumedAtLeastOne; - - cur->p++; - consumedAtLeastOne = 1; - } - - return or_end; -} - static inline int consume_until_non_alphanumeric(struct cursor *cur, int or_end) { char c; int consumedAtLeastOne = 0; @@ -741,5 +697,13 @@ static inline int cursor_memset(struct cursor *cursor, unsigned char c, int n) return 1; } +static void consume_whitespace_or_punctuation(struct cursor *cur) +{ + while (cur->p < cur->end) { + if (!is_right_boundary(*cur->p)) + return; + cur->p++; + } +} #endif From a9a54e332bdd27f3c46a6dd47eb1423f4226a950 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 22 Dec 2023 16:48:50 -0800 Subject: [PATCH 012/146] nostrdb: add supporting files for the bolt11 parser A lot of this was pulled from core-lightning. Not sure what is actually needed or not. Signed-off-by: William Casarin --- nostrdb/bech32.c | 217 -------- nostrdb/bech32.h | 142 ----- nostrdb/bolt11/alignof.h | 20 + nostrdb/bolt11/amount.c | 566 ++++++++++++++++++++ nostrdb/bolt11/amount.h | 203 +++++++ nostrdb/bolt11/array_size.h | 26 + nostrdb/bolt11/bech32_util.c | 127 +++++ nostrdb/bolt11/bech32_util.h | 28 + nostrdb/bolt11/bolt11.c | 676 +++++++++++++++++++++++ nostrdb/bolt11/bolt11.h | 104 ++++ nostrdb/bolt11/build_assert.h | 40 ++ nostrdb/bolt11/check_type.h | 64 +++ nostrdb/bolt11/container_of.h | 145 +++++ nostrdb/bolt11/cppmagic.h | 191 +++++++ nostrdb/bolt11/debug.h | 15 + nostrdb/bolt11/error.c | 34 ++ nostrdb/bolt11/error.h | 33 ++ nostrdb/bolt11/hash_u5.c | 48 ++ nostrdb/bolt11/hash_u5.h | 20 + nostrdb/bolt11/libnostrdb.a | Bin 0 -> 172632 bytes nostrdb/bolt11/likely.h | 115 ++++ nostrdb/bolt11/list.c | 43 ++ nostrdb/bolt11/list.h | 842 +++++++++++++++++++++++++++++ nostrdb/bolt11/mem.c | 128 +++++ nostrdb/bolt11/mem.h | 295 +++++++++++ nostrdb/bolt11/node_id.c | 64 +++ nostrdb/bolt11/node_id.h | 38 ++ nostrdb/bolt11/overflows.h | 43 ++ nostrdb/bolt11/short_types.h | 35 ++ nostrdb/bolt11/str.h | 228 ++++++++ nostrdb/bolt11/str_debug.h | 30 ++ nostrdb/bolt11/structeq.h | 46 ++ nostrdb/bolt11/take.c | 126 +++++ nostrdb/bolt11/take.h | 136 +++++ nostrdb/bolt11/tal.c | 972 ++++++++++++++++++++++++++++++++++ nostrdb/bolt11/tal.h | 553 +++++++++++++++++++ nostrdb/bolt11/talstr.c | 315 +++++++++++ nostrdb/bolt11/talstr.h | 225 ++++++++ nostrdb/bolt11/typesafe_cb.h | 134 +++++ nostrdb/bolt11/utf8.c | 199 +++++++ nostrdb/bolt11/utf8.h | 57 ++ nostrdb/compiler.h | 342 ++++++++++-- nostrdb/cursor.h | 4 +- nostrdb/nostr_bech32.c | 306 +++++++++++ nostrdb/nostr_bech32.h | 84 +++ nostrdb/nostrdb.c | 2 + 46 files changed, 7644 insertions(+), 417 deletions(-) delete mode 100644 nostrdb/bech32.c delete mode 100644 nostrdb/bech32.h create mode 100644 nostrdb/bolt11/alignof.h create mode 100644 nostrdb/bolt11/amount.c create mode 100644 nostrdb/bolt11/amount.h create mode 100644 nostrdb/bolt11/array_size.h create mode 100644 nostrdb/bolt11/bech32_util.c create mode 100644 nostrdb/bolt11/bech32_util.h create mode 100644 nostrdb/bolt11/bolt11.c create mode 100644 nostrdb/bolt11/bolt11.h create mode 100644 nostrdb/bolt11/build_assert.h create mode 100644 nostrdb/bolt11/check_type.h create mode 100644 nostrdb/bolt11/container_of.h create mode 100644 nostrdb/bolt11/cppmagic.h create mode 100644 nostrdb/bolt11/debug.h create mode 100644 nostrdb/bolt11/error.c create mode 100644 nostrdb/bolt11/error.h create mode 100644 nostrdb/bolt11/hash_u5.c create mode 100644 nostrdb/bolt11/hash_u5.h create mode 100644 nostrdb/bolt11/libnostrdb.a create mode 100644 nostrdb/bolt11/likely.h create mode 100644 nostrdb/bolt11/list.c create mode 100644 nostrdb/bolt11/list.h create mode 100644 nostrdb/bolt11/mem.c create mode 100644 nostrdb/bolt11/mem.h create mode 100644 nostrdb/bolt11/node_id.c create mode 100644 nostrdb/bolt11/node_id.h create mode 100644 nostrdb/bolt11/overflows.h create mode 100644 nostrdb/bolt11/short_types.h create mode 100644 nostrdb/bolt11/str.h create mode 100644 nostrdb/bolt11/str_debug.h create mode 100644 nostrdb/bolt11/structeq.h create mode 100644 nostrdb/bolt11/take.c create mode 100644 nostrdb/bolt11/take.h create mode 100644 nostrdb/bolt11/tal.c create mode 100644 nostrdb/bolt11/tal.h create mode 100644 nostrdb/bolt11/talstr.c create mode 100644 nostrdb/bolt11/talstr.h create mode 100644 nostrdb/bolt11/typesafe_cb.h create mode 100644 nostrdb/bolt11/utf8.c create mode 100644 nostrdb/bolt11/utf8.h create mode 100644 nostrdb/nostr_bech32.c create mode 100644 nostrdb/nostr_bech32.h diff --git a/nostrdb/bech32.c b/nostrdb/bech32.c deleted file mode 100644 index 3ec6a1fbd..000000000 --- a/nostrdb/bech32.c +++ /dev/null @@ -1,217 +0,0 @@ -/* Stolen from https://github.com/sipa/bech32/blob/master/ref/c/segwit_addr.c, - * with only the two ' > 90' checks hoisted, and more internals exposed */ - -/* Copyright (c) 2017, 2021 Pieter Wuille - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#include "config.h" -#include -#include "bech32.h" -#include - -static uint32_t bech32_polymod_step(uint32_t pre) { - uint8_t b = pre >> 25; - return ((pre & 0x1FFFFFF) << 5) ^ - (-((b >> 0) & 1) & 0x3b6a57b2UL) ^ - (-((b >> 1) & 1) & 0x26508e6dUL) ^ - (-((b >> 2) & 1) & 0x1ea119faUL) ^ - (-((b >> 3) & 1) & 0x3d4233ddUL) ^ - (-((b >> 4) & 1) & 0x2a1462b3UL); -} - -static uint32_t bech32_final_constant(bech32_encoding enc) { - if (enc == BECH32_ENCODING_BECH32) return 1; - if (enc == BECH32_ENCODING_BECH32M) return 0x2bc830a3; - assert(0); -} - -const char bech32_charset[] = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; - -const int8_t bech32_charset_rev[128] = { - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 15, -1, 10, 17, 21, 20, 26, 30, 7, 5, -1, -1, -1, -1, -1, -1, - -1, 29, -1, 24, 13, 25, 9, 8, 23, -1, 18, 22, 31, 27, 19, -1, - 1, 0, 3, 16, 11, 28, 12, 14, 6, 4, 2, -1, -1, -1, -1, -1, - -1, 29, -1, 24, 13, 25, 9, 8, 23, -1, 18, 22, 31, 27, 19, -1, - 1, 0, 3, 16, 11, 28, 12, 14, 6, 4, 2, -1, -1, -1, -1, -1 -}; - -int bech32_encode(char *output, const char *hrp, const uint8_t *data, size_t data_len, size_t max_input_len, bech32_encoding enc) { - uint32_t chk = 1; - size_t i = 0; - while (hrp[i] != 0) { - int ch = hrp[i]; - if (ch < 33 || ch > 126) { - return 0; - } - - if (ch >= 'A' && ch <= 'Z') return 0; - chk = bech32_polymod_step(chk) ^ (ch >> 5); - ++i; - } - if (i + 7 + data_len > max_input_len) return 0; - chk = bech32_polymod_step(chk); - while (*hrp != 0) { - chk = bech32_polymod_step(chk) ^ (*hrp & 0x1f); - *(output++) = *(hrp++); - } - *(output++) = '1'; - for (i = 0; i < data_len; ++i) { - if (*data >> 5) return 0; - chk = bech32_polymod_step(chk) ^ (*data); - *(output++) = bech32_charset[*(data++)]; - } - for (i = 0; i < 6; ++i) { - chk = bech32_polymod_step(chk); - } - chk ^= bech32_final_constant(enc); - for (i = 0; i < 6; ++i) { - *(output++) = bech32_charset[(chk >> ((5 - i) * 5)) & 0x1f]; - } - *output = 0; - return 1; -} - -bech32_encoding bech32_decode_len(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t input_len) { - uint32_t chk = 1; - size_t i; - size_t hrp_len; - int have_lower = 0, have_upper = 0; - if (input_len < 8) { - return BECH32_ENCODING_NONE; - } - *data_len = 0; - while (*data_len < input_len && input[(input_len - 1) - *data_len] != '1') { - ++(*data_len); - } - hrp_len = input_len - (1 + *data_len); - if (1 + *data_len >= input_len || *data_len < 6) { - return BECH32_ENCODING_NONE; - } - *(data_len) -= 6; - for (i = 0; i < hrp_len; ++i) { - int ch = input[i]; - if (ch < 33 || ch > 126) { - return BECH32_ENCODING_NONE; - } - if (ch >= 'a' && ch <= 'z') { - have_lower = 1; - } else if (ch >= 'A' && ch <= 'Z') { - have_upper = 1; - ch = (ch - 'A') + 'a'; - } - hrp[i] = ch; - chk = bech32_polymod_step(chk) ^ (ch >> 5); - } - hrp[i] = 0; - chk = bech32_polymod_step(chk); - for (i = 0; i < hrp_len; ++i) { - chk = bech32_polymod_step(chk) ^ (input[i] & 0x1f); - } - ++i; - while (i < input_len) { - int v = (input[i] & 0x80) ? -1 : bech32_charset_rev[(int)input[i]]; - if (input[i] >= 'a' && input[i] <= 'z') have_lower = 1; - if (input[i] >= 'A' && input[i] <= 'Z') have_upper = 1; - if (v == -1) { - return BECH32_ENCODING_NONE; - } - chk = bech32_polymod_step(chk) ^ v; - if (i + 6 < input_len) { - data[i - (1 + hrp_len)] = v; - } - ++i; - } - if (have_lower && have_upper) { - return BECH32_ENCODING_NONE; - } - if (chk == bech32_final_constant(BECH32_ENCODING_BECH32)) { - return BECH32_ENCODING_BECH32; - } else if (chk == bech32_final_constant(BECH32_ENCODING_BECH32M)) { - return BECH32_ENCODING_BECH32M; - } else { - return BECH32_ENCODING_NONE; - } -} - -bech32_encoding bech32_decode(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t max_input_len) { - size_t len = strlen(input); - if (len > max_input_len) { - return BECH32_ENCODING_NONE; - } - return bech32_decode_len(hrp, data, data_len, input, len); -} - -int bech32_convert_bits(uint8_t* out, size_t* outlen, int outbits, const uint8_t* in, size_t inlen, int inbits, int pad) { - uint32_t val = 0; - int bits = 0; - uint32_t maxv = (((uint32_t)1) << outbits) - 1; - while (inlen--) { - val = (val << inbits) | *(in++); - bits += inbits; - while (bits >= outbits) { - bits -= outbits; - out[(*outlen)++] = (val >> bits) & maxv; - } - } - if (pad) { - if (bits) { - out[(*outlen)++] = (val << (outbits - bits)) & maxv; - } - } else if (((val << (outbits - bits)) & maxv) || bits >= inbits) { - return 0; - } - return 1; -} - -int segwit_addr_encode(char *output, const char *hrp, int witver, const uint8_t *witprog, size_t witprog_len) { - uint8_t data[65]; - size_t datalen = 0; - bech32_encoding enc = BECH32_ENCODING_BECH32; - if (witver > 16) return 0; - if (witver == 0 && witprog_len != 20 && witprog_len != 32) return 0; - if (witprog_len < 2 || witprog_len > 40) return 0; - if (witver > 0) enc = BECH32_ENCODING_BECH32M; - data[0] = witver; - bech32_convert_bits(data + 1, &datalen, 5, witprog, witprog_len, 8, 1); - ++datalen; - return bech32_encode(output, hrp, data, datalen, 90, enc); -} - -int segwit_addr_decode(int* witver, uint8_t* witdata, size_t* witdata_len, const char* hrp, const char* addr) { - uint8_t data[84]; - char hrp_actual[84]; - size_t data_len; - bech32_encoding enc = bech32_decode(hrp_actual, data, &data_len, addr, 90); - if (enc == BECH32_ENCODING_NONE) return 0; - if (data_len == 0 || data_len > 65) return 0; - if (strncmp(hrp, hrp_actual, 84) != 0) return 0; - if (data[0] > 16) return 0; - if (data[0] == 0 && enc != BECH32_ENCODING_BECH32) return 0; - if (data[0] > 0 && enc != BECH32_ENCODING_BECH32M) return 0; - *witdata_len = 0; - if (!bech32_convert_bits(witdata, witdata_len, 8, data + 1, data_len - 1, 5, 0)) return 0; - if (*witdata_len < 2 || *witdata_len > 40) return 0; - if (data[0] == 0 && *witdata_len != 20 && *witdata_len != 32) return 0; - *witver = data[0]; - return 1; -} diff --git a/nostrdb/bech32.h b/nostrdb/bech32.h deleted file mode 100644 index d782211c8..000000000 --- a/nostrdb/bech32.h +++ /dev/null @@ -1,142 +0,0 @@ -/* Stolen from https://github.com/sipa/bech32/blob/master/ref/c/segwit_addr.h, - * with only the two ' > 90' checks hoisted */ - -/* Copyright (c) 2017, 2021 Pieter Wuille - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef LIGHTNING_COMMON_BECH32_H -#define LIGHTNING_COMMON_BECH32_H -#include "config.h" - -#include -#include - -/** Encode a SegWit address - * - * Out: output: Pointer to a buffer of size 73 + strlen(hrp) that will be - * updated to contain the null-terminated address. - * In: hrp: Pointer to the null-terminated human readable part to use - * (chain/network specific). - * ver: Version of the witness program (between 0 and 16 inclusive). - * prog: Data bytes for the witness program (between 2 and 40 bytes). - * prog_len: Number of data bytes in prog. - * Returns 1 if successful. - */ -int segwit_addr_encode( - char *output, - const char *hrp, - int ver, - const uint8_t *prog, - size_t prog_len -); - -/** Decode a SegWit address - * - * Out: ver: Pointer to an int that will be updated to contain the witness - * program version (between 0 and 16 inclusive). - * prog: Pointer to a buffer of size 40 that will be updated to - * contain the witness program bytes. - * prog_len: Pointer to a size_t that will be updated to contain the length - * of bytes in prog. - * hrp: Pointer to the null-terminated human readable part that is - * expected (chain/network specific). - * addr: Pointer to the null-terminated address. - * Returns 1 if successful. - */ -int segwit_addr_decode( - int* ver, - uint8_t* prog, - size_t* prog_len, - const char* hrp, - const char* addr -); - -/** Supported encodings. */ -typedef enum { - BECH32_ENCODING_NONE, - BECH32_ENCODING_BECH32, - BECH32_ENCODING_BECH32M -} bech32_encoding; - -/** Encode a Bech32 or Bech32m string - * - * Out: output: Pointer to a buffer of size strlen(hrp) + data_len + 8 that - * will be updated to contain the null-terminated Bech32 string. - * In: hrp : Pointer to the null-terminated human readable part. - * data : Pointer to an array of 5-bit values. - * data_len: Length of the data array. - * max_input_len: Maximum valid length of input (90 for segwit usage). - * enc: Which encoding to use (BECH32_ENCODING_BECH32{,M}). - * Returns 1 if successful. - */ -int bech32_encode( - char *output, - const char *hrp, - const uint8_t *data, - size_t data_len, - size_t max_input_len, - bech32_encoding enc -); - -/** Decode a Bech32 or Bech32m string - * - * Out: hrp: Pointer to a buffer of size strlen(input) - 6. Will be - * updated to contain the null-terminated human readable part. - * data: Pointer to a buffer of size strlen(input) - 8 that will - * hold the encoded 5-bit data values. - * data_len: Pointer to a size_t that will be updated to be the number - * of entries in data. - * In: input: Pointer to a null-terminated Bech32 string. - * max_input_len: Maximum valid length of input (90 for segwit usage). - * Returns BECH32_ENCODING_BECH32{,M} to indicate decoding was successful - * with the specified encoding standard. BECH32_ENCODING_NONE is returned if - * decoding failed. - */ -bech32_encoding bech32_decode( - char *hrp, - uint8_t *data, - size_t *data_len, - const char *input, - size_t max_input_len -); - -bech32_encoding bech32_decode_len( - char *hrp, - uint8_t *data, - size_t *data_len, - const char *input, - size_t input_len -); - -/* Helper from bech32: translates inbits-bit bytes to outbits-bit bytes. - * @outlen is incremented as bytes are added. - * @pad is true if we're to pad, otherwise truncate last byte if necessary - */ -int bech32_convert_bits(uint8_t* out, size_t* outlen, int outbits, - const uint8_t* in, size_t inlen, int inbits, - int pad); - -/* The charset, and reverse mapping */ -extern const char bech32_charset[32]; -extern const int8_t bech32_charset_rev[128]; - -#endif /* LIGHTNING_COMMON_BECH32_H */ - diff --git a/nostrdb/bolt11/alignof.h b/nostrdb/bolt11/alignof.h new file mode 100644 index 000000000..7cf7b5ccb --- /dev/null +++ b/nostrdb/bolt11/alignof.h @@ -0,0 +1,20 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_ALIGNOF_H +#define CCAN_ALIGNOF_H +#include "../config.h" + +/** + * ALIGNOF - get the alignment of a type + * @t: the type to test + * + * This returns a safe alignment for the given type. + */ +#if HAVE_ALIGNOF +/* A GCC extension. */ +#define ALIGNOF(t) __alignof__(t) +#else +/* Alignment by measuring structure padding. */ +#define ALIGNOF(t) ((char *)(&((struct { char c; t _h; } *)0)->_h) - (char *)0) +#endif + +#endif /* CCAN_ALIGNOF_H */ diff --git a/nostrdb/bolt11/amount.c b/nostrdb/bolt11/amount.c new file mode 100644 index 000000000..a0f9ef571 --- /dev/null +++ b/nostrdb/bolt11/amount.c @@ -0,0 +1,566 @@ +#include "../config.h" +#include +#include "mem.h" +#include "talstr.h" +#include "amount.h" +#include "overflows.h" +#include + +bool amount_sat_to_msat(struct amount_msat *msat, + struct amount_sat sat) +{ + if (mul_overflows_u64(sat.satoshis, MSAT_PER_SAT)) + return false; + msat->millisatoshis = sat.satoshis * MSAT_PER_SAT; + return true; +} + +bool amount_msat_to_sat(struct amount_sat *sat, + struct amount_msat msat) +{ + if (msat.millisatoshis % MSAT_PER_SAT) + return false; + sat->satoshis = msat.millisatoshis / MSAT_PER_SAT; + return true; +} + + +/* You can always truncate millisatoshis->satoshis. */ +struct amount_sat amount_msat_to_sat_round_down(struct amount_msat msat) +{ + struct amount_sat sat; + + sat.satoshis = msat.millisatoshis / MSAT_PER_SAT; + return sat; +} + +/* Different formatting by amounts: btc, sat and msat */ +const char *fmt_amount_msat_btc(const tal_t *ctx, + struct amount_msat msat, + bool append_unit) +{ + if (msat.millisatoshis == 0) + return tal_fmt(ctx, append_unit ? "0btc" : "0"); + + return tal_fmt(ctx, "%"PRIu64".%011"PRIu64"%s", + msat.millisatoshis / MSAT_PER_BTC, + msat.millisatoshis % MSAT_PER_BTC, + append_unit ? "btc" : ""); +} + +const char *fmt_amount_msat(const tal_t *ctx, struct amount_msat msat) +{ + return tal_fmt(ctx, "%"PRIu64"msat", msat.millisatoshis); +} + +const char *fmt_amount_sat_btc(const tal_t *ctx, + struct amount_sat sat, + bool append_unit) +{ + if (sat.satoshis == 0) + return tal_fmt(ctx, append_unit ? "0btc" : "0"); + + return tal_fmt(ctx, "%"PRIu64".%08"PRIu64"%s", + sat.satoshis / SAT_PER_BTC, + sat.satoshis % SAT_PER_BTC, + append_unit ? "btc" : ""); +} + +const char *fmt_amount_sat(const tal_t *ctx, struct amount_sat sat) +{ + return tal_fmt(ctx, "%"PRIu64"sat", sat.satoshis); +} + +static bool breakup(const char *str, size_t slen, + /* Length of first numeric part. */ + size_t *whole_number_len, + /* Pointer to post-decimal part, or NULL */ + const char **post_decimal_ptr, + size_t *post_decimal_len, + /* Pointer to suffix, or NULL */ + const char **suffix_ptr, + size_t *suffix_len) +{ + size_t i; + + *whole_number_len = 0; + *post_decimal_len = 0; + *post_decimal_ptr = NULL; + *suffix_ptr = NULL; + *suffix_len = 0; + + for (i = 0;; i++) { + /* The string may be null-terminated. */ + if (i >= slen || str[i] == '\0') + return i != 0; + if (cisdigit(str[i])) + (*whole_number_len)++; + else + break; + } + + if (str[i] == '.') { + i++; + *post_decimal_ptr = str + i; + for (;; i++) { + /* True if > 0 decimals. */ + if (i >= slen || str[i] == '\0') + return str + i != *post_decimal_ptr; + if (cisdigit(str[i])) + (*post_decimal_len)++; + else + break; + } + } + + *suffix_ptr = str + i; + *suffix_len = slen - i; + return true; +} + +static bool from_number(u64 *res, const char *s, size_t len, int tens_factor) +{ + if (len == 0) + return false; + + *res = 0; + for (size_t i = 0; i < len; i++) { + if (mul_overflows_u64(*res, 10)) + return false; + *res *= 10; + assert(cisdigit(s[i])); + if (add_overflows_u64(*res, s[i] - '0')) + return false; + *res += s[i] - '0'; + } + while (tens_factor > 0) { + if (mul_overflows_u64(*res, 10)) + return false; + *res *= 10; + tens_factor--; + } + return true; +} + +static bool from_numbers(u64 *res, + const char *s1, size_t len1, int tens_factor, + const char *s2, size_t len2) +{ + u64 p1, p2; + if (len2 > tens_factor) + return false; + + if (!from_number(&p1, s1, len1, tens_factor) + || !from_number(&p2, s2, len2, tens_factor - (int)len2)) + return false; + + if (add_overflows_u64(p1, p2)) + return false; + + *res = p1 + p2; + return true; +} + +/* Valid strings: + * [0-9]+ => millisatoshi. + * [0-9]+msat => millisatoshi. + * [0-9]+sat => *1000 -> millisatoshi. + * [0-9]+.[0-9]{1,11}btc => millisatoshi. + */ +bool parse_amount_msat(struct amount_msat *msat, const char *s, size_t slen) +{ + size_t whole_number_len, post_decimal_len, suffix_len; + const char *post_decimal_ptr, *suffix_ptr; + + if (!breakup(s, slen, &whole_number_len, + &post_decimal_ptr, &post_decimal_len, + &suffix_ptr, &suffix_len)) + return false; + + if (!post_decimal_ptr && !suffix_ptr) + return from_number(&msat->millisatoshis, s, whole_number_len, 0); + if (!post_decimal_ptr && memstarts_str(suffix_ptr, suffix_len, "msat")) + return from_number(&msat->millisatoshis, s, whole_number_len, 0); + if (!post_decimal_ptr && memstarts_str(suffix_ptr, suffix_len, "sat")) + return from_number(&msat->millisatoshis, s, whole_number_len, 3); + if (memstarts_str(suffix_ptr, suffix_len, "btc")) { + if (post_decimal_len > 0) + return from_numbers(&msat->millisatoshis, + s, whole_number_len, 11, + post_decimal_ptr, post_decimal_len); + return from_number(&msat->millisatoshis, s, whole_number_len, 11); + } + + return false; +} + +/* Valid strings: + * [0-9]+ => satoshi. + * [0-9]+sat => satoshi. + * [0-9]+000msat => satoshi. + * 0msat => 0 satoshi + * [0-9]+.[0-9]{1,8}btc => satoshi. + */ +bool parse_amount_sat(struct amount_sat *sat, const char *s, size_t slen) +{ + size_t whole_number_len, post_decimal_len, suffix_len; + const char *post_decimal_ptr, *suffix_ptr; + + if (!breakup(s, slen, &whole_number_len, + &post_decimal_ptr, &post_decimal_len, + &suffix_ptr, &suffix_len)) + return false; + + if (!post_decimal_ptr && !suffix_ptr) + return from_number(&sat->satoshis, s, whole_number_len, 0); + if (!post_decimal_ptr && memstarts_str(suffix_ptr, suffix_len, "sat")) + return from_number(&sat->satoshis, s, whole_number_len, 0); + if (!post_decimal_ptr && memstarts_str(suffix_ptr, suffix_len, "msat")) { + if (!memends(s, whole_number_len, "000", strlen("000"))) { + if (memstarts_str(s, whole_number_len, "0")) + return from_number(&sat->satoshis, s, + whole_number_len, 0); + return false; + } + return from_number(&sat->satoshis, s, whole_number_len - 3, 0); + } + if (memstarts_str(suffix_ptr, suffix_len, "btc")) { + if (post_decimal_len > 0) + return from_numbers(&sat->satoshis, + s, whole_number_len, 8, + post_decimal_ptr, post_decimal_len); + return from_number(&sat->satoshis, s, whole_number_len, 8); + } + + return false; +} + +WARN_UNUSED_RESULT bool amount_msat_add(struct amount_msat *val, + struct amount_msat a, + struct amount_msat b) +{ + if (add_overflows_u64(a.millisatoshis, b.millisatoshis)) + return false; + + val->millisatoshis = a.millisatoshis + b.millisatoshis; + return true; +} + +WARN_UNUSED_RESULT bool amount_msat_sub(struct amount_msat *val, + struct amount_msat a, + struct amount_msat b) +{ + if (a.millisatoshis < b.millisatoshis) + return false; + + val->millisatoshis = a.millisatoshis - b.millisatoshis; + return true; +} + +WARN_UNUSED_RESULT bool amount_sat_add(struct amount_sat *val, + struct amount_sat a, + struct amount_sat b) +{ + if (add_overflows_u64(a.satoshis, b.satoshis)) + return false; + + val->satoshis = a.satoshis + b.satoshis; + return true; +} + +WARN_UNUSED_RESULT bool amount_sat_sub(struct amount_sat *val, + struct amount_sat a, + struct amount_sat b) +{ + if (a.satoshis < b.satoshis) + return false; + + val->satoshis = a.satoshis - b.satoshis; + return true; +} + +WARN_UNUSED_RESULT bool amount_msat_sub_sat(struct amount_msat *val, + struct amount_msat a, + struct amount_sat b) +{ + struct amount_msat msatb; + + if (!amount_sat_to_msat(&msatb, b)) + return false; + + return amount_msat_sub(val, a, msatb); +} + +WARN_UNUSED_RESULT bool amount_sat_sub_msat(struct amount_msat *val, + struct amount_sat a, + struct amount_msat b) +{ + struct amount_msat msata; + + if (!amount_sat_to_msat(&msata, a)) + return false; + + return amount_msat_sub(val, msata, b); +} + +WARN_UNUSED_RESULT bool amount_msat_add_sat(struct amount_msat *val, + struct amount_msat a, + struct amount_sat b) +{ + struct amount_msat msatb; + + if (!amount_sat_to_msat(&msatb, b)) + return false; + + return amount_msat_add(val, a, msatb); +} + +WARN_UNUSED_RESULT bool amount_msat_scale(struct amount_msat *val, + struct amount_msat msat, + double scale) +{ + double scaled = msat.millisatoshis * scale; + + /* If mantissa is < 64 bits, a naive "if (scaled > + * UINT64_MAX)" doesn't work. Stick to powers of 2. */ + if (scaled >= (double)((u64)1 << 63) * 2) + return false; + val->millisatoshis = scaled; + return true; +} + +WARN_UNUSED_RESULT bool amount_sat_scale(struct amount_sat *val, + struct amount_sat sat, + double scale) +{ + double scaled = sat.satoshis * scale; + + /* If mantissa is < 64 bits, a naive "if (scaled > + * UINT64_MAX)" doesn't work. Stick to powers of 2. */ + if (scaled >= (double)((u64)1 << 63) * 2) + return false; + val->satoshis = scaled; + return true; +} + +bool amount_sat_eq(struct amount_sat a, struct amount_sat b) +{ + return a.satoshis == b.satoshis; +} + +bool amount_sat_zero(struct amount_sat a) +{ + return a.satoshis == 0; +} + +bool amount_msat_zero(struct amount_msat a) +{ + return a.millisatoshis == 0; +} + +bool amount_msat_eq(struct amount_msat a, struct amount_msat b) +{ + return a.millisatoshis == b.millisatoshis; +} + +bool amount_sat_greater(struct amount_sat a, struct amount_sat b) +{ + return a.satoshis > b.satoshis; +} + +bool amount_msat_greater(struct amount_msat a, struct amount_msat b) +{ + return a.millisatoshis > b.millisatoshis; +} + +bool amount_sat_greater_eq(struct amount_sat a, struct amount_sat b) +{ + return a.satoshis >= b.satoshis; +} + +bool amount_msat_greater_eq(struct amount_msat a, struct amount_msat b) +{ + return a.millisatoshis >= b.millisatoshis; +} + +bool amount_sat_less(struct amount_sat a, struct amount_sat b) +{ + return a.satoshis < b.satoshis; +} + +bool amount_msat_less(struct amount_msat a, struct amount_msat b) +{ + return a.millisatoshis < b.millisatoshis; +} + +bool amount_sat_less_eq(struct amount_sat a, struct amount_sat b) +{ + return a.satoshis <= b.satoshis; +} + +bool amount_msat_less_eq(struct amount_msat a, struct amount_msat b) +{ + return a.millisatoshis <= b.millisatoshis; +} + +bool amount_msat_greater_sat(struct amount_msat msat, struct amount_sat sat) +{ + struct amount_msat msat_from_sat; + + if (!amount_sat_to_msat(&msat_from_sat, sat)) + return false; + return msat.millisatoshis > msat_from_sat.millisatoshis; +} + +bool amount_msat_greater_eq_sat(struct amount_msat msat, struct amount_sat sat) +{ + struct amount_msat msat_from_sat; + + if (!amount_sat_to_msat(&msat_from_sat, sat)) + return false; + return msat.millisatoshis >= msat_from_sat.millisatoshis; +} + +bool amount_msat_less_sat(struct amount_msat msat, struct amount_sat sat) +{ + struct amount_msat msat_from_sat; + + if (!amount_sat_to_msat(&msat_from_sat, sat)) + return false; + return msat.millisatoshis < msat_from_sat.millisatoshis; +} + +bool amount_msat_less_eq_sat(struct amount_msat msat, struct amount_sat sat) +{ + struct amount_msat msat_from_sat; + + if (!amount_sat_to_msat(&msat_from_sat, sat)) + return false; + return msat.millisatoshis <= msat_from_sat.millisatoshis; +} + +bool amount_msat_eq_sat(struct amount_msat msat, struct amount_sat sat) +{ + struct amount_msat msat_from_sat; + + if (!amount_sat_to_msat(&msat_from_sat, sat)) + return false; + + return msat.millisatoshis == msat_from_sat.millisatoshis; +} + +bool amount_msat_to_u32(struct amount_msat msat, u32 *millisatoshis) +{ + if (amount_msat_greater_eq(msat, AMOUNT_MSAT(0x100000000))) + return false; + *millisatoshis = (u32)msat.millisatoshis; + return true; +} + +struct amount_msat amount_msat(u64 millisatoshis) +{ + struct amount_msat msat; + + msat.millisatoshis = millisatoshis; + return msat; +} + +struct amount_sat amount_sat(u64 satoshis) +{ + struct amount_sat sat; + + sat.satoshis = satoshis; + return sat; +} + +double amount_msat_ratio(struct amount_msat a, struct amount_msat b) +{ + return (double)a.millisatoshis / b.millisatoshis; +} + +struct amount_msat amount_msat_div(struct amount_msat msat, u64 div) +{ + msat.millisatoshis /= div; + return msat; +} + +struct amount_sat amount_sat_div(struct amount_sat sat, u64 div) +{ + sat.satoshis /= div; + return sat; +} + +bool amount_msat_fee(struct amount_msat *fee, + struct amount_msat amt, + u32 fee_base_msat, + u32 fee_proportional_millionths) +{ + struct amount_msat fee_base, fee_prop; + + /* BOLT #7: + * + * - SHOULD accept HTLCs that pay a fee equal to or greater than: + * - fee_base_msat + ( amount_to_forward * fee_proportional_millionths / 1000000 ) + */ + fee_base.millisatoshis = fee_base_msat; + + if (mul_overflows_u64(amt.millisatoshis, fee_proportional_millionths)) + return false; + fee_prop.millisatoshis = amt.millisatoshis * fee_proportional_millionths + / 1000000; + + return amount_msat_add(fee, fee_base, fee_prop); +} + +bool amount_msat_add_fee(struct amount_msat *amt, + u32 fee_base_msat, + u32 fee_proportional_millionths) +{ + struct amount_msat fee; + + if (!amount_msat_fee(&fee, *amt, + fee_base_msat, fee_proportional_millionths)) + return false; + return amount_msat_add(amt, *amt, fee); +} + +struct amount_sat amount_tx_fee(u32 fee_per_kw, size_t weight) +{ + struct amount_sat fee; + + /* If this overflows, weight must be > 2^32, which is not a real tx */ + assert(!mul_overflows_u64(fee_per_kw, weight)); + fee.satoshis = (u64)fee_per_kw * weight / 1000; + + return fee; +} + +/* +struct amount_msat fromwire_amount_msat(const u8 **cursor, size_t *max) +{ + struct amount_msat msat; + + msat.millisatoshis = fromwire_u64(cursor, max); + return msat; +} + +struct amount_sat fromwire_amount_sat(const u8 **cursor, size_t *max) +{ + struct amount_sat sat; + + sat.satoshis = fromwire_u64(cursor, max); + return sat; +} + +void towire_amount_msat(u8 **pptr, const struct amount_msat msat) +{ + towire_u64(pptr, msat.millisatoshis); +} + +void towire_amount_sat(u8 **pptr, const struct amount_sat sat) +{ + towire_u64(pptr, sat.satoshis); +} + + +*/ diff --git a/nostrdb/bolt11/amount.h b/nostrdb/bolt11/amount.h new file mode 100644 index 000000000..4e6c11ed7 --- /dev/null +++ b/nostrdb/bolt11/amount.h @@ -0,0 +1,203 @@ +#ifndef LIGHTNING_COMMON_AMOUNT_H +#define LIGHTNING_COMMON_AMOUNT_H +#include "../config.h" +#include "short_types.h" +#include "tal.h" + +#define MSAT_PER_SAT ((u64)1000) +#define SAT_PER_BTC ((u64)100000000) +#define MSAT_PER_BTC (MSAT_PER_SAT * SAT_PER_BTC) + +/* Use these to wrap amounts, for typesafety. Please use ops where possible, + * rather than accessing the members directly. */ +struct amount_sat { + /* Amount in satoshis. */ + u64 satoshis; +}; + +struct amount_msat { + /* Amount in millisatoshis. */ + u64 millisatoshis; +}; + +struct amount_asset { + u64 value; + u8 asset[33]; /* 1 version byte + 32 byte asset_tag */ +}; + +/* For constants only: others must be built from primitives! */ +#if HAVE_BUILTIN_CONSTANT_P +#define AMOUNT_MUST_BE_CONST(c) BUILD_ASSERT_OR_ZERO(IS_COMPILE_CONSTANT(c)) +#else +#define AMOUNT_MUST_BE_CONST(c) 0 +#endif + +/* GCC 4.8.5 (Centos 7.6!) thinks struct casts are not constants, so we + * need to not use a cast for static initializations. */ +#define AMOUNT_MSAT_INIT(msat) \ + { .millisatoshis = (msat) } +#define AMOUNT_SAT_INIT(sat) \ + { .satoshis = (sat) } + +#define AMOUNT_MSAT(constant) \ + ((struct amount_msat){(constant) + AMOUNT_MUST_BE_CONST(constant)}) + +#define AMOUNT_SAT(constant) \ + ((struct amount_sat){(constant) + AMOUNT_MUST_BE_CONST(constant)}) + +/* We do sometimes need to import from raw types, eg. wally or wire fmt */ +struct amount_msat amount_msat(u64 millisatoshis); +struct amount_sat amount_sat(u64 satoshis); + +/* You may not always be able to convert satoshis->millisatoshis. */ + bool amount_sat_to_msat(struct amount_msat *msat, + struct amount_sat sat); + +/* You may not always be able to convert millisatoshis->satoshis without rounding. */ + bool amount_msat_to_sat(struct amount_sat *sat, + struct amount_msat msat); + +/* You can always truncate millisatoshis->satoshis. */ +struct amount_sat amount_msat_to_sat_round_down(struct amount_msat msat); + +/* Simple operations: val = a + b, val = a - b. */ + bool amount_msat_add(struct amount_msat *val, + struct amount_msat a, + struct amount_msat b); + bool amount_msat_sub(struct amount_msat *val, + struct amount_msat a, + struct amount_msat b); + bool amount_sat_add(struct amount_sat *val, + struct amount_sat a, + struct amount_sat b); + bool amount_sat_sub(struct amount_sat *val, + struct amount_sat a, + struct amount_sat b); + bool amount_msat_sub_sat(struct amount_msat *val, + struct amount_msat a, + struct amount_sat b); + bool amount_msat_add_sat(struct amount_msat *val, + struct amount_msat a, + struct amount_sat b); + bool amount_sat_sub_msat(struct amount_msat *val, + struct amount_sat a, + struct amount_msat b); + bool amount_msat_scale(struct amount_msat *val, + struct amount_msat msat, + double scale); + bool amount_sat_scale(struct amount_sat *val, + struct amount_sat sat, + double scale); + +struct amount_msat amount_msat_div(struct amount_msat msat, u64 div); +struct amount_sat amount_sat_div(struct amount_sat sat, u64 div); + +/* Is a == b? */ +bool amount_sat_eq(struct amount_sat a, struct amount_sat b); +bool amount_msat_eq(struct amount_msat a, struct amount_msat b); + +/* Is a zero? */ +bool amount_sat_zero(struct amount_sat a); +bool amount_msat_zero(struct amount_msat a); + +/* Is a > b? */ +bool amount_sat_greater(struct amount_sat a, struct amount_sat b); +bool amount_msat_greater(struct amount_msat a, struct amount_msat b); + +/* Is a >= b */ +bool amount_sat_greater_eq(struct amount_sat a, struct amount_sat b); +bool amount_msat_greater_eq(struct amount_msat a, struct amount_msat b); + +/* Is a < b? */ +bool amount_sat_less(struct amount_sat a, struct amount_sat b); +bool amount_msat_less(struct amount_msat a, struct amount_msat b); + +/* Is a <= b? */ +bool amount_sat_less_eq(struct amount_sat a, struct amount_sat b); +bool amount_msat_less_eq(struct amount_msat a, struct amount_msat b); + +/* Is msat > sat? */ +bool amount_msat_greater_sat(struct amount_msat msat, struct amount_sat sat); +/* Is msat >= sat? */ +bool amount_msat_greater_eq_sat(struct amount_msat msat, struct amount_sat sat); +/* Is msat < sat? */ +bool amount_msat_less_sat(struct amount_msat msat, struct amount_sat sat); +/* Is msat <= sat? */ +bool amount_msat_less_eq_sat(struct amount_msat msat, struct amount_sat sat); +/* Is msat == sat? */ +bool amount_msat_eq_sat(struct amount_msat msat, struct amount_sat sat); + +/* a / b */ +double amount_msat_ratio(struct amount_msat a, struct amount_msat b); + +/* Check whether this asset is actually the main / fee-paying asset of the + * current chain. */ +bool amount_asset_is_main(struct amount_asset *asset); + +/* Convert an amount_sat to an amount_asset */ +struct amount_asset amount_sat_to_asset(struct amount_sat *sat, const u8 *asset); + +/* amount_asset_extract_value -Prefix the amount_asset's value + * to have the 'explicit' marker. Returns NULL if the + * asset was originally blinded. + * FIXME: pass through blinded amounts */ +u8 *amount_asset_extract_value(const tal_t *ctx, struct amount_asset *asset); + +/* Convert from a generic asset to the fee-paying asset if possible. */ +struct amount_sat amount_asset_to_sat(struct amount_asset *asset); + +/* Returns true if msat fits in a u32 value. */ + bool amount_msat_to_u32(struct amount_msat msat, + u32 *millisatoshis); + +/* Common operation: what is the HTLC fee for given feerate? Can overflow! */ + bool amount_msat_fee(struct amount_msat *fee, + struct amount_msat amt, + u32 fee_base_msat, + u32 fee_proportional_millionths); + +/* Same, but add into amt. */ + bool amount_msat_add_fee(struct amount_msat *amt, + u32 fee_base_msat, + u32 fee_proportional_millionths); + +/* What is the fee for this tx weight? */ +struct amount_sat amount_tx_fee(u32 fee_per_kw, size_t weight); + +/* Different formatting by amounts: btc, sat and msat */ +/* => 1.23456789012btc (11 decimals!) */ +const char *fmt_amount_msat_btc(const tal_t *ctx, + struct amount_msat msat, + bool append_unit); +/* => 1234msat */ +const char *fmt_amount_msat(const tal_t *ctx, struct amount_msat msat); + +/* => 1.23456789btc (8 decimals!) */ +const char *fmt_amount_sat_btc(const tal_t *ctx, + struct amount_sat sat, + bool append_unit); +/* => 1234sat */ +const char *fmt_amount_sat(const tal_t *ctx, struct amount_sat sat); + +/* Valid strings: + * [0-9]+ => millisatoshi. + * [0-9]+msat => millisatoshi. + * [0-9]+sat => *1000 -> millisatopshi. + * [0-9]+.[0-9]{1,11}btc => millisatoshi. + */ +bool parse_amount_msat(struct amount_msat *msat, const char *s, size_t slen); + +/* Valid strings: + * [0-9]+ => satoshi. + * [0-9]+sat => satoshi. + * [0-9]+000msat => satoshi. + * [0-9]+.[0-9]{1,8}btc => satoshi. + */ +bool parse_amount_sat(struct amount_sat *sat, const char *s, size_t slen); + +/* Marshal/unmarshal functions */ +struct amount_msat fromwire_amount_msat(const u8 **cursor, size_t *max); +struct amount_sat fromwire_amount_sat(const u8 **cursor, size_t *max); +void towire_amount_msat(u8 **pptr, const struct amount_msat msat); +void towire_amount_sat(u8 **pptr, const struct amount_sat sat); +#endif /* LIGHTNING_COMMON_AMOUNT_H */ diff --git a/nostrdb/bolt11/array_size.h b/nostrdb/bolt11/array_size.h new file mode 100644 index 000000000..3f9494e8b --- /dev/null +++ b/nostrdb/bolt11/array_size.h @@ -0,0 +1,26 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_ARRAY_SIZE_H +#define CCAN_ARRAY_SIZE_H +#include "../config.h" +#include "build_assert.h" + +/** + * ARRAY_SIZE - get the number of elements in a visible array + * @arr: the array whose size you want. + * + * This does not work on pointers, or arrays declared as [], or + * function parameters. With correct compiler support, such usage + * will cause a build error (see build_assert). + */ +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + _array_size_chk(arr)) + +#if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF +/* Two gcc extensions. + * &a[0] degrades to a pointer: a different type from an array */ +#define _array_size_chk(arr) \ + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(arr), \ + typeof(&(arr)[0]))) +#else +#define _array_size_chk(arr) 0 +#endif +#endif /* CCAN_ALIGNOF_H */ diff --git a/nostrdb/bolt11/bech32_util.c b/nostrdb/bolt11/bech32_util.c new file mode 100644 index 000000000..3667c28e6 --- /dev/null +++ b/nostrdb/bolt11/bech32_util.c @@ -0,0 +1,127 @@ +#include "config.h" +#include "bech32.h" +#include "bech32_util.h" +#include "hash_u5.h" +#include "talstr.h" +#include "tal.h" +#include "short_types.h" +#include + +static u8 get_bit(const u8 *src, size_t bitoff) +{ + return ((src[bitoff / 8] >> (7 - (bitoff % 8))) & 1); +} + +void bech32_push_bits(u5 **data, const void *src, size_t nbits) +{ + size_t i, b; + size_t data_len = tal_count(*data); + + for (i = 0; i < nbits; i += b) { + tal_resize(data, data_len+1); + (*data)[data_len] = 0; + for (b = 0; b < 5; b++) { + (*data)[data_len] <<= 1; + /* If we need bits we don't have, zero */ + if (i+b < nbits) + (*data)[data_len] |= get_bit(src, i+b); + } + data_len++; + } +} + +static u8 get_u5_bit(const u5 *src, size_t bitoff) +{ + return ((src[bitoff / 5] >> (4 - (bitoff % 5))) & 1); +} + +void bech32_pull_bits(u8 **data, const u5 *src, size_t nbits) +{ + size_t i; + size_t data_len = tal_count(*data); + + /* We discard trailing bits. */ + for (i = 0; i + 8 <= nbits; i += 8) { + tal_resize(data, data_len+1); + (*data)[data_len] = 0; + for (size_t b = 0; b < 8; b++) { + (*data)[data_len] <<= 1; + (*data)[data_len] |= get_u5_bit(src, i+b); + } + data_len++; + } +} + +/* Returns a char, tracks case. */ +static int fixup_char(int c, bool *upper, bool *lower) +{ + if (c >= 'A' && c <= 'Z') { + *upper = true; + return c + ('a' - 'A'); + } else if (c >= 'a' && c <= 'z') { + *lower = true; + } + return c; +} + +bool from_bech32_charset(const tal_t *ctx, + const char *bech32, + size_t bech32_len, + char **hrp, u8 **data) +{ + u5 *u5data; + const char *sep; + bool upper = false, lower = false; + size_t datalen; + + sep = memchr(bech32, '1', bech32_len); + if (!sep) + return false; + + *hrp = tal_strndup(ctx, bech32, sep - bech32); + for (size_t i = 0; i < strlen(*hrp); i++) + (*hrp)[i] = fixup_char((*hrp)[i], &upper, &lower); + + datalen = bech32_len - (sep + 1 - bech32); + u5data = tal_arr(NULL, u5, datalen); + for (size_t i = 0; i < datalen; i++) { + int c = sep[1+i]; + if (c < 0 || c > 128) + goto fail; + c = fixup_char(c, &upper, &lower); + if (bech32_charset_rev[c] == -1) + goto fail; + u5data[i] = bech32_charset_rev[c]; + } + + /* Check case consistency */ + if (upper && lower) + goto fail; + + *data = tal_arr(ctx, u8, 0); + bech32_pull_bits(data, u5data, tal_bytelen(u5data) * 5); + tal_free(u5data); + return true; + +fail: + *hrp = tal_free(*hrp); + tal_free(u5data); + return false; +} + +char *to_bech32_charset(const tal_t *ctx, + const char *hrp, const u8 *data) +{ + u5 *u5data = tal_arr(NULL, u5, 0); + char *ret; + + bech32_push_bits(&u5data, data, tal_bytelen(data) * 8); + ret = tal_dup_arr(ctx, char, hrp, strlen(hrp), + 1 + tal_bytelen(u5data) + 1); + ret[strlen(hrp)] = '1'; + for (size_t i = 0; i < tal_bytelen(u5data); i++) + ret[strlen(hrp) + 1 + i] = bech32_charset[u5data[i]]; + ret[strlen(hrp) + 1 + tal_bytelen(u5data)] = '\0'; + tal_free(u5data); + return ret; +} diff --git a/nostrdb/bolt11/bech32_util.h b/nostrdb/bolt11/bech32_util.h new file mode 100644 index 000000000..20031ebc6 --- /dev/null +++ b/nostrdb/bolt11/bech32_util.h @@ -0,0 +1,28 @@ +#ifndef LIGHTNING_COMMON_BECH32_UTIL_H +#define LIGHTNING_COMMON_BECH32_UTIL_H +#include "../config.h" + +#include "tal.h" +#include "hash_u5.h" + +/** + * Push the bytes in src in 5 bit format onto the end of data. + */ +void bech32_push_bits(u5 **data, const void *src, size_t nbits); + +/** + * Push the bytes in src in 8 bit format onto the end of data. + */ +void bech32_pull_bits(u8 **data, const u5 *src, size_t nbits); + +/** + * Checksumless bech32 routines. + */ +bool from_bech32_charset(const tal_t *ctx, + const char *bech32, size_t bech32_len, + char **hrp, u8 **data); + +char *to_bech32_charset(const tal_t *ctx, + const char *hrp, const u8 *data); + +#endif /* LIGHTNING_COMMON_BECH32_UTIL_H */ diff --git a/nostrdb/bolt11/bolt11.c b/nostrdb/bolt11/bolt11.c new file mode 100644 index 000000000..343a40904 --- /dev/null +++ b/nostrdb/bolt11/bolt11.c @@ -0,0 +1,676 @@ +// +// bolt11.c +// damus +// +// Created by William Casarin on 2022-10-18. +// + +#include "bolt11.h" + +//#include "address.h" +//#include "script.h" +#include "bech32.h" +#include "utf8.h" +#include "../compiler.h" +#include "../endian.h" +#include "list.h" +#include "talstr.h" +#include "tal.h" +#include "node_id.h" +#include "bech32_util.h" +#include "bolt11.h" +#include "amount.h" +#include "array_size.h" +#include "structeq.h" + +//#include "features.h" +#include +#include +#include + +#define MSAT_PER_SAT ((u64)1000) +#define SAT_PER_BTC ((u64)100000000) +#define MSAT_PER_BTC (MSAT_PER_SAT * SAT_PER_BTC) + +struct multiplier { + const char letter; + /* We can't represent p postfix to msat, so we multiply this by 10 */ + u64 m10; +}; + +/* BOLT #11: + * + * The following `multiplier` letters are defined: + * + * * `m` (milli): multiply by 0.001 + * * `u` (micro): multiply by 0.000001 + * * `n` (nano): multiply by 0.000000001 + * * `p` (pico): multiply by 0.000000000001 + */ +static struct multiplier multipliers[] = { + { 'm', 10 * MSAT_PER_BTC / 1000 }, + { 'u', 10 * MSAT_PER_BTC / 1000000 }, + { 'n', 10 * MSAT_PER_BTC / 1000000000 }, + { 'p', 10 * MSAT_PER_BTC / 1000000000000ULL } +}; + +/* If pad is false, we discard any bits which don't fit in the last byte. + * Otherwise we add an extra byte */ +static bool pull_bits(struct hash_u5 *hu5, + u5 **data, size_t *data_len, void *dst, size_t nbits, + bool pad) +{ + size_t n5 = nbits / 5; + size_t len = 0; + + if (nbits % 5) + n5++; + + if (*data_len < n5) + return false; + if (!bech32_convert_bits(dst, &len, 8, *data, n5, 5, pad)) + return false; + if (hu5) + hash_u5(hu5, *data, n5); + *data += n5; + *data_len -= n5; + + return true; +} + +/* For pulling fields where we should have checked it will succeed already. */ +#ifndef NDEBUG +#define pull_bits_certain(hu5, data, data_len, dst, nbits, pad) \ + assert(pull_bits((hu5), (data), (data_len), (dst), (nbits), (pad))) +#else +#define pull_bits_certain pull_bits +#endif + +/* Helper for pulling a variable-length big-endian int. */ +static bool pull_uint(struct hash_u5 *hu5, + u5 **data, size_t *data_len, + u64 *val, size_t databits) +{ + be64 be_val; + + /* Too big. */ + if (databits > sizeof(be_val) * CHAR_BIT) + return false; + if (!pull_bits(hu5, data, data_len, &be_val, databits, true)) + return false; + *val = be64_to_cpu(be_val) >> (sizeof(be_val) * CHAR_BIT - databits); + return true; +} + +static size_t num_u8(size_t num_u5) +{ + return (num_u5 * 5 + 4) / 8; +} + +/* Frees bolt11, returns NULL. */ +static struct bolt11 *decode_fail(struct bolt11 *b11, char **fail, + const char *fmt, ...) + PRINTF_FMT(3,4); + +static struct bolt11 *decode_fail(struct bolt11 *b11, char **fail, + const char *fmt, ...) +{ + va_list ap; + + va_start(ap, fmt); + *fail = tal_vfmt(tal_parent(b11), fmt, ap); + va_end(ap); + return tal_free(b11); +} + +/* + * These handle specific fields in the payment request; returning the problem + * if any, or NULL. + */ +static char *unknown_field(struct bolt11 *b11, + struct hash_u5 *hu5, + u5 **data, size_t *data_len, + u5 type, size_t length) +{ + struct bolt11_field *extra = tal(b11, struct bolt11_field); + u8 u8data[num_u8(length)]; + + extra->tag = type; + extra->data = tal_dup_arr(extra, u5, *data, length, 0); + list_add_tail(&b11->extra_fields, &extra->list); + + pull_bits_certain(hu5, data, data_len, u8data, length * 5, true); + return NULL; +} + +/* BOLT #11: + * + * `p` (1): `data_length` 52. 256-bit SHA256 payment_hash. Preimage of this + * provides proof of payment + */ +static void decode_p(struct bolt11 *b11, + struct hash_u5 *hu5, + u5 **data, size_t *data_len, + size_t data_length, bool *have_p) +{ + /* BOLT #11: + * + * A payer... SHOULD use the first `p` field that it did NOT + * skip as the payment hash. + */ + if (*have_p) { + unknown_field(b11, hu5, data, data_len, 'p', data_length); + return; + } + + /* BOLT #11: + * + * A reader... MUST skip over unknown fields, OR an `f` field + * with unknown `version`, OR `p`, `h`, `s` or `n` fields that do + * NOT have `data_length`s of 52, 52, 52 or 53, respectively. + */ + if (data_length != 52) { + unknown_field(b11, hu5, data, data_len, 'p', data_length); + return; + } + + pull_bits_certain(hu5, data, data_len, &b11->payment_hash, 256, false); + *have_p = true; +} + + +static char *utf8_str(const tal_t *ctx, const u8 *buf TAKES, size_t buflen) +{ + char *ret; + + if (!utf8_check(buf, buflen)) { + if (taken(buf)) + tal_free(buf); + return NULL; + } + + /* Add one for nul term */ + ret = tal_dup_arr(ctx, char, (const char *)buf, buflen, 1); + ret[buflen] = '\0'; + return ret; +} + + +/* BOLT #11: + * + * `d` (13): `data_length` variable. Short description of purpose of payment + * (UTF-8), e.g. '1 cup of coffee' or 'ナンセンス 1杯' + */ +static char *decode_d(struct bolt11 *b11, + struct hash_u5 *hu5, + u5 **data, size_t *data_len, + size_t data_length, bool *have_d) +{ + u8 *desc; + if (*have_d) + return unknown_field(b11, hu5, data, data_len, 'd', data_length); + + desc = tal_arr(NULL, u8, data_length * 5 / 8); + pull_bits_certain(hu5, data, data_len, desc, data_length*5, false); + + *have_d = true; + b11->description = utf8_str(b11, take(desc), tal_bytelen(desc)); + if (b11->description) + return NULL; + + return tal_fmt(b11, "d: invalid utf8"); +} + +/* BOLT #11: + * + * `h` (23): `data_length` 52. 256-bit description of purpose of payment + * (SHA256). This is used to commit to an associated description that is over + * 639 bytes, but the transport mechanism for the description in that case is + * transport specific and not defined here. + */ +static void decode_h(struct bolt11 *b11, + struct hash_u5 *hu5, + u5 **data, size_t *data_len, + size_t data_length, bool *have_h) +{ + if (*have_h) { + unknown_field(b11, hu5, data, data_len, 'h', data_length); + return; + } + + /* BOLT #11: + * + * A reader... MUST skip over unknown fields, OR an `f` field + * with unknown `version`, OR `p`, `h`, `s` or `n` fields that do + * NOT have `data_length`s of 52, 52, 52 or 53, respectively. */ + if (data_length != 52) { + unknown_field(b11, hu5, data, data_len, 'h', data_length); + return; + } + + b11->description_hash = tal(b11, struct sha256); + pull_bits_certain(hu5, data, data_len, b11->description_hash, 256, + false); + *have_h = true; +} + +/* BOLT #11: + * + * `x` (6): `data_length` variable. `expiry` time in seconds + * (big-endian). Default is 3600 (1 hour) if not specified. + */ +#define DEFAULT_X 3600 +static char *decode_x(struct bolt11 *b11, + struct hash_u5 *hu5, + u5 **data, size_t *data_len, + size_t data_length, bool *have_x) +{ + if (*have_x) + return unknown_field(b11, hu5, data, data_len, 'x', + data_length); + + /* FIXME: Put upper limit in bolt 11 */ + if (!pull_uint(hu5, data, data_len, &b11->expiry, data_length * 5)) + return tal_fmt(b11, "x: length %zu chars is excessive", + *data_len); + + *have_x = true; + return NULL; +} + +/* BOLT #11: + * + * `c` (24): `data_length` variable. `min_final_cltv_expiry` to use for the + * last HTLC in the route. Default is 18 if not specified. + */ +static char *decode_c(struct bolt11 *b11, + struct hash_u5 *hu5, + u5 **data, size_t *data_len, + size_t data_length, bool *have_c) +{ + u64 c; + if (*have_c) + return unknown_field(b11, hu5, data, data_len, 'c', + data_length); + + /* FIXME: Put upper limit in bolt 11 */ + if (!pull_uint(hu5, data, data_len, &c, data_length * 5)) + return tal_fmt(b11, "c: length %zu chars is excessive", + *data_len); + b11->min_final_cltv_expiry = (u32)c; + /* Can overflow, since c is 64 bits but value must be < 32 bits */ + if (b11->min_final_cltv_expiry != c) + return tal_fmt(b11, "c: %"PRIu64" is too large", c); + + *have_c = true; + return NULL; +} + +static char *decode_n(struct bolt11 *b11, + struct hash_u5 *hu5, + u5 **data, size_t *data_len, + size_t data_length, bool *have_n) +{ + if (*have_n) + return unknown_field(b11, hu5, data, data_len, 'n', + data_length); + + /* BOLT #11: + * + * A reader... MUST skip over unknown fields, OR an `f` field + * with unknown `version`, OR `p`, `h`, `s` or `n` fields that do + * NOT have `data_length`s of 52, 52, 52 or 53, respectively. */ + if (data_length != 53) + return unknown_field(b11, hu5, data, data_len, 'n', + data_length); + + pull_bits_certain(hu5, data, data_len, &b11->receiver_id.k, + data_length * 5, false); + /* + if (!node_id_valid(&b11->receiver_id)) + return tal_fmt(b11, "n: invalid pubkey %s", + node_id_to_hexstr(b11, &b11->receiver_id)); + */ + + *have_n = true; + return NULL; +} + +/* BOLT #11: + * + * `m` (27): `data_length` variable. Additional metadata to attach to + * the payment. Note that the size of this field is limited by the + * maximum hop payload size. Long metadata fields reduce the maximum + * route length. + */ +static char *decode_m(struct bolt11 *b11, + struct hash_u5 *hu5, + u5 **data, size_t *data_len, + size_t data_length, + bool *have_m) +{ + size_t mlen = (data_length * 5) / 8; + + if (*have_m) + return unknown_field(b11, hu5, data, data_len, 'm', + data_length); + + b11->metadata = tal_arr(b11, u8, mlen); + pull_bits_certain(hu5, data, data_len, b11->metadata, + data_length * 5, false); + + *have_m = true; + return NULL; +} + +struct bolt11 *new_bolt11(const tal_t *ctx) +{ + struct bolt11 *b11 = tal(ctx, struct bolt11); + + list_head_init(&b11->extra_fields); + b11->description = NULL; + b11->description_hash = NULL; + b11->fallbacks = NULL; + b11->msat = NULL; + b11->expiry = DEFAULT_X; + b11->features = tal_arr(b11, u8, 0); + /* BOLT #11: + * - if the `c` field (`min_final_cltv_expiry`) is not provided: + * - MUST use an expiry delta of at least 18 when making the payment + */ + b11->min_final_cltv_expiry = 18; + //b11->payment_secret = NULL; + b11->metadata = NULL; + + //if (msat) + //b11->msat = tal_dup(b11, struct amount_msat, msat); + return b11; +} + +/* Define sha256_eq. */ +//STRUCTEQ_DEF(sha256, 0, u); + +/* Extracts signature but does not check it. */ +struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sig, char **fail) +{ + char *hrp, *amountstr, *prefix; + u5 *data; + size_t data_len; + struct bolt11 *b11 = new_bolt11(ctx); + struct hash_u5 hu5; + bool have_p = false, have_d = false, have_h = false, have_n = false, + have_x = false, have_c = false, have_m = false; + + /* BOLT #11: + * + * If a URI scheme is desired, the current recommendation is to either + * use 'lightning:' as a prefix before the BOLT-11 encoding + */ + if (strstarts(str, "lightning:") || strstarts(str, "LIGHTNING:")) + str += strlen("lightning:"); + + if (strlen(str) < 8) + return decode_fail(b11, fail, "Bad bech32 string"); + + hrp = tal_arr(b11, char, strlen(str) - 6); + data = tal_arr(b11, u5, strlen(str) - 8); + + if (bech32_decode(hrp, data, &data_len, str, (size_t)-1) + != BECH32_ENCODING_BECH32) + return decode_fail(b11, fail, "Bad bech32 string"); + + /* For signature checking at the end. */ + hash_u5_init(&hu5, hrp); + + /* BOLT #11: + * + * The human-readable part of a Lightning invoice consists of two sections: + * 1. `prefix`: `ln` + BIP-0173 currency prefix (e.g. `lnbc` for Bitcoin mainnet, + * `lntb` for Bitcoin testnet, `lntbs` for Bitcoin signet, and `lnbcrt` for Bitcoin regtest) + * 1. `amount`: optional number in that currency, followed by an optional + * `multiplier` letter. The unit encoded here is the 'social' convention of a payment unit -- in the case of Bitcoin the unit is 'bitcoin' NOT satoshis. + */ + prefix = tal_strndup(b11, hrp, strcspn(hrp, "0123456789")); + + /* BOLT #11: + * + * A reader...if it does NOT understand the `prefix`... MUST fail the payment. + */ + if (!strstarts(prefix, "ln")) + return decode_fail(b11, fail, + "Prefix '%s' does not start with ln", prefix); + + /* BOLT #11: + * + * - if the `amount` is empty: + * */ + amountstr = tal_strdup(b11, hrp + strlen(prefix)); + if (streq(amountstr, "")) { + /* BOLT #11: + * + * - SHOULD indicate to the payer that amount is unspecified. + */ + b11->msat = NULL; + } else { + u64 m10 = 10 * MSAT_PER_BTC; /* Pico satoshis in a Bitcoin */ + u64 amount; + char *end; + + /* Gather and trim multiplier */ + end = amountstr + strlen(amountstr)-1; + for (size_t i = 0; i < ARRAY_SIZE(multipliers); i++) { + if (*end == multipliers[i].letter) { + m10 = multipliers[i].m10; + *end = '\0'; + break; + } + } + + /* BOLT #11: + * + * if `amount` contains a non-digit OR is followed by + * anything except a `multiplier` (see table above)... MUST fail the + * payment. + **/ + amount = strtoull(amountstr, &end, 10); + if (amount == ULLONG_MAX && errno == ERANGE) + return decode_fail(b11, fail, + "Invalid amount '%s'", amountstr); + if (!*amountstr || *end) + return decode_fail(b11, fail, + "Invalid amount postfix '%s'", end); + + /* BOLT #11: + * + * if the `multiplier` is present... MUST multiply + * `amount` by the `multiplier` value to derive the + * amount required for payment. + */ + b11->msat = tal(b11, struct amount_msat); + /* BOLT #11: + * + * - if multiplier is `p` and the last decimal of `amount` is + * not 0: + * - MUST fail the payment. + */ + if (amount * m10 % 10 != 0) + return decode_fail(b11, fail, + "Invalid sub-millisatoshi amount" + " '%sp'", amountstr); + + *b11->msat = amount_msat(amount * m10 / 10); + } + + /* BOLT #11: + * + * The data part of a Lightning invoice consists of multiple sections: + * + * 1. `timestamp`: seconds-since-1970 (35 bits, big-endian) + * 1. zero or more tagged parts + * 1. `signature`: Bitcoin-style signature of above (520 bits) + */ + if (!pull_uint(&hu5, &data, &data_len, &b11->timestamp, 35)) + return decode_fail(b11, fail, "Can't get 35-bit timestamp"); + + while (data_len > 520 / 5) { + const char *problem = NULL; + u64 type, data_length; + + /* BOLT #11: + * + * Each Tagged Field is of the form: + * + * 1. `type` (5 bits) + * 1. `data_length` (10 bits, big-endian) + * 1. `data` (`data_length` x 5 bits) + */ + if (!pull_uint(&hu5, &data, &data_len, &type, 5) + || !pull_uint(&hu5, &data, &data_len, &data_length, 10)) + return decode_fail(b11, fail, + "Can't get tag and length"); + + /* Can't exceed total data remaining. */ + if (data_length > data_len) + return decode_fail(b11, fail, "%c: truncated", + bech32_charset[type]); + + switch (bech32_charset[type]) { + case 'p': + decode_p(b11, &hu5, &data, &data_len, data_length, + &have_p); + break; + + case 'd': + problem = decode_d(b11, &hu5, &data, &data_len, + data_length, &have_d); + break; + + case 'h': + decode_h(b11, &hu5, &data, &data_len, data_length, + &have_h); + break; + + case 'n': + problem = decode_n(b11, &hu5, &data, + &data_len, data_length, + &have_n); + break; + + case 'x': + problem = decode_x(b11, &hu5, &data, + &data_len, data_length, + &have_x); + break; + + case 'c': + problem = decode_c(b11, &hu5, &data, + &data_len, data_length, + &have_c); + break; + + /* + case 'f': + problem = decode_f(b11, &hu5, &data, + &data_len, data_length); + break; + case 'r': + problem = decode_r(b11, &hu5, &data, &data_len, + data_length); + break; + case '9': + problem = decode_9(b11, our_features, &hu5, + &data, &data_len, + data_length); + break; + case 's': + problem = decode_s(b11, &hu5, &data, &data_len, + data_length, &have_s); + break; + */ + case 'm': + problem = decode_m(b11, &hu5, &data, &data_len, + data_length, &have_m); + break; + default: + unknown_field(b11, &hu5, &data, &data_len, + bech32_charset[type], data_length); + } + if (problem) + return decode_fail(b11, fail, "%s", problem); + } + + if (!have_p) + return decode_fail(b11, fail, "No valid 'p' field found"); + + *sig = tal_dup_arr(ctx, u5, data, data_len, 0); + return b11; +} + +/* Decodes and checks signature; returns NULL on error. */ +struct bolt11 *bolt11_decode(const tal_t *ctx, const char *str, char **fail) +{ + u5 *sigdata; + size_t data_len; + u8 sig_and_recid[65]; + //secp256k1_ecdsa_recoverable_signature sig; + struct bolt11 *b11; + + b11 = bolt11_decode_nosig(ctx, str, &sigdata, fail); + if (!b11) + return NULL; + + /* BOLT #11: + * + * A writer...MUST set `signature` to a valid 512-bit + * secp256k1 signature of the SHA2 256-bit hash of the + * human-readable part, represented as UTF-8 bytes, + * concatenated with the data part (excluding the signature) + * with 0 bits appended to pad the data to the next byte + * boundary, with a trailing byte containing the recovery ID + * (0, 1, 2, or 3). + */ + data_len = tal_count(sigdata); + if (!pull_bits(NULL, &sigdata, &data_len, sig_and_recid, 520, false)) + return decode_fail(b11, fail, "signature truncated"); + + assert(data_len == 0); + + /* + if (!secp256k1_ecdsa_recoverable_signature_parse_compact + (secp256k1_ctx, &sig, sig_and_recid, sig_and_recid[64])) + return decode_fail(b11, fail, "signature invalid"); + + secp256k1_ecdsa_recoverable_signature_convert(secp256k1_ctx, + &b11->sig, &sig); + */ + + /* BOLT #11: + * + * A reader... MUST check that the `signature` is valid (see + * the `n` tagged field specified below). ... A reader... + * MUST use the `n` field to validate the signature instead of + * performing signature recovery. + */ + /* + if (!have_n) { + struct pubkey k; + if (!secp256k1_ecdsa_recover(secp256k1_ctx, + &k.pubkey, + &sig, + (const u8 *)&hash)) + return decode_fail(b11, fail, + "signature recovery failed"); + node_id_from_pubkey(&b11->receiver_id, &k); + } else { + struct pubkey k; + if (!pubkey_from_node_id(&k, &b11->receiver_id)) + abort(); + if (!secp256k1_ecdsa_verify(secp256k1_ctx, &b11->sig, + (const u8 *)&hash, + &k.pubkey)) + return decode_fail(b11, fail, "invalid signature"); + } + */ + + return b11; +} diff --git a/nostrdb/bolt11/bolt11.h b/nostrdb/bolt11/bolt11.h new file mode 100644 index 000000000..2831eb94a --- /dev/null +++ b/nostrdb/bolt11/bolt11.h @@ -0,0 +1,104 @@ +#ifndef LIGHTNING_COMMON_BOLT11_H +#define LIGHTNING_COMMON_BOLT11_H + +#include "short_types.h" +#include "hash_u5.h" +#include "list.h" +#include "node_id.h" +//#include + +/* We only have 10 bits for the field length, meaning < 640 bytes */ +#define BOLT11_FIELD_BYTE_LIMIT ((1 << 10) * 5 / 8) + +/* BOLT #11: + * * `c` (24): `data_length` variable. + * `min_final_cltv_expiry` to use for the last HTLC in the route. + * Default is 18 if not specified. + */ +#define DEFAULT_FINAL_CLTV_DELTA 18 + +struct feature_set; + +struct bolt11_field { + struct list_node list; + + char tag; + u5 *data; +}; + +/* BOLT #11: + * * `pubkey` (264 bits) + * * `short_channel_id` (64 bits) + * * `fee_base_msat` (32 bits, big-endian) + * * `fee_proportional_millionths` (32 bits, big-endian) + * * `cltv_expiry_delta` (16 bits, big-endian) + */ + +/* +struct route_info { + struct node_id pubkey; + u16 cltv_expiry_delta; + struct short_channel_id short_channel_id; + u32 fee_base_msat, fee_proportional_millionths; +}; + */ + +struct bolt11 { + const struct chainparams *chain; + u64 timestamp; + struct amount_msat *msat; /* NULL if not specified. */ + + struct sha256 payment_hash; + struct node_id receiver_id; + + /* description_hash valid if and only if description is NULL. */ + const char *description; + struct sha256 *description_hash; + + /* How many seconds to pay from @timestamp above. */ + u64 expiry; + + /* How many blocks final hop requires. */ + u32 min_final_cltv_expiry; + + /* If non-NULL, indicates fallback addresses to pay to. */ + const u8 **fallbacks; + + /* If non-NULL: array of route arrays */ + //struct route_info **routes; + + /* signature of sha256 of entire thing. */ + //secp256k1_ecdsa_signature sig; + + /* payment secret, if any. */ + //struct secret *payment_secret; + + /* Features bitmap, if any. */ + u8 *features; + + /* Optional metadata to send with payment. */ + u8 *metadata; + + struct list_head extra_fields; +}; + +/* Decodes and checks signature; returns NULL on error; description is + * (optional) out-of-band description of payment, for `h` field. + * fset is NULL to accept any features (usually not desirable!). + * + * if @must_be_chain is not NULL, fails unless it's this chain. + */ +struct bolt11 *bolt11_decode(const tal_t *ctx, const char *str, char **fail); + +/* Extracts signature but does not check it. */ +struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sigdata, char **fail); + +/* Initialize an empty bolt11 struct with optional amount */ +struct bolt11 *new_bolt11(const tal_t *ctx); + +#if DEVELOPER +/* Flag for tests to suppress `min_final_cltv_expiry` field generation, to match test vectors */ +extern bool dev_bolt11_no_c_generation; +#endif + +#endif /* LIGHTNING_COMMON_BOLT11_H */ diff --git a/nostrdb/bolt11/build_assert.h b/nostrdb/bolt11/build_assert.h new file mode 100644 index 000000000..6df9dae7e --- /dev/null +++ b/nostrdb/bolt11/build_assert.h @@ -0,0 +1,40 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_BUILD_ASSERT_H +#define CCAN_BUILD_ASSERT_H + +/** + * BUILD_ASSERT - assert a build-time dependency. + * @cond: the compile-time condition which must be true. + * + * Your compile will fail if the condition isn't true, or can't be evaluated + * by the compiler. This can only be used within a function. + * + * Example: + * #include + * ... + * static char *foo_to_char(struct foo *foo) + * { + * // This code needs string to be at start of foo. + * BUILD_ASSERT(offsetof(struct foo, string) == 0); + * return (char *)foo; + * } + */ +#define BUILD_ASSERT(cond) \ + do { (void) sizeof(char [1 - 2*!(cond)]); } while(0) + +/** + * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression. + * @cond: the compile-time condition which must be true. + * + * Your compile will fail if the condition isn't true, or can't be evaluated + * by the compiler. This can be used in an expression: its value is "0". + * + * Example: + * #define foo_to_char(foo) \ + * ((char *)(foo) \ + * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0)) + */ +#define BUILD_ASSERT_OR_ZERO(cond) \ + (sizeof(char [1 - 2*!(cond)]) - 1) + +#endif /* CCAN_BUILD_ASSERT_H */ diff --git a/nostrdb/bolt11/check_type.h b/nostrdb/bolt11/check_type.h new file mode 100644 index 000000000..0492b56bc --- /dev/null +++ b/nostrdb/bolt11/check_type.h @@ -0,0 +1,64 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_CHECK_TYPE_H +#define CCAN_CHECK_TYPE_H +#include "../config.h" + +/** + * check_type - issue a warning or build failure if type is not correct. + * @expr: the expression whose type we should check (not evaluated). + * @type: the exact type we expect the expression to be. + * + * This macro is usually used within other macros to try to ensure that a macro + * argument is of the expected type. No type promotion of the expression is + * done: an unsigned int is not the same as an int! + * + * check_type() always evaluates to 0. + * + * If your compiler does not support typeof, then the best we can do is fail + * to compile if the sizes of the types are unequal (a less complete check). + * + * Example: + * // They should always pass a 64-bit value to _set_some_value! + * #define set_some_value(expr) \ + * _set_some_value((check_type((expr), uint64_t), (expr))) + */ + +/** + * check_types_match - issue a warning or build failure if types are not same. + * @expr1: the first expression (not evaluated). + * @expr2: the second expression (not evaluated). + * + * This macro is usually used within other macros to try to ensure that + * arguments are of identical types. No type promotion of the expressions is + * done: an unsigned int is not the same as an int! + * + * check_types_match() always evaluates to 0. + * + * If your compiler does not support typeof, then the best we can do is fail + * to compile if the sizes of the types are unequal (a less complete check). + * + * Example: + * // Do subtraction to get to enclosing type, but make sure that + * // pointer is of correct type for that member. + * #define container_of(mbr_ptr, encl_type, mbr) \ + * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \ + * ((encl_type *) \ + * ((char *)(mbr_ptr) - offsetof(encl_type, mbr)))) + */ +#if HAVE_TYPEOF +#define check_type(expr, type) \ + ((typeof(expr) *)0 != (type *)0) + +#define check_types_match(expr1, expr2) \ + ((typeof(expr1) *)0 != (typeof(expr2) *)0) +#else +#include +/* Without typeof, we can only test the sizes. */ +#define check_type(expr, type) \ + BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type)) + +#define check_types_match(expr1, expr2) \ + BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2)) +#endif /* HAVE_TYPEOF */ + +#endif /* CCAN_CHECK_TYPE_H */ diff --git a/nostrdb/bolt11/container_of.h b/nostrdb/bolt11/container_of.h new file mode 100644 index 000000000..b27d7f3da --- /dev/null +++ b/nostrdb/bolt11/container_of.h @@ -0,0 +1,145 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_CONTAINER_OF_H +#define CCAN_CONTAINER_OF_H +#include + +#include "../config.h" +#include "check_type.h" + +/** + * container_of - get pointer to enclosing structure + * @member_ptr: pointer to the structure member + * @containing_type: the type this member is within + * @member: the name of this member within the structure. + * + * Given a pointer to a member of a structure, this macro does pointer + * subtraction to return the pointer to the enclosing type. + * + * Example: + * struct foo { + * int fielda, fieldb; + * // ... + * }; + * struct info { + * int some_other_field; + * struct foo my_foo; + * }; + * + * static struct info *foo_to_info(struct foo *foo) + * { + * return container_of(foo, struct info, my_foo); + * } + */ +#define container_of(member_ptr, containing_type, member) \ + ((containing_type *) \ + ((char *)(member_ptr) \ + - container_off(containing_type, member)) \ + + check_types_match(*(member_ptr), ((containing_type *)0)->member)) + + +/** + * container_of_or_null - get pointer to enclosing structure, or NULL + * @member_ptr: pointer to the structure member + * @containing_type: the type this member is within + * @member: the name of this member within the structure. + * + * Given a pointer to a member of a structure, this macro does pointer + * subtraction to return the pointer to the enclosing type, unless it + * is given NULL, in which case it also returns NULL. + * + * Example: + * struct foo { + * int fielda, fieldb; + * // ... + * }; + * struct info { + * int some_other_field; + * struct foo my_foo; + * }; + * + * static struct info *foo_to_info_allowing_null(struct foo *foo) + * { + * return container_of_or_null(foo, struct info, my_foo); + * } + */ +static inline char *container_of_or_null_(void *member_ptr, size_t offset) +{ + return member_ptr ? (char *)member_ptr - offset : NULL; +} +#define container_of_or_null(member_ptr, containing_type, member) \ + ((containing_type *) \ + container_of_or_null_(member_ptr, \ + container_off(containing_type, member)) \ + + check_types_match(*(member_ptr), ((containing_type *)0)->member)) + +/** + * container_off - get offset to enclosing structure + * @containing_type: the type this member is within + * @member: the name of this member within the structure. + * + * Given a pointer to a member of a structure, this macro does + * typechecking and figures out the offset to the enclosing type. + * + * Example: + * struct foo { + * int fielda, fieldb; + * // ... + * }; + * struct info { + * int some_other_field; + * struct foo my_foo; + * }; + * + * static struct info *foo_to_info(struct foo *foo) + * { + * size_t off = container_off(struct info, my_foo); + * return (void *)((char *)foo - off); + * } + */ +#define container_off(containing_type, member) \ + offsetof(containing_type, member) + +/** + * container_of_var - get pointer to enclosing structure using a variable + * @member_ptr: pointer to the structure member + * @container_var: a pointer of same type as this member's container + * @member: the name of this member within the structure. + * + * Given a pointer to a member of a structure, this macro does pointer + * subtraction to return the pointer to the enclosing type. + * + * Example: + * static struct info *foo_to_i(struct foo *foo) + * { + * struct info *i = container_of_var(foo, i, my_foo); + * return i; + * } + */ +#if HAVE_TYPEOF +#define container_of_var(member_ptr, container_var, member) \ + container_of(member_ptr, typeof(*container_var), member) +#else +#define container_of_var(member_ptr, container_var, member) \ + ((void *)((char *)(member_ptr) - \ + container_off_var(container_var, member))) +#endif + +/** + * container_off_var - get offset of a field in enclosing structure + * @container_var: a pointer to a container structure + * @member: the name of a member within the structure. + * + * Given (any) pointer to a structure and a its member name, this + * macro does pointer subtraction to return offset of member in a + * structure memory layout. + * + */ +#if HAVE_TYPEOF +#define container_off_var(var, member) \ + container_off(typeof(*var), member) +#else +#define container_off_var(var, member) \ + ((const char *)&(var)->member - (const char *)(var)) +#endif + +#endif /* CCAN_CONTAINER_OF_H */ diff --git a/nostrdb/bolt11/cppmagic.h b/nostrdb/bolt11/cppmagic.h new file mode 100644 index 000000000..fa8d70e24 --- /dev/null +++ b/nostrdb/bolt11/cppmagic.h @@ -0,0 +1,191 @@ +/* MIT (BSD) license - see LICENSE file for details */ +#ifndef CCAN_CPPMAGIC_H +#define CCAN_CPPMAGIC_H + +/** + * CPPMAGIC_NOTHING - expands to nothing + */ +#define CPPMAGIC_NOTHING() + +/** + * CPPMAGIC_STRINGIFY - convert arguments to a string literal + */ +#define _CPPMAGIC_STRINGIFY(...) #__VA_ARGS__ +#define CPPMAGIC_STRINGIFY(...) _CPPMAGIC_STRINGIFY(__VA_ARGS__) + +/** + * CPPMAGIC_GLUE2 - glue arguments together + * + * CPPMAGIC_GLUE2(@a_, @b_) + * expands to the expansion of @a_ followed immediately + * (combining tokens) by the expansion of @b_ + */ +#define _CPPMAGIC_GLUE2(a_, b_) a_##b_ +#define CPPMAGIC_GLUE2(a_, b_) _CPPMAGIC_GLUE2(a_, b_) + +/** + * CPPMAGIC_1ST - return 1st argument + * + * CPPMAGIC_1ST(@a_, ...) + * expands to the expansion of @a_ + */ +#define CPPMAGIC_1ST(a_, ...) a_ + +/** + * CPPMAGIC_2ND - return 2nd argument + * + * CPPMAGIC_2ST(@a_, @b_, ...) + * expands to the expansion of @b_ + */ +#define CPPMAGIC_2ND(a_, b_, ...) b_ + +/** + * CPPMAGIC_ISZERO - is argument '0' + * + * CPPMAGIC_ISZERO(@a) + * expands to '1' if @a is '0', otherwise expands to '0'. + */ +#define _CPPMAGIC_ISPROBE(...) CPPMAGIC_2ND(__VA_ARGS__, 0) +#define _CPPMAGIC_PROBE() $, 1 +#define _CPPMAGIC_ISZERO_0 _CPPMAGIC_PROBE() +#define CPPMAGIC_ISZERO(a_) \ + _CPPMAGIC_ISPROBE(CPPMAGIC_GLUE2(_CPPMAGIC_ISZERO_, a_)) + +/** + * CPPMAGIC_NONZERO - is argument not '0' + * + * CPPMAGIC_NONZERO(@a) + * expands to '0' if @a is '0', otherwise expands to '1'. + */ +#define CPPMAGIC_NONZERO(a_) CPPMAGIC_ISZERO(CPPMAGIC_ISZERO(a_)) + +/** + * CPPMAGIC_NONEMPTY - does the macro have any arguments? + * + * CPPMAGIC_NONEMPTY() + * expands to '0' + * CPPMAGIC_NONEMPTY(@a) + * CPPMAGIC_NONEMPTY(@a, ...) + * expand to '1' + */ +#define _CPPMAGIC_EOA() 0 +#define CPPMAGIC_NONEMPTY(...) \ + CPPMAGIC_NONZERO(CPPMAGIC_1ST(_CPPMAGIC_EOA __VA_ARGS__)()) + +/** + * CPPMAGIC_ISEMPTY - does the macro have no arguments? + * + * CPPMAGIC_ISEMPTY() + * expands to '1' + * CPPMAGIC_ISEMPTY(@a) + * CPPMAGIC_ISEMPTY(@a, ...) + * expand to '0' + */ +#define CPPMAGIC_ISEMPTY(...) \ + CPPMAGIC_ISZERO(CPPMAGIC_NONEMPTY(__VA_ARGS__)) + +/* + * CPPMAGIC_IFELSE - preprocessor conditional + * + * CPPMAGIC_IFELSE(@cond)(@if)(@else) + * expands to @else if @cond is '0', otherwise expands to @if + */ +#define _CPPMAGIC_IF_0(...) _CPPMAGIC_IF_0_ELSE +#define _CPPMAGIC_IF_1(...) __VA_ARGS__ _CPPMAGIC_IF_1_ELSE +#define _CPPMAGIC_IF_0_ELSE(...) __VA_ARGS__ +#define _CPPMAGIC_IF_1_ELSE(...) +#define _CPPMAGIC_IFELSE(cond_) CPPMAGIC_GLUE2(_CPPMAGIC_IF_, cond_) +#define CPPMAGIC_IFELSE(cond_) \ + _CPPMAGIC_IFELSE(CPPMAGIC_NONZERO(cond_)) + +/** + * CPPMAGIC_EVAL - force multiple expansion passes + * + * Forces macros in the arguments to be expanded repeatedly (up to + * 1024 times) even when CPP would usually stop expanding. + */ +#define CPPMAGIC_EVAL1(...) __VA_ARGS__ +#define CPPMAGIC_EVAL2(...) \ + CPPMAGIC_EVAL1(CPPMAGIC_EVAL1(__VA_ARGS__)) +#define CPPMAGIC_EVAL4(...) \ + CPPMAGIC_EVAL2(CPPMAGIC_EVAL2(__VA_ARGS__)) +#define CPPMAGIC_EVAL8(...) \ + CPPMAGIC_EVAL4(CPPMAGIC_EVAL4(__VA_ARGS__)) +#define CPPMAGIC_EVAL16(...) \ + CPPMAGIC_EVAL8(CPPMAGIC_EVAL8(__VA_ARGS__)) +#define CPPMAGIC_EVAL32(...) \ + CPPMAGIC_EVAL16(CPPMAGIC_EVAL16(__VA_ARGS__)) +#define CPPMAGIC_EVAL64(...) \ + CPPMAGIC_EVAL32(CPPMAGIC_EVAL32(__VA_ARGS__)) +#define CPPMAGIC_EVAL128(...) \ + CPPMAGIC_EVAL64(CPPMAGIC_EVAL64(__VA_ARGS__)) +#define CPPMAGIC_EVAL256(...) \ + CPPMAGIC_EVAL128(CPPMAGIC_EVAL128(__VA_ARGS__)) +#define CPPMAGIC_EVAL512(...) \ + CPPMAGIC_EVAL256(CPPMAGIC_EVAL256(__VA_ARGS__)) +#define CPPMAGIC_EVAL1024(...) \ + CPPMAGIC_EVAL512(CPPMAGIC_EVAL512(__VA_ARGS__)) +#define CPPMAGIC_EVAL(...) CPPMAGIC_EVAL1024(__VA_ARGS__) + +/** + * CPPMAGIC_DEFER1, CPPMAGIC_DEFER2 - defer expansion + */ +#define CPPMAGIC_DEFER1(a_) a_ CPPMAGIC_NOTHING() +#define CPPMAGIC_DEFER2(a_) a_ CPPMAGIC_NOTHING CPPMAGIC_NOTHING()() + +/** + * CPPMAGIC_MAP - iterate another macro across arguments + * @m: name of a one argument macro + * + * CPPMAGIC_MAP(@m, @a1, @a2, ... @an) + * expands to the expansion of @m(@a1) , @m(@a2) , ... , @m(@an) + */ +#define _CPPMAGIC_MAP_() _CPPMAGIC_MAP +#define _CPPMAGIC_MAP(m_, a_, ...) \ + m_(a_) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (, CPPMAGIC_DEFER2(_CPPMAGIC_MAP_)()(m_, __VA_ARGS__)) \ + () +#define CPPMAGIC_MAP(m_, ...) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (CPPMAGIC_EVAL(_CPPMAGIC_MAP(m_, __VA_ARGS__))) \ + () + +/** + * CPPMAGIC_2MAP - iterate another macro across pairs of arguments + * @m: name of a two argument macro + * + * CPPMAGIC_2MAP(@m, @a1, @b1, @a2, @b2, ..., @an, @bn) + * expands to the expansion of + * @m(@a1, @b1) , @m(@a2, @b2) , ... , @m(@an, @bn) + */ +#define _CPPMAGIC_2MAP_() _CPPMAGIC_2MAP +#define _CPPMAGIC_2MAP(m_, a_, b_, ...) \ + m_(a_, b_) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (, CPPMAGIC_DEFER2(_CPPMAGIC_2MAP_)()(m_, __VA_ARGS__)) \ + () +#define CPPMAGIC_2MAP(m_, ...) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (CPPMAGIC_EVAL(_CPPMAGIC_2MAP(m_, __VA_ARGS__))) \ + () + +/** + * CPPMAGIC_JOIN - separate arguments with given delimiter + * @d: delimiter + * + * CPPMAGIC_JOIN(@d, @a1, @a2, ..., @an) + * expands to the expansion of @a1 @d @a2 @d ... @d @an + */ +#define _CPPMAGIC_JOIN_() _CPPMAGIC_JOIN +#define _CPPMAGIC_JOIN(d_, a_, ...) \ + a_ \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (d_ CPPMAGIC_DEFER2(_CPPMAGIC_JOIN_)()(d_, __VA_ARGS__)) \ + () +#define CPPMAGIC_JOIN(d_, ...) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (CPPMAGIC_EVAL(_CPPMAGIC_JOIN(d_, __VA_ARGS__))) \ + () + +#endif /* CCAN_CPPMAGIC_H */ diff --git a/nostrdb/bolt11/debug.h b/nostrdb/bolt11/debug.h new file mode 100644 index 000000000..11a6344ec --- /dev/null +++ b/nostrdb/bolt11/debug.h @@ -0,0 +1,15 @@ + +#ifndef PROTOVERSE_DEBUG_H +#define PROTOVERSE_DEBUG_H + +#include + +#define unusual(...) fprintf(stderr, "UNUSUAL: " __VA_ARGS__) + +#ifdef DEBUG +#define debug(...) printf(__VA_ARGS__) +#else +#define debug(...) +#endif + +#endif /* PROTOVERSE_DEBUG_H */ diff --git a/nostrdb/bolt11/error.c b/nostrdb/bolt11/error.c new file mode 100644 index 000000000..5f26a2b8b --- /dev/null +++ b/nostrdb/bolt11/error.c @@ -0,0 +1,34 @@ + +#include "error.h" + +#include +#include + +int note_error_(struct errors *errs_, struct cursor *p, const char *fmt, ...) +{ + static char buf[512]; + struct error err; + struct cursor *errs; + va_list ap; + + errs = &errs_->cur; + + if (errs_->enabled == 0) + return 0; + + va_start(ap, fmt); + vsprintf(buf, fmt, ap); + va_end(ap); + + err.msg = buf; + err.pos = p ? (int)(p->p - p->start) : 0; + + if (!cursor_push_error(errs, &err)) { + fprintf(stderr, "arena OOM when recording error, "); + fprintf(stderr, "errs->p at %ld, remaining %ld, strlen %ld\n", + errs->p - errs->start, errs->end - errs->p, strlen(buf)); + } + + return 0; +} + diff --git a/nostrdb/bolt11/error.h b/nostrdb/bolt11/error.h new file mode 100644 index 000000000..48a629965 --- /dev/null +++ b/nostrdb/bolt11/error.h @@ -0,0 +1,33 @@ + +#ifndef PROTOVERSE_ERROR_H +#define PROTOVERSE_ERROR_H + +#include "cursor.h" + +struct error { + int pos; + const char *msg; +}; + +struct errors { + struct cursor cur; + int enabled; +}; + +#define note_error(errs, p, fmt, ...) note_error_(errs, p, "%s: " fmt, __FUNCTION__, ##__VA_ARGS__) + +static inline int cursor_push_error(struct cursor *cur, struct error *err) +{ + return cursor_push_int(cur, err->pos) && + cursor_push_c_str(cur, err->msg); +} + +static inline int cursor_pull_error(struct cursor *cur, struct error *err) +{ + return cursor_pull_int(cur, &err->pos) && + cursor_pull_c_str(cur, &err->msg); +} + +int note_error_(struct errors *errs, struct cursor *p, const char *fmt, ...); + +#endif /* PROTOVERSE_ERROR_H */ diff --git a/nostrdb/bolt11/hash_u5.c b/nostrdb/bolt11/hash_u5.c new file mode 100644 index 000000000..737ec03f2 --- /dev/null +++ b/nostrdb/bolt11/hash_u5.c @@ -0,0 +1,48 @@ +#include "../config.h" +#include "../endian.h" +#include "hash_u5.h" +#include + +void hash_u5_init(struct hash_u5 *hu5, const char *hrp) +{ + hu5->buf = 0; + hu5->num_bits = 0; + sha256_init(&hu5->hash); + sha256_update(&hu5->hash, hrp, strlen(hrp)); +} + +void hash_u5(struct hash_u5 *hu5, const u8 *u5, size_t len) +{ + size_t bits = len * 5; + + while (bits) { + size_t n = 5; + + if (bits < n) + n = bits; + + hu5->buf <<= n; + hu5->buf |= (*u5 >> (5-n)); + bits -= n; + hu5->num_bits += n; + + if (n == 5) + u5++; + + if (hu5->num_bits >= 32) { + be32 be32 = cpu_to_be32((u32)(hu5->buf >> (hu5->num_bits-32))); + sha256_update(&hu5->hash, &be32, sizeof(be32)); + hu5->num_bits -= 32; + } + } +} + +void hash_u5_done(struct hash_u5 *hu5, struct sha256 *res) +{ + if (hu5->num_bits) { + be32 be32 = cpu_to_be32((u32)(hu5->buf << (32 - hu5->num_bits))); + + sha256_update(&hu5->hash, &be32, (hu5->num_bits + 7) / 8); + } + sha256_done(&hu5->hash, res); +} diff --git a/nostrdb/bolt11/hash_u5.h b/nostrdb/bolt11/hash_u5.h new file mode 100644 index 000000000..69f4b6f78 --- /dev/null +++ b/nostrdb/bolt11/hash_u5.h @@ -0,0 +1,20 @@ +/* bech32 (thus bolt11) deal in 5-bit values */ +#ifndef LIGHTNING_COMMON_HASH_U5_H +#define LIGHTNING_COMMON_HASH_U5_H +#include "../sha256.h" +#include "short_types.h" + +/* Type to annotate a 5 bit value. */ +typedef unsigned char u5; + +struct hash_u5 { + u64 buf; + unsigned int num_bits; + struct sha256_ctx hash; +}; + +void hash_u5_init(struct hash_u5 *hu5, const char *hrp); +void hash_u5(struct hash_u5 *hu5, const u5 *u5, size_t len); +void hash_u5_done(struct hash_u5 *hu5, struct sha256 *res); + +#endif /* LIGHTNING_COMMON_HASH_U5_H */ diff --git a/nostrdb/bolt11/libnostrdb.a b/nostrdb/bolt11/libnostrdb.a new file mode 100644 index 0000000000000000000000000000000000000000..32e2bc1c6cdf47cffe68364f05162e9af763283e GIT binary patch literal 172632 zcmce<3wTu3x$r*|2ACkagAEv4s;N$E;x$pM8Ht*a3G9K1qJVM~6&j6LFHo2PS`-2^ zgW25<(o^l}y|%SI{!cI3(~5|SNst7rS}uxs1+m3!;ssH;spR{;YwbNV3DNfZpYwb? z51GB!^p(TXPs59{#EIpf@hub^--f#+PUX_ zeN>Hlnm%N4eSB<@-|zGO`F$7q@^4O7$5?7e^ z;-G2I3$E(npJ^Xw+Q*pTr{{!LNuy?X)0{7w_LY>l#4SNyu)38DJtkPa+1&qrcuZO1a?|>o@!-Nz(|S5??TT3I%*Gybz-U$29#fhc zQ|33b3(Zuk|3{JipIVbjbu-p``Zx7dPz~eiYa-Jk*8pvlJ_<6cTiu)jgaC|ry=e!& zS|I>g(NGPe%}x$!2s5pTW2#%bBY6ax_U)md6eu^diBQR-gQ%u^myAqn@=O<&+e0P6 zj@k2O(a&Rx?1*VLCoqog8?Rct~{IB3*<*- zga63nDW>)5B-2=PLi!aW{Rmm0SLLo22asp{buS=Sz?}P2koIhYKaf;i5Y7~ zmZo1xzG*f-ojP<};_B>W{#D0Osd7E9s=8@h+HU%vt?sefncF!LGusd}JL@R}B%RTU z1L`65#sRbP*=%V=YUhE}q2Qcj`K@lXI#R7c)2giwZ=CaiU|Q(qfk5)hnaznk9kj8p zy(sZkb!(Fq9e%j`_391I?a-jxcxQC@C(?FzN5SL>z4f8r$ds7%QDkyFdt><&p{Ka@ zR*s(R31yiL$rH`&%_d0D1P>i~B%rbr@5UR)jI`&LKy;8^#CUK|-0CzN_nDP@V*B^3 zhG~4^jbI_X-neAFIp7@Q!GqSbX5))-kB}PYx#@M&KJ2NG9}))J2JT;oAe7~=t1mf5aqq-u&laOw*U>!Hm%OMwVScT zt@l;xnCvZQ_)Tk9XCNe4ySO7zp{O@#k1?%VLM6f?`xn+&lT5R5vze{kY_`1>Fb6EG zGgFM4JNbz_i1M*1bnM2wXqL)kI= zYXkG%Z2q`B@w%~cZS%+1C5B(nOwIXE>cQK-eSxWgWSdk={fcTa`?_E}+-;;|=9}3hNKj^G2H|}Y#3%-~bWm?8VOskOz75RLs{0)?kXB+*hrK!9KG|oII zQ1MIDSh*+NYFNJ~2io7cqxn#)k^ZCmwx{{f4kKMcTatI6`OqFC^F`hw%y)K-zrh|H zN$naO4|f@<(^QA8#?q5`cp|`9B99K>FM_Kml5+ep|G`3e60zDNOLn$Ou_cF^`AMD@ zY1=g@wd0~laYrnC&`3WG45oE}iSyIJ+@bMs>zu*HN?&bHvOUs#xIAj@d4eLoI^&+s z+F~Pp_;628UAo7}e8fW}yJ%lsbI$-{*;~BTUY9s8vgELIGygV?V5^h*rhU=Az_@^s zX_qQX-raK+;G_;;YApK`2?{?}m+9YTrq=pn;dQ1lW?RhC^RRRQCE}HDS}$i_F)}M@ z8A7V?2q|(MGC;axbcaV)`Fx2-c(}HQhd)NL%cg^UXvA1HUi!^0^X-uLS;n&S_51Yg z@_v@F>{K^@v%D`hmVJ?TXA-qnsG&On9yOgYBTs;MkS;i3R!(GcWR3)F#WF)n=TO;0 zn)5U-B8TmGXsF2c5)l|8w0kzfcmq?=Hq#5;Lh?d7OQWCCby=_eWO^fys$NsOjPB*q zo=jqOtAZ}FWS6hj=X0*3s}=5y$z(Z~kf7n8&69?I%Ib1j6HY@3&*J~Jh}8E?OX~;p z%Lvo1FE{N;L>W|WY)aJ(G?rD9YCKXGXhJNdMJ!R) ztuR8~8j+PC&c3MqhObzF>7qd%-#~37`I-Rw@VO~@5QZYp|W`P_E3ds zr9&+gG=@b(GmT;K(1I?Txr^ELG;v3;UTmXys7~yks*Y&rMxQ;q+@v-YZvo3_f~q>I z$F18#ro7b!c{8mzCKH-Mt3;8?Cje7J=I?Qvj*awpRh8EZW_Do#z*mH{4i|8*1zZop z$pYatAawTih7eYUZ0PP^hR`J_BeM)hv?Xlcqb4_}AdSol8OoBUga!)4TYdH415U^ z5PEbC!iaQ!q(P_v_sU$+f0;h^ln9p8;u>GF-fXgpT$vxZU>Q}!xWrveU& zK{Bm{NreE(w#PvW<7&*TSz?a9v}EqrOzYC1Rn;;v*jXpq($`t1tO-30Qdj981;(4w zz!6}$iQwfFER@8JRWf%TIb?`O1s z%>T4~r?#Ml?<1e|`stY|X5(&GDO`#)yRr@wtjf#=Dv@e)Z0Z;1fp#zV)V!iAj(bz zj7h;fy{0-adEQU{rRKy|UztT#Lcu(qZ=EA~SrzNR6g= zJiIya^;OeO^7)#q!mf(CPp+M2WM->5cgr88${)hM z^+%`8k#>g^456s|uQ`76%KurgM)^Okn$~nA96vdtd`h*y(@1}Zo}Zj{o76eKun*^Y zGFE^V8Ry(9O-mfnzEh*XkIKa9@~6bZFB|C-RQYclSw5I6UqEjPy{>#* zHEr6FwKj_xmA8EaU$TCAF>*!Bdd^+Kz$&S?rxs}OXvnN?jdU_xLC{ts{Ywz9$te9b z9&67u(lY0r<4XC<01)AE7C+_n)f?id(pvP~NL87a8WUEEio%QA*W)9wSY0C7yGMHX zjfFdsSF;!j#!|H*pOLG}fR7aMmzOC71v{ftfrI|>J|OPs|@Ztec1?k{RzTFUT@%p24)t*za^6+~A&8lxc`RBwSv2t_txQe;6qL(4*z(YA9?>xmvOyzp@j9Nbi!l=bKg)oLYkj4+c|pLq$TBX)&&) z)Y?3cq`C&C4iwFQ(!O{o_R1ZTn{0cL(4|~AcpGRiAv1>v$aC$tvXYRA6 z4Pph(5z0lOt#i6BkK1!A;-Y&*q>d?%g}2VR55*%{;=*$x;C6+K6#?5}EM3BDqyvA3 zJ2byjPD*uaq5HB4e+0goi1pXV6%E4D4c5BI9VJ^AIZ&JTYpqvTaZOt-0;c zU?Y8+FpRaWdSCYmnttk97W71{&DM*|GKC_PN}L>(6-Ju?XNK3!eO1{mWxW^-u4_Zy zJv-;kmXg%rp2VwB>-8w@ZcaVd+;(7a^2<&&J%P8nmT&b~ow&r>{gTx)I5FHh5EG@_ zM&r-U-QLae0(lrqwHC$0>*jpF#h*IVlejC^_;EwFwk8&SZ*Frviyj0De#IO!DEFhV zL-l4o4t#ov;h+p3-=88aLrYBY`-KlB--=rMSmbK3a9sdZ^@i>dD;!?*Sb7jTji1f1esl6TGw( zsqSv#(S)-rU(Q}U*xHoZaiEfQ`eGKv(a=;Yn0jMy@=`_VPDDyJZj5I`$Hl~XbQbT` z`xH+`tv4!P>V76BR)~zJl&t!e^PEvK$n1AWq|+YO`O%h>y1(aIeye3I){hC^N8gC? zgJOtGWUj4E)tkTR>x$8m@D+w^9rW{dF!CrJEzT90DQ{gTd!>3c=$m3~w4PRkz2t2Z z`xwPF)b&;06{;bjdV?&M|B{R$Jt<2CFS*?OEd^yX&v``mXvncpG~kXNH(x z?lP`imT{~y{+ITs8{1rM5Jd=Drci9-ah*jaRS8c zugCna#=~#UJ-vEEef2xW$}fmJ%G#LPv3SdlNb$P#=5L>xIyf?MbgFG|Ec|Nnb;Vzb zhx_qI#r*Ha!ynCsYU`_ex`)9`0vBeeRDL(H-dH(>xmuTRzmxWd(0=l@?%#=A1dv}> zZ=mkcsvq5HVui8t90k@M1y*rqU3%ZQkCJMyJKti!E9lfn-N+MlH+LVsLicB+CzE8X zOzJ+}%I#A57^(b{qD@6Vjemj251jXk~TIN%T zTRX!jMS{Ze~l5iidX^so#@Q4fuFW zhX@x(t>;p^7H`>AyuUuZ;oBzyu90q`j2hYV$!*R;>Bz%x%-_`z-eaViNUX2kj7<8X z#-CKXOjm0_9i;1}fUy!gsWsO{q6C$iASm`KJQvvz}`7+$@6Y_BW zf20XqG$LivKjIyKc9pd^wR7>7oy9LQaSL9Egb&_+l<^DU8fQKwlvl~Qm8Sw0L7!nR zSue&!rD+q@o*J-A#D+P5XXQhLxsj3$KsZwEki@LL_3T(!TlK8Et0eO=SWp<=XDXK> z6%fJLzsAbaW7F6lYe;B5biQ%--XeJjE=s0$7dIcOo`0*ca&xS)bVc0X-m`NB&WyxY z%*Kg9(MDxV`oG7rL%(kiOC9nj#-t8mtL(?~)_aQ)`zr}Z0Rp6OXe8?2_Ag@0x(5yN7P|lRIq>Cyvv$YpX1_UfUmns6@ml-7f(1%aN#pwxn3PvQa!n5nK(Mv(04{(;Vq8NYtsSh@^YQoGBW z4_#~Ac`Hq_0cLqaSt|C3RV4s2MLo_{{ApUDz!0F)YL%uDW2D6{EI`g~l(*kl)UB;NPAd$X?N7SCJ<6MIKVNPT*r zksiT(M6LHzZ){IFk>-N~=N%JCy<3GVyV$t%YtkEnlFE_r3&}OK5VdwIKZc?|>xD?_ zAKU5c8Y8oWvhFw)N*@G@s69Opw|3TtKQU6jU|eD_F$I2WVqikH^!|oy==(yB5e)eN z79Z22+(Qv|zJicgM8sZ1oQq7ik^U=FC-V|XMZZ7P?>sKdrua5H{x^cUJ8vfi%TeRP z7Yr5|nPQS+nb(a>vwC>fNMFf=0zyGKhc^x78w$#gfw~@b>u)k<$x6j{X*P5}|9>5| zW(Kg%qoF|5o*9g!KJ7`I*wFaVrP)y{`Tyrg>O#Mf{uq56NsS%qua|wg=0gkB$m}ZP z-gX#KtkHIV#3~J0X3+VRvM#*(7l2KT4?kq{p*!G?h;i>z z5jNXo&2cvcVFsl)Tux4XTk*-a;ghJ@c$r`=`DQfy6(jQvDGdKGO*}c1_yfP%mkpJc zj*_H0DWT@(IY&xMyQ=Cbyg>KDu-^&_^ziNV;~F?w@jut{s$k@ z#kMXB$`p4-)XaAJMT$kO839Xyml%?tP`e7PbU?vCXX18$`D40PGC{LrDbzAPU|$}r zd^&Y|=o5e9%+w*~_|FuJG}jKf$;dpQ9&aDwzuvf~4Zjcs^ojF*6199kRA*!|ylF|W z6_#@*s?4-ZwNEFL+T(;thU$gd|1CFOvs0FkI19vs(IfE>SYm4LR5>1St1X(&vi}9j zC})Z+j>3~l=3Lg{^T+IoC75%{6?ML>Laf80p2q~mus$?6d2)BninTHb?}GvGgw0kDgWLMAG$2BuNHH z(Dd_p^M{~S7|YG!X6HQWs!^P&TE}@fAsDk~&ot3oW;XH_@eP`z$CMbUqgBbRi95wx zU<`}+m9xMY78|Aj##P|lB$&!hWKlHj*dEi4q#_I*(;QPe)PDKxpB6bS!rQy zv<#9&jCcq}#>I2ERa@a$S$G*F@#0`_YwI|ytpvIZE2}m6603NZ{-o;rVsyXKJyhg} zvJzWm_y5R-J`l4_+rQ!lQ2Z(N|1<^T`JGAKM6n`WwD69QNaayl! zXxz}y_=?&1PJ=Z**kD~%60^QpCQZJ9rO7TaGWFtM^Fe>2y!l{J@|l=*aRsR-Nr@*V zOHF9^O8O0VxO@d(%WE7rg2+qlW|L{ zQHcwTg;4sBLX6o5q*Oe69|jfpU)K=+$DD<@>ioXyeX?qzj1RpNU{kEI#27X}wv{Rx ztam9gfFd3-H^q$Go{C#@D^w4|#*{ULKT6Iu!>1)L?Ht2CytmC|-CSpOj*-1nv4BfF zi!8ri6VE;*EmM8Y(3tg9_kXzKjalz@|Bf&bR-Z>p?bQ>|-Tf?&y==4pZ0K!p=QstB z**Q+b0f9kqtVzd}uU(;*zV=0CrYA8_4W2j(B9bsj)Xr<_tpmV6Ti(pdkFygNv^fJl zFn@P7HbgXNAHTZ zsjbH9R+Vnr=erw(s?YB4svkZ7YF-v=V0vLox2yO2o;R(%#Q8m|sK1}>ikS6}xb?1! zj>HKKR@bBD0E``7u$rfJwfL01aM?U4Req!7Q4D#iYZj;$de49AZBsOe(jMlL&J{F! z#3V64Sln#-cQ8%DOk(r~#V=jfbrdF3pJ>N{^k{155c1I4=j~}C!zD~2_4agnE8_q7 zl3ra+6?$NYTqYNu$Ehnw*Cb&NHYz2Ha8{#|kOVvNkSbDA0XQCFPE~Hf+-w^e@fiTj zbT1^2P`4bPiJO&>&T`q)DY4c)I*hV$Yp;jrN5wdWaR;i9Pwj`z=R$M!Dx%J`*@(M1 zXr6PFc@Bm_@%rQ$raiudv@-J?Y?E`wlu2S4GMpGv9Uo*2D-C(_Do?4-MGUs@1Sx&e zU_Gmx-YfuAFlby9-`iEaa92^?+5ohJV|rsNrote-=s_}WY{X9_^ z{|?lk?2%Y|FSZl+d1RVY+eT#%4B!ESo+`?7_yzf`$dlFxa9fqrA&TBn5ihGjc#7co zK}^Askqo)cwiWZe<5=u$n!aN$VBKDcn|}xeYtTYfrfJf1^E@ zW9xdg1$7W(Crm2aZ7Rf^`NDhTN#>jcw`b=_>I|2XWUtE_paivyq##P#U?g=Sn$g41 zksf>ju9SZv?=S9uXIJ)55EG)Zw7svi50KS(M3LDBZiomL)1~`xmXZX7H6-m!n7+IGW(2-_>(=Z znkwKN$yH+CC>O=*(G=)UpFvf<*uluCg;P#NxO?spnQF&+Nr%+vAe?+;jXmNU3g=kRc=DBa-Ri{BdbIOMjv`9us@ja-u8zabZ}V= zd47XEw_Ju*z1f?C)AFOl!M+r`OK=y=%fBli*b*Vwy4*O<`;2iw&+Ucf2oU{@`RV?# z>fgoV|Cs;0AUyPvmgN64{zJaNu?6QRP&^_Hlpw$yk>e&xDq|^>GerV}m0k_Zbi z@U##s&?F+nYP1mRHGxFNvXEK~t1tNUX%l=}~z;4b!l zij%7!aijQmafzUNumiO02NYWWN?xn;K%c0y1bqlc$i~Hv>}I0K-xOO9t88XjOhU7j zSX41?xoGIwiUT#0VpeG=*{Cs;og+jQljBE*`87OdPbndhge$Pg z#$uCgO#DPiENQTS5YHAu%pp|PGu^LwLU&F7SWuYq^u5ckM;K>09#PC8TmrM?cx0$* z10htEV^YwelqBQo1)v-ys>;(d@M+|D^SVmrp_%`tHFz!iediU<2=DU)g$cx0h-0E7 za)me!#CiFtKEE}|T=Mp|VrgY^Xlem-q(kdTt#0jH>MN6;aDApj56RMve=0C~I#{Z1 zO@%R@hQCgLKSo$KkO`8_>`XSZ1051gBie3X7Le%PACj}GnLmUkUD9r?mEdEzO3b); z_VG{^ZQC>TrnGW|m?Z9?IDtGd|5J4GZyO|<=l+nWS)($oGP_1Si=X&$1sP#P#e~=X zoQ9fKNLaI(y(jblg>x$^BU36<3zyF%Sux$zsQrM9Fv{7J<(E;_%%(%F=tS$Mp%y6v zNPO4&5bb_D@62@|*oj=plX;+ne@1x&lxtVA7%cr3~%M z6iRziwu}EPLyXL`{31IiyMu~ZuYk@njGX1K&{ad@I+Nh)sS?^fyTSToLN-tbbxGy? zusF9D&z26TekCINzT!<+F%GiX^_Gl~=BJwW+%mIqg$$j2faO^=^3u!kb(NWII|HV_ zy?dC_W2shl>NXPmE+xWM$#?a7He4Gr(&v$82SV6UoGzr%94>#aaA(}TRh*aZz|{y{ zR=h`1S5CYUBPM8E@{~}bx6UBsQifWFZ%>$|I6Rk7vw;DDe_E)-E)CUNr{d1&ZLa5c$8keQwEN6BELaw0Mr1Z6 zE`5mnxx55|DU)TRnf+-V)}@K>lUJj7$>6!{g+kM&_G5iVUlgz_A*&tX92=`CXwV z->qz9E~2R9Er_VSbJ3yYo?HW90jWMa-5<9#1eat-;cnhPw^CfCpGpWouNaQv4njCC z^8C_7c_d%=tj)7&sXy!3og(M!*m|0t%|}&0is+8)s$(ei`s0KvKt)* zZxfB>Ln)z<8U^JO1;=#+i|IO4G~;%V5Hi0#YKgI?-WT4JIF{Fl-&ixnKe}{@k$FaN z9DbqR+EQ;^@)}Ns##bbm6%wCF#1BdS_EwO8WJ>89?h!k%kkixJoVhn=2 zA!<7z5t=@SphMN*>Qia8zlmeA($b^HWKKfu;j!PK=<%L*O^o-nrrQ&*MpA$GC%5*Y z$vim{F6Cq)0A)|%1W;=Wul>0F7p1Y{+50tXxQu7ocPUlXVC_)s2OlEfYZytSXDf>R zM45uVf^hK$XWt>|sLq4ilPEE(8_|CES0y*InZG$H?#K=(TJ+Z}BPl&u+*FS>^GEpe zhx|H^9Y7z3L7S0Uhs+QO#zJyhXnOTN0@aL_U$S1-VJllXQEWX#;~<-$7Rtt0kb?Av z@CV7Qjs*4eb$9mhbb_gI)K>)O`ZLw~oHM&?MD&R*L9C|r>65&uQ*MQ}1mx%%rm~e| z)w9?R5FNZdX5SJDTB#f=2(Avwrj1@%=Ni3Hv=FR>z!-5i}t4sTVeyQrY)E(j(GdqQ9cB|og z!!GN$VoX&;eF}tqYE&Fi!|IfII8N2UtD%Q^^^<*udHU)=9}soD?I6&ed%9O|?Tdx= z6s%U8v_DCPYh6A2N#8B67I8Lwc4w*?3XwNGB5TY7<(7%7f~ghcd66AL8jmUE)|nDs zl1j#~)O|dux+;HL!5iT-*~eN)zz+4#D4@gJQDs8TVqLF`7$Z;|)|e_eoLFWI8-vSp z%*$h>LW>lquy}?=|fX1w4&C(7Xrw`+iWaw%` zFJ_GmR_}{t7gfY$)k{r6TP`VchfVrK_YqH4oY?T}@NZq78*if7w7*QNzSWid=`Em- zQuR#xsMV+R$x|6(i{d{UjT=EbnUupxWr0wps^0rDeFRnaBRMOebiO`SaNXXZK0-* zNRkj*bx{UvA@qobDq+4L+gsQx+Rkp7l+3Dt(R3V1%2*GM17YD zhfDqmxWj2C=ej9qKu+{&zRw?Obg&TrS$pgLg)+ZXWi*+b(`RrVnK)4jxdfx(=rufc za5d3PDQN4=&uXhBkE_*3THu;4oh_I*1uj7M8j3#q4@d=Z@4rV+?61eHPcp5Gt|3Mo zIoP-^#yVr7nH||`w!ImM4VWe;a2E!QRWfI$R;L@^xrK_9MiMEGQz^c+^Qg_S1INSgxZMuh#->>i87p zG{@iMwe*ZDmsE(ey1_>IS@ES4*QoFC>Y*o9tL4iU{-4X>(ne1oC4ig8G&SKHP zYFw*E(|Q@x&I^9w=ou%)v|*6*{0gGV^0*|HsaL?a>uX-2u8mO0)$)g1YNYGjdcs_C zNR}h>2dkKkI?m_DEKU*!Mu=j6F4p$Wz{q4=XB(oGy9JvZO%jiEr0wk!BmUU>3TsPj$*|dkMVM3OO%Z@zCdg1-PR^m z(b{@x4K4{BrvV#NGH0>dP-317ivV7hYWjteMQ#}a(FrkrL#_zTsW)eb;E zyAmp9!Xpo;*=4L==x;%hwS|p<*Zquh;7eSris{gC%yt^9HL*>VB(u_QpCK z+H6cPVW_+#kC(a~Ok$nBizqJQx>Sm+1N#~@N#SzWn1O$Qnr(0E4MhjuS|`EvSe*2J z-6Q|*$5nHpf8}bVrgFu|0HpinP~p52;@Ns;RI#grYzDovbkS;!jwkg>A%LSpNZ18E`I-VolActUNFKP8d(MVx>sDn1x#iHA7& z#EHh`4V61$#jVL7T@A#Z@bdKgxaoxsXs`#D7RZEPb?YkerPa0E9tza8BtiqZKPof` zZpKRNwfiP}MrAG^=i;N}{O{i+2v409L^J4<^h)@cy*fg7NyNl}h*gonX#O=uxcFGo zf5JLQeOhFsuT~Fr$sv){8-&oy9)E+luuT7J%thSV6FZHF6!$>=VD}`u8Sb8QoO35t z-SHwP<@%zfq{tB_Zl-BIG%eX>hP&o8iVCQSF{(OKPDB!S$1NG}5CF{)y~;fiR>Wp@ z9O1p3+5I~c)iIdkgNT2>61sv7(FCPmtsu|HR8Sj?n4U0Jck$qweSPkQh)dO#S-DqT z4;45rHaZ%rGg8Z`X@(CcO2rMMSHvPWgRud0BfBXzz-+7>pGF^MRnlH#A@3dwokxQ6<=Ga^ZL6;6~pmx07SlDoY#J>JFgbfiB9rKb{g4W@W1z<7}W=ZU&=ePO=MPIIHSt zFgm+mRqVxr)%leIY@2f@zpnUD~8Lp`FTIK^Rt^lm8yU6gR6ifP()xa8p|vvR%J)>VW7y8L^p085itGyHmzh425DtT3zI7{AyID8g97~E+& zd&kI}4^X06dKqZ>`?;FrtWZZ}fWNy#^HZPdA1febLjW1Y=`UJ(;0kuNn zKgtPiDx@o}LE1<-)ri`vL{N^Ry$cCKRx!wGy&@|ziXkm_$;e?>Nl_J~RL5y)NbBiH z%S1x0T9bbldgsRjbMFo)}uCC`+Ys!*Xe1(mUI;iV?-aLP;v1T4rc89jV zRdvhnY*YoB86q;7Xm^I$;_u)h1VM=N-{iUkQU~fUosL7;`kt(2%_VL3@Z;Lz%{-Dn zPNEr!z^~KC^^IZXsDgOig8TsGE+K~7EbWzlrCa~vsGC22G7ndj8^bQYo`-9zjA2(L za`9@?p7oIIL+Lmvc{i{&H#+QvSRMBoFcbMwDw4i zD=$L7_l?&TA3g!V%KkQn4PHAbqKm6wtKQ+7Xlik!20VHsJQp&}X(U1iQxYBH>HRU~ z%G0B-oT->Qf-7h2F*7-nQqILzKCRQbA7?*%m5cml#-QUrCi9>YaSej11eg6t?0zfdN5UL1opCP4prX9j%LcmKQZ{y0WDw-@EB@Xnstl_g-iS(@%8FOD!M zWS3t>z<>zvB(;uwF*2vXaO(E4e7sriRvT@mN!*)S#q^B_i&(7)j?51FS5$5`B0Wrh zhsn;+nQBYLJx;+{9yySzHd1=NeU5CR9D_d}>mvD@HxFtVZ@q-O*7Z?%i}>!8$el*c zdG49JO`X++Y1Ju*sP(thTZ^~66)8R>XMVpR?XGm&eWm;NVu!{W51HHp%WmAy6hKtH zNUkufXEBs|b8%$LoAt#n)pI)IVzt?jL};l74kur5C@9F63qrfk1V$pKkmltiawxlD4sV9JlseuHs|31%h~mwb~i*WNtTM z>Q&AxPZAW+L-x*}G7UL?G**rsK>TK{KQY1{Vc#tao+Uf!2+M7h9AxViej$2TuIEhr zpvYU#TYF7=KAdooUUni+$Mp)(;62of9<$@3h41#AiuH5$mwl&_4Y_ygk>2lW{MkoD zj46%+wcul8ZaiW??=LvSBG-T{d3%*mo;4~|pcT_9YQgpY#O$-YwTYZ_m;G41@a27Xr%wat19rQIP;iyqE(dBLZgM@*ms4R zy;kI28#(K(8dso-qe=`30onPG2ai9@)WJc<@+Rb9lr6mkSB4nr3Sto0*Bd*iwtUgi z5{5dx_Ix8VjxyjTL1j)|&KtyaDBd+aC0x^^$}K+LNdE!|)r*49b@s8hAO0Xw+LjV0!$nM6#lObkwpg8HG*Lex5(!%;Qq)gH`i>+${^nteFchieVuW-}-q*v+mK_u6Z91A~XEH!}3Tz%X1*Ue4dI^%k^ zE|udTCfkm4Zn*8X8Q*{kn!vx@sx?V0cQSm51+S55F%nSTb z3w3-`RYS%+Dk{l&48J&Xg!64*hvswgo%OO@j+=kq?8wp4{Cle-m+9u;H#>5IKmXq9 z?A3!v(+iL^FA6|)>kVPiXdzBHYp59wz@0BZwR+v~Bu}HNX5Vz1x-3umGcn40&aH-| z6@~m4<4}a~b)oVcAtZkzM6l==tUD4S?Yg0Fp--9qVpoVIm;EbKKML{pxdQBu&_=%k zOoGPynR*5YRB?go8nCV>{wR=>7h!Vx)~O>iW)Cur_0DUu1{Hke0G8VyCactD!K?XX z&-HVXiN>2|D?I(iL&~`db$RYkD;dQdOX(ud9e<&J4?TGqFV~Ufdd$xIOzt?$bbc<1 z)_}u)QRJtGeozz@1c4`(y+*o*5D<+d5wCe9buoPBOJs`OvwBueY!Eg0Gd2F}zCGiX z*>i6~k{}oU9Wrdla{I4^aC5Y9yAaZMH`H>%O$6652q=+kV~<8WA=#8P8%iRQO-Z?< zNJp}%^dY1p*;INlmF5M>tTNknA=ma$MiHkEQs^kQ}_pkC9$Dqt+%!jng< zkMJzL4~13bKeRsR$MYcT1G)ZQNyj}o>8Lg3PoNn!Y)?~qLPj*Dk$#(Or7bf%0kt8! zNVjr8wE~ptqQQsu(MkF_Sj5%2eQYh~ZVDjs;7@7{MZRr^u=IS%>^Wnha-Cm5403~x zPf@~G+PO&8Nbm5N_UlTx<(c+HVF1On&+?Qv%q|t+U740=+CNgJfFM4TX=~JY0Ixu4 zNYG`@Fq?`M^JFpCR3{i(E^Va95K1EPQ|&N&EKH0AJRK6&e`n-YyPZkVIw z);eVY_-@dmtg2Np$u_DeeqH_?PpHX+40^Ea(B6QF(@UTKi4p~a=io^H+%Wy0al@ZK zYw(u}G@!{Hzo)hE+>5}HeYTd5yrBbK!O&}pfUd%8iD%+L6b^Sh zw(~PP%BrX&wWFvQMe<#bj1|DjKeUF{^Rt@%v0ED_rq8*W;)?GvV{>#(GiPYlz9Dhb z+;7}4-=%9G@=Vk9KB^Vcb>>gZ0M>ctH8NOSp|twPb@rd}@JuG7FRs<-TV!CLOU7+` zDWQx~)KPxGnQuYC&i!PH-1S7Ox?{CKkT9Rl!(fKhzVog3rEFRzKrC~V-5@%b$dCW#ccRbciLgo<$2*}SH zAiSKdfSM-KEOn6B@5_0TDPcx3KZabK$BcHUrT*Sop&futX;(+4^CD4wVT%Zh%k0uh)nMb3>p zXnUr&rTPcqoj!!(_9yK=4A|m?ajt?i3(|k)rJqR0lCGUbG9s8&Z8PUQM$U$J#J*Z2 z?cLzjd(wqRgwaHu7!6d(W>g&Q%}l}3@JW9HOZc(r<%n0 zLqEl=R=G~I3<)Efb^0)*T#i|Wx`IHB%&|hlvRZ#xn{=$!u_C+0y1_TIokS6ZB8MBS z-8_!s33`C&S@d%t^lTr0&hg3NmI~FC1Vok-7vf%X&&A$y%%Tn-BKlEI&tN@s#nl~R zevcB+1sb{Nm@`eBNa5yi*X0)J;m}KXZIbK6KQ#%QFUPm&Jjk6jOw7^F-I|^UI@e+n z_7dL}2tt8b0Hx?)Ck#>GUHC0Tgj3;n^0V1_NWTgB^0r#PT>u?XVu}UDTbY0_3Q80^4`{j-;e85uSpG%M`rTZJC>H?D(el|N(^xIYX?K*xS>yon->ELgp zVdr(w=dK(6w^yCcQsfl7U5{}stbBj#ul#P||1UJ?Rq(n3{d^vD(v^%}CC%Ugf74{y z3z{k$)8B{itajNJYu^8IgflteHe=~S=m@ctCOYex6WzoC5whZ$C}Q??Qab`rB|XD~ zEM3@Y=OX!6632)i7XtwA>rSX&ToIfnqDOTNyF~uuUp4N9tVLQ+HdfvqI)~_#QT{sL z?V+>9F_1Y?tXH8)IRI3_p^yfyUrrYTzTzdHOebai$&!7D`69GAbSvD#)+L;&V)IrD zQ>_7jyogW#QC6k&cXnM%jnhIMGdq@b;mdqVhbS-qq7pTJUaTr`L}a8k3xiO+i}kD0vro`!s=TrF&~xn#t~jXVfpks zP$>J%kmVPZ)zja2Oh|#NNRI^WEFqSDQBWi5E&b&qtDH!NCV(G!taM+Fm4xgSO?2^q zPg|JqOb~#ho7fE=`tPh+bY}V+M|O6j7-{{&R|;tw>G+XVKK@KB6pLz4pMGSOJq!sB z4&1;^f?!`sU9`nO=RqMuRG}zaJ?5J{!7!JHUek2p=TFlpgq@zIMxJs^s5TdbQ@#sT zFyl{o*jjnUBCsZpJ@X)+S$Uz*Qv{&Tp<+io{AzaNA z8fp0~-jNXgoIKso46mVCT`&lW)aSfRQvXf93DS`gAl6&gfG=-dAWNEd3Ml>B533a_ z^z>PbL{W(IJyekfMa2xsn2NYlO(%WdgYFrq-qTNgd|4&{EaJ>hQB8U6zTMfxO?Dc*dpz(4 zLi-wd^1V8p`CneiY>vd$g^2h(4;m~OV>%$rJmtQ{; zcCAO=68Ofo$|;u|S7~j8 z73SG^5)jRPMk4}47ssunC(zYgN0vR0vbp_}m|a&RpPMky)32|#3(ZPR3JtjVMriN>;%LmU#@ALDq7zFdV}_TTD=UAICVWX3sucQdnd06ds$oG+^6!x^~$p>VT* z$=edZ&})~!g#?^Ya@5$nRjC44y<3$`HBA{r+_9v(wYOB3bi}8O;sg?uxd$HGe2i zeL^))KyG_|q4r{mu(q!Q4F%=h8)d|Q=>L}UjIVQS30?IRM#so_Iki7OXgu=0pG%J%B)Nc#Z3!7moJ%Nc^#*HPNqFP! z#eBM2+xf;LgOu6Xwu7^y(LsdBjtlC{wDch%fcNp!sUzg%TXxkOxB|?$w~bQxjSKjR zn-vQ<2{Nv3wZ~O)Qt2Yj!(a@%A3EbE?^xqgTwbxRE;V}a{CayptTC{ROULAcd%o1d zp~RlAg}x%Gr~J|I4ONRbsX6z)PoVPK$tRkwBo@vHm~*#CWJ~Yx@P$$&)h9f>PU+Ed z0xqCqg?mr9Ba|K!4OG#@E#~w1+OZduQR`2>LPU75rYO0k`8$3e->Z^h%1rml*c0#u zZWYf#`c+spbr943OTx46S+@SqkjZIR?jxNf7mzO>%}d12hRqJt3o+i0yuHrL{&D}=3VwZG(LRYAYpOTi`@6ch zXrDZ8AgxD^2gMtAdgo!}5+f+6DQe96GQa9Ug~}8#W;(Q<965>h`%p7aDqc)#oXd-< zae+KY@@z>~^4zE#CE>o)2FTyZ142y^WBRN7nfW{iqt^0p(@Q)&&BKhgCS%T)fII== zoQ(ngY?9ZTHc?^+Z<|S))zxIoc(cj4shgZb?Ie6C4=N(MOpv1^X{1YWcu@BFc7cu|a)vZz67Afd{DdkbN%~^r$S9f%-kr$&v2zUnrVP^DYkyLb4!R0uR^lM*&kg)_zG_^5MFxnEI+6U2B0U@_r#0FRWBF1tIC`OCN4IOhtgW?0$zO?8Tp^;qNx#!_WSVjQa@8Sfiui+%{8?*5(DhpU94 zocCFw>USZTKanI#=_Vw4maaoHsU5j!#P6M*}~`K>IN1=%M0lutKv z`BeCgIlt=gU1L1*eX%G-a#Zlm6~46kB@VLjt%db-Qw`w{69a`r^qg{!zJ$WaSEHn@ z*>d|b*9O~(!3;1l@BsD+%Ra&eh1vJSDm(ofHM8?oI{GhU_`pRjzrW}FT|mNp-$Ucl0*hVlwUMh)*I`boeLESZYCjvm@3N?kAZ%nB>U=KXLwpWF{p# z;&79cJM5ewt>e07Ph_W}dUXPalV38dYjnSS1tTT*O|V}LKl)BLvwyw^lqhC|!d*dm zd#D^^uxss|ni(WyO=DC(g)*9Z!Hm?UlBO31;7{7R#ypMdvW54~kvs{SUl{NX=_>oz zIf)EFo;+AUo;>idx;a4gS-5`C_BhtIzKX~_EX;~?eii0m4W~8W6@4o5^yAFaZZ6YM z+heAaU2dK>smxj-izt~h`S!weXhQc_oS?g zdYLgTBw+V9X71xbZdA$!np3rR`V&X73Y&u@Rr^cUKKtSODZqh;@CSGNL&PW7;Uz*9 zktd#g=9y<2thZRtmQjEv0wL`2wQ@-@O`*N+G#euU`?6qVdtzMpbz^ytr~&^04q>n( zcwn}X-YN~tk+`EptREV{-W3nz-E3s8g6&e_K=Nq5DwYf`sk!;4+pbRxlV(=YjA=h1 z1M0q;4s~wL4C`y%ybP8 z9KSC~0h7MNNW0mqHRDT8C45=Q2JvJ}j+P?7JrW&WLqB{hi|H_qj|_dL6Z z=6;|%BlZNrD`kybLKJA`bEVA@dz`GUGJ}Kw zP>ezLjY_SJ8Z5oe0M$S{368!^-xqv29v7%15}kNq9CAx<+QZTmxaP5Z)lM)>w zQi1k;LK;2NF_nuyTHQG3h8c+)uD{Ly#&N?3Pf!) z7^&RE`L39MLp;2}NcCWw@Yzo8xez~UU-`hd24AN@w)9Dn4-tGq*;)j|h5`Zcj0$pI zMJbsYnHD^ctI{$L7YcZ)U1Yi}&&x5oMk=9>y)aTNv~sb8G8B$AjvHG23UAAQ$(yxJ zO2(~^Rjr8CDJS58k1ncYqOt1&=IDl+xec5uuH%1N z>`<#6DSOvJ2Aiwz)*Vh=#Q){~25XaiLV<|fgX(ZEn!61ah-dE#HPdW7{5K>05DA^|1JUmbN{P^sbpvu!9RAdLfH#Cdz`d*DXwHfcWJ^S5vakvnLS4o z*6E=F!YCk~|93R91QdYtTMKBUXwg}PG;)%Vf^8Pk2p@hdGt$ebs^_#43t? z7JYp0{|9{->DOpcXvB6>OdRxCxk=*o)!lUx`I?S1$>Oih$QNImmfSwvcj*Kpa|JK3 zz(7M=D+?+DdQZ(IeryLH`kz7!k2T*W)6aE1lY;idDz`*{60paD+Mva^_%efZ(Yo-& zsF9X$uDiuB^nA_qnJ~DqcEQ8|UkJ4(aoe!EFT2s4Y}ZXS{m*ihgmrVdHKsy;=hcx9 z7v|{qpVNDs;sx}+d&&8l-X%h%`8z`IH}aHHgA|hQHAtx}gS6{#J;)a0TY9(x)1;s^ zMlXkiGsNZGv_ddgf9a%p_6Ku~3Nm^%x*y5!HL8%8Yt1X2u- zh=q$yVEBxztwo=h_RpkI(|$ry2+-`h>Q-4gu+6#XP0V}lU1z^yErE-E$__8rnZ1tZ|$nL z-tI0JyYzrxEr+8qsdy4dA zt3rS;kjCw+Sp%w)(!H&!?u)jSu-&wdF3s${(^X?E&l{Tg4sG1}S+3c*t)5YGX5+@h z@$wmu($o`Dp4y9ZXxK)d*dh5fet*1sl&hrUl;$09eap`xn zl|5b_?pVQYp+e>8TOZI%W>BT4F)Nd*0uU4mn0E!#`P&7hDoIS$0jkh;1#3zXj^Ft; z{ORIluQ5%{r<%W*vHHM8z0ac}&z-TVxTtN$rhAXuGb>`*YwGX~>Dg^;sO3Ws72III z|NV$Pr6%g%Yx22gtCPUvy9|&=;wbwG!Dr>h@B!n}PUFF?#)Eq*J2j0&I8WbrC^q1Z zaS=Tb;vC1s%6!>RO!Yu;KFH(iU%k}xevE68 zFY(cTm`OYAYtV*MN8?)0d5ClVlXL}vPM>1!0dJpYTol@zrn|?5^u1qA4-1iKDA>#3 z+*4pz^k+7NSuEzh_G9vN*LJiv@{QM=9Uv{`zi-2pa?+lmuNBSdJJB7`sJ=#! z%i*{H6Ub2y2cWrL?zAovWT`m~Cp%(ZHO4%<^A4plfSBxk*QhP>U68UHZ^IV(w&wG1 zNN!QNYG>TbqIzvn+=%W~?WsnRkIB5t7rxSq=+eyMeq;SCpTr?}9QDeQfjLqYXa>2c z9{agxLxNE9>4>$N=njQy3P`K+r&oiMdNrs)8f+{(Mzv-#{TmYDxSsIsYIp5QsOHG`00HkjSTEe8tIo1<+7g~I$Z{VBgJQYNL&&wn>g>d{szTe>lux6 zFSzm|8b(ShpB?b90#fKFTjSjgn34;V`zhn~prRa)>>(fDrzPFT`6Z}ci<^kx2c&84 zG04u=o=;(?v*01t+>%w`yc?l;LDprxc%hE^e64C>FltW^My*|4Vu8s!tjMd}@F)lQ z%7qs$36u(nFjbqKLgrwjyMudcp2$`K**U+LFF%uWmk$v zn0@`Y?S7JxkesxHvCG{_?ebx8?kbhLl4(@N%soo2;^v<%UDrvWwFFg?iu-u@1@jmp zNSY{_)4SfC(F-1DK2xFft!OAz;U5lQrF_#fe6WM``pmryRr|%{Q(|TQ0fpMNe!bvt zu=+}EW}?h*c3e5jj%@j!;8UZk7+@~rFK>%@(@Xs7u@KD&eQuU0Ia-il?14&p*q z`nRjprM%fIaMTZo8e`vs_Nv&xOzx^jBWCVEJa($p4Vd7xXA{)=2U%ZD$c`kY_F=Jz zS%t_=`x*}UpwWTA{FB&14ILmb?@so+dUoXfOS&;+DF?Qms)~o-Og zRPVFsJ(j(;?2>F~fPA$fDpSmC{SDDZP?%Ite9<1$#k?nXL0g=BTdRpf8s23qz(riW z4t!8z;X*<*$q@?)*>8lE%xnV}i%n@(RIBXNxOGDd_*Tof+-mNJ*urWuI_sOu84=%Z zj6mIfm+I9$9^b$UCn$oZO!Y9!{aEM|vmP4u-GHyWJ zQaAdl?`WM%nOq^k@g+=Fu9CIiH9^FxC^54SR{@l2F9x@i5e1*xF_^B^&61fbs0uEn zjJqy?3J04iw!uwRh_+{!SPu&{T{m3Kw!C`G&ykjz+1Uz_YDo(#2wGhXt5scAFYc_2 ztQy=tq2mSersr2dDRNYHvMAxx?a2xW7epODDp=`Wg_SH*ZautSKoWeYpy{uGKKX={ zF5zEqq^}fuZNw~YGb`V3N`;H(l^T!4l=?pk@r3+Vh+tVJ`0$p_sVZI z=_9OeuQZlUpr3g5UQ+?42^MhGDD5Ytf}qAy(T1c8RUq5PNdVrJqwG3dQOQ;_o4gNq zglgSVbv*oA$rh_a$g@IC^OPTY1ZPy%Q$>x-R6Eu#g`^#gs%t5D!1 z+Hyl?SDygb{l$-a`u`#>8tBJ7fbCuQ@{TQfkl_eP%qr;N#DCJm%>H|D<$-qzTY*T( zO_h+7H?ew|9JiPNaUW@H#I1X!jK~`+D z>)HOFL*#LYhA0Q0hUjczKG&4{3~Nx2&Mh-lIO9lr&THZe!G5#3uly=hg`FyEa_?drj&o4=S3&2I$9+u zi{$7fJvYzu`H~f@ppV##jk>@d*y@J!gu#RO!t5fQAF|VZ}(7Sikbc6RQj3}=c~1;w`Uf(4mbr; z-Ri9mF_KW?Zd6gYJ4v8@xAG$wq>FMVT=c!_SH!H<3SSJzIu)%+SYvMaj}48S8_HIf zk(PKG?zgZLKSwqbT#8~c6$uGr%V8YxAe48XtnC=Qy%+-W9jYq%O675})VLCVlkq&a zVh!WYT6Xc3zEl?M|6%W40HdtVyz!YyfJk5_wzQ2^>)3`G6fq;HiK1p;0`I^?BNxSj z4IvjM5|WtA0CufLCqdo~W7)0Ux~=W9yY8-EYropAwc1)tKnUUuu@}4&sh0`yg4%M^ z!vFVs&N(x0hNNP5_rKr&`|qn{-uGOd^PJ~-&U2pgoLhS2KM%Ja#<4UK1MBXGXpjng zY@Wb+34GZ-3Mvh;a00$p6zY~D!pY99q!M&9?Bic=_nn+KxK7)3C<+w8fr)*ZDv1xr z`nslpFGNH6IfVOMCb`Hl_@MEMWl~Yc$fIF{!XTXJih>z#RxL@k2o@|E)suh$PPy29 zQUSfIMeVa0=7t^Yfk_y>`y~`QoZiKfswIFZ@Epx;L*kg%cRQW*x{x6)O8N^5Z07t} zEBSxtx2ad+*jV4~kN$t39;QB2OT#_QE$y+kx@A*pT`THuoU(FNb$jF2>iw5q>MwOI z!$P;l=H>0@)t=Yd*3!_}R9}rHE_L;7Q=+cMx^`DhJQi(fYj<%$T)S&|eRF+VW38*b zvAMS16>p9;Ho2M_S2o7*zM{Ehb+c>97hOx1xRxw)EopEq!DpLmNz7GzHp-PUC;Ce# zvEUL{ZM!9h=lv-|nC2pQcl;8j5jqORV0tvOZSh(g>U1 z>h}7Yw%Vwxxo%mtGrqd1rae~OP#k5^eRabAZ`ZX~Dzq+k4R^L|L*xVS?S;x8*2!E`_-xhE7uWVf2CTI8nV0~L# zOPjy0zP5#=_JbDwiFIRLbEls*amv~4XW_#?u_^A?xLu6*%K)vZz24Q(xMpR&tG=oI z+{Qor^2|>Th(JrAak07ngitp_hwOrwd$89+NH^20NH9 z5zFF@O^Wr77$X*$NGGRST4G?8VX7mhp{XXeEZ*RV6zUPRn%Y>qt8S&MuD+=rylks) zg?!=%;W+fj^|hK-{sWpf#Oo2!yt+2)y}h-i8Pti!Vy)E_P{<(CHMKM^Z)j;->1vPF z#NzFWWvo|S4TMEex4Eu!m+hImtxt_Rp*+FGo-I<~Ua zeBra`Wu`5V8L>_pcEpb2Uxx79`VXLh{Sq^|`N(vl~PI3fimBRwg znh4o5rPQwh2_dWUjFeAuw6v`B7sp!aS}yhj!KS8`+RG>DdNT`^|5M69=ox%{$f90A-R5jwfk4b+hhJ^_5OHsBN?kp!7+5wdaGB}x3xoHF7~rE z$JR7gFRNb;YN>`e*{_-%TN)Zcsscx8ifMT z2=-kpbe2M@+g4XYI@@kcH-A>_WAhVH=)3loHl=xvM>S2KKaU60n7^r|WktNziNME} z&jg~os!gjNT02ReiaqP zFi;@3&UEYnhEFy$otB>Ak`944wB-z!d?;KI>fv!14z8cpieIc1XVrxxOi%jMwycEB zHEhw64n;a;Pn0y4E&JOcgWw>VhB9FMP+{?U(OV`Y7GK@nMD4mF|%D)Pw zoO_x4C?JBmkdeB;AFW@b3`Hte)G6Pynw2NeJ$-C`%GZhLH>aMC z4~NI_-P4Hu3CvtS;h0XwFZFTqN%tz*9nnY`H6OHI^b=n_bTM|<${Gv@NV90oDjFCv zdKqGVpe#dpCmbUq!&@B}i&bUv(FU%qg(W0rbu|jCT_L7yV_SV)@r=p->gp@%mQ_%Z zRVu^$hB%`pi$&7XP&`8XB>#CIlVWknb(8$(`U8`M5+{a7mFnT=VVu%dmqv3aF2kqE z#%K6c8Jx8CQ7zP;t?_Z8sSK}l3uZhNjYH#!9K)J48qkk7vRGMWVwNcmFp%j!uIHv* zYj~zb=YM|whXVgYflo+*Ayb3utF(P+9~CLhx7~n2eyv)n z*+XP9>I9j1t;AZjOG}q*Hpd4yy)LTrpfvb zK^@M2C0WlkS&uL4IVt-AJg_$X53unZqN@duzg&J?_v_#OnXcJ0XI|_to_)o_N&dk3 zQ>ISQNar#&{&6+}k=T>q?qQhmcf0ks5u*u+e-{PMc-h!lOhPQBiPRQ$Dn_J;6PK=u4E%7WG>n)z; z^#{F$NHN2kH!DBlEuQHJaJfkPdk6#1kN79#t@5lM>&>gkhey}t>R}k3z5D|x>pg(B zmgOXJJ^wV;TNo6`Ax;kx|NTsd$JA*W-!*X_VT9mXL0l_{YtZ0&_fX8rk#xGw_hX&! z4%RWreCu;9Z}HkuL2pT7^c*03>sW6IAO*dCq)>GY=DSFz4h`da&Tk^-8y=K>N6rkd zKbbqjTfCky){YK(OA}*4-laJcJ!8G42m&x9NdvR;i;?|F4Qm$hLA}>{W_b$}q{R)2 z5J7JqiglGEn#*AM{H3^)Zqq#i!o?Xy;;w0rS|)O@Pm_Lj{tES8;mwe%acz%t#K^Z4Jktli@X#Z(azVCu4_kEkQTGi5Uv=O7HFN+HS0Aj z(L3NHY8&?Y!`?i^G3-7a|3$o$&nPKk;!6?qq>le7<3;`fA(1o3+n@JUZz^xLcYoeh z_zmLQQ|o9E)PZ?2ed}_a!@Pi9i&E?G>eu0~r+F}ySG49_}_IU>U$ zl(SBkvxC2)2j-5{COrF;HgPI|Ih1qix1Ab}u?$F;*L2vAbsdt_G3#^CPPKlU4cTu6 zrxB9Y#lWlxdHr0kfrlqPxIF(#r6NRyMk&zh#8r+cOQ+*4e8fLXzO*ikK*+vxyep`9-JgY<=nEnwR$J4m^Nd0vf*Rt>-Z(q}4D;VGba~r&QO#6`z zS0jIwwm<``W!jr0slYAP;Ub%eBHZaZjAwANOPelqTEVRHEQAIGAItHb z(s9$${0XtIlJ*a{Yezv3B}R)Hfh3g79NJk~`Ghf<4H3_7{>kuI`n%bLfwoQD%bM`bxCeAtCEfv}#4}UXlW{voi1QbLHO}rihm#J zxJoS(Nza_LUeL0((d~I8OV(!PlP{&(355Fw zE8|Pen{v-r6`izv+^5r+woN>GbeQhmL}q@i!*qAxT7q;b9X5xR2X5c+%%*;Y^_iqS zs{1Liv%uF0Ie$Hp&5?7e+k4l9kay#Rx%dqtt;mf<1&pU64L>6{bJFm`%8sMltjblcai|3;`_$mE{mX9jW*OA+4!=rHWWs%OS$u40{I!vn~W&i51F3R9M z+GX=7gBJB2bV_2>Ro<$cFQSnRDP;C>h8gjFQp36h?+$!nL#)l6MOai#*Q(k&`#I*# z-i@myU=aAkBm_72D38H%%6tjA)WUJI`4XRk!B212}5J1aA{`#E#5+?dN54s zwwrW5-91ZN-k`%~5f)m`O{$p-t?tut=TNXkhEa~Tn=>*jcBk|bua6*NOOgGMhIQJ< z>$wnZ%jbqQU#$E!!O0d4EHL_!?4a_!tT;x#g26M=`bzU0Lsl(4Y10PxKBWo;O>D}-4d@!u+hGmRes5`a?SjH^c zvuJC2Y%lhb*g7{Wy_8m+v+|cA#5rI>_a^;ARKvUTs9b(`|y3YjKK(RfrfWdn%5aUEpq6r|9*E)5qXWUtbzLs)}Qe1 z(eSQK^JX}BbCtgV@Xq}+@FoM^A2htNY`8EP)_P`+A07Ti&KBX-^IrY4yx;N37#I;JNeK*}li5z8o7S6igpPSr{r>@ zhPN_J%i-iw%M#l3jA2EoBA@ksOT)UEd^Yu-@r|5?>58|xS#dTpwv*HJpu?%(N_3c0 z=ZAFImq{Nyq{AW|#&eF9ObO32ei4g)5li_+Hjb#v)9w9U4X;3#!Kyr>!*=35{Y+_( zV#O0yQo5$d>dPszLUYQp_IB5lwibS1sbO1SN?_<`srhtChAD0JO;eh%PNm85-PU4) zG@#n{Sl~jFaSFZwh11VmP&nY4ngj4X9kdE&XviNM6Wa=R=jq{HEVFaT|3$>1#|NezWs)-!|10Hp@Obco3VTZ^uszuOM1JVZ9=tKqAIia=tx(QMA@}wQ z9PZoOGbY&k_~?qj^A$*H9}c>E>_Z3{U*Y!jZuc-h0(*PMs<$%_22Xk~c;>UglMVww z2#MX?AlE5am~+s=_8%5ggfnD9JbGxf?+QB15>+l`w zzNMi1nmimP`2fCnJOY2auPnrltt)X;_5*VAL(qO6-=FKgz@ z`~-36KnU*-F=%~J4}N^l*moB_!tY0li03uYyUzRT8CLR{S7fBUf6S5Cp#ofc$ z*=D79Z3~VfFUk#d-zRB8IC$bUrcFHN_w5McL^vG$$wEUoTp@yURYLaff>%}8hogTJ zy6A=okl%?&b&zURg`L8QJ`0Mf?Ds?Vfe_xxQ#=Bt0wv_304BxhPu+JH_2Z32SV>j6 zAj?WIN0nv2XYUEli$3#V&(C;->5~E<=jpT90iO98D_Vqo=;f(H*wg2Rg=V>AmviG3YSEIVo#hb4#JBA~P7E&OKL*PUQlBVVf zq^6>371Sj06maZEKrRxU9K9DAr)NMgg6YDlF>Rz1q6u|ja z-KtV=VoP-p8ySn!bt6r1tWZCTQdL6}!TB4g(=~QqbW>NL2mp$uT8s2auc?g!WLB^G26Y3!V%KeI1GrLEr{dJ71rF|ZP1lKHgE~oz9>T7h>^{Y^ zS|zB~Mr27njstWnz^u|Vv-%0??zG?peNP1ElUsWzymuoq`fsCO`Ys?@Qn`%?VdY9w zHw!2nm7Hdn5~2svLd1&h2+k9Jp?d0E+-U5*@Ad**m8x8M>O#O_n|c6{L%8t(d_6!> zq-a#wF9FeD?_)lwWN*msM*zOYhXU&DEvV`KQ1?AW_aO1i5I)7pg#>b;uR%ZT#+Qz^zb-W~IK1n+A!>{fJ{{0@U6B z(>CzaevUO_xxHI_Gm_(cC-*N;Rb9@R5i9>jicbldlOeZa3+v2syr1x{cf3)eumG?8Gjko`{3eysOt zbh?lE*dx5tyUiQmFB!s?()&)%%w%M|EAT!GKJ4BBL_+qfjApwFyk~C%E@-R327-|+ z8cQm_Nk*I2NOcZf{$}*ae;miATq5jSntBOWdjgxA$OMX!JqU^HePWE1fP0z;gS}h4 zp#a}d8f87$I|#{usz+0tk&K+~BFlVWpkf-;e&D^{w?UIPgmb3(+Ix@&yQPi(ZkarA zE)XeIj4Mvf116O54gd&2A;dsx(CDTL`}qo7UD^9M=(Eiivca?GMbgQ==S`~!LSAPk z$5Ce4C^rI#;h^LO!2<8$jl85>8Rmg&Mzp}vc{G(isFOu+ft$eQ^M<3_g1xC6&D8^;z-CI;t4OBWDc{J;e!+|F6|B7{ zt!_e)c=8j69f5&LbG`Jx?q34TEa75l>a#!$B)f@7u#o~s$~j<)zOi2brR<}Kq_}A5 zM_Zse0Xs-DoXp)Raf3OcYXdJ(0^G1RXzBUfn?v^Fkh7!q9!MI+?2S-z9Eb%mjTF_1 z$q{{F-QiV0s!DORJk@~Xca0hTB!ltr>r%U zC~p`5M#v^;Ka0>{ z?`B9H->7|h_W`?SAz}6l5U?g`j4QVV?geUoVPjS5N@51dr!IyTy<7AW3L;B`_U>Ts zcA&EvZ)k$B(t*)tsL#7a*}7k_2T6}3;51&w2k?We)LXsKvd<$~Ki&mXJ0;|4)jjj} zvvTeS7R8Ehi&EQhvn?4y)x-9}UdDcGSy`xR*&hlRtmc+hhD z&@^|10ulzZ2O;l*6d29RU{Qn?LP9xoi>gC69w9@uiBo#!sZ)SadU&x8muUlw7_pLW z@;;G&p-dk|-bs#kb71@+z*uIFL5Ye6eHGy$wQG`x@1tt!8)EL@bs0%PKQdVJ}8l#d|~S+z9PLIlu4sk2%^ z9T*Qv#7UY8`x!Px@*TpXsU)HTI+G?(qbPDwOf&Q+1L%ioj!KW0oPILe7MX&kN9CnR zfpdOnFdT|5Xdhb-RMNwx*WLyyYTT?aGJ^}HZzweo8D%DGdx~8f+ZS!jbo)9C1rG%P zvZB}GxC06b_KY5ZsJFBhr6i@Pv_z}WUyi+=R)ZddrREYbV`5=Qf*wWVX#^a^+5(dI zlTczU1YWSWphuLhkfK6jZIjMt7hDEF7a!wkvutDGU{1z_ISo`pYIp%4E>j-gd@C@) zAdc)RP4&D5RE#eQ))myI#>_rqA4R8T#6|UWA}6Y^dv`2lh@%BahmvfL6i^Wg3Y!+- znqH4xh|Ks8n6UaC$PKxH^d1IS>JE)x1@20L6;9Q-C203R zOr>kF2PA@B$_t1`Gv6EvFpO&Y?Xe&f1XwE@Hacf}GD1YQgFsQ$r2aAW=sy87Gy419 zAV{PP5Vm%Ml(LP`sP-sP2FnOgfb{LTMzk^e_};r{;v*q=#~8&T$|I#-UBW;ywaN zhL1@1vhwzhw0Jai&Axt(6#6nq4$Kq`o4`E?Piyzw%^*yAoR`=~mMx&W0tUtb;6gn^ zMI~%gnA%6smsi-YqqUP|ic1)JqNm3oi`;u1CJc13a1Vl_*d;>5u1m%VX*q%jr9dCp zO=6q;^HoiKz{rgB-X9PG(I7D$m%1rOqsC@s#Ad5BsjWU>K~r=qtP%{=Awb{@6_oo3 zM;kyU&E9`p~9`wvcp(Po0iYs3_wK z`$#ANa}wXs!)#WYeQZb_Kts&zBh-p8v>`zVmd=XihS(?>8G`X`A5?aT2+>W_&Wc9= z{cnL;dVu$IDq|$EJ)pW9Sq=n?f=ljE!N{vm>5sd>Tz$Tx&UvV0#|{E{S@${?Lnh8BT=w`SaH*#wQjt= z0QjUwc;9~$2*DB>VoPEQdUTghl*AlT9xn(g+$`$eDclwaU`jb*RDj`BV5hBzY`yz( z0x-4qLcH9Eg7jSNmFbYfkgZ@qKEZto6b5plml*ga>_qn#Wzv!t(Y&UMz5sO0i0q3w<99V)+l<5Zmfl@;;g)418dn3^) zXh7t>9+*HBAHi2(v%R04(<>O7z;$ti4T+;(=p-~nd#8Fs-=f|)%-!kUDI#s}t-^?8 zQS@hz+&>LCr3Y{gz=_JSiE4yhypd&5h#~v8^gwM6@zBF7;y@}Xw8*A=hzP6?>N*Mn#rSDhtO&6WN=Js;v;56M zppg5B6wN^TZD21Bu@w6OLUAfov_M&kSMIobG4M$b%6{>Cp$j#O81r@L<`sHCfznK) z1ON9(XN8du=p%#JUB=>IEtFDmACZ0@oYGi9iK%fMkp$auL?PN4fdRQo#Au~*RfS`_G-vy)5#vH)Qc=Lq<>J84_ zK#Dvysz@dXXnll=qR|O!ws!(MGwS-gj1MKh63XfWb1Y$E4ii;XL=9lYX*UG(09=#gWaHUNwCsH>S+ z=y{1p((WsaLXC!@?QU--%P0zT_<>suL0|LhGEm4=SKY~?>#OPc$q|N z@GW~OLpbO-N;kW!%}|UHunw*mY6jq&uGc7KbH8btJ{RA-e}&QNAA42*aF47sl=!uC+tDXWxZOpzYtG9~DOk zdMWpAG&*n+luS-2kQNqwf6Wc_=cNZ;zj}p7zN+gdQ14Dr5~%oA-bH|b7aM#>d-44W z-q)wc-M*8{an0DWXOQR#B-nwYWeJ3;CVgp3{8PBFg@WZcDmH~rm*b>X+!dg%CkWfW z#-#;+ns0T_UTWDN;3)TC;*HD0$!VXp5=SpzJtv&_=yKoMe?snXGE~%qQ`~X;L{m;V z&hoZj!KuAC%(gsr1M8BgSXv&z8NY7^6R%y4OE%*-oAT8e#t)YRh?Ts>ADQ&toaBUy z5{L7Ai8m2;pcmI4U+%_rijT)W<$Ew^o##L=t{|L+5S;SA6bHeVN0JRV{QM}&i%i;& zODcJ9qFu2xb?9XrfKLo>|0=elhwYbnN%=Z;=I@;3f(!hZv8omv>zx+w$aMdK(5~f4Dm`>JYBD@Zh5Q_k+pY z3E@ef z@z~pOLvGF?tlaP%icH!Op7fl1M`G`x#F0GTZM=sJ?*X*go$Xa|F99UG~@@5c&xCd^B(|(s$<&Cj1&XAHiGe`G~|D*o4Fg^!+@PbF_iMM7iM>*QVTWcD8EwY>)zn>vZc*EV0v!0_kl)i8FQpWjC_W4e} zroeadY(M^$;9oiZRq^~}oDZ!pKaGzOVV%oOaN(T%x|sUcS_T5dAGj7vds6sV#F5Sx|gLh23R4FKFa*0 zoxfO3__&MK&Mivpy&M+-yHo90dtupc$Yl*EBUOvN;qJt~ ziltyQ^ag5^p(*ZGc&re2fhnq{*GDbnHMa}6JW3ik*m)f5aC)~spdUy0<27RM6CjrT zj)}m<{8^>zF?Ko$!25|KdNXhUgCf&jP@_VMumjRn)5)YhAUmHRoQo z?8X=l13mLne=(1R#G%dSIu;_Lj1K(!k38zIG*u?yEPvyq>%0E<@?W-n&^-O(KVJDS zx6JciwLUuPyFYwBamFc6^)LQ^^Xw362|jB^W!A=?e}o zmCm}epr|8IN+-i-A@E9P${P`gZNOlE@;J(~bQUzEbXL>Z z_R`sp6GcigQyO*%>6Rgoc+PQB{#FEr5Eym_&O_ju?9#u2z@-QrLgc?f;Bl0vKAS;rv2?_(;R6AyDo{ z^;{!6l?(7$IGTYtFM@w6y#>X5*I~SJRPDXO?)5~@RXDu?TiLmBJ?Q0m2BnBzq|+|P zJ8{+LmB={)z?En9;9LS6wUTvU$pj?7Q|CRMd68og_J%V2z7fJ7)8VJ-^w;S0FAbBP z_5OnnpP|!Z|FfK_#5i+yNKnV|m?~~!WZYzK&cJgy{{XMJBhJ!svvi!<^UZv9I&P+p zyU~%aL&s&~;`+pUz?^%yxTEX8XA{@Q?cth7L2^8lHRm(Z9+C zKV^t8v-fbB{9kkyrqeRW;9>S~v57jL9*uvcGZ63otnaD#Caml|Pz94zLcjV+|26b8 zzd^(>e@QxpdMVNQKW-1x9GyQayKAP-pB>J!oDc4p8g>tprSoUwmFLWickX8<%xwCt z(fRMv?Zsrv&d!KC2(mwdJ#LJt_w2xX)B#BJPzgxh*O(>72o&1UbAo4I5CUVd@i394cRR z+HokBDHLU_Za)=#n2fUQS0nb8)UV+l>gtBCJ)tcABZikDt7x!mXAQ`T< z{UI}?o`i4eE7yV&et6NgXFM<^$K5?@99VZCn{odnFU5yqsbbXzArIU$yoQ~Z6Yped zEKn`wcCPXW-YgV$k#CaRNsEPEzDWysb*-9z@lCo%rmKCE?kn1eoW4nF+RQiUk)j@a zJE$5eDg?2TokjZ*4%ZGOn*F3)uExvO{J8Enmzshh1&U_4&R1Q>C%&OR9k>UMS5*f} zINHiN6DAfTV|*OE&cvV2A?;7uFkeFm?AmlMq69=l-TB2E+$|fo?skv?a>*FU4tL_r z0t66At1r>PS3F<_V_FMvl7{c(gzyZ$NZ-jbmkQ9nnQN%OEjzJJes&}824=*wID5}v z7^|+uFUD+Adu3q)H%IjGBe$S;YGDTCdJNDHv9izhsRfy{5&yNxqESgm~b;lyKO zhg9VDi^L6i9GDz}VQ~f&N?oikgM(ZIuM2)PSUoTbX!v;lFK_%?8nKV2VJk-|>ZL0p z-e)ABG}xOZu%ooe*Y!;(r;au5W?z?$H*4tCc1Vl~j4?X33v(L2uAjosWkid&W|vyY zxnMapY4D*h3E2;%p2B9RPVj9a%vB3lAD2gcYY*W)aBN$s=xhi8Hf-YUTo?XK;-7Q) zXA1umxXRbvR5Uqa4^dvJ^8t(JTH zvHlI{TzV{fAY#9-{JW{e0L~?d<>;-VzT208i@pbmH)g*5<(;_NFi+}^o(Ob>EWQgB ztW_%1Exh@dQd7La0t?*6IA+mT27Ux~syP?#YE{CQk-0)_pM%T|+>TToH-T=!ht>eJ zuj_4C9N@^w`LI{Gl%*;XU= z5!ECy^(SNicyua&3)Mq~0}5zHZ^W)6ROD<{#0G5BBP=H#x+0Dq!PH|4O5O^4N@~#g zSHL0oP!xa%rYZai@LebP@!-}W_yuqg@5tzByp)2^QOKP~611~vfSX$F^DS_|s32*3 zeaxiqt0dbydr+|gU+0g2Cp%e8%|-0P8A%C>O``g1dyndZXKc$Y1$AaFz4oiT3b|{Q zs3IsfCEki4THR74&trQk72Dm#oGiRt3TR6F3G#U|R$$bxcrmysM zHluRWq;oP?d56(J;h;X)UJ{rOqW!q3Z4yaG;-RxJV-Ra>z!GiQdUFaA7=dZC`9m4 zJ$KNz30AQwr4ItgQZAHIIzUh1V!4hty2U8TZ%b#}$z+hgAJw#ifiIXaUzV z6&|>RJ%wtV1HVL*3O?%E@tsSyd0Yek3V^{!%V+ppgZqPz@`&WYRPa&o!Zp}0tQ`EI z{FsLE5n>Ed4uxl;fBWa7e=>Zu>TiMzU_Ac@#`6Hw&{Bu>Cbtk<_FjbuEFO%Y&bPX! z7pVYPyLo^M)8H{Qhvlm;qJ5z?k^K&|P%XG1h7tg!t)%!0jF6UU^9Y7fxim0LMS`eQ zgEDx#UYJp!hHr}hQl<>z?y?fOMNzC+h{oIFo{a*#(d;mo0UEp8~3A+ox4 z(G|a7@pUdeXvS1ow5AQ;LlU~;r3h+jTpo=z<2Ip-U6Jr?Yrz%aD`sEpnt{8wmetor zr=IUe9>lsz0_RVicEN=gm6o}}`r5*pm2wv-Z>`A=<4u~p6iMQAsVaH(%J!O=Yi12^ z>*7UsQ!hAo8SW5^HR9%|Sk1~-M^vn4xxc2l&fiquygU|lO{~4xkBT<)ey=(guBkNF zC-TZBQ#CzNhorp9w2{{Yw%{r=+*0Y9*zUTb#lK2!Ts*7wEPcIY1L{zRi)5EKeQGXM=0X&A#?eS&ju54_=?V>fYmiB0)KSTM}vykq@ z@cQzyK;YcVT5E3P5mMFBn)WEM#lbNADIszv2B)sRz1CT0@aAl(puiyBCk98*A+WZ_ zR$jO|EJ_4-g78%R+UjfT8*vR9Zr7c%A`4B!34`dGi?wX|Cw?vNXB%m!$keal9jO2! zh2syTNwf0Lr~3r;Huu4P42A}S|J+}#DC8z!R#IO(rZoo!e7qvKzMA%}Jo;NpWja2Z z6jpMf*%*5}MgpDoL?_p{HXotuA^ z*TUTq5w8{Wmb;3P)ga$QIC6enP~GoP(v+S;;h}w;cQG!5DeTS6S$83x@i&);{LM;? z!My}H>yGmiB}mePe|%oyAI!O|$LyLp!*&i2%j_9?!f+vy{efxm+|EBJBjNFM@ody} z_%!F#?KlY^fag5R^tdw{H+pis!=G6=OAeUDx%s$H!+C7uocx^cx-mU}HRi+S%XB_q zcszKkMhF)I1Tis)qDlX|Ndr9n{3CS(-Sqjqa!_uA^DyO#{3~#3>TH~zdQJNDROI`_ zb1LeXJ;%9v|1Fa$V6XVZF%};3ltt0_O+bN19XV&&p@AX;Pa{*GO|JCz^kx zITe$?E~`NEX@1WECVbDHld*I~Is9-w5MOyr{*lhbdq_{R^g1)+-Q+jHGw?!KY-7&n zMm?GGadRqjk;&lV%)dT6qmIl@yBOhP@Gq;Ht_?bWHeT8IQ=t-OcK#lnzdx(M?EH*| zU47iMQAVy<7nBu~1Bh-1_RuJF31MI271!Kim82=?K2{)g!0;;}_(6 z@2S17p4NNh42JIg_hl2#zV+3Yr_Q)EusyI-`6AVv&6C>j=d?l|Tw-6S=zP)Fc?}2= z#=fh-+ZZx^pvENU>akvO)}x6-r>y#NYB9V*y+=pc2WR>=#m;sI`ohTycX{W5*y(WG zC1>qP9J+4RE?D|lI;a;qif?9aGBhzST-MX}TIv))u=_OJR6f4KSjdTk$U^H*h0E>p zi8s%{x@bTKQt>_8asrX$OgHCmW?qq8@Fn-)WR4wD&tVW4PV~5~#8!7;zg2s{?z6ht zbGqQ+D+#VEKUP_`IacU;MG{>yikU6f5dWJnF{HXmNQs@`eCIs>*l*{KC%QmrcVuo?afxQ+#P>C zoSfl~0H?$k2rY4BlyB_>z9nZIVXm$NaD(6*;!qKI4Qs}gKwPB9j>)SYO&mF8_4r_- z*PrO|2Y-d6t{Llcrv`fuj|zh}sQ^a0A^RCfNZEndS+jkc#!U?-ufk@K?TI7T`EI`# z>GAy!gz}T%Bg{Vd=!R{%Q(cwz^Wo%aQ&amfrndW3d8yyy0}Ic~!iiotBqY!mDSIN0 zf$KKZVVf^;53*NI+8lQ88w{(lzxZ=4-=>|A?{Oz5tNx(_1+}Vzf*psC#m-KBLtt(? z9O$!>vqpm!?YR}}#+|Q$w$Dd-xl=oPZv1KB*kb#T_Q0!l6zI{ueNb~!FG&gFlbW~v z6nq_g+W0sUso?ZeL=r;2S*gLb6zJ~nvwwj7tx zSW#R&rKz{z%dqV=D<3C;yR?FdxA?hXen%g6mJDKmnIkwzYlS;y{nV zb%SL;5C8Szi2crWa506kjYXyr2AG(1g6Ih6AVAn_N;vkj!RKBNCf-JqgD;9)3fmuE zku1uAYOsG7=z${}`$bIs@b=)R-6=NM;B)=KlXjN%-Et=6F5G?oq(k&)U+oUtpTdTZ z=k|rp+!0(iVQN|5&3hwdzmIRl1Xyv`u2?ag3x(nCPfY?7<{>@aXj2k0yq~I1mXAtc_cI}E^h!!>>R-&kacYo|sB~Nf4W~S?I zMgxyJ^;}7K zu?}+-g%O?=F%W!+%M#Qwaw};;v?AJp{FQ45+8_#&LDdiQ#bKOtU?hV3QJ%tdyaHjS z=p1!7GjoyTBSjr7C5d@RBIq~sMr8Z15W|@+qLeI$qCHg3N!2{x?f;CJUo5~M@om2= zn9w8LjUeBHm?*0h|@=Td#-m0 zEb;UN!`-<>n6*1L2T?H zzY`z2W8Z}Qffv~Er>E)k94mMBunfoioD`}1`&t@I>K#MA=9(s4LKenoFbxHfw>zgl_wjx?vf8ok_%|%Tk3@u%`sDdB=K5lGDHOzeYt9FIBgR><5V zg{$I*+@vrgA8}YYhg;u}hnJ|7Bl~HZNH1tuNv!k4*gA7ZjpuJLxWjq%Do-%KN{wSH z1VlKW_$<{hUQEM~@pS7F8XXzoUr)GpjoW$)Dk3s*tR`L;97i?%Xb{J{w8RNjj@f0}T z`8v|r^MR~dt&k>hH!-qXnyeu&FLKS=B>+$xVk-?x` zUdvrRm)B*^^px6>jx_H1VU&+1;B2Z*stIxca=FTC{<*BN76@qKpcOEU{%zfUoz)jhW` zWc#~k794oY6aO*R+S%`5^7PoVI%|9@2S$$mSNd!zX7C?3s6DkowWrof^cBM#{XpPy zw)kX_8tcXi?{&w#27A=9IMh`eJ#Xf<{_)=Sp3Ta z-N4e=uD6!De$(snb>2zLlU1NtIqKIF`%FivE4Fvg3kv2P+sPVZ7JN^~?m&dddl$CAJP#cC{Kwq9-ke%MM404fh>5W$T}nm&AAXq9bg zE4AD&TV>~x;_aBaS#ye zK?OhTnFWg2@r~Bi1AZs3DH!~`$gz^ASd~+jMp2gDc(fShra08cngHZlj^&gEeJ+Zh zWkX()RfUjSNa?ed9mP)-#v@gQgQx0t2|4(c)r}!}PwZz_w*_;Z>F4KJzxb?wf=p+DgcdYN{g4v)Xc~v9f3@FAym>TrCxg5HYImwzz4WJU zQ!goEFbWMRHbF4~gE+@}UhyquA~xVyQTs4ubpbS*EG|a#JPY6UQuB^l)-Q|NYa1QD(j7%&365n^tAOWsaN0(Q1s?F&S)v2gW|QXQ&f;z zuwr$~oHKnR*wP=qA8ht@oyt~N*4s8JQntN)j#ak5eL73|v7?kVC}r^bhOaNizUhct z!noTU`nF8eP1`TK3vNB)I{9Q*>;n9X%K97B3-3_Cv2#&`uhSxh%^dtIsgnU}U>d?W zcI806i~GDW{MS0p*EN?Jy55fAbbyr*rdKd1Q%#mih8x-=-Svf)Wv|E1fNGWXZ||m7 zAeakOUc_%@cTo|dM26oZ_VAJki zQ;_-qD~SfbyFpx--#|1Ci%3#B3h|mzoqV9URtyy3xMqiSI$pUNz8joUGR%Gaf?B3T zYwAL%kiADE-E9S_L9Djq3iEWu#yjc0fy?jrs-6;!>#Ia+5BZv|hZskxe-S7?siVVn zC;bhCi)6hG%ZVQKv!dvbe?!JY#!t7p=d%-m5|B;=E4}*43%Ga;oro9<-_nYVU0?`g z(8n44WbhkjtpdBv@!%YNlm}&)mIjTN0an#3>q5{2~ z9nGgO?nfI+{K*}|nIh88-J*FMs+#oPx2XfgaW&mLScEkAq%n}rAX$z#kWBO!hL3hM zf7TbCHtfs@IxC%#q*qWW)EEbt6cvQwPlI`IEPl%1LWe$2u7>WpMJRL`dck#i6oao zQ$kxp2rq?*8#@K|4?C$(!8}1dl`Va`*gsS_pSHR$My1udeoIYJu$na;Uq_7>TNpF| zVEl75rc`@JIcYdzN4;aDBn%Z1i&8f}zKJ7vHs7N-<69X%+UTKmsr0Dn+LCKdPJJ8e z|CAB-J1y?O8JZT29<7}n!%V%D*XU&|J9|tm=w58^RIX^u zvywB=sR30}zN7YM4xW{154t>>vuQq0)#Yv3g8mF(|ESB^Z_0Vil=C9Xk$T~el3&W` zHC*4Bv5ThyJM{R_*f=c)_&pmt*}_RlI6)<-kYqa$HMs@l9gEEs`g}?jiEegUjx&I! z3}sX=1L-f@85<8|3>fP5q4bBIcL+qo20cEsAi?j+V0C!--o`!W(%ss3(<{O z2VX~1^WDnL%R~BRmSN^rxgR7mz6pv(mkl8Y%@ArU+LW)8!$Y>U@ggK;yM4En5Ud)` zTK08R?7q&A*pkY&`fl5Tm$3WYh#CyEkBQi#oWo`B_&R^iMCiIJlg-%Jg}%EOU+i&I z=g*P)G=W`-fj5RUn2_-geo2jw%9Qc?Yl27y!SgV5;o}$)VEy!7qy{NfFA%nKi+o*z z4{9rV-VFI=Q;pFNu#aGy_-@M+>sRvX*7#f6iE3;}w7bGgp`piqpfqJ3@qli4499;D z{$0ZcR9R=y6&@JNHl5b5G%=DljVi|RS(DUmnt_K=Os2h&h!?P+ZkG^r65b=1v=+o8 zpijZT=kclRIwz)+6$tdtG#$0EH}D8TRey&5K(PD*upB5ObiHJL_XvGf8ehtr^jMV~ zLpek);`_0fYZk=rEU3*$cND&!LlJkX?XP6!rEF_k9=;$9Z8t`6s3!KBy#ksY`~V#b zP9G}~JI~(I*%SW~2pD)#zVS7c!kMvRg;(X63!Gkry%kWf5w{*>XpIcx=_zsmRdfwP zUpVM8_^+m(AB<2>j1To0O_&BfXr@8YeqpM_up_POK>VbN&c}USB5!C`Gf)-l;O|>; zOe}>aNy0jdHX#@?5bOxW@-?va0_bO$uM<|7Hqo z_`!_Vn-VDCMK1nbGCu}94=J&R1|$F7FSmbJV>Hkx!qS11fMW0hK7AQ{1S*0a(E5+_ zZRIG9(v1yM3Kcq{D3<|B4$*-WD|9feyc&TSc$sp*Mj+R>_&Q*yyHVhm&Q>nCi9N~r z#y^4lw1ZSUO+Yd0=?3bR9$D=R#YkCFeC1kJTJ-y|*ceOc77pz3E`w_7eY`7e3;lri z@uY)Oo3b5=?WJuxF*+CHf&&a_oGyu*QI8iE(=9RZBg7Jni$2;~*O{@J74^-<4Q(we zs}WKit!pceVY%t4|dgL0tR61H;Q&->SGK;NS zTN;~V@?G1~hQ+oqe``$}@1(_oVyv8vwbl5W8j+x;NkW!kA-TDe)^GAMX>4^1R@^o= z)nV~776D6QhBf2LTJ@z@rKYnx@#I-g{uV6rZD?v)?TX#liahh`vnqn++*tUIBDm_A zIC3R-OH*BS%vBd}^$&$1922U!T*U&=|7HKp#S4Ow>MO2X5T12y^{jan75 zEM7<5+S_XV)BR`T+^kmrO*i?Ax#HP>_9O;hh6A+pXR#!hb810Z!7&>Q&(4wW$cX&jaYjvp%)G%-kf_)h2W0Uh*LCq?YryLRgXfondDpXXU$=B72lD@XUjK zq2_QgXR7CfV7QCyxxbHi`HQt``ba`|0!v>8~ zBr|ixlhLV?hR(Tb%&R9jukKlqHSLTA-ozoL%bSmPK1=ZLBOOMwQ1JvfBy%wLygnD} zr`O`#9L&XgA_`)f0~PsL|2*W>pPBhr4h>Li5S9>6JTh;8owr~<=HSs4xwv(Y&p+_b z?DTqr%=|g)Q8{$EL70mJC?liR=C034dX^$9H^K6ud(<^IeMV83_=`+IK7s#|ENo|h zi+RVdHCQlo`2avt{{4DFQM?vImnOI<1LZoNXPG!;05Wv55fxdBAJyq9nGU>ju9v?_ zQdV#&yo-FkQ>Wdl)9Uk#EUy2bNj`%w(k?(TtV~x;1&c4(W_RkmPwBkQwGzTpMH3t~ zG-R>F-2A1omLtt%%FJoG1mbcTUBR#t9VVSRzRBB=4m+RnBytHka;~W$zCTnYrtz)F z_k<8M%j=(MsxTW9PIYz=Jgy+;~7;b-#{ddv}Gs1(l#0`Ltb!bJr}x zd6truzg%d__>_*nobiC!iuh3etaN;yFc`~K7?1pIh_BG`OA%D8;~OY*sH0w|A-XWL zKOv;nX_Nzc=}d148s*SU2%g=D!0v>sh_K?_dR@jVD8f-j)>;rLV=naV)x#E2kuN;i ztzmtAC{Li9*0OC-SCo711p^?dX`Vpc-jNPcD_)?!UDH^9y(r@{jhmKVz)R#tyv1ml z*O=qApb5F!M%{V8RObsYA0F}|ro*N(0I3r=(2wcm`2=fLVzAAo#G9KMSJXG%m_CvU zTk`@_9NQ?kb8SjneUod7d7DDp5a0hT8!U7+K~`Doph=-ap-=SNm&Afj2a68Re2u); zr8X;{$)i=h`5bYrOH}7)J9Iv2{^&sRkubCONtpbTvkEky=Jy<(KfC^S>hp@U`0CPB zS?LeFn0*%6$6Vh&&Dge{@+G^!px@sLpuM4EWyam&%D{RN07@pgMVGFe^fu|zuEZ1 z{)eK-EcYo<3wh+PdRKohoTj#iOuO)cPrTOWeqXwH-LA{AOXMV3>m$CM%u4XzVOmR0 ziCTa`ezK{^xu_#lRBTptByV!L2QT{|=xZ4*3v|OgSK+AD*NZ{@F*zQY$2Nt#XTc-R zlcM0eFRVkPCvK$=F75aE%C&I7#B#Ug z7Q$ncURU72p1utFvZOq5sEB7{n6t-NrxVfP8}!QZIwfLdz~N8LKiJSYc__%LsM zYd1>6o&X`of90WD{ZgyF5iX7iQM7sBR&Eg+`7q~h4Lw#X4@zAOoV5*}s(}qyOp&3(@6_DeP-hfQe-e7|l#!DE+B3*BIY0sSCk~Pv ze+JnJ(n93#ny~$h-b!Gm{LGS@UB1pFioz}+E*QZ=BjvE=Vh1gXsu8?H`M)NTjJl;Y zfQ}GRb9M^m)UgN*`3vSGZ<>f1N}T!gifWr02sFkiY#^46WkG6bm^hF-P&VqRgnsbl zEV=Y`)oB(4~;O)VOHXtDIwvyx@s`}}Jh|I+ue~`0O;Jy6KFM@zS-+lsa)5Kd) zSB`BWIQC7W$SG>NQP-gppi5QF1z}x`#N)gliG7Hea?ZOF$*>h6?#0?hr~;M9-4~Pz z&?SiM!t@nj1|KO$7T=wrqA^^w0r4L6skwSdxt8##NmMJuE7vMOs}@|DoOWKsp1#|V zH@FR(&Y)(zID}`6OQ|_u#b!G3u{9^`#&)US$A1t>7Ga_l-ef3_Jix}}t)K?7-NA4@ z^Qjq(&?p-HOlj}QaW5kS9Om=gf`EV#AUNQWurQshVZ|PBu;W6VddO*a?cj5$0!Hz{};G?og4Y?px&M^ zH8VEWxKw8bo=M@v1^Xw?(P6thZg zC8qbfD7>zSFOAR!`<)P(Oc8D0Qz*;it*MXhw;W{ad>pyVw@&Mn!^M=tRro{sjwFA! z21uywhy&a+EO@9n37k{J7yOL0?d!k9m!Ct@X8czf-x7STXv>cP z$e9IgrkwLXO%K2?NW+2)*a-_6*N)aWcDQr8h6e_(qnd;1)bMWMugrl$2n7F-nH1I1K4Zi;oo1H zeDL)%uQ@;5<2W9hJEGYb%=Sq$L$N8Grz6>mrm%qzSu>K*W9nRMj)%mmWBCVXy zHTYopS~Sy9cj^51XGLV^XWneu6Nsh#J2h#D>Lt6bT&$4sH2L*jGUad@&es$uJHJ%L zp7_2pGk-x0$^{MMYYJll5zJ*d`dPe8SX6f|Q$)Ha^2h2vU4FzemT&RBN+0=se22?k zij{G=g8SptFam=Toc8+}jBX@n#D1Hui0q-Cvej{ZGVIQG=Om}SE~RjFPfFfoJxf;) z#+JU$Zy+S1c4b($6kmy9eY+VTad32nj)>TT^}zM$Sz#N7v3kcXLm35Cqj15#4vkpgrAKc~0-O0sYX5li{%^ll0kT0b}FuCp!`|ZSQZuXV* zU=d6_e{i+fxL9e3_;K5?+R$y4JrjQiCnW$F7TQdLH7?U=R&v}{AxZCE&Q*J{BFTFQ z{tKy5dZDylXOyl~%(fCK&{oJLsgQ!})1BT8Sr>VU)ve0W`(A+GHwAJ#8dZsPp@TUn;5kgcMn?TG+Bvs9;A9I4?*) zy`*Uiq41g5I=p?Bi#R|2vB=q1EQD@x_b|*nZvAa^!2}(Vy(iy7IQ281#Y~*B6Ebs) z(g*8x7F9Cucf4_cIYgEbB_KR^^3T^W&xx5e>h}(Q<5{47)I6(xZ|AS4Tu;Q!-ash3Z8X!J|p$vYqIj0JcjS)d!#wBa=+~m(j!<27+N9w~9I^$p3hyPu6!5VKx-3z zam#t&@xjlf{bAwmJRFUM&V}cAZO5Tb?#i;NyjTkAHjXv%P;6?v9x0ohhqHj8g!jz@ zgs^?+8m#g(9i8%uDplMKpIM3+$R8{u6)0C-Gx!X3Ivge+st9!7zKSi2w+OOaeTkKg z^{f0`Mj3C7;WS%W3F*h0%;JghN&c1wykax{e{k)Z;SKc^pKP5v8DU1Ju4e-1udicN zHk+e2tXQb`7R;7G8Wuiam?&u@OovB~>60}HRiAuK0#+UTpFB?aCsoDt-xJkwd(%0F zz8F53(2;c9iRK?k$BC?=kYZDi{>{_B29J?+oLLL-m+H7LnF6xP&ki0*#}(^@f2odJ zr1M9!$~W~l!Av%sj_c9+YfM7@tAo>_JaqaK>A12_uH(!)Ef!iXC9C_Wpi>U{etwO| z_w&me%8ta!?e`L|_H-QXh<&!fRzBoD7ngR39lChShHfhtx3%}aI{KuilXKj5Yi@&W zc^aSs8?e6yK1+R_Q3#=zGAEqZ@q6@nT zFLj|uir**j`dnW`@IX*y?!-INzMt6J-*KcTb|K&PcO2=Dh3xmF6x@;Cad^M4i#MUm zCB=z1#()UGHPACauO@ZyqaFZBym3Z@U8*9+NQCQQ3P9owUxS^e!rz74u_19J$9Fr6 z9T>0kV>>Z=75h-{z?k?s*zEW@2c~*2l+?R?-DN^@=>T9Kqb9BeAZp*W*DUOSh}5 z=OMsz#V2t_&MJF3cDirVRO1JRcYim-6`{&rj{hEq+GWkwa|2)j=SQ|kDt%voKqp{% zXdh94sF(M5baV{YPqONM{L3D9n6_-j9cInuNPQ$>m_D+JnWfLeji7lm@~^{R`sbLp z9RK(TQ#eAvdolhkVj!Nk`Dd250E=w%X60k4FjiH1z9j&bumhcjXeIG37k&TAw~CH; zEzjIaU@c+^R%Oc?MCB{yA!2;~oNsX0g@5S3DzybUY{8 z2VXdxVh0?yKKMlQn?5)jf0JM2z!Wx2`RC}ctZJs$NoUtL`+KU+ua8SkmsF+e zPx*H~=G*+1Ba$>JaVEn10-gWkYyh(^Fe|%j`3cgWYnF!_=a}{1*?6Ie40)RHMf|hr zXU0jQh8#Jv^E2;os8(qLt#ah$YqtETYZx+Cz{jnNyKq|RC-zkicPHg|*SO5QKG(t( zVjh1Scatr$`bbbLSHc$CKVarFIr+0ZGN>Hq-adv2!ZDR)Z^c57@{BJz6Jty3ml0Uu z+cd2x#e6sj7H2lO4uq=Qd9g*oYs7vk^#uBMtnPYz(%}EY-n+mzRc!m?NgAQh z+Fi72Rm6Z%sUo(BN~A(JP3aD#f(HRCk^Pi|9e08_xpX${y?*5_B__CS+izl&6>3+ zK2zKrRChMLE#m*ibC8k(rHG1`U22v+@@EYgKOrUo-`cf)I*%Xds^f@e}OW~ zVz>E(3m2{te4OZQC3*b8E?hbC?UXif0LL(pL{z7X<=du(ugXhZ(jJ#?SL}bKuK&%d zj8lR)>y+At6f!P!nX-J-kwM?R{OnqrQu|Yia^y#)cCS@YFXDxt+GrHrLa)YQ#VugCN{qebhvq@qSGC03%GHkO!Wr@GT9(6JZ;oJ!Z*Aq~j>(L&?k zJ+*PPzg^YGuM@mRC@)dQ)tbKf^_*mYE{YcQ-vl3Bhh^>{-T>E_~;1-g!8HVKNF7@U@=t;=WkxX0reM<2ie zuC-p-890;z`|%gU93mGs_Eo^TU|26AQ_9pCvwM(tA@B6WTq`J7Fw0JwZ)JK!;~>V+O_P6nc}4$n0X$OxV1&2F5YbXo|>DJ#&=5?e`Vl z9fd<@_IDH>W2nN0)c+*>28 zZDl5sbOF}1d9QrYL1}oc9;Zkvd-sm~!1RnM()Xj83RN~YDQyl=(KQF9VKtE#3=~kl z=zqI@#c@P>40c|0eo1e~|=e@CO^4_T(eW{WmD*T+U@14ie1F2XQCseUYEj~q6X8y8j^aD)Wcqep(6 z(q38lMfatj&H4J$LUxH;k2Nxuw&(Hsk5|Y}=;?zIV{s>>aAGo4)WML#ZNW{H;0^Ko z_y)m}ld{Y>@{Ms!98&?5iJBA%Dcvm$T8*K<01b7^jFu}geS(XSLWvBP4L3l2mL_6C!_V)P6^=q`T~_!7TDV)_%B=~oNN<83YR4!oPM5(^ zoNf!km~MVTI@%^Zr^VfYchTNrvX=p^KHlrgNJ2wKN5kW^@KsdG<4uipgvafvqLvMbAzW zjVEZSaHR6TsM~;HZ6damcqUPRIC`oRd`pVPi*NMzOuAb&3HkIKRG0BN)0xWe&99%S zbTbx;cRfGZ0x&*${rWG_0=*~Zw`uyvR~s|qJyi?q`E^?f8mo(@*7cY5xn2LD=hwr1 z@Iqysr$=bNW3~Dd@vZ0Ae+Ov!a})AU)AH-{f&N*CTmPlAM*Uq+L%%^SzcG&96Vr}G z9Pzru_Ak=%C&Hz}O=ZzD1OKVa#QZf{{zh%=QCfNu^HW}pz4CYc&mz_u#&Lrlq5Zai ze{|*8k=`4lhcdr)CX;u=jsLXnS*iiR0*0dimI_kI@5HZzln~sJkjPV<#MBpa3#0N3 z?YbvzXM_v|qAdues1(?Fq#MbhE|2h;P74tXNuGR2hn)cqcjONUlaW-CG2yoH#N`yE zoq=PWBK2JdUA3)0!fd#r-hfkuEPGDvRv4xXD>>^@3R7{*OU2(d2NmD3a}@P_m+#AF z-_gsbE)6NW$wit~*}7K=&B&BCV9Q};y^1E3Zt{&!wV^Waqa@Wzjf!QxX=sjqy`B>a znWzyT*};m)szR1m;M;*$c4c&ZCy(Do6dUf|G%hQ_giyN zKu0vS4^JXbJkuPsE+L=D-I9l$X%70m`Sm#{k=N<@e~SlS3BZzpx+7U+lC(D>E*THj z^C!ZUsv|=CRkSh_d9dyi>eYnwiTMdk1B;8M*6;rOAsQoI5}Wm>%E^;P!sKRUnJ^mj zTRgbi4L5faX@375o>yt2)1CtUEdU)!aLp(w>hX}=nBS(VR9f24EPYs0yE{EJy|JLW zxy{rmzV)`y^cV1cjx=vM^7+C;r4QHFev{g!0jVuox~jXSrGH3)?pt&19&4yyV;g9h zwW*qblx-T+R&=jImxEGy@(cOrR88WNYN^UteN~I7P*F~5o1;1uFUFv#x{30kGKRw1 zrUA8~uBngtHrPV_UZ_5HPF0p~FJRo#rjcvb&K;KHDVRUg ztjnLEGX@f>vZ=?RF;>^gLKdJe&3X6{-{!$Wev5c4$WD3dp4rFAl7{rq zA5hfn<8*OIT6i_yLvu*bq{%sJkETG?rFOR!{VuIi+Tu=?6Thjz;=&n}SWa~`N(*ks zD{g4r>Dz10+2A|gN}6Xwj8eLqWV8CwI!bY}Mh=Kdwc3LUj+8T-{y=V`p|O(c#36G! z9pl#HO1+hAOB99%UugCnKi?@0IOD#9jRsbPllIb->xHk+WI#PXk``Qh_Do@ zI1J}@6&L8|lC`_rLOb>+;H94MQZr2oRp6YH;((8u>4$UR?|4tBU%~8S8902G9-4#h zD^ic;k%fdJblZXt5TSf1%D>zMO<^97o14@PxFw-D>M9PAJbm`@jW|n|9@@*Pne&42 z(%p!TKZ|c3I~lu|!b`9R#hp56=e~fnaPYpD01;`tdlVX$c(lBmaXDf`xEcw?+R;dt zq!TVJ1ts3r2#3~frhdotc^+bk9N8Y0PLzT1z?-zR5;j2wnSDRyf->7k^Y)+~*L(U1 zDp9w)9h<$^gc~W^aYC9ikH=3wji1Bh(wj&qlt0t$_*wG5jzsX*-bxNl!4z`3&D2j^ zj*a5H*{vRmoUh|QI*vRK&=}ee7(Eq$x+G`2Y~GGRL}O^)$Ao&efzGk( z_3<`S_hB$8j-8%-(WLN8NV^CoA%Oc@&(+e>2hDXFN<5pRNZ z9jwi9ej8PpxS1LU%_xJ*9)oWI?M4eZA}GQ(V)a2;%Cy?crJ=}WG9lE?YL6_5jW66> z1&bp7n)P@g|P zBx(Yl-5W!H>jp-*q7bFz{Omi{TUyYa!k`EkjR1|xD|_)Ld26$>wJ9{XT`$>J-v->e z7pS<%vEhMsd~H-(x%61bBHWl(5?jPWWuZuAwN^3 zgbP1KD&7&EfHX1uVV15w-Cgvs^g@kdt`Coe8cK9Mp{N^_9C&y-Zk870BB!);kh%K! zwUYlmAfoy>W{(qiQ9_kwpv1Q~7lb3tYt3NXjkV4e5Rmuk@GH@A1YPr4Cey6ep{z$j zgYRe*D%s%m0i=LhHn=;+6o~J$B52=Oj(l!zq`?*F4w%Ak0bw-ceXB2|W3hVQ@h(;H z4#JbOQfhq|tg?AGj=>G25?+QpdQ>D5efuW*_F44pljz%;=-Z0u+ndq1m!ogbM&BNe zzRlC$!uO-!qJfFVz$jy2kTKBL7;qQ^U5tUtje+xw0djYZ!$3ws_$c}z8i*JJUmF9P zje)hsz%patHDlm;V_=an05dSLO39o`6asQ47Yz(I1_l@deT;z{je*X_z@^4OhB06^ z27X}z&=9hRDTw)9sM4YkKfQ~1)zU#0kZ(92pFww0z>k-(j4z9d0&ryU45%;fuv~pq z8z=?R3w4V5NSNG%f%HW|=V=9rdn(}r;FfuZ!+YVnN&Q(~SwLfZ6^(E_)ymfWa?U|n z#q7Gdc2A1ayhZLi8AX4p#%Ay_GXB> zm44zr58(I~pPR1zm0%VNTH0_VSaO;rcjc;>C@ zp$=^iUsI0l-VPC0bbhNoHr#Vz^|8yRVz#cs%I2WwI%#P}^|4OgA1Gj}?sfT0SYAA! z?_*bxFo?yYVqLg`gmZ>4=_}+MfTJ5}W(Ta&@@>+>ACRJab}ySv@{@uIqWr7zi{iZ( zh8yrE_L*F}@bknOJ^PSCtoNvt7bxqwo&mG2%x~jyLHTXLpEuuPX(o(nmS{X}LQ!0Y_G!=CNV#71=N6;G(fefg<4t89Q3Q{xA zytulTZB`fWdFVQj3MsYf{FIxsi_jvJnYgil&jo$Bz#Et-!RFMUmV_zGC*%4A4v%#bxd=yDuXk!^jdLQac>n4c3*Sk}us*I^LGn`pjhNxoy6~TndIcQ;CdB^%@tjC+KhYm-=m-ar zgNxL)I0PU?@vWdjbVzSP`xM$8w^vkayzR-(c{MOSX-6euW<`(6E3V)=PYXk}Toc(K zMIodlY}J&6$3m1w>81n@bow}j} zk`d*?F3y8!vT#gG??4X&f#i15fF2H{Ny|KFjc!$!x9UZR1_j#H%wKTBcaf-M)JQyGyuR2rl_e=^AIhdXNY0Y z01#*37^!u>ZI(^)FG|)YZpR7FpEyky$v>CyhZ{%vBRm}l?QL41J^Uyt0bX38D#D9C zu-Y+Rq=j!FgXDj+Wj0#IQa@4YVOqv&`(BZ6K^d@3cUHo*{-<;acyA-{e!gdN3!GDl zz_;Xo8nrUcJ$JetV?Y*xS5Obrgg~ag*#jEG_hIGA@Tf<^HF!t)7O-d9R{#!6c!~C% z<7fUGz_HK;8Nl_Rpa+3n(8GhoN*+XVPd~C#uEM;vZhyEwT*k#Xu^*12l5BhH10q}$ ztNKm6QZ>94L$May%r{Y+CESre#8sOK`q64m!B-EYi(1Y25G}k3OKVZk?#R0w8{=QF zmBk`g^}rxk&OsNXu1T(Jxp+HEc&+X=TnZ5V&|H>3OiU**-7 z!_v|kEL~^wCR47S*4irtK4!A_*t1-rX*fQGEUhWMskxch_TPx-JMCGa`6fG-^2eIN z5~O+0BDVI2wr+J}=>5**gQn?Yq-O%H$w%Xk}D4x^c&z7{cmP+cUA$nKSjM!)ed>nW`dnfYX#%4IY@$jfu6r(55`KUpjDWxj3&avV&o)nvPjnuuQfMB zMGzhcefPZpSqsj2Y>31uOPhx9CcFs(j?P!&o*~TW)0w?vyT{}Dz;XacXg-DM@f2kC z5hvjTc33yqe0xV%AHR620&~)ukY*-UoU>#PoJT@)Haa4~Ts>Xj)s#%DL6*k-vNXkC zGc6-Da7*>^ysE#sq?fi;TuRayq=CI#AE^WE5R(^{z6B--)qG8(^DmzIg&T804(`l@ z2S431UG)sJO$il3S~MLnM*=eD+eTb@gj2$t15gvd9m>+3qHQ~7+JnVdrf*ZshhXhy zh_o~%-{!fQDELPjh3FJoFU$2s_)7%8o2rY#L?e~X2W(Q{2wsFF=_~I~dV0Vg*@*Q6 z*5d+NiPA2NAg$!TfXH5rnL>y6RsUmD3NUqrv^2B&_(;jW8xj63()=CxjbdAxyBw-&)+F2T85_WVA`Vf(+N&!TnNm%${`(3M;qUOru%SnL;^U_dJ8-<8=vI)0XiXeg? z%$#fmtuM=^t{kX3X9WcMj9EALBuqLOP^-f=jvgtlxaTO)?{w76wt zXdZ1pxOt#gm}5lqTj+`ro&CdNsL$RQ9(cE@E%TzoOZ4^~~l6CI2I6Q}yw?upgu;bYUer zg5}P4V&x$%*o%a^*jYi*C64`)|9zz4r60OsCTPajlt)LJccfw!i1nSz@vAp0dwQNyeyBkKCpZpB0EOc2Hm>*mJ-h^&qWg*J<1@Ua)Oz?7hVO+3OG4#l zeX)M2SadIZ0(9lg5G&t>0iYaoX@C&RWJcYOXdQN958{3-YA8{EM4gc?T6{r;IXT+t+%Mtk!t$v+3x8K3}nXJqsF zF9b!{rSQ596rYNeY|EfUa&L&Le7uJFGWWBgJ0$-^!d(JSb5jF1AC1EBC1C>(5iMP__zv?DwNYjq88aZM)rY0(DH1QKtdxkTUC zkX^=Gi1=h-I$qG)*B4zKogXuWgyRlmmHead7u6?Zy$4xi;|cikjtAJ`dl^O(=U?DK z8m92+dOdCoXmp`FN9=#nDIINx+k-UXX+cNN1^B|`!%kX2KH**v(W5FjV*%$HA;6Lz zul3coVeUwn`UYDUZkK>#mk!7GzXiu%lEJ~4V_FUY6{4@`oKvF#eO&09ScOpF{|`_= z0?Mv8^dEqSZ58RI&!jmdi8Cx}rMVAL85mK-fZH(4O?rd$A@z4g zijkZ0kUAHst9#u7x}|LK9ecjC^bQZd$%_71UAZHC2_k*Fcjb@pejLuA1SE2Fgr&d@AO`A``v3urtosp;@n@zN z(k)?p+=&;WMgk##<`h$R2Hv9k>zFjfKlui0GJX<0MezV0>DExiT?6 zAMvz~3eeORo{W&Ty2H3Ph)+`w7iXF!|2616?BfWDEFU8&J}sPG%k}Y3fJMiDXr|5s zNEo8?0PH^-r8)J0C5{IyMFf%B5TX#0$_ehAR^6MKGtEm_RT*ScZRjzb-#{PXP^p&#E>-MkVJ6iDimyqz*~(N69CEB2s+RQ z70sq>>Stk+&1>TV25epG&xj=1#2DTY6-bZOVLz0&r9fJGST(!N8*w?`dqvcL)g!D1 z7_usgqp_klBZe&A9`SU-Nt=)^?Q}VQ_FPDD8EOMDog&Xw)yKMeI=WPB4h|UfIiXCe zolbnlJ7@~01D9@qN&P7gErK2!+sxP82tJ7izIrz-d>L$1RE zcQpciu&4$~T{&AYzATdeBm#I#@rZr!HVOu@MRez^bDMt+Phm==@j^jnvpod48UdT*?+VV99~9EMg`95&{lZ%fg3=O=Db#24WW6QqdvoLc?jkT}@%h zcMIXccf7SUFBflUdUq@}y5H>kNk%KpQ$J&8O8`+{CsUgw8W zt+T&9fV!o?DQYrWWv^+n)_!Y=!V4*@jO_+x7qTX?UM7n{+^Mihb}{!X>@P8?p>G1D z07G9nLRO1l98>adK_t#}I(ctq?LI(8^rB0M2?IphLO#I8y?_T7i3*`XDR@L2iFqFs zhvNHqPC^I3&Q1@l5$FVu-R|<$rl0_;jE?%zB6Gu_qFPfD>T{AM$WTvqq8sbbjcuLw ztI=5&^iFe|gYx{_Pb;wPmJPG53jsFwosP!U;bK(7O^fnBI{#}Xe!wzF;d}Cvt zas3001y4{yP+kk{MgZbav6q8_hq?N zc*pvcn@WJO)Je#Eb)SXsGlvsHp+5i#C?o*V91=;EurEVbP8}1?B5gYdU<{CaDFw*Z zYzY)FucG=hrNA73k_Y~XC9QVK16gt#u3N zg5i#+v3wDvypeUFFGRZ4H3Y%40s{X`d|%NKg~Ycr@+1;T0Ws|s0J(*rNhHgKSE}tfE0b?q^cUixq_(o!Mfew*e*kvPR4 zfSII?n}*4&Wxd{~!iYq+@Pf_($R#;5RX*)e7zK zt|fE!m*$BP_%1Xbp8GHgcn;N!Nb(%d@Ixhs)6OY-f;^Z zTx%pXn1NgZ+()lc*ilV-rsA89`$>WKQAhQ3yU8<2TI#xTe!AViUh)&)p+@?~rb2NY z7aCbe42_uWxr=tKpqq0o@>CetR{Fc4B#!?hd|VpN{}9 z>*Bga_tAh2X#bG&4IIC_>oeu*=~?I!I!D!x9ie~H1^G=bxM{+BF1?q_s+{G5-PEo$ zk#wQ{$&I$y4NaD82Aa&#Wn%__6I3a{^9mv|OG5Gm*bR#Q6p8Qr9AlajtLt3BJXf$d z6}E;XzlEkM8uSzB1y>N#c-z z8?2$<6=EIgK+6~Be2J+rQ-azSI z!8&o(Sy7eLU|}{5OR1ej?Su4dQ?cY|F_a3>M`5!w*eAP4TJ|w#rprbBY@iETqNu2u z@)|OZ2f5L>6(x%LlJ{9P&>B5YGLAQ0e`~BZ-WDSrjkorMY*bBqC>%k&if9VtQs6BP zBxraI(>$g04-I|;cP+k6!8BuV@BS;92F>HOI#EgK`W)nt^U z4FKjksD`#LHfn-X?V$nfhS%ZH;8b*QI`*yI6cw~a+=^}o5-sDZ7ta59H%^54AZD3; zsYT>jo(QuDuT8XuCK?I$$yAFllaWVS2vdqun?0nX2`<@G_ZgWdDO`A{J_HyPH_^K#k(`H98JQ9J{5!GNh(`h-h6b&B#x&8x(2$ zC#ecj!aIZ)+A8;#p{pOXLOl=Uao*t~lJ)%rn7LZ^b-bf!KC}^8+u1xb9mifQlv_=e zsn`k`8V)cHN&cts1=9l`{=CB=q2V|I0tODp^vI$_AI=0Mpa3^{u^uS+_F*Z|n(&4d zJ_?ZL(fBNwFMws=n{~aO0-$lL! zG$QB*9{U}nbbO{pdXu|_Jdo4TLD73Cn+L6-+0@^Xe~VsYDw#8up|G zpK>BGY_bWa0O3&|HY5k7ESB&|Na6_&ZAzgXCt8H=;PH{CcV~bu(S%d+Cn~o)9IioL zz)R!sFutH&kW6dkY4Ie*Koc#z2cml7sogtj1)b?I1sx7wfxNMPBW)vY8$&`nx`FuK zf)c{FAQtOZz97R(!0>BmuS@+p{33qEFxT#<>;V5b`wX~9zJs(WXx06RQ>~Q;Zw}KQ zO)Q8HVIIWr9~HOq0?$_hU(mpVe)v1~MbsS0xx;1N=KIDXwJWsaKUO${Fd_$a#{V7= z*|aOnsxNdRC0gFIzAzgU2$oa``OSEJHRCN8`yv{O>6rbn`f&!w+aO4!Ym7MwXp}K0 zjB>`7HnIErp!alr`-9C0CZq8Mk=hu)l|Mia!8kbM3H%~_0zCGokGIdn?9OdT$sxakOV_*Rj+ZJpV*KwxFPAESol^tkhFB z#x`M`r>tW11l!~aTjlhL_e`EJuGCgpI(owB3NGI}Y24&V9scX5dzO`lt)6VdT0$NY)Y_Co2ltFE$**24L=n@y9)o607a14U(1 zY?I0=J>w?bYw}c#9yb9mw$jNHCyq8n(NH>h!sJON@1$4+9E6VshAK?sCQThZVcZxr zcw$+_xKfjDMG~pUlvR{Zm|TUodw{V?rNHOtii*+GjS-XY`4cd0f^#;Qwj^Xum|R(D zLblN!TdY3h7(Z!p)g-MG5WLSjS@ch(hwv{tr!tyObPV-MtP!vvMs3sqCLibVO(;Xp zB7>fQbECt`DkhGbG@5GDN{C`X13nrSt&0W?K!{hgva)QF$5u7YGd4ytCZ=E8*wK}6 zO9#YHnNa2_L*s!B!>2LcDIh+8VJjb3HermZqU=8JxC#KpLEFS}m6g;wQPEW36eK&L zY|_1`3Ewa(O25Qt*9b%0Cn)+8UJov#tP zt*oMAa)pToM5T8M4b`$SdLNm}uj|Fojx3!FEc1B!*Ps8lFd$g=NCUeYDY~4-)<{96 z#ulG7y)mKoUhvO6y$TAt-+0r_Jsh|6%)b>G`{2LHY)P@6)2el9o3?4`=VnNm?an(t z>w*g}%D$LN?p<)nrR^{4aJj8xrz`ANUUhZnoNKP_a$VQ!bMw00K;QpwdeHiU-v4C# z3;s`Uzc%NO88>}o`IM29CRa?vTy%d~lv3iqmyRwSTQ+9on6lE5Q!p*Xp2cgi>WBqR z4fXNi;~V0_1FpPaSmjmsNDT~6-fuvwyZF*m z-8uZjl4~w{s%`iEH=fGp@PfbJc+H7>d;ERiDJO?}_O9Eq>(d7R_)~5Uul!`|C09GY zS{FDqn8Q!3zw*6}FN}Y5@u}e)_P>13gZ2qazF2u`42KVYKJwgQ<*&cA?bHMgU-k2v zuOB`7?VYTibn9^ZV<2pMHqL zL#|r+@I!&yp1AY$V;ufqX3i9Q)v;Zk)6a2u;qo7rzwp7X|5$kXFC2dCLC^e6Bma8z zucw!Ac+<15E_`%~bH&=z?{Ikh1=6ac2U7oS*Xj2;yfiPbY{->weRAydS`IInHKVca z+ul!SHGjX*kM?c(0X!F?7X^!5rJ7|{w-oBvq`WYLatm#3wiSSGrzIVpPZZj7S zGO^&;G`2eY`d@l%**1~A`QebV(=!)cb@hN3=9}_4{naPdewz1U=|5gH@&3m2>KhFY z^(g!Ltq<6;w8`{E+3S}qNUitnFb(GP&s=t2pJSJeSbNYkoWsNRT>2kf#+5vBu6YcH z_lBliGUg}q=U1DtxX074YX37&zclg1K4!6g35MHj-w%GL z%IxRx>UGcF^~l`2=00M6h{Lyzc%ot5pc@;Om>=Wt+l!w(KKz|)9_*$i<(7{*ylYU$8Het?@Tu9BPdR)`?&VK@`R?LxpS66+ z;V0hyZup?hJ6~OD`JTi1&R71j^MPkiG+Op?IMex;SKRKY??o)XaQKqv3YP9)@OrRS z%1I7)@elov%>9=)+ET2vt2E{0JskewFPYEwOiAbP^Xbq1`NXrCdxoU2cBLujm!9|R zv~^xGC8a%o4{Unn{=54-tAi;r3;4_HaqXW{<(V>)TDIhu)O@C z=bpdlhEG3F$>;E2Fa7SFN4~iD-+zS>3aWo+)vlG3Ry`4stZojE|LMT9JuUOzyv9l= z(E4*=)+5_WT5UQ|?HsuO+wI?9(%)I|(7V$vd-DRP>DGrweLw7*LQ}(S_fD*Rz0kCH zM__38sfDKM-8WBPBNxKz@>Rc%Psi_~4r|}v-Us5FAD+v75x=GvAG>5C{leqb&Gc&< zx!6L#rm{~yk?Gg}*^~U+cwQ<0R{Oj1ujx-m3+TIP{u=RHuu%M({;2)h3oyOl**^=Z z=&9zv_#@)UCXILyj=ocjxsAE4`CN0VIo;gJJluS}nUhsx>{ic0(pgE&dvXdZ{@U;# zqTsXI_-upk^kj*j7XGj^5#L_>_LKHYak<)its%~-y24%=jY-%=#lspNv#j z8kN6XD{G2HyilANIVRKP+Bb^Zt-arAh!Z0MHn{~-88*^=r)L_K$FLOWM;A)!rL78*6Tl{2GnxAh5RhQX!~3%`&mGF0HQM-w8BxVC=T}iUq=)Sk4K}5(x~r!TZOAyiW4H(7B(Xe0SR5_$Ikg-1l19B~jQDd_)ujn{OtR-8XG|LfLF;mdexZ z_kTfy2(T_BpA#A#!=|l~j*ByPTT?PDNqd-F5Af`#+wUjIyur>baBF!L{W^gA)tzSX zAmHLazcfo91cYmb+o&9-f1)=$i}^2PT=?Cs#kD5Jz_2o1^O$2;nHG7>5iOE0i+(MJ z+-+$oE2#}Fy<9k{ZlZaG%Exmn;rfjAFwHwNMx{(MpP@J^>oKjYx3&J#@XKQ{0cLpj zu#kU{mTUsOMP=>Q${LS%f@^^VJSRls`XQ@3qw`$YAI|l)Di@s}eyro*<3 zyAV^wGm8G8tdIq`d?*DYXs)%GY#Cz=+>MfqLyCxI8j_FI@_M3eO6UjVjq-$nmM4?8 z$(aUc%Srl2NgIs#0WJCsel^CR?(em_=S2G^fnJSuSDRA?QRlS8Xkps0q_yz4@Sq+y zs}o@^$Gd?BVmy>-tyu8A0!zQ7wYbvI8A&Kjfn$XvO{99)YV~H(FVo&x+PBzjc`a$h z?zEILbH=OY@fmNK`{P&6SZs#pm?VgBp-&4?Reo#y!E=iKFm3fE+JX)2hpc_0wAGKM z3-o8MleuG*#`^I*R;`txbvSsVQ?z_)@i7<-9(|>Q#@@rF^$b`R(o#J&0t+fn~&G1gI zeej>kI*$T|Cv$)Z)EMIERfk{yrDVzSH){EF6Y}f*r~lIWFj;=nK#?&KF1?-l@1M?) zKTFG>o>0Fw9hmfA5;jr&xe4iPTK?a%abB(EPsnb%LCc>QPjwleMF!Ib( z)g!cD9q)SdOL(C&6Z4PN@-L#o4Nqcz%9}u9ocicck?9RXUV2T0e=3faaLyqNoZDSJb$PC%f{coY!(tVKy}s6RH57A`|l3x z<-)gN$a9l5uerSEln#}*xPt|m(z3(QMeUwj4mZ^~&?zctZ$7x{TtFk^&QW%7V0H?U ztXCVMt!6&ZvEj&$i<^CW(&3|#bsR)_5eT~$pOVozDqV$oszR1w9@0k+%BFti z3|ZgBn`y-*_>)slhM4C(gjdo=BP7c~cRQ=OR^7l9;b^R^z@@oRl@*m#+)HG0kL-(B z`-IX>kqd>+5%jIJ@7?J8bw%n9IhgN|a~e^2rHqSp)%m?l-U0vwTh}@2YJ6>Hu2+vc zj#jMUT68)wpcgtKI^8hEMIwt>cPR2*^bQMjWO}&N20}YjWzty#SAi;J=e+eqV3p@< z;{oGN8xr0wR0A$_Z^4Zu(rqzbFzX7$!|D#M3~4?cXzYaUv#zA^h_SONMaf=C>w&|y zDc;qjuNOf8huQjCz5m*MwtEpGDs5h+SScUo4mO1ZVR=) z2wdZQ^X77>e0ET`uk1h>9qXkzo$(oi6i5WRKVgCnHEfyn;X^D;ZO02b%*n|gd6bA;DtZLTN5%H zY=Fo^sVhjyAO4rQrmY_27?1q!6-sw ztx(2Na8rEFRL0^ubkPL7$w6ytT>4r`n)kONjG;ugcGOK6NddyZN*+nOcqH}27pizS zh{Y9>2xUoNcb7QLpO-t) ztG#5$wu(ve;WfB8S}yxeq)Z)M2%3;U6Z>=Oi6HVFpH-C57(yrE2AmsFxuoZ5b3!G$ zv)ueC>zR@@&2(s2UIDZ?N%!&~DpS8gd-Y~=1LvGTG-7xNaO*|8F9PYP^=@+7K%__7 ze$;LgMe9xMtsar)e}??BdVmQ|H1SKQR+fYmeL#TXHy~y}D7`fXL_70m)P`Q_W^F*6 zlIFaQ&peb~#EUi_j$u4JiXgSUHQFAIj)(l{c&Nm8Qp?U&a0AH}hXM?VA@~aZza{LZ z7rlSDqr(mn<&5iF(py9u{SN$w!}ucx(YZ*=gNVl$@w4Cnc=*bS)BMAo-(YdN6Zac1 z9jr3)m-LXe-74lUt1CJsvNM_wU}=@unKm!0tD$P>4*daW-(1m%A@VVEpL+S){C4Vb zX+F&YvU+?Kv!B&w?;FH=RteU#v*LvTq4w>7<(}r_<)DZT>akUV?KD>S8NI~Dru-zl0oMZHvms-7rVp_3)~=8 z4>2+^dJE*>g`s}Uj-8cPnYUH^(GjV*4b0+u*|*Ou2R>a1A(aXDqjkPZcgU90Zd$v_ zgs^@E?}(lzjL(MoU^&URBOfkrOFzqCvrNDv(|xx833!}z%M+LI{uy{SMlZhoGK9Pi z(j6nZ_m-PD1U0Nl0a|?pQ=rVAUWzy7ZNv%_hu_cmh{2Z|o4MBDk~)?XisRRcEf{L_Zjx>6R}vbaAJmJx1Obn&`KKt2rnq=rF!1-fO5CnwBtG?i5$qL|-%C z61k1O@*UVO9VRk9MZ@Z2nXmf{!PQFj zkQ4VAaO+nAhs8BnzT7P{@6dUGCp7$0Yq{KWM2E`TUBM!3SiX>!Wo2V4=8@$fZkd=H zT`5ISAFuc11wj~C6r#?xbcYfySAsW#G;mX;-l|hY%xnbaKl+$g6Z@pkLlh5i)V%-? z_fq$d5FmrD7&gO2Ndq&)en1|ImY&wQ2-a$7uC#2o$TS27;lYZYMhlRpfY$!Iv4g$1T8=X|R)pI}lCE~gop2f7Ela?5g>l1t#Us@!esd~R)mwD&?k%S@)Gg@e)9B|TXX$6Hp1Ay1iTt<| zdm1>7RmPl$QNlOk8S|Wu=c#~lVLBy>G(pL^BR2#4#T~x&bWW#Ht#A?zf{co zozl|Fxwtp+T}X4%yA}Dr5d94)jO3@z1>biZsu(AmKjs~ze0Xh&_pYMA_mckwd{u%4 zxTZD64x_SNumeL!^a(nzG~os2uv&vr!_a;vZ^j~5VH}`-R7u-g79g#pGl+6uey+)z zDj(T-@fP2=7bLK7y0@XtL>S@TD5&S`ZljdT2|bloc2CDK-gk? zz7?RiGf93Jjy8z_>r@YdV!#;0&|ZNL;_jfjj)v{8lu%k$f`UGheD@+$!klXjBCRHt zwfupS1ijfMxPwQ=PSqoBGt40NM6_=WkcWKp@D6T=Jn3L}=%%TNKud~f%a4VmG-n$k z%$sO^Ck4WIC;H$!fx(h=tgC|UZ$`ESyC~HO$1cf7>H)I4qbOJc;nOq>Z0y1ui1Y11 z0l9c74Cd2DlB_(?CUO&^$mK(*`v+*CNzU0(MAfcFv@?j!V~wMS6c|MXgmIgFtd;Nn z$Yv~XFi2^Co{j%7{||D3e}W4mqi_XYq+ero`PP|b$JZV=L^0CR5+K9c8q4Od=$1Ue zSuRb2kYiEjCnl6F=wG_APu8Pp_wA?c-v<|>#gYHi=<6SdFOVKzSNnq{@=R>~`T=dw zBkCFJCvgeYAElSO1pSQA=8@q{Ifm&(+gE%*0-bPI^n$4WgH9Cg5DSx#Crn1fwC}{n z!>0kZ7Pe9Nr&zcng~>J52P7k4fyoCX6JU>M%%5;2=N@l)d0B;RY}sgBv#@z4PqyLi z2Cfo~8-tq~d z^76{E1Rz9ek28iCNWe2U>(%MuSq@;fZ(KJBW@Ew=csGd3HkTBhUT zsZv}f1G4q2J}u#-%V#mvnzTl06k=>pd_t{9e>0uHPZBi87iZ!tZlX&^-^16K$}1*M z1j%Xlki^X+PQdN`ed)E<#Ik8Om`X=aA`FflJ+;g>+9qJ6Yg5!-gy~|J_K13M3C*ir zjk2BLnw6GbtC24q*~+GsmX(dEL@TsRbd}JiC7~XI&i(I1P#o15s4@YKTKmc-lue|o zU>Yj*rZLj!9wF@5^4&r`-I?1Y(s9Polg4PM5-q3{_!~2hcnZ}fZgN#JCN#W>n_}XC z71zt?3SK;^>v;Y@>bJPC@D^KVxR=kd<#p?NLsuMNTLGXA|Ifkyv-zDTaRWWHuBFF( z{~t`|X_@9r(_5!5!dyku39X3fG3tGy3Vz($FQvmWh@U0eFXbaWLwY`?KbCtlGJO`y zKq!>1L6Gv0o)$f{B%vo8|4F7s&s>TlU-d)UW~3Gi-LhBti^pGg8t8$^jV<< zZn=nv~HK^INaiGz}orW04uQYQ{EeGN)+g=tXXB8|_ePSb!iD!=A`uzc!6 z8^r(g45fOK!4D++TJ_5qWl^AZRTvMVoMw3+vHjv>p@k~wNge@6CP z(wp>Ip}?8a7WLT*S%Dc4_fH#xJXT^Fc&?2fThJxeaK*ZWthcIU0OlVE=9YuYnP!=S z4*(7dn!ro3ju)s#{(fD%sB&FbOx<~1qpEkNu5=rlF6wp#XD;gs=5}4BXLRX!Eqw1J zZ`Uamlc$tbc&3}WmW>@*UNL%Nbb93W{a5}F=!D8M>CBBMhGKY#Ul<=2pd&)-mguL~ z6Y}XFwBf7=O|)N4#sB|me&WScW;gsdK6?G+nZWqyLH+kyd`y;q6s_6u?AFGa2*q^P z^!&Hr1HC6CGZm1S2G3*SC;C?-#b~$>-Y7rOw(Pw8kJ;HAp3NBYDB0ofY#z$n0U- zX;wk=pn*6MxGqR`I5sOOgT}%fM|N<~l$;HYy;AWub&y>N4$4*kWX0wcCZ_o8XE}D8 z&5@skUl&;5BiR*<0znUi1Wz)AoxY>zNdB)7kQUCu-}k5s5NYc}IIZE?-;a_DH3e76H7VLGqyH8g7uxUk;`S~N2&bQA3CW>(0~ zZ7luU7_k3L`ltWN^bdomf2;gKkP(u*joJGa12MrDXx(NIPd;XU3K4l*I)06FZ&)Sv zUQR~9C@v;ft%O68#fTxrB;e};yqZWVWQFMPD9QLC?}w3IoKW$lBy}0p;W#v_0JPbI z6bmxdohyMlQ}aOdx>xa?X!bs>P4C6r#Hgt~=>w-d70{?P~-xGjHwt${t8ez0HR~xUdlVjR<6qF!NSh!?WxeCc!?rabI56F zT`yZ<`v>j@j@B325NlEkaavEJ>NR3O|I*Z-)B$2LE$GF}-nSen4U$n|@-43hKIU04 z_!NPvo^XMAs7GLmv)uO{;XkD+ots~-`Y0Im9l&3<+e5;@bb%Yv-GH*jdUZAWKN|&M z@IiP?XoFpDsN_+wGX*`D!5lV3iMj5OY^7{H_*js#p?^sQEwBl{Me1q@h&^5>exW%8 z^Vp$&CnKG8od@#TW4$WjZ%5O z)~W4NZ0VAW7|^w7ox0AMvkk@=L-kZ_a7GWZ&C9wmYPfk2@vHz5kNP^J0wd*BgrXxw z3Xo79qlNHILQ0%jE2WT|Dy3W8L7wbfIN!oK49p0MGtt^_tTI`~R)@pVs5&@3+lir+ z9X=A3_2vB|@}v&^_THN)XlINA>N-5AlX-{G#`1rU!>Vri5k@8?T>NO;o{guwB0AsG@FggA#I% z&90?Qa&0)}kn%e9XnRszxUoc)3-W4Q>g@wd)Z3wMcb~%iUkTnwWt4;-Cdsy3Kf5!2 zs9ASE<%SfoUQ*LUh1&owj$ zUFm{YxmVA^aV2Uzbn2O zsV2`4dXG>MNy)7M0`iCK-vdIq-f!PcpyC19r&E~XGw~lD$!7ZP^YNCq#RXaTSQkDL z<HCJ5;haXorm7*jU!;*X z3chcjPcUOfJ%@YwuDqJ4{sq&6o}B9A;Z8;4o!A{c5aq9Mh2FPQFL4Qx*Eru@%%7rV zMeQO+yGrX1d9XWl?=bEr^#sNxIs}L&gK^->)U&XPmaFTr{I9dy!B2|h{fSIqF~*aSOr%qd`J66obbYX<5AsY`O+Me7mAGAgeE zw&eJQhkZ2Pjmh&F=0`=q10LfCC;%onPryW;?15LDHp1EI0dNrCj~2}`Hkqu3ZPnTP z-a>}B#nh{a$lDTp(nS4*(RH4*Y~DV^F;AhBLT4?zSAlML19Zb{@eA({g*ECLaIs9X zN4meMA5ay1oJxQmUWkT!IR+{YiPu1LONOd1Pq2tK$)WCkwSgv33gsMdcB}#W>l5m3 zgBE8xnCUez0cuaD1Sm~g%tWVWTC~}svvWz{dsyEq#pF|B-Yw=Pbvrq2fVo#I3_HR^ zZ5Ex>XJwOyD40dL`jIndjbo>@fW&eNYZ_23ZfMBO!eZYrb?$5)!c(V;&+7BkB3fh; zuA)LPU$bl&ffeS6FDsaKLkxJ{dSEr3fP&gaw3~U#;BH>M(n{ZO zs{-A;TJL6Q*$(t&v$w5qIXj9Va6I3Hl$EW^Rek}RPcOk_*jf&@0>@6zgLW^xiU%Jj zwBgLMzI=0&FJgvg4&QFGx;f;WXU(bYxD(p7-{aJmRLa@ANfDf@@#3v0?+aHclrRU| zp*Vtt8LgG52NgK=fVQnQ6BJ<0CSbwyuOp{3C80v>cu=+MtFOO~ROa&$c)wv{M|NGY4ZC#C{Yo9i+kWjC73DT1AH{KhcX zKX*uu_NLiz7flE>8Kwi0hmiW9%;TT*GubJDv}_rrY+CTM@LFDnKrl!=TIGuw|Bf(^ zyK?nyN+>ORo7lb*EX*xer*uLv9ci(bd!3>YWedJdq)xj#`l2fBgF)&&bxM{Rq%XlB zE!;xW&Cr@y9}H$vc4<<*rZ(ZDkE)W1MFp0wDZvtx%1OjLqblqiSl0w)I@k7e(2E!a z(q;7V{I(LI=1607KRN`QgJnUOxd<{bm-%*E0$XH^S-DLuZd2rz`=({!&Ig&kmzF(A zZNmICk6I3dsXr6ntGE(-XaZaIeUkz`L&h{I)Og#IXotHU^LM%WBz=L08*)@pz$gPj zW#=6Z4$M*?WmF7ouRcn+4i3yzAEhF3U(1HOYn{r~M;S)iF#8A!u7t22%mlUyQiF<> zt`~fVYe+4$sfxAS@hBBS{Fq-*RXSEDcHir?x&}8Z%vGE4 zjq(W*)f%17$X8>M)xLqcXg!PdnEI=<>>!a=Q?LC*Pu>b8*gtnUF(F9poWWAs|7T$T zPZr8k3diOg{E&A2s5=`MuZp)rpr;7}pzUT3tNm?`&7?8T{x`I{M4|i4D@CSVP0J%( z3mgj+W=D1iof5IIU$Y3knZ3pUBKQwUu(Uq5NP)isDrwn57EBDa(Rc_}3C{`KnNqYf zMY#}Oi0=De?TQDJcLnf2L_MGnY9%-{H?KLRPgbyBc7gOreZ{r7dU&<;W<@3p603c( z%s;7>ww{&t%4-R6+}T**k~k9ULd@b_kQ~w%jSBSrWL*sJ1$znap4z;c$mdOk`)CDh z0)G*Am7+MddPjlO9Rsr~s)Cbk&fus_T6JL<4a{sf5C?4+cO&-PsB zB%eso-Q6#6jL{TTiCPnyBI<8i6Xwc4fdJtvokABUM~nXX&&fX)q>7v+5qwa(qVi9|0{qgIpNUcyFW6F2#b-@)~gtc8qKE+%#t3dt>`8sV^!CnL(mQAjF9tPlhz5>B~k;!5m@id(QY!6iFZQ2H~z!dVH!{fc_qdkm-&o%s@IvDXL1vJyj_s)Qbn6xli|DFR6 zV#tkNMgJZ~|Dtp2DvDCo zaSVTle&lxjXJlv7QJ_+9)A}>CN#D=K^Rrf7mwFJL45HL~7Nfk%*0TzD6=;nPXFs(E zy06-JsucBq4upQ$G}QpXmgErV@{AVarIoh~?$rp0VNoD}+&&>EG;jsluHkWh^OW{R`ks| zD7`r)6C*At+pr5bn0Hu}ZSYi@GF{9#Vqirl+@F%SOmF!9MJ335 zBSa*5E%F7guj>m_@x>(i;bomXdL<_hZ9YH?xtsKrQ`6ksB=IX9MCR5>ixU@5>tC)DOPH%b0^s0G_r>`)=P0BW7Vv4qlz zQIxveDX$BZUh662h4pG$SksC+SU4r85mP6f(MiRt)j|j~3v=rWaL`7DuEj+OURP`9 z(9z?;MEpMAwD}vz2NVsz^81(`nL;PcCo z%pEM6Rsw(8=r78SVj-(=s^7WIUj!>t-MAm+bijRk6Mfw)#Km$wL_IzlABHG*C z5cZ|gFj|F#!2nT!qtL4PXe6?kdV4GVFk2Vm-jSOd8fEvghzM-p8kELXAod}mRdAB}JIl#XNI%FR zBTq49DeAZ2FymE@E(0%M8_}O8uIiMfT$vy2#3XzORwV!ajD_vqfB0b(C4gbzLS9k0s1T zduLy6VM!&>ocnXWhBKH-4^hV!*?>Dl z>w(<~c+9z#AH*~x_#Ez968g*t{*~$7<p1_+#S&%A& zK{E2gZQo_s`3V(l?7-UEO;4`75VIQWH^eYpdCll#@AuCh_)B>yc}8UW1Yn>slsZz^ z@7W_MtJ~SiX9QQCEiZpP25KN~Eri^-zQWNfb_+{eG95gg7Vd_2gfY8X`i6zBWO2m; z-EK<TO1)5bpljcEZo2Rv>ju=_URbH5g)IC{;oPY1$YOgqXFUcY zg(bLZ;-*@DVI`b0EDT1rJF;wQ<1EyMN()EZCQ8y^WpTWK$JP?llTtTfyGqO^r6|obTiQlf}_!2@d<_nN>`Z9(ptywDXrttIGvd^f?DRY2}|u` zP%(1Gv4ySfrNx*$Meci4BqZFAahvri&UeR%YNJ3#2gbYwBf9+(#Tn(7s{yNdw0YVN zr9Xsxg#@I*7A!}!)Pd=ik$_Nsek`jJvR@Se*x$1*_QE=RSaCR$!zxXf7b=hPV7Qo2Dn26v9EIhr2c?D;AMW-vRuN zRe^;9PV6CB;Ek(_+7Gg}luC+5acchmSD`0(?u7V|r4e+>gZz$@)?h?AS!+)?F5AC` z4;P7m(+W=AehZQRZ8jT5OFCSfY{)`bUmm``iIkT8q6cMhaHpVbGDWOUKl<09UwI`M zZ^Va>U;O-}U2n)RCzEwSi+4N|M;kc!64P<`y`Y~BF~s2Fn z5>wW|Z=-gl$9jr(>$CKXKPaj z(-fWEG(D1jl%%B|rr%9y@1Xe%Oou!Ba3bvfP~+CMr-q!h`@{CdpQEj3Job3%_h^V{ zZImX|r6W$hR9rIN(dr#)Ez!yxwWSPKoqcBgm~H9%iLB~ud_P3!$geSB1U<9sb6t`qAm%R1!iIGh_UBq-pe0WBI!%TR+hep2_8nstNHgc5#ZEMY(bFV@( zO+7&G&Y%gl!N+m*VN-MTVXqox#R>FbQ&$J;!#*Iu zCY3&H1~^aY!@TS96W_&p{MUoqY0z*_a5UCCsh!pOxQVVlZmLHg2hk+@xY9g*Tp~vw zcaqY_&3>FjNe1cT9w-1rRvHHBI@@`nZGOF0lSP)yGX;eSCdf`(x5B>f@G! zlm@W_1={5DmuGSt){|Rv1pSaTFdS7D_UPT2xkb(+oU(Ej>rPGW*J|L^4AyC4Rf6?5 zc2~?oZxI_V8CKN9l~(r9pE{!YwEqmldogE%=^N*$n9Yh&8vbG882iJzb{2}cFek0p z<6-X+bN^I#fvIZhO8@t{tPsG3@sFYD3CXey4J_+NlIV<(qfpB|WN=hyT1tWqj{>ir z`4|SS|5g25?)+pzWYb;%r9LBLP>yfnZW_+*M3~AfHt?Z9-?P2ofFL~n;zPBF(QlO^a@a7x%x`}N06LDm}4*NWQ6ZG7O zFWu7C_UBuRjwFg+=uFQEMK*D*&}qV#?7rr@XS(|3GkZwg?WRhnDVn*l=&e8g$F%*K z=F_pshcl1f=FGfsr#+#wd3Jk6?^#}Lbg7E!% z_--6di4h%kL0q(cVf3ry)Be$K88n@Sp*>)%FwyTje)QzvXb*2|e2X<%NvaHrR;y;r zf=k`(`o~!X3USwi^wj(@EIRCk#+k#1;yg7OFK3u%e$Hv4eM~+=)b~x``U&kKJ@k}C z3oI@r+UcxO$auIjeG$kgAA>EGbz_Qj>9Me;Av}M!L^I1v($Bt;Nrhoy5L-RHr%4D{ ztOz*6!g6@#@?y)L+-Xp6qBt;pl=5M40 zYO`IP>3vH+0%Wxv8w^Z>Bo9wJ8(jS<3od;}!_CGdlpBfCkiH;sW`mEzee;_!T z{aNe;v@NK%?ev-#_I1X@l9u+B^5BhRex21_f56AyQJ~Nk6(sDzkd20(ZoDJ=KDn5y z@MUk0;^QE;oo2%~Pq5|gt;5;EFM_kTaAINIwX@HWr)+)|pMA%+60VK8^?^oMbS{Q* z{uWxI?i3?Jggu!IV;raH0%HTKfl(`$ap6ju9DD--7LR@kkUd)9lME!8Ln z1O(@7smG%g+fs{LatiC2Xbl3@T$Kg@>-ogclaX`@liCyT)PScfyl#2#mzng2K^EqA zD|~3|Dn(HZEYa}7w+eK0kvGcT2cOO_t3vGEP@N`W(2GB9e`xO{Kc0!rL6|mqJMmdK z4?!$HOid35*JPpxf}=e>&e$WkAM;fnoqF?h>^BrBWqGLoV?B_eiUl*i)D0RaCX_tWX)I$oSA?#Qml2wr37^ns` zRFO@cm{yKHAmKUq0oAeY_EIidbQ=dz;GnqS-6I)oe0*W*9JZkTqn?^gQhqB_?_ra6 z`ilqLYPlx+g>s^I$iw=bXlTc>?%wm%q3q}N_Ozd;eVv_Wd@HmQ8Mx-2J15nFS5-C9OD>7()82JqZOVU|lsB&Q@R9=ebmLF2 zd}8INZ(q40xwLBqTt%o9aJQ0Lk*tYcd`UD1j=Xg6zt^VHN}>3dlfFBVtb4*EjETh)aC0;_@lI(ju@qN=WrC|X+^oiQVdM-sXV6tAwn;QaGHe11*zyeM72 zt?bM}$0`>c(Q~68t`UG!J9sZD>Mt2C^l^bs@2)@TJSi0T%x1Iu)SZDH2jWn=bC_`JG+# z9Qm1Lt_bkOx3BEJ$&DjQeeuFUZA&{k421*ZmvwY0X;C=8CYQf_pry^z`||QH?e1oh z0LC;0`tCmXycyfNQ@zW5$@5-)`5_2bz<1xWaYNwCp9j1zK8s&3q#me_pWc&DKl;+M z{v4^;*157rHAeX=^p|j={QmT9?eL5W{Nz^B(bWU*hfEt#o>x5k<8^7-Bmwz7QZ29i z_T|gkZ$Niao-_Tx=EI}XE8KfLWd>x_K|XkL>ubv|!k=DYE87Hkpk3MCw%l|dKR$Yv zVentItj*2fE6?Rm(}@bj=g`N~yh7;>1$^-tRV^59Vso`Q6Mh-=D0KSaLrb>q$KDX)CS8&Mt99?k#2uP(w@zK+ip zvFuY_NlXqg(Nd7f`zMydg`K)&Owv_y5YoW~Z@&7LtwHgg3FuOnQFRH&Pmk3;&AvEOqdnmv^Eu)w|iXRm5@5)DQHS)g~ zKVEJ8*H~V$xp+Z&Rk{S{xqlXiwj-diyp+x{>k(}+4X*bQQ26G|@GSXlC2*>`8NM-b zra1gu7WXMPtBuBaB{H*(8<`Q;2l%hKyn|Pa=6V~qwi{kw$9rg_G05e_O zinFk9K3M?9N$=+%_!#4G@n8$WyREpHzB~bMI$ZpwY95?;%Gvfz&(#=SXLC2M-~z26 zE{2Lqy5Y04s!2+30y;uf_+6*d$M77wf-qcPPTH|;a&|iIG09nb6XPQo)Uw#zt=xgxE|y`!5e%9Z!Wo%>8}Eb*T4lTFarz$d-LhzHR}2q-j{^3fqJmBK?Vw7_m%klbl z#c}WHi7n-0MJ4-CSb%R=@h{8%woR8O{Nd%X{-WYxm&GnCt4CVd!GrrB@nhW?^2Rp$ zqSgJa1;qHiVhnG8n}y`B=z4fMh2mxKewulU+uUm4akgKP0=>MkjQP&d!iZ{SMSGze zU%n?s?SSY95z5CATrkRWef zrPKaB(-y)tBts6ak$F0j_vyTBuc`-qO6VIeuWAwU3Our<1xdsoxZpzMH+)d1!=Esm zhZO&3}Mv z8~eWY1x?@Tt^`Ch$I<0Fy%|g4vi%AaH@|Ftc`4(!9w(mleM86p3eO(egIm$};9*f0Do-MoLH^ zv|M`lHRbh7%NrI*8;c)6G&-kOoCtoCy6lXLUy;9@OBDavZBCQO+`Dz!X9-`n?V$T= zH>F=rvTcWSKHY3J{_8L;8YC=qG7EOQfyk#y9VV7SIdv{~>zp4Tn-eCEDj|Dfl^I*;kF%NPJy z_4tW-%;qp$tjl=NR$h&FmwYl7)KVbgx+Iq`(8lbzi?)(2Tp>EItoS(}E66;N{eHbJ zFGw!1jd$yKZyUd-!%Q0~@Av93IrBl<6EMCV1r&hPZBa|vjXqFi&PDuGoq~V3-p&|B zd3w3d=a;9|h`Uk8jc5G2OQ#(q5QWz5_OgT^Wn196OWCv&h?k#t94-*tB5(npdoJ~VM^~x!HaaAGjy*lrec*a~U%41PDA!G1f z9p~*QPX~mJ`NBy1uqL+2%i=>bdzWMN5$nyNnMthXhGupwO)d@1{6ueWXlBn!zW5H& zP_OP08*Zxh-Xsp%_=_B{fo5=6Agc8g7*FbI(D&WuLBDJC=(mvc1Lo)S&U?M5(fgKt zW?Juc242XQ?=(NhNS65_{JdAGuD{z?u;~K^j&XHGr6 z*OGbat>09rBct9#c%F+N%R0>$9$laUqP}oboVhPVJoDH3(lzM(Cpx3!I-TE_J+w&Y z_lKKyoABj$pzQLu|2m!D50`=4d6Sh9qMU5U2Iy131EH!)NEM#+S_+Xp11*zgS&%;b!yF{@}G9{W}5KWW;P<8lKPz@!u~{WD;KFA8EWfy1U_$C9%&vx1B$ zuPN$$fvf^2H`PqEVF&-)eGD798Ww4ao{!vxchwf+=cho5)ekdB-`Co`9zSi&Xt{4;wu;wucB**v_tZ@4`HJr9Ak4!37kAl z;U-1wOCbl)wvT>Y;;~(kjh{!Uap%VA$6DcxV=NB);CRssKy~W;(Vu5+=x9AU+p0N8 zw@#l0$W2x88ti?Oq5T z&~t}Irlx0H)AROhelNWu8}C3t?}lbanBQ4gq548qf)rR-F){|fr#bx@@?=QM6PV({ z&C{(90aKO(S8J~e-`~ww`$g<)sjz0REY)WqiJ(fH-2!{cpCs%Z3A0hNXtxE^eMk7l zn%xAEZ~C=UVP$ScKjHo%IcQ+RZiVSP*TdB}j=TV}*AVqJPiz=aF;^dx12F!@lox9% zO>KWj#qF`q=8;a?kQ9OnyZNwnp|9=;rIvc3yaarTMX@KG|jAlmhLmzlo zIz!GKIbY+|p>8s7H*tNcC=pWHbeuL+$_tZ?MJSiUnkyI0FZ_|RloNu6#d zCjl()9{fg+vGpd9QcDezsYCr!{daXI>w+mu*vU-tJGAW?-uTa z-#-VgVxhRWk-&TT^D{bV4qU4f%J;CR0AF#iJ?Z?^(r$MO3^UT~rJmLQ3ueudh!53W zP_I&q|D3ut6dw9&kb478sVmdx1l>}>`C7S^fxqO~pgu!}(=Lp`!fhCFc~npX(x?9x zg6s8Exjv+Jg6PdFLro zHLs;d)~my#;@D_gA@k2x8%;3VNxGOdzH{Js}IUfb2}zhfQnFEa9$+j&h>H}^mJiI;)nZ2j!dPru;2{A01nXYPg8{mdEAX6;^;rg+CZ^F9|p zmQ~9a&-JXX|3q_^%aF&w;>jMO!|0&PpLQ`41bpNb^9F*d=Lu_k`Tg+!7qqoX%m4rY literal 0 HcmV?d00001 diff --git a/nostrdb/bolt11/likely.h b/nostrdb/bolt11/likely.h new file mode 100644 index 000000000..3a2f18e6f --- /dev/null +++ b/nostrdb/bolt11/likely.h @@ -0,0 +1,115 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_LIKELY_H +#define CCAN_LIKELY_H +#include "../config.h" +#include + +#ifndef CCAN_LIKELY_DEBUG +#if HAVE_BUILTIN_EXPECT +/** + * likely - indicate that a condition is likely to be true. + * @cond: the condition + * + * This uses a compiler extension where available to indicate a likely + * code path and optimize appropriately; it's also useful for readers + * to quickly identify exceptional paths through functions. The + * threshold for "likely" is usually considered to be between 90 and + * 99%; marginal cases should not be marked either way. + * + * See Also: + * unlikely(), likely_stats() + * + * Example: + * // Returns false if we overflow. + * static inline bool inc_int(unsigned int *val) + * { + * (*val)++; + * if (likely(*val)) + * return true; + * return false; + * } + */ +#define likely(cond) __builtin_expect(!!(cond), 1) + +/** + * unlikely - indicate that a condition is unlikely to be true. + * @cond: the condition + * + * This uses a compiler extension where available to indicate an unlikely + * code path and optimize appropriately; see likely() above. + * + * See Also: + * likely(), likely_stats(), COLD (compiler.h) + * + * Example: + * // Prints a warning if we overflow. + * static inline void inc_int(unsigned int *val) + * { + * (*val)++; + * if (unlikely(*val == 0)) + * fprintf(stderr, "Overflow!"); + * } + */ +#define unlikely(cond) __builtin_expect(!!(cond), 0) +#else +#ifndef likely +#define likely(cond) (!!(cond)) +#endif +#ifndef unlikely +#define unlikely(cond) (!!(cond)) +#endif +#endif +#else /* CCAN_LIKELY_DEBUG versions */ +#include + +#define likely(cond) \ + (_likely_trace(!!(cond), 1, stringify(cond), __FILE__, __LINE__)) +#define unlikely(cond) \ + (_likely_trace(!!(cond), 0, stringify(cond), __FILE__, __LINE__)) + +long _likely_trace(bool cond, bool expect, + const char *condstr, + const char *file, unsigned int line); +/** + * likely_stats - return description of abused likely()/unlikely() + * @min_hits: minimum number of hits + * @percent: maximum percentage correct + * + * When CCAN_LIKELY_DEBUG is defined, likely() and unlikely() trace their + * results: this causes a significant slowdown, but allows analysis of + * whether the branches are labelled correctly. + * + * This function returns a malloc'ed description of the least-correct + * usage of likely() or unlikely(). It ignores places which have been + * called less than @min_hits times, and those which were predicted + * correctly more than @percent of the time. It returns NULL when + * nothing meets those criteria. + * + * Note that this call is destructive; the returned offender is + * removed from the trace so that the next call to likely_stats() will + * return the next-worst likely()/unlikely() usage. + * + * Example: + * // Print every place hit more than twice which was wrong > 5%. + * static void report_stats(void) + * { + * #ifdef CCAN_LIKELY_DEBUG + * const char *bad; + * + * while ((bad = likely_stats(2, 95)) != NULL) { + * printf("Suspicious likely: %s", bad); + * free(bad); + * } + * #endif + * } + */ +char *likely_stats(unsigned int min_hits, unsigned int percent); + +/** + * likely_stats_reset - free up memory of likely()/unlikely() branches. + * + * This can also plug memory leaks. + */ +void likely_stats_reset(void); +#endif /* CCAN_LIKELY_DEBUG */ +#endif /* CCAN_LIKELY_H */ diff --git a/nostrdb/bolt11/list.c b/nostrdb/bolt11/list.c new file mode 100644 index 000000000..c9ee35c70 --- /dev/null +++ b/nostrdb/bolt11/list.c @@ -0,0 +1,43 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#include +#include +#include "list.h" + +static void *corrupt(const char *abortstr, + const struct list_node *head, + const struct list_node *node, + unsigned int count) +{ + if (abortstr) { + fprintf(stderr, + "%s: prev corrupt in node %p (%u) of %p\n", + abortstr, node, count, head); + abort(); + } + return NULL; +} + +struct list_node *list_check_node(const struct list_node *node, + const char *abortstr) +{ + const struct list_node *p, *n; + int count = 0; + + for (p = node, n = node->next; n != node; p = n, n = n->next) { + count++; + if (n->prev != p) + return corrupt(abortstr, node, n, count); + } + /* Check prev on head node. */ + if (node->prev != p) + return corrupt(abortstr, node, node, 0); + + return (struct list_node *)node; +} + +struct list_head *list_check(const struct list_head *h, const char *abortstr) +{ + if (!list_check_node(&h->n, abortstr)) + return NULL; + return (struct list_head *)h; +} diff --git a/nostrdb/bolt11/list.h b/nostrdb/bolt11/list.h new file mode 100644 index 000000000..4574e911c --- /dev/null +++ b/nostrdb/bolt11/list.h @@ -0,0 +1,842 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#ifndef CCAN_LIST_H +#define CCAN_LIST_H +//#define CCAN_LIST_DEBUG 1 +#include +#include +#include "str.h" +#include "container_of.h" +#include "check_type.h" + +/** + * struct list_node - an entry in a doubly-linked list + * @next: next entry (self if empty) + * @prev: previous entry (self if empty) + * + * This is used as an entry in a linked list. + * Example: + * struct child { + * const char *name; + * // Linked list of all us children. + * struct list_node list; + * }; + */ +struct list_node +{ + struct list_node *next, *prev; +}; + +/** + * struct list_head - the head of a doubly-linked list + * @h: the list_head (containing next and prev pointers) + * + * This is used as the head of a linked list. + * Example: + * struct parent { + * const char *name; + * struct list_head children; + * unsigned int num_children; + * }; + */ +struct list_head +{ + struct list_node n; +}; + +/** + * list_check - check head of a list for consistency + * @h: the list_head + * @abortstr: the location to print on aborting, or NULL. + * + * Because list_nodes have redundant information, consistency checking between + * the back and forward links can be done. This is useful as a debugging check. + * If @abortstr is non-NULL, that will be printed in a diagnostic if the list + * is inconsistent, and the function will abort. + * + * Returns the list head if the list is consistent, NULL if not (it + * can never return NULL if @abortstr is set). + * + * See also: list_check_node() + * + * Example: + * static void dump_parent(struct parent *p) + * { + * struct child *c; + * + * printf("%s (%u children):\n", p->name, p->num_children); + * list_check(&p->children, "bad child list"); + * list_for_each(&p->children, c, list) + * printf(" -> %s\n", c->name); + * } + */ +struct list_head *list_check(const struct list_head *h, const char *abortstr); + +/** + * list_check_node - check node of a list for consistency + * @n: the list_node + * @abortstr: the location to print on aborting, or NULL. + * + * Check consistency of the list node is in (it must be in one). + * + * See also: list_check() + * + * Example: + * static void dump_child(const struct child *c) + * { + * list_check_node(&c->list, "bad child list"); + * printf("%s\n", c->name); + * } + */ +struct list_node *list_check_node(const struct list_node *n, + const char *abortstr); + +#define LIST_LOC __FILE__ ":" stringify(__LINE__) +#ifdef CCAN_LIST_DEBUG +#define list_debug(h, loc) list_check((h), loc) +#define list_debug_node(n, loc) list_check_node((n), loc) +#else +#define list_debug(h, loc) ((void)loc, h) +#define list_debug_node(n, loc) ((void)loc, n) +#endif + +/** + * LIST_HEAD_INIT - initializer for an empty list_head + * @name: the name of the list. + * + * Explicit initializer for an empty list. + * + * See also: + * LIST_HEAD, list_head_init() + * + * Example: + * static struct list_head my_list = LIST_HEAD_INIT(my_list); + */ +#define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } } + +/** + * LIST_HEAD - define and initialize an empty list_head + * @name: the name of the list. + * + * The LIST_HEAD macro defines a list_head and initializes it to an empty + * list. It can be prepended by "static" to define a static list_head. + * + * See also: + * LIST_HEAD_INIT, list_head_init() + * + * Example: + * static LIST_HEAD(my_global_list); + */ +#define LIST_HEAD(name) \ + struct list_head name = LIST_HEAD_INIT(name) + +/** + * list_head_init - initialize a list_head + * @h: the list_head to set to the empty list + * + * Example: + * ... + * struct parent *parent = malloc(sizeof(*parent)); + * + * list_head_init(&parent->children); + * parent->num_children = 0; + */ +static inline void list_head_init(struct list_head *h) +{ + h->n.next = h->n.prev = &h->n; +} + +/** + * list_node_init - initialize a list_node + * @n: the list_node to link to itself. + * + * You don't need to use this normally! But it lets you list_del(@n) + * safely. + */ +static inline void list_node_init(struct list_node *n) +{ + n->next = n->prev = n; +} + +/** + * list_add_after - add an entry after an existing node in a linked list + * @h: the list_head to add the node to (for debugging) + * @p: the existing list_node to add the node after + * @n: the new list_node to add to the list. + * + * The existing list_node must already be a member of the list. + * The new list_node does not need to be initialized; it will be overwritten. + * + * Example: + * struct child c1, c2, c3; + * LIST_HEAD(h); + * + * list_add_tail(&h, &c1.list); + * list_add_tail(&h, &c3.list); + * list_add_after(&h, &c1.list, &c2.list); + */ +#define list_add_after(h, p, n) list_add_after_(h, p, n, LIST_LOC) +static inline void list_add_after_(struct list_head *h, + struct list_node *p, + struct list_node *n, + const char *abortstr) +{ + n->next = p->next; + n->prev = p; + p->next->prev = n; + p->next = n; + (void)list_debug(h, abortstr); +} + +/** + * list_add - add an entry at the start of a linked list. + * @h: the list_head to add the node to + * @n: the list_node to add to the list. + * + * The list_node does not need to be initialized; it will be overwritten. + * Example: + * struct child *child = malloc(sizeof(*child)); + * + * child->name = "marvin"; + * list_add(&parent->children, &child->list); + * parent->num_children++; + */ +#define list_add(h, n) list_add_(h, n, LIST_LOC) +static inline void list_add_(struct list_head *h, + struct list_node *n, + const char *abortstr) +{ + list_add_after_(h, &h->n, n, abortstr); +} + +/** + * list_add_before - add an entry before an existing node in a linked list + * @h: the list_head to add the node to (for debugging) + * @p: the existing list_node to add the node before + * @n: the new list_node to add to the list. + * + * The existing list_node must already be a member of the list. + * The new list_node does not need to be initialized; it will be overwritten. + * + * Example: + * list_head_init(&h); + * list_add_tail(&h, &c1.list); + * list_add_tail(&h, &c3.list); + * list_add_before(&h, &c3.list, &c2.list); + */ +#define list_add_before(h, p, n) list_add_before_(h, p, n, LIST_LOC) +static inline void list_add_before_(struct list_head *h, + struct list_node *p, + struct list_node *n, + const char *abortstr) +{ + n->next = p; + n->prev = p->prev; + p->prev->next = n; + p->prev = n; + (void)list_debug(h, abortstr); +} + +/** + * list_add_tail - add an entry at the end of a linked list. + * @h: the list_head to add the node to + * @n: the list_node to add to the list. + * + * The list_node does not need to be initialized; it will be overwritten. + * Example: + * list_add_tail(&parent->children, &child->list); + * parent->num_children++; + */ +#define list_add_tail(h, n) list_add_tail_(h, n, LIST_LOC) +static inline void list_add_tail_(struct list_head *h, + struct list_node *n, + const char *abortstr) +{ + list_add_before_(h, &h->n, n, abortstr); +} + +/** + * list_empty - is a list empty? + * @h: the list_head + * + * If the list is empty, returns true. + * + * Example: + * assert(list_empty(&parent->children) == (parent->num_children == 0)); + */ +#define list_empty(h) list_empty_(h, LIST_LOC) +static inline bool list_empty_(const struct list_head *h, const char* abortstr) +{ + (void)list_debug(h, abortstr); + return h->n.next == &h->n; +} + +/** + * list_empty_nodebug - is a list empty (and don't perform debug checks)? + * @h: the list_head + * + * If the list is empty, returns true. + * This differs from list_empty() in that if CCAN_LIST_DEBUG is set it + * will NOT perform debug checks. Only use this function if you REALLY + * know what you're doing. + * + * Example: + * assert(list_empty_nodebug(&parent->children) == (parent->num_children == 0)); + */ +#ifndef CCAN_LIST_DEBUG +#define list_empty_nodebug(h) list_empty(h) +#else +static inline bool list_empty_nodebug(const struct list_head *h) +{ + return h->n.next == &h->n; +} +#endif + +/** + * list_empty_nocheck - is a list empty? + * @h: the list_head + * + * If the list is empty, returns true. This doesn't perform any + * debug check for list consistency, so it can be called without + * locks, racing with the list being modified. This is ok for + * checks where an incorrect result is not an issue (optimized + * bail out path for example). + */ +static inline bool list_empty_nocheck(const struct list_head *h) +{ + return h->n.next == &h->n; +} + +/** + * list_del - delete an entry from an (unknown) linked list. + * @n: the list_node to delete from the list. + * + * Note that this leaves @n in an undefined state; it can be added to + * another list, but not deleted again. + * + * See also: + * list_del_from(), list_del_init() + * + * Example: + * list_del(&child->list); + * parent->num_children--; + */ +#define list_del(n) list_del_(n, LIST_LOC) +static inline void list_del_(struct list_node *n, const char* abortstr) +{ + (void)list_debug_node(n, abortstr); + n->next->prev = n->prev; + n->prev->next = n->next; +#ifdef CCAN_LIST_DEBUG + /* Catch use-after-del. */ + n->next = n->prev = NULL; +#endif +} + +/** + * list_del_init - delete a node, and reset it so it can be deleted again. + * @n: the list_node to be deleted. + * + * list_del(@n) or list_del_init() again after this will be safe, + * which can be useful in some cases. + * + * See also: + * list_del_from(), list_del() + * + * Example: + * list_del_init(&child->list); + * parent->num_children--; + */ +#define list_del_init(n) list_del_init_(n, LIST_LOC) +static inline void list_del_init_(struct list_node *n, const char *abortstr) +{ + list_del_(n, abortstr); + list_node_init(n); +} + +/** + * list_del_from - delete an entry from a known linked list. + * @h: the list_head the node is in. + * @n: the list_node to delete from the list. + * + * This explicitly indicates which list a node is expected to be in, + * which is better documentation and can catch more bugs. + * + * See also: list_del() + * + * Example: + * list_del_from(&parent->children, &child->list); + * parent->num_children--; + */ +static inline void list_del_from(struct list_head *h, struct list_node *n) +{ +#ifdef CCAN_LIST_DEBUG + { + /* Thorough check: make sure it was in list! */ + struct list_node *i; + for (i = h->n.next; i != n; i = i->next) + assert(i != &h->n); + } +#endif /* CCAN_LIST_DEBUG */ + + /* Quick test that catches a surprising number of bugs. */ + assert(!list_empty(h)); + list_del(n); +} + +/** + * list_swap - swap out an entry from an (unknown) linked list for a new one. + * @o: the list_node to replace from the list. + * @n: the list_node to insert in place of the old one. + * + * Note that this leaves @o in an undefined state; it can be added to + * another list, but not deleted/swapped again. + * + * See also: + * list_del() + * + * Example: + * struct child x1, x2; + * LIST_HEAD(xh); + * + * list_add(&xh, &x1.list); + * list_swap(&x1.list, &x2.list); + */ +#define list_swap(o, n) list_swap_(o, n, LIST_LOC) +static inline void list_swap_(struct list_node *o, + struct list_node *n, + const char* abortstr) +{ + (void)list_debug_node(o, abortstr); + *n = *o; + n->next->prev = n; + n->prev->next = n; +#ifdef CCAN_LIST_DEBUG + /* Catch use-after-del. */ + o->next = o->prev = NULL; +#endif +} + +/** + * list_entry - convert a list_node back into the structure containing it. + * @n: the list_node + * @type: the type of the entry + * @member: the list_node member of the type + * + * Example: + * // First list entry is children.next; convert back to child. + * child = list_entry(parent->children.n.next, struct child, list); + * + * See Also: + * list_top(), list_for_each() + */ +#define list_entry(n, type, member) container_of(n, type, member) + +/** + * list_top - get the first entry in a list + * @h: the list_head + * @type: the type of the entry + * @member: the list_node member of the type + * + * If the list is empty, returns NULL. + * + * Example: + * struct child *first; + * first = list_top(&parent->children, struct child, list); + * if (!first) + * printf("Empty list!\n"); + */ +#define list_top(h, type, member) \ + ((type *)list_top_((h), list_off_(type, member))) + +static inline const void *list_top_(const struct list_head *h, size_t off) +{ + if (list_empty(h)) + return NULL; + return (const char *)h->n.next - off; +} + +/** + * list_pop - remove the first entry in a list + * @h: the list_head + * @type: the type of the entry + * @member: the list_node member of the type + * + * If the list is empty, returns NULL. + * + * Example: + * struct child *one; + * one = list_pop(&parent->children, struct child, list); + * if (!one) + * printf("Empty list!\n"); + */ +#define list_pop(h, type, member) \ + ((type *)list_pop_((h), list_off_(type, member))) + +static inline const void *list_pop_(const struct list_head *h, size_t off) +{ + struct list_node *n; + + if (list_empty(h)) + return NULL; + n = h->n.next; + list_del(n); + return (const char *)n - off; +} + +/** + * list_tail - get the last entry in a list + * @h: the list_head + * @type: the type of the entry + * @member: the list_node member of the type + * + * If the list is empty, returns NULL. + * + * Example: + * struct child *last; + * last = list_tail(&parent->children, struct child, list); + * if (!last) + * printf("Empty list!\n"); + */ +#define list_tail(h, type, member) \ + ((type *)list_tail_((h), list_off_(type, member))) + +static inline const void *list_tail_(const struct list_head *h, size_t off) +{ + if (list_empty(h)) + return NULL; + return (const char *)h->n.prev - off; +} + +/** + * list_for_each - iterate through a list. + * @h: the list_head (warning: evaluated multiple times!) + * @i: the structure containing the list_node + * @member: the list_node member of the structure + * + * This is a convenient wrapper to iterate @i over the entire list. It's + * a for loop, so you can break and continue as normal. + * + * Example: + * list_for_each(&parent->children, child, list) + * printf("Name: %s\n", child->name); + */ +#define list_for_each(h, i, member) \ + list_for_each_off(h, i, list_off_var_(i, member)) + +/** + * list_for_each_rev - iterate through a list backwards. + * @h: the list_head + * @i: the structure containing the list_node + * @member: the list_node member of the structure + * + * This is a convenient wrapper to iterate @i over the entire list. It's + * a for loop, so you can break and continue as normal. + * + * Example: + * list_for_each_rev(&parent->children, child, list) + * printf("Name: %s\n", child->name); + */ +#define list_for_each_rev(h, i, member) \ + list_for_each_rev_off(h, i, list_off_var_(i, member)) + +/** + * list_for_each_rev_safe - iterate through a list backwards, + * maybe during deletion + * @h: the list_head + * @i: the structure containing the list_node + * @nxt: the structure containing the list_node + * @member: the list_node member of the structure + * + * This is a convenient wrapper to iterate @i over the entire list backwards. + * It's a for loop, so you can break and continue as normal. The extra + * variable * @nxt is used to hold the next element, so you can delete @i + * from the list. + * + * Example: + * struct child *next; + * list_for_each_rev_safe(&parent->children, child, next, list) { + * printf("Name: %s\n", child->name); + * } + */ +#define list_for_each_rev_safe(h, i, nxt, member) \ + list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member)) + +/** + * list_for_each_safe - iterate through a list, maybe during deletion + * @h: the list_head + * @i: the structure containing the list_node + * @nxt: the structure containing the list_node + * @member: the list_node member of the structure + * + * This is a convenient wrapper to iterate @i over the entire list. It's + * a for loop, so you can break and continue as normal. The extra variable + * @nxt is used to hold the next element, so you can delete @i from the list. + * + * Example: + * list_for_each_safe(&parent->children, child, next, list) { + * list_del(&child->list); + * parent->num_children--; + * } + */ +#define list_for_each_safe(h, i, nxt, member) \ + list_for_each_safe_off(h, i, nxt, list_off_var_(i, member)) + +/** + * list_next - get the next entry in a list + * @h: the list_head + * @i: a pointer to an entry in the list. + * @member: the list_node member of the structure + * + * If @i was the last entry in the list, returns NULL. + * + * Example: + * struct child *second; + * second = list_next(&parent->children, first, list); + * if (!second) + * printf("No second child!\n"); + */ +#define list_next(h, i, member) \ + ((list_typeof(i))list_entry_or_null(list_debug(h, \ + __FILE__ ":" stringify(__LINE__)), \ + (i)->member.next, \ + list_off_var_((i), member))) + +/** + * list_prev - get the previous entry in a list + * @h: the list_head + * @i: a pointer to an entry in the list. + * @member: the list_node member of the structure + * + * If @i was the first entry in the list, returns NULL. + * + * Example: + * first = list_prev(&parent->children, second, list); + * if (!first) + * printf("Can't go back to first child?!\n"); + */ +#define list_prev(h, i, member) \ + ((list_typeof(i))list_entry_or_null(list_debug(h, \ + __FILE__ ":" stringify(__LINE__)), \ + (i)->member.prev, \ + list_off_var_((i), member))) + +/** + * list_append_list - empty one list onto the end of another. + * @to: the list to append into + * @from: the list to empty. + * + * This takes the entire contents of @from and moves it to the end of + * @to. After this @from will be empty. + * + * Example: + * struct list_head adopter; + * + * list_append_list(&adopter, &parent->children); + * assert(list_empty(&parent->children)); + * parent->num_children = 0; + */ +#define list_append_list(t, f) list_append_list_(t, f, \ + __FILE__ ":" stringify(__LINE__)) +static inline void list_append_list_(struct list_head *to, + struct list_head *from, + const char *abortstr) +{ + struct list_node *from_tail = list_debug(from, abortstr)->n.prev; + struct list_node *to_tail = list_debug(to, abortstr)->n.prev; + + /* Sew in head and entire list. */ + to->n.prev = from_tail; + from_tail->next = &to->n; + to_tail->next = &from->n; + from->n.prev = to_tail; + + /* Now remove head. */ + list_del(&from->n); + list_head_init(from); +} + +/** + * list_prepend_list - empty one list into the start of another. + * @to: the list to prepend into + * @from: the list to empty. + * + * This takes the entire contents of @from and moves it to the start + * of @to. After this @from will be empty. + * + * Example: + * list_prepend_list(&adopter, &parent->children); + * assert(list_empty(&parent->children)); + * parent->num_children = 0; + */ +#define list_prepend_list(t, f) list_prepend_list_(t, f, LIST_LOC) +static inline void list_prepend_list_(struct list_head *to, + struct list_head *from, + const char *abortstr) +{ + struct list_node *from_tail = list_debug(from, abortstr)->n.prev; + struct list_node *to_head = list_debug(to, abortstr)->n.next; + + /* Sew in head and entire list. */ + to->n.next = &from->n; + from->n.prev = &to->n; + to_head->prev = from_tail; + from_tail->next = to_head; + + /* Now remove head. */ + list_del(&from->n); + list_head_init(from); +} + +/* internal macros, do not use directly */ +#define list_for_each_off_dir_(h, i, off, dir) \ + for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ + (off)); \ + list_node_from_off_((void *)i, (off)) != &(h)->n; \ + i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, \ + (off))) + +#define list_for_each_safe_off_dir_(h, i, nxt, off, dir) \ + for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ + (off)), \ + nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ + (off)); \ + list_node_from_off_(i, (off)) != &(h)->n; \ + i = nxt, \ + nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ + (off))) + +/** + * list_for_each_off - iterate through a list of memory regions. + * @h: the list_head + * @i: the pointer to a memory region which contains list node data. + * @off: offset(relative to @i) at which list node data resides. + * + * This is a low-level wrapper to iterate @i over the entire list, used to + * implement all oher, more high-level, for-each constructs. It's a for loop, + * so you can break and continue as normal. + * + * WARNING! Being the low-level macro that it is, this wrapper doesn't know + * nor care about the type of @i. The only assumption made is that @i points + * to a chunk of memory that at some @offset, relative to @i, contains a + * properly filled `struct list_node' which in turn contains pointers to + * memory chunks and it's turtles all the way down. With all that in mind + * remember that given the wrong pointer/offset couple this macro will + * happily churn all you memory until SEGFAULT stops it, in other words + * caveat emptor. + * + * It is worth mentioning that one of legitimate use-cases for that wrapper + * is operation on opaque types with known offset for `struct list_node' + * member(preferably 0), because it allows you not to disclose the type of + * @i. + * + * Example: + * list_for_each_off(&parent->children, child, + * offsetof(struct child, list)) + * printf("Name: %s\n", child->name); + */ +#define list_for_each_off(h, i, off) \ + list_for_each_off_dir_((h),(i),(off),next) + +/** + * list_for_each_rev_off - iterate through a list of memory regions backwards + * @h: the list_head + * @i: the pointer to a memory region which contains list node data. + * @off: offset(relative to @i) at which list node data resides. + * + * See list_for_each_off for details + */ +#define list_for_each_rev_off(h, i, off) \ + list_for_each_off_dir_((h),(i),(off),prev) + +/** + * list_for_each_safe_off - iterate through a list of memory regions, maybe + * during deletion + * @h: the list_head + * @i: the pointer to a memory region which contains list node data. + * @nxt: the structure containing the list_node + * @off: offset(relative to @i) at which list node data resides. + * + * For details see `list_for_each_off' and `list_for_each_safe' + * descriptions. + * + * Example: + * list_for_each_safe_off(&parent->children, child, + * next, offsetof(struct child, list)) + * printf("Name: %s\n", child->name); + */ +#define list_for_each_safe_off(h, i, nxt, off) \ + list_for_each_safe_off_dir_((h),(i),(nxt),(off),next) + +/** + * list_for_each_rev_safe_off - iterate backwards through a list of + * memory regions, maybe during deletion + * @h: the list_head + * @i: the pointer to a memory region which contains list node data. + * @nxt: the structure containing the list_node + * @off: offset(relative to @i) at which list node data resides. + * + * For details see `list_for_each_rev_off' and `list_for_each_rev_safe' + * descriptions. + * + * Example: + * list_for_each_rev_safe_off(&parent->children, child, + * next, offsetof(struct child, list)) + * printf("Name: %s\n", child->name); + */ +#define list_for_each_rev_safe_off(h, i, nxt, off) \ + list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev) + +/* Other -off variants. */ +#define list_entry_off(n, type, off) \ + ((type *)list_node_from_off_((n), (off))) + +#define list_head_off(h, type, off) \ + ((type *)list_head_off((h), (off))) + +#define list_tail_off(h, type, off) \ + ((type *)list_tail_((h), (off))) + +#define list_add_off(h, n, off) \ + list_add((h), list_node_from_off_((n), (off))) + +#define list_del_off(n, off) \ + list_del(list_node_from_off_((n), (off))) + +#define list_del_from_off(h, n, off) \ + list_del_from(h, list_node_from_off_((n), (off))) + +/* Offset helper functions so we only single-evaluate. */ +static inline void *list_node_to_off_(struct list_node *node, size_t off) +{ + return (void *)((char *)node - off); +} +static inline struct list_node *list_node_from_off_(void *ptr, size_t off) +{ + return (struct list_node *)((char *)ptr + off); +} + +/* Get the offset of the member, but make sure it's a list_node. */ +#define list_off_(type, member) \ + (container_off(type, member) + \ + check_type(((type *)0)->member, struct list_node)) + +#define list_off_var_(var, member) \ + (container_off_var(var, member) + \ + check_type(var->member, struct list_node)) + +#if HAVE_TYPEOF +#define list_typeof(var) typeof(var) +#else +#define list_typeof(var) void * +#endif + +/* Returns member, or NULL if at end of list. */ +static inline void *list_entry_or_null(const struct list_head *h, + const struct list_node *n, + size_t off) +{ + if (n == &h->n) + return NULL; + return (char *)n - off; +} +#endif /* CCAN_LIST_H */ diff --git a/nostrdb/bolt11/mem.c b/nostrdb/bolt11/mem.c new file mode 100644 index 000000000..150f06164 --- /dev/null +++ b/nostrdb/bolt11/mem.c @@ -0,0 +1,128 @@ +/* CC0 (Public domain) - see LICENSE file for details */ + +#include "config.h" + +#include +#include +#include "mem.h" + +#if !HAVE_MEMMEM +void *memmem(const void *haystack, size_t haystacklen, + const void *needle, size_t needlelen) +{ + const char *p; + + if (needlelen > haystacklen) + return NULL; + + p = haystack; + + for (p = haystack; + (p + needlelen) <= ((const char *)haystack + haystacklen); + p++) + if (memcmp(p, needle, needlelen) == 0) + return (void *)p; + + return NULL; +} +#endif + +#if !HAVE_MEMRCHR +void *memrchr(const void *s, int c, size_t n) +{ + unsigned char *p = (unsigned char *)s; + + while (n) { + if (p[n-1] == c) + return p + n - 1; + n--; + } + + return NULL; +} +#endif + +void *mempbrkm(const void *data_, size_t len, const void *accept_, size_t accept_len) +{ + const char *data = data_, *accept = accept_; + size_t i, j; + + for (i = 0; i < len; i++) + for (j = 0; j < accept_len; j++) + if (accept[j] == data[i]) + return (void *)&data[i]; + return NULL; +} + +void *memcchr(void const *data, int c, size_t data_len) +{ + char const *p = data; + size_t i; + + for (i = 0; i < data_len; i++) + if (p[i] != c) + return (void *)&p[i]; + + return NULL; +} + +#define MEMSWAP_TMP_SIZE 256 + +void memswap(void *a, void *b, size_t n) +{ + char *ap = a; + char *bp = b; + char tmp[MEMSWAP_TMP_SIZE]; + + assert(!memoverlaps(a, n, b, n)); + + while (n) { + size_t m = n > MEMSWAP_TMP_SIZE ? MEMSWAP_TMP_SIZE : n; + + memcpy(tmp, bp, m); + memcpy(bp, ap, m); + memcpy(ap, tmp, m); + + ap += m; + bp += m; + n -= m; + } +} + +bool memeqzero(const void *data, size_t length) +{ + const unsigned char *p = data; + size_t len; + + /* Check first 16 bytes manually */ + for (len = 0; len < 16; len++) { + if (!length) + return true; + if (*p) + return false; + p++; + length--; + } + + /* Now we know that's zero, memcmp with self. */ + return memcmp(data, p, length) == 0; +} + +void memtaint(void *data, size_t len) +{ + /* Using 16 bytes is a bit quicker than 4 */ + const unsigned tainter[] + = { 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef }; + char *p = data; + + while (len >= sizeof(tainter)) { + memcpy(p, tainter, sizeof(tainter)); + p += sizeof(tainter); + len -= sizeof(tainter); + } + memcpy(p, tainter, len); + +#if HAVE_VALGRIND_MEMCHECK_H + VALGRIND_MAKE_MEM_UNDEFINED(data, len); +#endif +} diff --git a/nostrdb/bolt11/mem.h b/nostrdb/bolt11/mem.h new file mode 100644 index 000000000..9b8d01a38 --- /dev/null +++ b/nostrdb/bolt11/mem.h @@ -0,0 +1,295 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_MEM_H +#define CCAN_MEM_H + +#include "../config.h" +#include "../compiler.h" + +#include +#include + +#if !HAVE_MEMMEM +PURE_FUNCTION +void *memmem(const void *haystack, size_t haystacklen, + const void *needle, size_t needlelen); +#endif + +#if !HAVE_MEMRCHR +PURE_FUNCTION +void *memrchr(const void *s, int c, size_t n); +#endif + +/** + * mempbrkm - locates the first occurrence in @data of any bytes in @accept + * @data: where we search + * @len: length of data in bytes + * @accept: array of bytes we search for + * @accept_len: # of bytes in accept + * + * Returns a pointer to the byte in @data that matches one of the bytes in + * @accept, or NULL if no such byte is found. + * + * Example: + * char otherbytes[] = "Hello \0world"; + * size_t otherbytes_len = sizeof(otherbytes) - 1; + * char *r = mempbrkm(otherbytes, otherbytes_len, "\0b", 2); + * if (r) { + * printf("Found %c\n", *r); + * } else { + * printf("Nada\n"); + * } + * + */ +PURE_FUNCTION +void *mempbrkm(const void *data, size_t len, const void *accept, size_t accept_len); + +/** + * mempbrk - locates the first occurrence in @data of any bytes in @accept + * @data: where we search + * @len: length of data in bytes + * @accept: NUL terminated string containing the bytes we search for + * + * Returns a pointer to the byte in @data that matches one of the bytes in + * @accept, or NULL if no such byte is found. + * + * Example: + * + * r = mempbrk(otherbytes, otherbytes_len, "abcde"); + * if (r) { + * printf("Found %c\n", *r); + * } else { + * printf("Nada\n"); + * } + */ +PURE_FUNCTION +static inline char *mempbrk(const void *data, size_t len, const char *accept) +{ + return mempbrkm(data, len, accept, strlen(accept)); +} + +/** + * memcchr - scan memory until a character does _not_ match + * @data: pointer to memory to scan + * @data_len: length of data + * @c: character to scan for + * + * The complement of memchr(). + * + * Returns a pointer to the first character which is _not_ @c. If all memory in + * @data is @c, returns NULL. + * + * Example: + * char somebytes[] = "HI By\0e"; + * size_t bytes_len = sizeof(somebytes) - 1; + * r = memcchr(somebytes, ' ', bytes_len); + * if (r) { + * printf("Found %c after trimming spaces\n", *r); + * } + */ +PURE_FUNCTION +void *memcchr(void const *data, int c, size_t data_len); + +/** + * memeq - Are two byte arrays equal? + * @a: first array + * @al: bytes in first array + * @b: second array + * @bl: bytes in second array + * + * Example: + * if (memeq(somebytes, bytes_len, otherbytes, otherbytes_len)) { + * printf("memory blocks are the same!\n"); + * } + */ +PURE_FUNCTION +static inline bool memeq(const void *a, size_t al, const void *b, size_t bl) +{ + return al == bl && !memcmp(a, b, bl); +} + +/** + * memstarts - determine if @data starts with @prefix + * @data: does this begin with @prefix? + * @data_len: bytes in @data + * @prefix: does @data begin with these bytes? + * @prefix_len: bytes in @prefix + * + * Returns true if @data starts with @prefix, otherwise return false. + * + * Example: + * if (memstarts(somebytes, bytes_len, otherbytes, otherbytes_len)) { + * printf("somebytes starts with otherbytes!\n"); + * } + */ +PURE_FUNCTION +static inline bool memstarts(void const *data, size_t data_len, + void const *prefix, size_t prefix_len) +{ + if (prefix_len > data_len) + return false; + return memeq(data, prefix_len, prefix, prefix_len); +} + +/** + * memeqstr - Is a byte array equal to a NUL terminated string? + * @data: byte array + * @length: length of @data in bytes + * @string: NUL terminated string + * + * The '\0' byte is ignored when checking if @bytes == @string. + * + * Example: + * if (memeqstr(somebytes, bytes_len, "foo")) { + * printf("somebytes == 'foo'!\n"); + * } + */ +PURE_FUNCTION +static inline bool memeqstr(const void *data, size_t length, const char *string) +{ + return memeq(data, length, string, strlen(string)); +} + +/** + * memeqzero - Is a byte array all zeroes? + * @data: byte array + * @length: length of @data in bytes + * + * Example: + * if (memeqzero(somebytes, bytes_len)) { + * printf("somebytes == 0!\n"); + * } + */ +PURE_FUNCTION +bool memeqzero(const void *data, size_t length); + +/** + * memstarts_str - Does this byte array start with a string prefix? + * @a: byte array + * @al: length in bytes + * @s: string prefix + * + * Example: + * if (memstarts_str(somebytes, bytes_len, "It")) { + * printf("somebytes starts with 'It'\n"); + * } + */ +PURE_FUNCTION +static inline bool memstarts_str(const void *a, size_t al, const char *s) +{ + return memstarts(a, al, s, strlen(s)); +} + +/** + * memends - Does this byte array end with a given byte-array suffix? + * @s: byte array + * @s_len: length in bytes + * @suffix: byte array suffix + * @suffix_len: length of suffix in bytes + * + * Returns true if @suffix appears as a substring at the end of @s, + * false otherwise. + */ +PURE_FUNCTION +static inline bool memends(const void *s, size_t s_len, const void *suffix, size_t suffix_len) +{ + return (s_len >= suffix_len) && (memcmp((const char *)s + s_len - suffix_len, + suffix, suffix_len) == 0); +} + +/** + * memends_str - Does this byte array end with a string suffix? + * @a: byte array + * @al: length in bytes + * @s: string suffix + * + * Example: + * if (memends_str(somebytes, bytes_len, "It")) { + * printf("somebytes ends with with 'It'\n"); + * } + */ +PURE_FUNCTION +static inline bool memends_str(const void *a, size_t al, const char *s) +{ + return memends(a, al, s, strlen(s)); +} + +/** + * memoverlaps - Do two memory ranges overlap? + * @a: pointer to first memory range + * @al: length of first memory range + * @b: pointer to second memory range + * @al: length of second memory range + */ +CONST_FUNCTION +static inline bool memoverlaps(const void *a_, size_t al, + const void *b_, size_t bl) +{ + const char *a = a_; + const char *b = b_; + + return (a < (b + bl)) && (b < (a + al)); +} + +/* + * memswap - Exchange two memory regions + * @a: first region + * @b: second region + * @n: length of the regions + * + * Undefined results if the two memory regions overlap. + */ +void memswap(void *a, void *b, size_t n); + +#if HAVE_VALGRIND_MEMCHECK_H +#include +static inline void *memcheck_(const void *data, size_t len) +{ + VALGRIND_CHECK_MEM_IS_DEFINED(data, len); + return (void *)data; +} +#else +static inline void *memcheck_(const void *data, size_t len) +{ + (void)len; + return (void *)data; +} +#endif + +#if HAVE_TYPEOF +/** + * memcheck - check that a memory region is initialized + * @data: start of region + * @len: length in bytes + * + * When running under valgrind, this causes an error to be printed + * if the entire region is not defined. Otherwise valgrind only + * reports an error when an undefined value is used for a branch, or + * written out. + * + * Example: + * // Search for space, but make sure it's all initialized. + * if (memchr(memcheck(somebytes, bytes_len), ' ', bytes_len)) { + * printf("space was found!\n"); + * } + */ +#define memcheck(data, len) ((__typeof__((data)+0))memcheck_((data), (len))) +#else +#define memcheck(data, len) memcheck_((data), (len)) +#endif + +/** + * memtaint - mark a memory region unused + * @data: start of region + * @len: length in bytes + * + * This writes an "0xdeadbeef" eyecatcher repeatedly to the memory. + * When running under valgrind, it also tells valgrind that the memory is + * uninitialized, triggering valgrind errors if it is used for branches + * or written out (or passed to memcheck!) in future. + * + * Example: + * // We'll reuse this buffer later, but be sure we don't access it. + * memtaint(somebytes, bytes_len); + */ +void memtaint(void *data, size_t len); +#endif /* CCAN_MEM_H */ diff --git a/nostrdb/bolt11/node_id.c b/nostrdb/bolt11/node_id.c new file mode 100644 index 000000000..6778ddca6 --- /dev/null +++ b/nostrdb/bolt11/node_id.c @@ -0,0 +1,64 @@ +#include "config.h" +#include +#include "array_size.h" +#include "mem.h" +#include "hex.h" +#include "talstr.h" +#include "node_id.h" + +/* Convert from pubkey to compressed pubkey. */ +/* +void node_id_from_pubkey(struct node_id *id, const struct pubkey *key) +{ + size_t outlen = ARRAY_SIZE(id->k); + if (!secp256k1_ec_pubkey_serialize(secp256k1_ctx, id->k, &outlen, + &key->pubkey, + SECP256K1_EC_COMPRESSED)) + abort(); +} + +WARN_UNUSED_RESULT +bool pubkey_from_node_id(struct pubkey *key, const struct node_id *id) +{ + return secp256k1_ec_pubkey_parse(secp256k1_ctx, &key->pubkey, + memcheck(id->k, sizeof(id->k)), + sizeof(id->k)); +} + +WARN_UNUSED_RESULT +bool point32_from_node_id(struct point32 *key, const struct node_id *id) +{ + struct pubkey k; + if (!pubkey_from_node_id(&k, id)) + return false; + return secp256k1_xonly_pubkey_from_pubkey(secp256k1_ctx, &key->pubkey, + NULL, &k.pubkey) == 1; +} +*/ + +char *tal_hexstr(const tal_t *ctx, const void *data, size_t len) +{ + char *str = tal_arr(ctx, char, hex_str_size(len)); + hex_encode(data, len, str, hex_str_size(len)); + return str; +} + + +/* Convert to hex string of SEC1 encoding */ +char *node_id_to_hexstr(const tal_t *ctx, const struct node_id *id) +{ + return tal_hexstr(ctx, id->k, sizeof(id->k)); +} + +/* Convert from hex string of SEC1 encoding */ + +bool node_id_from_hexstr(const char *str, size_t slen, struct node_id *id) +{ + return hex_decode(str, slen, id->k, sizeof(id->k)); + /* && node_id_valid(id);*/ +} + +int node_id_cmp(const struct node_id *a, const struct node_id *b) +{ + return memcmp(a->k, b->k, sizeof(a->k)); +} diff --git a/nostrdb/bolt11/node_id.h b/nostrdb/bolt11/node_id.h new file mode 100644 index 000000000..873e10b18 --- /dev/null +++ b/nostrdb/bolt11/node_id.h @@ -0,0 +1,38 @@ +/* Encapsulation for pubkeys used as node ids: more compact, more dangerous. */ +#ifndef LIGHTNING_COMMON_NODE_ID_H +#define LIGHTNING_COMMON_NODE_ID_H +#include "../config.h" +#include "short_types.h" +#include "tal.h" + +struct node_id { + u8 k[33]; +}; + +static inline bool node_id_eq(const struct node_id *a, + const struct node_id *b) +{ + return memcmp(a->k, b->k, sizeof(a->k)) == 0; +} + +/* Is this actually a valid pubkey? Relatively expensive. */ +//bool node_id_valid(const struct node_id *id); + +/* Convert to hex string of SEC1 encoding. */ +char *node_id_to_hexstr(const tal_t *ctx, const struct node_id *id); + +/* Convert from hex string of SEC1 encoding: checks validity! */ +bool node_id_from_hexstr(const char *str, size_t slen, struct node_id *id); + +/* Compare the keys `a` and `b`. Return <0 if `a`<`b`, 0 if equal and >0 otherwise */ +int node_id_cmp(const struct node_id *a, const struct node_id *b); + +/* If the two nodes[] are id1 and id2, which index would id1 be? */ +static inline int node_id_idx(const struct node_id *id1, + const struct node_id *id2) +{ + return node_id_cmp(id1, id2) > 0; +} + +/* marshal/unmarshal functions */ +#endif /* LIGHTNING_COMMON_NODE_ID_H */ diff --git a/nostrdb/bolt11/overflows.h b/nostrdb/bolt11/overflows.h new file mode 100644 index 000000000..dac460c05 --- /dev/null +++ b/nostrdb/bolt11/overflows.h @@ -0,0 +1,43 @@ +#ifndef LIGHTNING_COMMON_OVERFLOWS_H +#define LIGHTNING_COMMON_OVERFLOWS_H +#include "../config.h" +#include "short_types.h" + +static inline bool add_overflows_size_t(uint64_t a, uint64_t b) +{ + return (size_t)a != a || (size_t)b != b || (a + b) < (size_t)a; +} + +static inline bool add_overflows_u64(uint64_t a, uint64_t b) +{ + return (a + b) < a; +} + +static inline bool mul_overflows_u64(uint64_t a, uint64_t b) +{ + uint64_t ret; + + if (a == 0) + return false; + ret = a * b; + return (ret / a != b); +} + +static inline bool assign_overflow_u8(u8 *dst, uint64_t v) +{ + *dst = v; + return *dst == v; +} + +static inline bool assign_overflow_u16(u16 *dst, uint64_t v) +{ + *dst = v; + return *dst == v; +} + +static inline bool assign_overflow_u32(u32 *dst, uint64_t v) +{ + *dst = (u32)v; + return *dst == v; +} +#endif /* LIGHTNING_COMMON_OVERFLOWS_H */ diff --git a/nostrdb/bolt11/short_types.h b/nostrdb/bolt11/short_types.h new file mode 100644 index 000000000..175377e9b --- /dev/null +++ b/nostrdb/bolt11/short_types.h @@ -0,0 +1,35 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_SHORT_TYPES_H +#define CCAN_SHORT_TYPES_H +#include + +/** + * u64/s64/u32/s32/u16/s16/u8/s8 - short names for explicitly-sized types. + */ +typedef uint64_t u64; +typedef int64_t s64; +typedef uint32_t u32; +typedef int32_t s32; +typedef uint16_t u16; +typedef int16_t s16; +typedef uint8_t u8; +typedef int8_t s8; + +/* Whichever they include first, they get these definitions. */ +#ifdef CCAN_ENDIAN_H +/** + * be64/be32/be16 - 64/32/16 bit big-endian representation. + */ +typedef beint64_t be64; +typedef beint32_t be32; +typedef beint16_t be16; + +/** + * le64/le32/le16 - 64/32/16 bit little-endian representation. + */ +typedef leint64_t le64; +typedef leint32_t le32; +typedef leint16_t le16; +#endif + +#endif /* CCAN_SHORT_TYPES_H */ diff --git a/nostrdb/bolt11/str.h b/nostrdb/bolt11/str.h new file mode 100644 index 000000000..f391abdde --- /dev/null +++ b/nostrdb/bolt11/str.h @@ -0,0 +1,228 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_STR_H +#define CCAN_STR_H +#include "../config.h" +#include +#include +#include +#include + +/** + * streq - Are two strings equal? + * @a: first string + * @b: first string + * + * This macro is arguably more readable than "!strcmp(a, b)". + * + * Example: + * if (streq(somestring, "")) + * printf("String is empty!\n"); + */ +#define streq(a,b) (strcmp((a),(b)) == 0) + +/** + * strstarts - Does this string start with this prefix? + * @str: string to test + * @prefix: prefix to look for at start of str + * + * Example: + * if (strstarts(somestring, "foo")) + * printf("String %s begins with 'foo'!\n", somestring); + */ +#define strstarts(str,prefix) (strncmp((str),(prefix),strlen(prefix)) == 0) + +/** + * strends - Does this string end with this postfix? + * @str: string to test + * @postfix: postfix to look for at end of str + * + * Example: + * if (strends(somestring, "foo")) + * printf("String %s end with 'foo'!\n", somestring); + */ +static inline bool strends(const char *str, const char *postfix) +{ + if (strlen(str) < strlen(postfix)) + return false; + + return streq(str + strlen(str) - strlen(postfix), postfix); +} + +/** + * stringify - Turn expression into a string literal + * @expr: any C expression + * + * Example: + * #define PRINT_COND_IF_FALSE(cond) \ + * ((cond) || printf("%s is false!", stringify(cond))) + */ +#define stringify(expr) stringify_1(expr) +/* Double-indirection required to stringify expansions */ +#define stringify_1(expr) #expr + +/** + * strcount - Count number of (non-overlapping) occurrences of a substring. + * @haystack: a C string + * @needle: a substring + * + * Example: + * assert(strcount("aaa aaa", "a") == 6); + * assert(strcount("aaa aaa", "ab") == 0); + * assert(strcount("aaa aaa", "aa") == 2); + */ +size_t strcount(const char *haystack, const char *needle); + +/** + * STR_MAX_CHARS - Maximum possible size of numeric string for this type. + * @type_or_expr: a pointer or integer type or expression. + * + * This provides enough space for a nul-terminated string which represents the + * largest possible value for the type or expression. + * + * Note: The implementation adds extra space so hex values or negative + * values will fit (eg. sprintf(... "%p"). ) + * + * Example: + * char str[STR_MAX_CHARS(int)]; + * + * sprintf(str, "%i", 7); + */ +#define STR_MAX_CHARS(type_or_expr) \ + ((sizeof(type_or_expr) * CHAR_BIT + 8) / 9 * 3 + 2 \ + + STR_MAX_CHARS_TCHECK_(type_or_expr)) + +#if HAVE_TYPEOF +/* Only a simple type can have 0 assigned, so test that. */ +#define STR_MAX_CHARS_TCHECK_(type_or_expr) \ + (sizeof(({ typeof(type_or_expr) x = 0; x; }))*0) +#else +#define STR_MAX_CHARS_TCHECK_(type_or_expr) 0 +#endif + +/** + * cisalnum - isalnum() which takes a char (and doesn't accept EOF) + * @c: a character + * + * Surprisingly, the standard ctype.h isalnum() takes an int, which + * must have the value of EOF (-1) or an unsigned char. This variant + * takes a real char, and doesn't accept EOF. + */ +static inline bool cisalnum(char c) +{ + return isalnum((unsigned char)c); +} +static inline bool cisalpha(char c) +{ + return isalpha((unsigned char)c); +} +static inline bool cisascii(char c) +{ + return isascii((unsigned char)c); +} +#if HAVE_ISBLANK +static inline bool cisblank(char c) +{ + return isblank((unsigned char)c); +} +#endif +static inline bool ciscntrl(char c) +{ + return iscntrl((unsigned char)c); +} +static inline bool cisdigit(char c) +{ + return isdigit((unsigned char)c); +} +static inline bool cisgraph(char c) +{ + return isgraph((unsigned char)c); +} +static inline bool cislower(char c) +{ + return islower((unsigned char)c); +} +static inline bool cisprint(char c) +{ + return isprint((unsigned char)c); +} +static inline bool cispunct(char c) +{ + return ispunct((unsigned char)c); +} +static inline bool cisspace(char c) +{ + return isspace((unsigned char)c); +} +static inline bool cisupper(char c) +{ + return isupper((unsigned char)c); +} +static inline bool cisxdigit(char c) +{ + return isxdigit((unsigned char)c); +} + +#include "str_debug.h" + +/* These checks force things out of line, hence they are under DEBUG. */ +#ifdef CCAN_STR_DEBUG +#include + +/* These are commonly misused: they take -1 or an *unsigned* char value. */ +#undef isalnum +#undef isalpha +#undef isascii +#undef isblank +#undef iscntrl +#undef isdigit +#undef isgraph +#undef islower +#undef isprint +#undef ispunct +#undef isspace +#undef isupper +#undef isxdigit + +/* You can use a char if char is unsigned. */ +#if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF +#define str_check_arg_(i) \ + ((i) + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(i), \ + char) \ + || (char)255 > 0)) +#else +#define str_check_arg_(i) (i) +#endif + +#define isalnum(i) str_isalnum(str_check_arg_(i)) +#define isalpha(i) str_isalpha(str_check_arg_(i)) +#define isascii(i) str_isascii(str_check_arg_(i)) +#if HAVE_ISBLANK +#define isblank(i) str_isblank(str_check_arg_(i)) +#endif +#define iscntrl(i) str_iscntrl(str_check_arg_(i)) +#define isdigit(i) str_isdigit(str_check_arg_(i)) +#define isgraph(i) str_isgraph(str_check_arg_(i)) +#define islower(i) str_islower(str_check_arg_(i)) +#define isprint(i) str_isprint(str_check_arg_(i)) +#define ispunct(i) str_ispunct(str_check_arg_(i)) +#define isspace(i) str_isspace(str_check_arg_(i)) +#define isupper(i) str_isupper(str_check_arg_(i)) +#define isxdigit(i) str_isxdigit(str_check_arg_(i)) + +#if HAVE_TYPEOF +/* With GNU magic, we can make const-respecting standard string functions. */ +#undef strstr +#undef strchr +#undef strrchr + +/* + 0 is needed to decay array into pointer. */ +#define strstr(haystack, needle) \ + ((typeof((haystack) + 0))str_strstr((haystack), (needle))) +#define strchr(haystack, c) \ + ((typeof((haystack) + 0))str_strchr((haystack), (c))) +#define strrchr(haystack, c) \ + ((typeof((haystack) + 0))str_strrchr((haystack), (c))) +#endif +#endif /* CCAN_STR_DEBUG */ + +#endif /* CCAN_STR_H */ diff --git a/nostrdb/bolt11/str_debug.h b/nostrdb/bolt11/str_debug.h new file mode 100644 index 000000000..92c10c41c --- /dev/null +++ b/nostrdb/bolt11/str_debug.h @@ -0,0 +1,30 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_STR_DEBUG_H +#define CCAN_STR_DEBUG_H + +/* #define CCAN_STR_DEBUG 1 */ + +#ifdef CCAN_STR_DEBUG +/* Because we mug the real ones with macros, we need our own wrappers. */ +int str_isalnum(int i); +int str_isalpha(int i); +int str_isascii(int i); +#if HAVE_ISBLANK +int str_isblank(int i); +#endif +int str_iscntrl(int i); +int str_isdigit(int i); +int str_isgraph(int i); +int str_islower(int i); +int str_isprint(int i); +int str_ispunct(int i); +int str_isspace(int i); +int str_isupper(int i); +int str_isxdigit(int i); + +char *str_strstr(const char *haystack, const char *needle); +char *str_strchr(const char *s, int c); +char *str_strrchr(const char *s, int c); +#endif /* CCAN_STR_DEBUG */ + +#endif /* CCAN_STR_DEBUG_H */ diff --git a/nostrdb/bolt11/structeq.h b/nostrdb/bolt11/structeq.h new file mode 100644 index 000000000..bb7014651 --- /dev/null +++ b/nostrdb/bolt11/structeq.h @@ -0,0 +1,46 @@ +/* MIT (BSD) license - see LICENSE file for details */ +#ifndef CCAN_STRUCTEQ_H +#define CCAN_STRUCTEQ_H +#include "build_assert.h" +#include "cppmagic.h" +#include +#include + +/** + * STRUCTEQ_DEF - define an ..._eq function to compare two structures. + * @sname: name of the structure, and function (_eq) to define. + * @padbytes: number of bytes of expected padding, or negative "max". + * @...: name of every member of the structure. + * + * This generates a single memcmp() call in the common case where the + * structure contains no padding. Since it can't tell the difference between + * padding and a missing member, @padbytes can be used to assert that + * there isn't any, or how many we expect. A negative number means + * "up to or equal to that amount of padding", as padding can be + * platform dependent. + */ +#define STRUCTEQ_DEF(sname, padbytes, ...) \ +static inline bool CPPMAGIC_GLUE2(sname, _eq)(const struct sname *_a, \ + const struct sname *_b) \ +{ \ + BUILD_ASSERT(((padbytes) < 0 && \ + CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ + __VA_ARGS__)) \ + - (padbytes) >= sizeof(*_a)) \ + || CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ + __VA_ARGS__)) \ + + (padbytes) == sizeof(*_a)); \ + if (CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, __VA_ARGS__)) \ + == sizeof(*_a)) \ + return memcmp(_a, _b, sizeof(*_a)) == 0; \ + else \ + return CPPMAGIC_JOIN(&&, \ + CPPMAGIC_MAP(STRUCTEQ_MEMBER_CMP_, \ + __VA_ARGS__)); \ +} + +/* Helpers */ +#define STRUCTEQ_MEMBER_SIZE_(m) sizeof((_a)->m) +#define STRUCTEQ_MEMBER_CMP_(m) memcmp(&_a->m, &_b->m, sizeof(_a->m)) == 0 + +#endif /* CCAN_STRUCTEQ_H */ diff --git a/nostrdb/bolt11/take.c b/nostrdb/bolt11/take.c new file mode 100644 index 000000000..3b59db081 --- /dev/null +++ b/nostrdb/bolt11/take.c @@ -0,0 +1,126 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#include "take.h" +#include "likely.h" +#include +#include +#include + +static const void **takenarr; +static const char **labelarr; +static size_t max_taken, num_taken; +static size_t allocfail; +static void (*allocfailfn)(const void *p); + +void *take_(const void *p, const char *label) +{ + /* Overallocate: it's better than risking calloc returning NULL! */ + if (unlikely(label && !labelarr)) + labelarr = calloc(max_taken+1, sizeof(*labelarr)); + + if (unlikely(num_taken == max_taken)) { + const void **new; + + new = realloc(takenarr, sizeof(*takenarr) * (max_taken+1)); + if (unlikely(!new)) { + if (allocfailfn) { + allocfail++; + allocfailfn(p); + return NULL; + } + /* Otherwise we leak p. */ + return (void *)p; + } + takenarr = new; + /* Once labelarr is set, we maintain it. */ + if (labelarr) { + const char **labelarr_new; + labelarr_new = realloc(labelarr, + sizeof(*labelarr) * (max_taken+1)); + if (labelarr_new) { + labelarr = labelarr_new; + } else { + /* num_taken will be out of sync with the size of + * labelarr after realloc failure. + * Just pretend that we never had labelarr allocated. */ + free(labelarr); + labelarr = NULL; + } + } + max_taken++; + } + if (unlikely(labelarr)) + labelarr[num_taken] = label; + takenarr[num_taken++] = p; + + return (void *)p; +} + +static size_t find_taken(const void *p) +{ + size_t i; + + for (i = 0; i < num_taken; i++) { + if (takenarr[i] == p) + return i+1; + } + return 0; +} + +bool taken(const void *p) +{ + size_t i; + + if (!p && unlikely(allocfail)) { + allocfail--; + return true; + } + + i = find_taken(p); + if (!i) + return false; + + memmove(&takenarr[i-1], &takenarr[i], + (--num_taken - (i - 1))*sizeof(takenarr[0])); + return true; +} + +bool is_taken(const void *p) +{ + if (!p && unlikely(allocfail)) + return true; + + return find_taken(p) > 0; +} + +const char *taken_any(void) +{ + static char pointer_buf[32]; + + if (num_taken == 0) + return NULL; + + /* We're *allowed* to have some with labels, some without. */ + if (labelarr) { + size_t i; + for (i = 0; i < num_taken; i++) + if (labelarr[i]) + return labelarr[i]; + } + + sprintf(pointer_buf, "%p", takenarr[0]); + return pointer_buf; +} + +void take_cleanup(void) +{ + max_taken = num_taken = 0; + free(takenarr); + takenarr = NULL; + free(labelarr); + labelarr = NULL; +} + +void take_allocfail(void (*fn)(const void *p)) +{ + allocfailfn = fn; +} diff --git a/nostrdb/bolt11/take.h b/nostrdb/bolt11/take.h new file mode 100644 index 000000000..3de6f99de --- /dev/null +++ b/nostrdb/bolt11/take.h @@ -0,0 +1,136 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_TAKE_H +#define CCAN_TAKE_H +#include "../config.h" +#include +#include "str.h" + +#ifdef CCAN_TAKE_DEBUG +#define TAKE_LABEL(p) __FILE__ ":" stringify(__LINE__) ":" stringify(p) +#else +#define TAKE_LABEL(p) NULL +#endif + +/** + * TAKES - annotate a formal parameter as being take()-able + * + * This doesn't do anything, but useful for documentation. + * + * Example: + * void print_string(const char *str TAKES); + * + */ +#define TAKES + +/** + * take - record a pointer to be consumed by the function its handed to. + * @p: the pointer to mark, or NULL. + * + * This marks a pointer object to be freed by the called function, + * which is extremely useful for chaining functions. It works on + * NULL, for pass-through error handling. + */ +#define take(p) (take_typeof(p) take_((p), TAKE_LABEL(p))) + +/** + * taken - check (and un-take) a pointer was passed with take() + * @p: the pointer to check. + * + * A function which accepts take() arguments uses this to see if it + * should own the pointer; it will be removed from the take list, so + * this only returns true once. + * + * Example: + * // Silly routine to add 1 + * static int *add_one(const int *num TAKES) + * { + * int *ret; + * if (taken(num)) + * ret = (int *)num; + * else + * ret = malloc(sizeof(int)); + * if (ret) + * *ret = (*num) + 1; + * return ret; + * } + */ +bool taken(const void *p); + +/** + * is_taken - check if a pointer was passed with take() + * @p: the pointer to check. + * + * This is like the above, but doesn't remove it from the taken list. + * + * Example: + * // Silly routine to add 1: doesn't handle taken args! + * static int *add_one_notake(const int *num) + * { + * int *ret = malloc(sizeof(int)); + * assert(!is_taken(num)); + * if (ret) + * *ret = (*num) + 1; + * return ret; + * } + */ +bool is_taken(const void *p); + +/** + * taken_any - are there any taken pointers? + * + * Mainly useful for debugging take() leaks. With CCAN_TAKE_DEBUG, returns + * the label where the pointer was passed to take(), otherwise returns + * a static char buffer with the pointer value in it. NULL if none are taken. + * + * Example: + * static void cleanup(void) + * { + * assert(!taken_any()); + * } + */ +const char *taken_any(void); + +/** + * take_cleanup - remove all taken pointers from list. + * + * This is useful in atexit() handlers for valgrind-style leak detection. + * + * Example: + * static void cleanup2(void) + * { + * take_cleanup(); + * } + */ +void take_cleanup(void); + +/** + * take_allocfail - set function to call if we can't reallocated taken array. + * @fn: the function. + * + * If this is not set, then if the array reallocation fails, the + * pointer won't be marked taken(). If @fn returns, it is expected to + * free the pointer; we return NULL from take() and the function handles + * it like any allocation failure. + * + * Example: + * static void free_on_fail(const void *p) + * { + * free((void *)p); + * } + * + * static void init(void) + * { + * take_allocfail(free_on_fail); + * } + */ +void take_allocfail(void (*fn)(const void *p)); + +/* Private functions */ +#if HAVE_TYPEOF +#define take_typeof(ptr) (__typeof__(ptr)) +#else +#define take_typeof(ptr) +#endif + +void *take_(const void *p, const char *label); +#endif /* CCAN_TAKE_H */ diff --git a/nostrdb/bolt11/tal.c b/nostrdb/bolt11/tal.c new file mode 100644 index 000000000..516b44049 --- /dev/null +++ b/nostrdb/bolt11/tal.c @@ -0,0 +1,972 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#include "tal.h" +#include "../compiler.h" +#include "list.h" +#include "alignof.h" + +#include +#include +#include +#include +#include +#include +#include + +//#define TAL_DEBUG 1 + +#define NOTIFY_IS_DESTRUCTOR 512 +#define NOTIFY_EXTRA_ARG 1024 + +/* This makes our parent_child ptr stand out for to_tal_hdr checks */ +#define TAL_PTR_OBFUSTICATOR ((intptr_t)0x1984200820142016ULL) + +/* 32-bit type field, first byte 0 in either endianness. */ +enum prop_type { + CHILDREN = 0x00c1d500, + NAME = 0x00111100, + NOTIFIER = 0x00071f00, +}; + +struct tal_hdr { + struct list_node list; + struct prop_hdr *prop; + /* XOR with TAL_PTR_OBFUSTICATOR */ + intptr_t parent_child; + size_t bytelen; +}; + +struct prop_hdr { + enum prop_type type; + struct prop_hdr *next; +}; + +struct children { + struct prop_hdr hdr; /* CHILDREN */ + struct tal_hdr *parent; + struct list_head children; /* Head of siblings. */ +}; + +struct name { + struct prop_hdr hdr; /* NAME */ + char name[]; +}; + +struct notifier { + struct prop_hdr hdr; /* NOTIFIER */ + enum tal_notify_type types; + union notifier_cb { + void (*notifyfn)(tal_t *, enum tal_notify_type, void *); + void (*destroy)(tal_t *); /* If NOTIFY_IS_DESTRUCTOR set */ + void (*destroy2)(tal_t *, void *); /* If NOTIFY_EXTRA_ARG */ + } u; +}; + +/* Extra arg */ +struct notifier_extra_arg { + struct notifier n; + void *arg; +}; + +#define EXTRA_ARG(n) (((struct notifier_extra_arg *)(n))->arg) + +static struct { + struct tal_hdr hdr; + struct children c; +} null_parent = { { { &null_parent.hdr.list, &null_parent.hdr.list }, + &null_parent.c.hdr, TAL_PTR_OBFUSTICATOR, 0 }, + { { CHILDREN, NULL }, + &null_parent.hdr, + { { &null_parent.c.children.n, + &null_parent.c.children.n } } + } +}; + + +static void *(*allocfn)(size_t size) = malloc; +static void *(*resizefn)(void *, size_t size) = realloc; +static void (*freefn)(void *) = free; +static void (*errorfn)(const char *msg) = (void *)abort; +/* Count on non-destrutor notifiers; often stays zero. */ +static size_t notifiers = 0; + +static inline void COLD call_error(const char *msg) +{ + errorfn(msg); +} + +static bool get_destroying_bit(intptr_t parent_child) +{ + return parent_child & 1; +} + +static void set_destroying_bit(intptr_t *parent_child) +{ + *parent_child |= 1; +} + +static struct children *ignore_destroying_bit(intptr_t parent_child) +{ + return (void *)((parent_child ^ TAL_PTR_OBFUSTICATOR) & ~(intptr_t)1); +} + +/* This means valgrind can see leaks. */ +void tal_cleanup(void) +{ + struct tal_hdr *i; + + while ((i = list_top(&null_parent.c.children, struct tal_hdr, list))) { + list_del(&i->list); + memset(i, 0, sizeof(*i)); + } + + /* Cleanup any taken pointers. */ + take_cleanup(); +} + +/* We carefully start all real properties with a zero byte. */ +static bool is_literal(const struct prop_hdr *prop) +{ + return ((char *)prop)[0] != 0; +} + +#ifndef NDEBUG +static const void *bounds_start, *bounds_end; + +static void update_bounds(const void *new, size_t size) +{ + if (unlikely(!bounds_start)) { + bounds_start = new; + bounds_end = (char *)new + size; + } else if (new < bounds_start) + bounds_start = new; + else if ((char *)new + size > (char *)bounds_end) + bounds_end = (char *)new + size; +} + +static bool in_bounds(const void *p) +{ + return !p + || (p >= (void *)&null_parent && p <= (void *)(&null_parent + 1)) + || (p >= bounds_start && p <= bounds_end); +} +#else +static void update_bounds(const void *new, size_t size) +{ +} + +static bool in_bounds(const void *p) +{ + return true; +} +#endif + +static void check_bounds(const void *p) +{ + if (!in_bounds(p)) + call_error("Not a valid header"); +} + +static struct tal_hdr *to_tal_hdr(const void *ctx) +{ + struct tal_hdr *t; + + t = (struct tal_hdr *)((char *)ctx - sizeof(struct tal_hdr)); + check_bounds(t); + check_bounds(ignore_destroying_bit(t->parent_child)); + check_bounds(t->list.next); + check_bounds(t->list.prev); + if (t->prop && !is_literal(t->prop)) + check_bounds(t->prop); + return t; +} + +static struct tal_hdr *to_tal_hdr_or_null(const void *ctx) +{ + if (!ctx) + return &null_parent.hdr; + return to_tal_hdr(ctx); +} + +static void *from_tal_hdr(const struct tal_hdr *hdr) +{ + return (void *)(hdr + 1); +} + +static void *from_tal_hdr_or_null(const struct tal_hdr *hdr) +{ + if (hdr == &null_parent.hdr) + return NULL; + return from_tal_hdr(hdr); +} + +#ifdef TAL_DEBUG +static struct tal_hdr *debug_tal(struct tal_hdr *tal) +{ + tal_check(from_tal_hdr_or_null(tal), "TAL_DEBUG "); + return tal; +} +#else +static struct tal_hdr *debug_tal(struct tal_hdr *tal) +{ + return tal; +} +#endif + +static void notify(const struct tal_hdr *ctx, + enum tal_notify_type type, const void *info, + int saved_errno) +{ + const struct prop_hdr *p; + + for (p = ctx->prop; p; p = p->next) { + struct notifier *n; + + if (is_literal(p)) + break; + if (p->type != NOTIFIER) + continue; + n = (struct notifier *)p; + if (n->types & type) { + errno = saved_errno; + if (n->types & NOTIFY_IS_DESTRUCTOR) { + /* Blatt this notifier in case it tries to + * tal_del_destructor() from inside */ + union notifier_cb cb = n->u; + /* It's a union, so this NULLs destroy2 too! */ + n->u.destroy = NULL; + if (n->types & NOTIFY_EXTRA_ARG) + cb.destroy2(from_tal_hdr(ctx), + EXTRA_ARG(n)); + else + cb.destroy(from_tal_hdr(ctx)); + } else + n->u.notifyfn(from_tal_hdr_or_null(ctx), type, + (void *)info); + } + } +} + +static void *allocate(size_t size) +{ + void *ret = allocfn(size); + if (!ret) + call_error("allocation failed"); + else + update_bounds(ret, size); + return ret; +} + +static struct prop_hdr **find_property_ptr(const struct tal_hdr *t, + enum prop_type type) +{ + struct prop_hdr **p; + + for (p = (struct prop_hdr **)&t->prop; *p; p = &(*p)->next) { + if (is_literal(*p)) { + if (type == NAME) + return p; + break; + } + if ((*p)->type == type) + return p; + } + return NULL; +} + +static void *find_property(const struct tal_hdr *parent, enum prop_type type) +{ + struct prop_hdr **p = find_property_ptr(parent, type); + + if (p) + return *p; + return NULL; +} + +static void init_property(struct prop_hdr *hdr, + struct tal_hdr *parent, + enum prop_type type) +{ + hdr->type = type; + hdr->next = parent->prop; + parent->prop = hdr; +} + +static struct notifier *add_notifier_property(struct tal_hdr *t, + enum tal_notify_type types, + void (*fn)(void *, + enum tal_notify_type, + void *), + void *extra_arg) +{ + struct notifier *prop; + + if (types & NOTIFY_EXTRA_ARG) + prop = allocate(sizeof(struct notifier_extra_arg)); + else + prop = allocate(sizeof(struct notifier)); + + if (prop) { + init_property(&prop->hdr, t, NOTIFIER); + prop->types = types; + prop->u.notifyfn = fn; + if (types & NOTIFY_EXTRA_ARG) + EXTRA_ARG(prop) = extra_arg; + } + return prop; +} + +static enum tal_notify_type del_notifier_property(struct tal_hdr *t, + void (*fn)(tal_t *, + enum tal_notify_type, + void *), + bool match_extra_arg, + void *extra_arg) +{ + struct prop_hdr **p; + + for (p = (struct prop_hdr **)&t->prop; *p; p = &(*p)->next) { + struct notifier *n; + enum tal_notify_type types; + + if (is_literal(*p)) + break; + if ((*p)->type != NOTIFIER) + continue; + n = (struct notifier *)*p; + if (n->u.notifyfn != fn) + continue; + + types = n->types; + if ((types & NOTIFY_EXTRA_ARG) + && match_extra_arg + && extra_arg != EXTRA_ARG(n)) + continue; + + *p = (*p)->next; + freefn(n); + return types & ~(NOTIFY_IS_DESTRUCTOR|NOTIFY_EXTRA_ARG); + } + return 0; +} + +static struct name *add_name_property(struct tal_hdr *t, const char *name) +{ + struct name *prop; + + prop = allocate(sizeof(*prop) + strlen(name) + 1); + if (prop) { + init_property(&prop->hdr, t, NAME); + strcpy(prop->name, name); + } + return prop; +} + +static struct children *add_child_property(struct tal_hdr *parent, + struct tal_hdr *child UNNEEDED) +{ + struct children *prop = allocate(sizeof(*prop)); + if (prop) { + init_property(&prop->hdr, parent, CHILDREN); + prop->parent = parent; + list_head_init(&prop->children); + } + return prop; +} + +static bool add_child(struct tal_hdr *parent, struct tal_hdr *child) +{ + struct children *children = find_property(parent, CHILDREN); + + if (!children) { + children = add_child_property(parent, child); + if (!children) + return false; + } + list_add(&children->children, &child->list); + child->parent_child = (intptr_t)children ^ TAL_PTR_OBFUSTICATOR; + return true; +} + +static void del_tree(struct tal_hdr *t, const tal_t *orig, int saved_errno) +{ + struct prop_hdr **prop, *p, *next; + + assert(!taken(from_tal_hdr(t))); + + /* Already being destroyed? Don't loop. */ + if (unlikely(get_destroying_bit(t->parent_child))) + return; + + set_destroying_bit(&t->parent_child); + + /* Call free notifiers. */ + notify(t, TAL_NOTIFY_FREE, (tal_t *)orig, saved_errno); + + /* Now free children and groups. */ + prop = find_property_ptr(t, CHILDREN); + if (prop) { + struct tal_hdr *i; + struct children *c = (struct children *)*prop; + + while ((i = list_top(&c->children, struct tal_hdr, list))) { + list_del(&i->list); + del_tree(i, orig, saved_errno); + } + } + + /* Finally free our properties. */ + for (p = t->prop; p && !is_literal(p); p = next) { + next = p->next; + freefn(p); + } + freefn(t); +} + +void *tal_alloc_(const tal_t *ctx, size_t size, bool clear, const char *label) +{ + struct tal_hdr *child, *parent = debug_tal(to_tal_hdr_or_null(ctx)); + + child = allocate(sizeof(struct tal_hdr) + size); + if (!child) + return NULL; + if (clear) + memset(from_tal_hdr(child), 0, size); + child->prop = (void *)label; + child->bytelen = size; + + if (!add_child(parent, child)) { + freefn(child); + return NULL; + } + debug_tal(parent); + if (notifiers) + notify(parent, TAL_NOTIFY_ADD_CHILD, from_tal_hdr(child), 0); + return from_tal_hdr(debug_tal(child)); +} + +static bool adjust_size(size_t *size, size_t count) +{ + const size_t extra = sizeof(struct tal_hdr); + + /* Multiplication wrap */ + if (count && unlikely(*size * count / *size != count)) + goto overflow; + + *size *= count; + + /* Make sure we don't wrap adding header. */ + if (*size + extra < extra) + goto overflow; + return true; +overflow: + call_error("allocation size overflow"); + return false; +} + +void *tal_alloc_arr_(const tal_t *ctx, size_t size, size_t count, bool clear, + const char *label) +{ + if (!adjust_size(&size, count)) + return NULL; + + return tal_alloc_(ctx, size, clear, label); +} + +void *tal_free(const tal_t *ctx) +{ + if (ctx) { + struct tal_hdr *t; + int saved_errno = errno; + t = debug_tal(to_tal_hdr(ctx)); + if (unlikely(get_destroying_bit(t->parent_child))) + return NULL; + if (notifiers) + notify(ignore_destroying_bit(t->parent_child)->parent, + TAL_NOTIFY_DEL_CHILD, ctx, saved_errno); + list_del(&t->list); + del_tree(t, ctx, saved_errno); + errno = saved_errno; + } + return NULL; +} + +void *tal_steal_(const tal_t *new_parent, const tal_t *ctx) +{ + if (ctx) { + struct tal_hdr *newpar, *t, *old_parent; + + newpar = debug_tal(to_tal_hdr_or_null(new_parent)); + t = debug_tal(to_tal_hdr(ctx)); + + /* Unlink it from old parent. */ + list_del(&t->list); + old_parent = ignore_destroying_bit(t->parent_child)->parent; + + if (unlikely(!add_child(newpar, t))) { + /* We can always add to old parent, because it has a + * children property already. */ + if (!add_child(old_parent, t)) + abort(); + return NULL; + } + debug_tal(newpar); + if (notifiers) + notify(t, TAL_NOTIFY_STEAL, new_parent, 0); + } + return (void *)ctx; +} + +bool tal_add_destructor_(const tal_t *ctx, void (*destroy)(void *me)) +{ + tal_t *t = debug_tal(to_tal_hdr(ctx)); + return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR, + (void *)destroy, NULL); +} + +bool tal_add_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), + void *arg) +{ + tal_t *t = debug_tal(to_tal_hdr(ctx)); + return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR + |NOTIFY_EXTRA_ARG, + (void *)destroy, arg); +} + +/* We could support notifiers with an extra arg, but we didn't add to API */ +bool tal_add_notifier_(const tal_t *ctx, enum tal_notify_type types, + void (*callback)(tal_t *, enum tal_notify_type, void *)) +{ + struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); + struct notifier *n; + + assert(types); + assert((types & ~(TAL_NOTIFY_FREE | TAL_NOTIFY_STEAL | TAL_NOTIFY_MOVE + | TAL_NOTIFY_RESIZE | TAL_NOTIFY_RENAME + | TAL_NOTIFY_ADD_CHILD | TAL_NOTIFY_DEL_CHILD + | TAL_NOTIFY_ADD_NOTIFIER + | TAL_NOTIFY_DEL_NOTIFIER)) == 0); + + /* Don't call notifier about itself: set types after! */ + n = add_notifier_property(t, 0, callback, NULL); + if (unlikely(!n)) + return false; + + if (notifiers) + notify(t, TAL_NOTIFY_ADD_NOTIFIER, callback, 0); + + n->types = types; + if (types != TAL_NOTIFY_FREE) + notifiers++; + return true; +} + +bool tal_del_notifier_(const tal_t *ctx, + void (*callback)(tal_t *, enum tal_notify_type, void *), + bool match_extra_arg, void *extra_arg) +{ + struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); + enum tal_notify_type types; + + types = del_notifier_property(t, callback, match_extra_arg, extra_arg); + if (types) { + notify(t, TAL_NOTIFY_DEL_NOTIFIER, callback, 0); + if (types != TAL_NOTIFY_FREE) + notifiers--; + return true; + } + return false; +} + +bool tal_del_destructor_(const tal_t *ctx, void (*destroy)(void *me)) +{ + return tal_del_notifier_(ctx, (void *)destroy, false, NULL); +} + +bool tal_del_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), + void *arg) +{ + return tal_del_notifier_(ctx, (void *)destroy, true, arg); +} + +bool tal_set_name_(tal_t *ctx, const char *name, bool literal) +{ + struct tal_hdr *t = debug_tal(to_tal_hdr(ctx)); + struct prop_hdr **prop = find_property_ptr(t, NAME); + + /* Get rid of any old name */ + if (prop) { + struct name *name = (struct name *)*prop; + if (is_literal(&name->hdr)) + *prop = NULL; + else { + *prop = name->hdr.next; + freefn(name); + } + } + + if (literal && name[0]) { + struct prop_hdr **p; + + /* Append literal. */ + for (p = &t->prop; *p && !is_literal(*p); p = &(*p)->next); + *p = (struct prop_hdr *)name; + } else if (!add_name_property(t, name)) + return false; + + debug_tal(t); + if (notifiers) + notify(t, TAL_NOTIFY_RENAME, name, 0); + return true; +} + +const char *tal_name(const tal_t *t) +{ + struct name *n; + + n = find_property(debug_tal(to_tal_hdr(t)), NAME); + if (!n) + return NULL; + + if (is_literal(&n->hdr)) + return (const char *)n; + return n->name; +} + +size_t tal_bytelen(const tal_t *ptr) +{ + /* NULL -> null_parent which has bytelen 0 */ + struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ptr)); + + return t->bytelen; +} + +/* Start one past first child: make stopping natural in circ. list. */ +static struct tal_hdr *first_child(struct tal_hdr *parent) +{ + struct children *child; + + child = find_property(parent, CHILDREN); + if (!child) + return NULL; + + return list_top(&child->children, struct tal_hdr, list); +} + +tal_t *tal_first(const tal_t *root) +{ + struct tal_hdr *c, *t = debug_tal(to_tal_hdr_or_null(root)); + + c = first_child(t); + if (!c) + return NULL; + return from_tal_hdr(c); +} + +tal_t *tal_next(const tal_t *prev) +{ + struct tal_hdr *next, *prevhdr = debug_tal(to_tal_hdr(prev)); + struct list_head *head; + + head = &ignore_destroying_bit(prevhdr->parent_child)->children; + next = list_next(head, prevhdr, list); + if (!next) + return NULL; + return from_tal_hdr(next); +} + +tal_t *tal_parent(const tal_t *ctx) +{ + struct tal_hdr *t; + + if (!ctx) + return NULL; + + t = debug_tal(to_tal_hdr(ctx)); + if (ignore_destroying_bit(t->parent_child)->parent == &null_parent.hdr) + return NULL; + return from_tal_hdr(ignore_destroying_bit(t->parent_child)->parent); +} + +bool tal_resize_(tal_t **ctxp, size_t size, size_t count, bool clear) +{ + struct tal_hdr *old_t, *t; + struct children *child; + + old_t = debug_tal(to_tal_hdr(*ctxp)); + + if (!adjust_size(&size, count)) + return false; + + t = resizefn(old_t, sizeof(struct tal_hdr) + size); + if (!t) { + call_error("Reallocation failure"); + return false; + } + + /* Clear between old end and new end. */ + if (clear && size > t->bytelen) { + char *old_end = (char *)(t + 1) + t->bytelen; + memset(old_end, 0, size - t->bytelen); + } + + /* Update length. */ + t->bytelen = size; + update_bounds(t, sizeof(struct tal_hdr) + size); + + /* If it didn't move, we're done! */ + if (t != old_t) { + /* Fix up linked list pointers. */ + t->list.next->prev = t->list.prev->next = &t->list; + + /* Copy take() property. */ + if (taken(from_tal_hdr(old_t))) + take(from_tal_hdr(t)); + + /* Fix up child property's parent pointer. */ + child = find_property(t, CHILDREN); + if (child) { + assert(child->parent == old_t); + child->parent = t; + } + *ctxp = from_tal_hdr(debug_tal(t)); + if (notifiers) + notify(t, TAL_NOTIFY_MOVE, from_tal_hdr(old_t), 0); + } + if (notifiers) + notify(t, TAL_NOTIFY_RESIZE, (void *)size, 0); + + return true; +} + +bool tal_expand_(tal_t **ctxp, const void *src, size_t size, size_t count) +{ + size_t old_len; + bool ret = false; + + old_len = debug_tal(to_tal_hdr(*ctxp))->bytelen; + + /* Check for additive overflow */ + if (old_len + count * size < old_len) { + call_error("dup size overflow"); + goto out; + } + + /* Don't point src inside thing we're expanding! */ + assert(src < *ctxp + || (char *)src >= (char *)(*ctxp) + old_len); + + if (!tal_resize_(ctxp, size, old_len/size + count, false)) + goto out; + + memcpy((char *)*ctxp + old_len, src, count * size); + ret = true; + +out: + if (taken(src)) + tal_free(src); + return ret; +} + +void *tal_dup_(const tal_t *ctx, const void *p, size_t size, + size_t n, size_t extra, bool nullok, const char *label) +{ + void *ret; + size_t nbytes = size; + + if (nullok && p == NULL) { + /* take(NULL) works. */ + (void)taken(p); + return NULL; + } + + if (!adjust_size(&nbytes, n)) { + if (taken(p)) + tal_free(p); + return NULL; + } + + /* Beware addition overflow! */ + if (n + extra < n) { + call_error("dup size overflow"); + if (taken(p)) + tal_free(p); + return NULL; + } + + if (taken(p)) { + if (unlikely(!p)) + return NULL; + if (unlikely(!tal_resize_((void **)&p, size, n + extra, false))) + return tal_free(p); + if (unlikely(!tal_steal(ctx, p))) + return tal_free(p); + return (void *)p; + } + + ret = tal_alloc_arr_(ctx, size, n + extra, false, label); + if (ret) + memcpy(ret, p, nbytes); + return ret; +} + +void *tal_dup_talarr_(const tal_t *ctx, const tal_t *src TAKES, const char *label) +{ + return tal_dup_(ctx, src, 1, tal_bytelen(src), 0, true, label); +} + +void tal_set_backend(void *(*alloc_fn)(size_t size), + void *(*resize_fn)(void *, size_t size), + void (*free_fn)(void *), + void (*error_fn)(const char *msg)) +{ + if (alloc_fn) + allocfn = alloc_fn; + if (resize_fn) + resizefn = resize_fn; + if (free_fn) + freefn = free_fn; + if (error_fn) + errorfn = error_fn; +} + +#ifdef CCAN_TAL_DEBUG +static void dump_node(unsigned int indent, const struct tal_hdr *t) +{ + unsigned int i; + const struct prop_hdr *p; + + for (i = 0; i < indent; i++) + fprintf(stderr, " "); + fprintf(stderr, "%p len=%zu", t, t->bytelen); + for (p = t->prop; p; p = p->next) { + struct children *c; + struct name *n; + struct notifier *no; + if (is_literal(p)) { + fprintf(stderr, " \"%s\"", (const char *)p); + break; + } + switch (p->type) { + case CHILDREN: + c = (struct children *)p; + fprintf(stderr, " CHILDREN(%p):parent=%p,children={%p,%p}", + p, c->parent, + c->children.n.prev, c->children.n.next); + break; + case NAME: + n = (struct name *)p; + fprintf(stderr, " NAME(%p):%s", p, n->name); + break; + case NOTIFIER: + no = (struct notifier *)p; + fprintf(stderr, " NOTIFIER(%p):fn=%p", p, no->u.notifyfn); + break; + default: + fprintf(stderr, " **UNKNOWN(%p):%i**", p, p->type); + } + } + fprintf(stderr, "\n"); +} + +static void tal_dump_(unsigned int level, const struct tal_hdr *t) +{ + struct children *children; + + dump_node(level, t); + + children = find_property(t, CHILDREN); + if (children) { + struct tal_hdr *i; + + list_for_each(&children->children, i, list) + tal_dump_(level + 1, i); + } +} + +void tal_dump(void) +{ + tal_dump_(0, &null_parent.hdr); +} +#endif /* CCAN_TAL_DEBUG */ + +#ifndef NDEBUG +static bool check_err(struct tal_hdr *t, const char *errorstr, + const char *errmsg) +{ + if (errorstr) { + /* Try not to malloc: it may be corrupted. */ + char msg[strlen(errorstr) + 20 + strlen(errmsg) + 1]; + sprintf(msg, "%s:%p %s", errorstr, from_tal_hdr(t), errmsg); + call_error(msg); + } + return false; +} + +static bool check_node(struct children *parent_child, + struct tal_hdr *t, const char *errorstr) +{ + struct prop_hdr *p; + struct name *name = NULL; + struct children *children = NULL; + + if (!in_bounds(t)) + return check_err(t, errorstr, "invalid pointer"); + + if (ignore_destroying_bit(t->parent_child) != parent_child) + return check_err(t, errorstr, "incorrect parent"); + + for (p = t->prop; p; p = p->next) { + if (is_literal(p)) { + if (name) + return check_err(t, errorstr, + "has extra literal"); + break; + } + if (!in_bounds(p)) + return check_err(t, errorstr, + "has bad property pointer"); + + switch (p->type) { + case CHILDREN: + if (children) + return check_err(t, errorstr, + "has two child nodes"); + children = (struct children *)p; + break; + case NOTIFIER: + break; + case NAME: + if (name) + return check_err(t, errorstr, + "has two names"); + name = (struct name *)p; + break; + default: + return check_err(t, errorstr, "has unknown property"); + } + } + if (children) { + struct tal_hdr *i; + + if (!list_check(&children->children, errorstr)) + return false; + list_for_each(&children->children, i, list) { + if (!check_node(children, i, errorstr)) + return false; + } + } + return true; +} + +bool tal_check(const tal_t *ctx, const char *errorstr) +{ + struct tal_hdr *t = to_tal_hdr_or_null(ctx); + + return check_node(ignore_destroying_bit(t->parent_child), t, errorstr); +} +#else /* NDEBUG */ +bool tal_check(const tal_t *ctx, const char *errorstr) +{ + return true; +} +#endif diff --git a/nostrdb/bolt11/tal.h b/nostrdb/bolt11/tal.h new file mode 100644 index 000000000..8cd7670f6 --- /dev/null +++ b/nostrdb/bolt11/tal.h @@ -0,0 +1,553 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#ifndef CCAN_TAL_H +#define CCAN_TAL_H +#include "../config.h" +#include "../compiler.h" +#include "likely.h" +#include "typesafe_cb.h" +#include "str.h" +#include "take.h" + +#include +#include +#include + +/** + * tal_t - convenient alias for void to mark tal pointers. + * + * Since any pointer can be a tal-allocated pointer, it's often + * useful to use this typedef to mark them explicitly. + */ +typedef void tal_t; + +/** + * tal - basic allocator function + * @ctx: NULL, or tal allocated object to be parent. + * @type: the type to allocate. + * + * Allocates a specific type, with a given parent context. The name + * of the object is a string of the type, but if CCAN_TAL_DEBUG is + * defined it also contains the file and line which allocated it. + * + * tal_count() of the return will be 1. + * + * Example: + * int *p = tal(NULL, int); + * *p = 1; + */ +#define tal(ctx, type) \ + tal_label(ctx, type, TAL_LABEL(type, "")) + +/** + * talz - zeroing allocator function + * @ctx: NULL, or tal allocated object to be parent. + * @type: the type to allocate. + * + * Equivalent to tal() followed by memset() to zero. + * + * Example: + * p = talz(NULL, int); + * assert(*p == 0); + */ +#define talz(ctx, type) \ + talz_label(ctx, type, TAL_LABEL(type, "")) + +/** + * tal_free - free a tal-allocated pointer. + * @p: NULL, or tal allocated object to free. + * + * This calls the destructors for p (if any), then does the same for all its + * children (recursively) before finally freeing the memory. It returns + * NULL, for convenience. + * + * Note: errno is preserved by this call, and also saved and restored + * for any destructors or notifiers. + * + * Example: + * p = tal_free(p); + */ +void *tal_free(const tal_t *p); + +/** + * tal_arr - allocate an array of objects. + * @ctx: NULL, or tal allocated object to be parent. + * @type: the type to allocate. + * @count: the number to allocate. + * + * tal_count() of the returned pointer will be @count. + * + * Example: + * p = tal_arr(NULL, int, 2); + * p[0] = 0; + * p[1] = 1; + */ +#define tal_arr(ctx, type, count) \ + tal_arr_label(ctx, type, count, TAL_LABEL(type, "[]")) + +/** + * tal_arrz - allocate an array of zeroed objects. + * @ctx: NULL, or tal allocated object to be parent. + * @type: the type to allocate. + * @count: the number to allocate. + * + * Equivalent to tal_arr() followed by memset() to zero. + * + * Example: + * p = tal_arrz(NULL, int, 2); + * assert(p[0] == 0 && p[1] == 0); + */ +#define tal_arrz(ctx, type, count) \ + tal_arrz_label(ctx, type, count, TAL_LABEL(type, "[]")) + +/** + * tal_resize - enlarge or reduce a tal object. + * @p: A pointer to the tal allocated array to resize. + * @count: the number to allocate. + * + * This returns true on success (and may move *@p), or false on failure. + * On success, tal_count() of *@p will be @count. + * + * Note: if *p is take(), it will still be take() upon return, even if it + * has been moved. + * + * Example: + * tal_resize(&p, 100); + */ +#define tal_resize(p, count) \ + tal_resize_((void **)(p), sizeof**(p), (count), false) + +/** + * tal_resizez - enlarge or reduce a tal object; zero out extra. + * @p: A pointer to the tal allocated array to resize. + * @count: the number to allocate. + * + * This returns true on success (and may move *@p), or false on failure. + * + * Example: + * tal_resizez(&p, 200); + */ +#define tal_resizez(p, count) \ + tal_resize_((void **)(p), sizeof**(p), (count), true) + +/** + * tal_steal - change the parent of a tal-allocated pointer. + * @ctx: The new parent. + * @ptr: The tal allocated object to move, or NULL. + * + * This may need to perform an allocation, in which case it may fail; thus + * it can return NULL, otherwise returns @ptr. If @ptr is NULL, this function does + * nothing. + */ +#if HAVE_STATEMENT_EXPR +/* Weird macro avoids gcc's 'warning: value computed is not used'. */ +#define tal_steal(ctx, ptr) \ + ({ (tal_typeof(ptr) tal_steal_((ctx),(ptr))); }) +#else +#define tal_steal(ctx, ptr) \ + (tal_typeof(ptr) tal_steal_((ctx),(ptr))) +#endif + +/** + * tal_add_destructor - add a callback function when this context is destroyed. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * + * This is a more convenient form of tal_add_notifier(@ptr, + * TAL_NOTIFY_FREE, ...), in that the function prototype takes only @ptr. + * + * Note that this can only fail if your allocfn fails and your errorfn returns. + */ +#define tal_add_destructor(ptr, function) \ + tal_add_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) + +/** + * tal_del_destructor - remove a destructor callback function. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * + * If @function has not been successfully added as a destructor, this returns + * false. Note that if we're inside the destructor call itself, this will + * return false. + */ +#define tal_del_destructor(ptr, function) \ + tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) + +/** + * tal_add_destructor2 - add a 2-arg callback function when context is destroyed. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * @arg: the extra argument to the function. + * + * Sometimes an extra argument is required for a destructor; this + * saves the extra argument internally to avoid the caller having to + * do an extra allocation. + * + * Note that this can only fail if your allocfn fails and your errorfn returns. + */ +#define tal_add_destructor2(ptr, function, arg) \ + tal_add_destructor2_((ptr), \ + typesafe_cb_cast(void (*)(tal_t *, void *), \ + void (*)(__typeof__(ptr), \ + __typeof__(arg)), \ + (function)), \ + (arg)) + +/** + * tal_del_destructor - remove a destructor callback function. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * + * If @function has not been successfully added as a destructor, this returns + * false. Note that if we're inside the destructor call itself, this will + * return false. + */ +#define tal_del_destructor(ptr, function) \ + tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) + +/** + * tal_del_destructor2 - remove 2-arg callback function. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * @arg: the extra argument to the function. + * + * If @function has not been successfully added as a destructor with + * @arg, this returns false. + */ +#define tal_del_destructor2(ptr, function, arg) \ + tal_del_destructor2_((ptr), \ + typesafe_cb_cast(void (*)(tal_t *, void *), \ + void (*)(__typeof__(ptr), \ + __typeof__(arg)), \ + (function)), \ + (arg)) +enum tal_notify_type { + TAL_NOTIFY_FREE = 1, + TAL_NOTIFY_STEAL = 2, + TAL_NOTIFY_MOVE = 4, + TAL_NOTIFY_RESIZE = 8, + TAL_NOTIFY_RENAME = 16, + TAL_NOTIFY_ADD_CHILD = 32, + TAL_NOTIFY_DEL_CHILD = 64, + TAL_NOTIFY_ADD_NOTIFIER = 128, + TAL_NOTIFY_DEL_NOTIFIER = 256 +}; + +/** + * tal_add_notifier - add a callback function when this context changes. + * @ptr: The tal allocated object, or NULL. + * @types: Bitwise OR of the types the callback is interested in. + * @callback: the function to call. + * + * Note that this can only fail if your allocfn fails and your errorfn + * returns. Also note that notifiers are not reliable in the case + * where an allocation fails, as they may be called before any + * allocation is actually done. + * + * TAL_NOTIFY_FREE is called when @ptr is freed, either directly or + * because an ancestor is freed: @info is the argument to tal_free(). + * It is exactly equivalent to a destructor, with more information. + * errno is set to the value it was at the call of tal_free(). + * + * TAL_NOTIFY_STEAL is called when @ptr's parent changes: @info is the + * new parent. + * + * TAL_NOTIFY_MOVE is called when @ptr is realloced (via tal_resize) + * and moved. In this case, @ptr arg here is the new memory, and + * @info is the old pointer. + * + * TAL_NOTIFY_RESIZE is called when @ptr is realloced via tal_resize: + * @info is the new size, in bytes. If the pointer has moved, + * TAL_NOTIFY_MOVE callbacks are called first. + * + * TAL_NOTIFY_ADD_CHILD/TAL_NOTIFY_DEL_CHILD are called when @ptr is + * the context for a tal() allocating call, or a direct child is + * tal_free()d: @info is the child. Note that TAL_NOTIFY_DEL_CHILD is + * not called when this context is tal_free()d: TAL_NOTIFY_FREE is + * considered sufficient for that case. + * + * TAL_NOTIFY_ADD_NOTIFIER/TAL_NOTIFIER_DEL_NOTIFIER are called when a + * notifier is added or removed (not for this notifier): @info is the + * callback. This is also called for tal_add_destructor and + * tal_del_destructor. + */ +#define tal_add_notifier(ptr, types, callback) \ + tal_add_notifier_((ptr), (types), \ + typesafe_cb_postargs(void, tal_t *, (callback), \ + (ptr), \ + enum tal_notify_type, void *)) + +/** + * tal_del_notifier - remove a notifier callback function. + * @ptr: The tal allocated object. + * @callback: the function to call. + */ +#define tal_del_notifier(ptr, callback) \ + tal_del_notifier_((ptr), \ + typesafe_cb_postargs(void, void *, (callback), \ + (ptr), \ + enum tal_notify_type, void *), \ + false, NULL) + +/** + * tal_set_name - attach a name to a tal pointer. + * @ptr: The tal allocated object. + * @name: The name to use. + * + * The name is copied, unless we're certain it's a string literal. + */ +#define tal_set_name(ptr, name) \ + tal_set_name_((ptr), (name), TAL_IS_LITERAL(name)) + +/** + * tal_name - get the name for a tal pointer. + * @ptr: The tal allocated object. + * + * Returns NULL if no name has been set. + */ +const char *tal_name(const tal_t *ptr); + +/** + * tal_count - get the count of objects in a tal object. + * @ptr: The tal allocated object (or NULL) + * + * Returns 0 if @ptr is NULL. Note that if the allocation was done as a + * different type to @ptr, the result may not match the @count argument + * (or implied 1) of that allocation! + */ +#define tal_count(p) (tal_bytelen(p) / sizeof(*p)) + +/** + * tal_bytelen - get the count of bytes in a tal object. + * @ptr: The tal allocated object (or NULL) + * + * Returns 0 if @ptr is NULL. + */ +size_t tal_bytelen(const tal_t *ptr); + +/** + * tal_first - get the first immediate tal object child. + * @root: The tal allocated object to start with, or NULL. + * + * Returns NULL if there are no children. + */ +tal_t *tal_first(const tal_t *root); + +/** + * tal_next - get the next immediate tal object child. + * @prev: The return value from tal_first or tal_next. + * + * Returns NULL if there are no more immediate children. This should be safe to + * call on an altering tree unless @prev is no longer valid. + */ +tal_t *tal_next(const tal_t *prev); + +/** + * tal_parent - get the parent of a tal object. + * @ctx: The tal allocated object. + * + * Returns the parent, which may be NULL. Returns NULL if @ctx is NULL. + */ +tal_t *tal_parent(const tal_t *ctx); + +/** + * tal_dup - duplicate an object. + * @ctx: The tal allocated object to be parent of the result (may be NULL). + * @type: the type (should match type of @p!) + * @p: the object to copy (or reparented if take()). Must not be NULL. + */ +#define tal_dup(ctx, type, p) \ + tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), false) + +/** + * tal_dup_or_null - duplicate an object, or just pass NULL. + * @ctx: The tal allocated object to be parent of the result (may be NULL). + * @type: the type (should match type of @p!) + * @p: the object to copy (or reparented if take()) + * + * if @p is NULL, just return NULL, otherwise to tal_dup(). + */ +#define tal_dup_or_null(ctx, type, p) \ + tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), true) + +/** + * tal_dup_arr - duplicate an array. + * @ctx: The tal allocated object to be parent of the result (may be NULL). + * @type: the type (should match type of @p!) + * @p: the array to copy (or resized & reparented if take()) + * @n: the number of sizeof(type) entries to copy. + * @extra: the number of extra sizeof(type) entries to allocate. + */ +#define tal_dup_arr(ctx, type, p, n, extra) \ + tal_dup_arr_label(ctx, type, p, n, extra, TAL_LABEL(type, "[]")) + + +/** + * tal_dup_arr - duplicate a tal array. + * @ctx: The tal allocated object to be parent of the result (may be NULL). + * @type: the type (should match type of @p!) + * @p: the tal array to copy (or resized & reparented if take()) + * + * The comon case of duplicating an entire tal array. + */ +#define tal_dup_talarr(ctx, type, p) \ + ((type *)tal_dup_talarr_((ctx), tal_typechk_(p, type *), \ + TAL_LABEL(type, "[]"))) +/* Lower-level interfaces, where you want to supply your own label string. */ +#define tal_label(ctx, type, label) \ + ((type *)tal_alloc_((ctx), sizeof(type), false, label)) +#define talz_label(ctx, type, label) \ + ((type *)tal_alloc_((ctx), sizeof(type), true, label)) +#define tal_arr_label(ctx, type, count, label) \ + ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), false, label)) +#define tal_arrz_label(ctx, type, count, label) \ + ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), true, label)) +#define tal_dup_label(ctx, type, p, label, nullok) \ + ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ + sizeof(type), 1, 0, nullok, \ + label)) +#define tal_dup_arr_label(ctx, type, p, n, extra, label) \ + ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ + sizeof(type), (n), (extra), false, \ + label)) + +/** + * tal_set_backend - set the allocation or error functions to use + * @alloc_fn: allocator or NULL (default is malloc) + * @resize_fn: re-allocator or NULL (default is realloc) + * @free_fn: free function or NULL (default is free) + * @error_fn: called on errors or NULL (default is abort) + * + * The defaults are set up so tal functions never return NULL, but you + * can override erorr_fn to change that. error_fn can return, and is + * called if alloc_fn or resize_fn fail. + * + * If any parameter is NULL, that function is unchanged. + */ +void tal_set_backend(void *(*alloc_fn)(size_t size), + void *(*resize_fn)(void *, size_t size), + void (*free_fn)(void *), + void (*error_fn)(const char *msg)); + +/** + * tal_expand - expand a tal array with contents. + * @a1p: a pointer to the tal array to expand. + * @a2: the second array (can be take()). + * @num2: the number of elements in the second array. + * + * Note that *@a1 and @a2 should be the same type. tal_count(@a1) will + * be increased by @num2. + * + * Example: + * int *arr1 = tal_arrz(NULL, int, 2); + * int arr2[2] = { 1, 3 }; + * + * tal_expand(&arr1, arr2, 2); + * assert(tal_count(arr1) == 4); + * assert(arr1[2] == 1); + * assert(arr1[3] == 3); + */ +#define tal_expand(a1p, a2, num2) \ + tal_expand_((void **)(a1p), (a2), sizeof**(a1p), \ + (num2) + 0*sizeof(*(a1p) == (a2))) + +/** + * tal_cleanup - remove pointers from NULL node + * + * Internally, tal keeps a list of nodes allocated from @ctx NULL; this + * prevents valgrind from noticing memory leaks. This re-initializes + * that list to empty. + * + * It also calls take_cleanup() for you. + */ +void tal_cleanup(void); + + +/** + * tal_check - sanity check a tal context and its children. + * @ctx: a tal context, or NULL. + * @errorstr: a string to prepend calls to error_fn, or NULL. + * + * This sanity-checks a tal tree (unless NDEBUG is defined, in which case + * it simply returns true). If errorstr is not null, error_fn is called + * when a problem is found, otherwise it is not. + * + * See also: + * tal_set_backend() + */ +bool tal_check(const tal_t *ctx, const char *errorstr); + +#ifdef CCAN_TAL_DEBUG +/** + * tal_dump - dump entire tal tree to stderr. + * + * This is a helper for debugging tal itself, which dumps all the tal internal + * state. + */ +void tal_dump(void); +#endif + +/* Internal support functions */ +#ifndef TAL_LABEL +#ifdef CCAN_TAL_NO_LABELS +#define TAL_LABEL(type, arr) NULL +#else +#ifdef CCAN_TAL_DEBUG +#define TAL_LABEL(type, arr) \ + __FILE__ ":" stringify(__LINE__) ":" stringify(type) arr +#else +#define TAL_LABEL(type, arr) stringify(type) arr +#endif /* CCAN_TAL_DEBUG */ +#endif +#endif + +#if HAVE_BUILTIN_CONSTANT_P +#define TAL_IS_LITERAL(str) __builtin_constant_p(str) +#else +#define TAL_IS_LITERAL(str) (sizeof(&*(str)) != sizeof(char *)) +#endif + +bool tal_set_name_(tal_t *ctx, const char *name, bool literal); + +#if HAVE_TYPEOF +#define tal_typeof(ptr) (__typeof__(ptr)) +#if HAVE_STATEMENT_EXPR +/* Careful: ptr can be const foo *, ptype is foo *. Also, ptr could + * be an array, eg "hello". */ +#define tal_typechk_(ptr, ptype) ({ __typeof__((ptr)+0) _p = (ptype)(ptr); _p; }) +#else +#define tal_typechk_(ptr, ptype) (ptr) +#endif +#else /* !HAVE_TYPEOF */ +#define tal_typeof(ptr) +#define tal_typechk_(ptr, ptype) (ptr) +#endif + +void *tal_alloc_(const tal_t *ctx, size_t bytes, bool clear, const char *label); +void *tal_alloc_arr_(const tal_t *ctx, size_t bytes, size_t count, bool clear, + const char *label); + +void *tal_dup_(const tal_t *ctx, const void *p TAKES, size_t size, + size_t n, size_t extra, bool nullok, const char *label); +void *tal_dup_talarr_(const tal_t *ctx, const tal_t *src TAKES, + const char *label); + +tal_t *tal_steal_(const tal_t *new_parent, const tal_t *t); + +bool tal_resize_(tal_t **ctxp, size_t size, size_t count, bool clear); +bool tal_expand_(tal_t **ctxp, const void *src TAKES, size_t size, size_t count); + +bool tal_add_destructor_(const tal_t *ctx, void (*destroy)(void *me)); +bool tal_add_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), + void *arg); +bool tal_del_destructor_(const tal_t *ctx, void (*destroy)(void *me)); +bool tal_del_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), + void *arg); + +bool tal_add_notifier_(const tal_t *ctx, enum tal_notify_type types, + void (*notify)(tal_t *ctx, enum tal_notify_type, + void *info)); +bool tal_del_notifier_(const tal_t *ctx, + void (*notify)(tal_t *ctx, enum tal_notify_type, + void *info), + bool match_extra_arg, void *arg); +#endif /* CCAN_TAL_H */ diff --git a/nostrdb/bolt11/talstr.c b/nostrdb/bolt11/talstr.c new file mode 100644 index 000000000..1fb66858e --- /dev/null +++ b/nostrdb/bolt11/talstr.c @@ -0,0 +1,315 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#include +#include +#include +#include +#include +#include "talstr.h" +#include +#include +#include +#include +#include +#include "str.h" + +char *tal_strdup_(const tal_t *ctx, const char *p, const char *label) +{ + /* We have to let through NULL for take(). */ + return tal_dup_arr_label(ctx, char, p, p ? strlen(p) + 1: 1, 0, label); +} + +char *tal_strndup_(const tal_t *ctx, const char *p, size_t n, const char *label) +{ + size_t len; + char *ret; + + /* We have to let through NULL for take(). */ + if (likely(p)) + len = strnlen(p, n); + else + len = n; + + ret = tal_dup_arr_label(ctx, char, p, len, 1, label); + if (ret) + ret[len] = '\0'; + return ret; +} + +char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt, ...) +{ + va_list ap; + char *ret; + + va_start(ap, fmt); + ret = tal_vfmt_(ctx, fmt, ap, label); + va_end(ap); + + return ret; +} + +static bool do_vfmt(char **buf, size_t off, const char *fmt, va_list ap) +{ + /* A decent guess to start. */ + size_t max = strlen(fmt) * 2 + 1; + bool ok; + + for (;;) { + va_list ap2; + int ret; + + if (!tal_resize(buf, off + max)) { + ok = false; + break; + } + + va_copy(ap2, ap); + ret = vsnprintf(*buf + off, max, fmt, ap2); + va_end(ap2); + + if (ret < max) { + ok = true; + /* Make sure tal_count() is correct! */ + tal_resize(buf, off + ret + 1); + break; + } + max *= 2; + } + + if (taken(fmt)) + tal_free(fmt); + return ok; +} + +char *tal_vfmt_(const tal_t *ctx, const char *fmt, va_list ap, const char *label) +{ + char *buf; + + if (!fmt && taken(fmt)) + return NULL; + + /* A decent guess to start. */ + buf = tal_arr_label(ctx, char, strlen(fmt) * 2, label); + if (!do_vfmt(&buf, 0, fmt, ap)) + buf = tal_free(buf); + return buf; +} + +bool tal_append_vfmt(char **baseptr, const char *fmt, va_list ap) +{ + if (!fmt && taken(fmt)) + return false; + + return do_vfmt(baseptr, strlen(*baseptr), fmt, ap); +} + +bool tal_append_fmt(char **baseptr, const char *fmt, ...) +{ + va_list ap; + bool ret; + + va_start(ap, fmt); + ret = tal_append_vfmt(baseptr, fmt, ap); + va_end(ap); + + return ret; +} + +char *tal_strcat_(const tal_t *ctx, const char *s1, const char *s2, + const char *label) +{ + size_t len1, len2; + char *ret; + + if (unlikely(!s2) && taken(s2)) { + if (taken(s1)) + tal_free(s1); + return NULL; + } + /* We have to let through NULL for take(). */ + len1 = s1 ? strlen(s1) : 0; + len2 = strlen(s2); + + ret = tal_dup_arr_label(ctx, char, s1, len1, len2 + 1, label); + if (likely(ret)) + memcpy(ret + len1, s2, len2 + 1); + + if (taken(s2)) + tal_free(s2); + return ret; +} + +char **tal_strsplit_(const tal_t *ctx, + const char *string, const char *delims, enum strsplit flags, + const char *label) +{ + char **parts, *str; + size_t max = 64, num = 0; + + parts = tal_arr(ctx, char *, max + 1); + if (unlikely(!parts)) { + if (taken(string)) + tal_free(string); + if (taken(delims)) + tal_free(delims); + return NULL; + } + str = tal_strdup(parts, string); + if (unlikely(!str)) + goto fail; + if (unlikely(!delims) && is_taken(delims)) + goto fail; + + if (flags == STR_NO_EMPTY) + str += strspn(str, delims); + + while (*str != '\0') { + size_t len = strcspn(str, delims), dlen; + + parts[num] = str; + dlen = strspn(str + len, delims); + parts[num][len] = '\0'; + if (flags == STR_EMPTY_OK && dlen) + dlen = 1; + str += len + dlen; + if (++num == max && !tal_resize(&parts, max*=2 + 1)) + goto fail; + } + parts[num] = NULL; + + /* Ensure that tal_count() is correct. */ + if (unlikely(!tal_resize(&parts, num+1))) + goto fail; + + if (taken(delims)) + tal_free(delims); + return parts; + +fail: + tal_free(parts); + if (taken(delims)) + tal_free(delims); + return NULL; +} + +char *tal_strjoin_(const tal_t *ctx, + char *strings[], const char *delim, enum strjoin flags, + const char *label) +{ + unsigned int i; + char *ret = NULL; + size_t totlen = 0, dlen; + + if (unlikely(!strings) && is_taken(strings)) + goto fail; + + if (unlikely(!delim) && is_taken(delim)) + goto fail; + + dlen = strlen(delim); + ret = tal_arr_label(ctx, char, dlen*2+1, label); + if (!ret) + goto fail; + + ret[0] = '\0'; + for (i = 0; strings[i]; i++) { + size_t len = strlen(strings[i]); + + if (flags == STR_NO_TRAIL && !strings[i+1]) + dlen = 0; + if (!tal_resize(&ret, totlen + len + dlen + 1)) + goto fail; + memcpy(ret + totlen, strings[i], len); + totlen += len; + memcpy(ret + totlen, delim, dlen); + totlen += dlen; + } + ret[totlen] = '\0'; + /* Make sure tal_count() is correct! */ + tal_resize(&ret, totlen+1); +out: + if (taken(strings)) + tal_free(strings); + if (taken(delim)) + tal_free(delim); + return ret; +fail: + ret = tal_free(ret); + goto out; +} + +static size_t count_open_braces(const char *string) +{ +#if 1 + size_t num = 0, esc = 0; + + while (*string) { + if (*string == '\\') + esc++; + else { + /* An odd number of \ means it's escaped. */ + if (*string == '(' && (esc & 1) == 0) + num++; + esc = 0; + } + string++; + } + return num; +#else + return strcount(string, "("); +#endif +} + +bool tal_strreg_(const tal_t *ctx, const char *string, const char *label, + const char *regex, ...) +{ + size_t nmatch = 1 + count_open_braces(regex); + regmatch_t matches[nmatch]; + regex_t r; + bool ret = false; + unsigned int i; + va_list ap; + + if (unlikely(!regex) && is_taken(regex)) + goto fail_no_re; + + if (regcomp(&r, regex, REG_EXTENDED) != 0) + goto fail_no_re; + + if (unlikely(!string) && is_taken(string)) + goto fail; + + if (regexec(&r, string, nmatch, matches, 0) != 0) + goto fail; + + ret = true; + va_start(ap, regex); + for (i = 1; i < nmatch; i++) { + char **arg = va_arg(ap, char **); + if (arg) { + /* eg. ([a-z])? can give "no match". */ + if (matches[i].rm_so == -1) + *arg = NULL; + else { + *arg = tal_strndup_(ctx, + string + matches[i].rm_so, + matches[i].rm_eo + - matches[i].rm_so, + label); + /* FIXME: If we fail, we set some and leak! */ + if (!*arg) { + ret = false; + break; + } + } + } + } + va_end(ap); +fail: + regfree(&r); +fail_no_re: + if (taken(regex)) + tal_free(regex); + if (taken(string)) + tal_free(string); + return ret; +} diff --git a/nostrdb/bolt11/talstr.h b/nostrdb/bolt11/talstr.h new file mode 100644 index 000000000..fbf53a86c --- /dev/null +++ b/nostrdb/bolt11/talstr.h @@ -0,0 +1,225 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#ifndef CCAN_STR_TAL_H +#define CCAN_STR_TAL_H +#ifdef TAL_USE_TALLOC +#include +#else +#include "tal.h" +#endif +#include +#include + +/** + * tal_strdup - duplicate a string + * @ctx: NULL, or tal allocated object to be parent. + * @p: the string to copy (can be take()). + * + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_strdup(ctx, p) tal_strdup_(ctx, p, TAL_LABEL(char, "[]")) +char *tal_strdup_(const tal_t *ctx, const char *p TAKES, const char *label); + +/** + * tal_strndup - duplicate a limited amount of a string. + * @ctx: NULL, or tal allocated object to be parent. + * @p: the string to copy (can be take()). + * @n: the maximum length to copy. + * + * Always gives a nul-terminated string, with strlen() <= @n. + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_strndup(ctx, p, n) tal_strndup_(ctx, p, n, TAL_LABEL(char, "[]")) +char *tal_strndup_(const tal_t *ctx, const char *p TAKES, size_t n, + const char *label); + +/** + * tal_fmt - allocate a formatted string + * @ctx: NULL, or tal allocated object to be parent. + * @fmt: the printf-style format (can be take()). + * + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_fmt(ctx, ...) \ + tal_fmt_(ctx, TAL_LABEL(char, "[]"), __VA_ARGS__) +char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt TAKES, + ...) PRINTF_FMT(3,4); + +/** + * tal_vfmt - allocate a formatted string (va_list version) + * @ctx: NULL, or tal allocated object to be parent. + * @fmt: the printf-style format (can be take()). + * @va: the va_list containing the format args. + * + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_vfmt(ctx, fmt, va) \ + tal_vfmt_(ctx, fmt, va, TAL_LABEL(char, "[]")) +char *tal_vfmt_(const tal_t *ctx, const char *fmt TAKES, va_list ap, + const char *label) + PRINTF_FMT(2,0); + +/** + * tal_append_fmt - append a formatted string to a talloc string. + * @baseptr: a pointer to the tal string to be appended to. + * @fmt: the printf-style format (can be take()). + * + * Returns false on allocation failure. + * Otherwise tal_count(*@baseptr) == strlen(*@baseptr) + 1. + */ +bool tal_append_fmt(char **baseptr, const char *fmt TAKES, ...) PRINTF_FMT(2,3); + +/** + * tal_append_vfmt - append a formatted string to a talloc string (va_list) + * @baseptr: a pointer to the tal string to be appended to. + * @fmt: the printf-style format (can be take()). + * @va: the va_list containing the format args. + * + * Returns false on allocation failure. + * Otherwise tal_count(*@baseptr) == strlen(*@baseptr) + 1. + */ +bool tal_append_vfmt(char **baseptr, const char *fmt TAKES, va_list ap); + +/** + * tal_strcat - join two strings together + * @ctx: NULL, or tal allocated object to be parent. + * @s1: the first string (can be take()). + * @s2: the second string (can be take()). + * + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_strcat(ctx, s1, s2) tal_strcat_(ctx, s1, s2, TAL_LABEL(char, "[]")) +char *tal_strcat_(const tal_t *ctx, const char *s1 TAKES, const char *s2 TAKES, + const char *label); + +enum strsplit { + STR_EMPTY_OK, + STR_NO_EMPTY +}; + +/** + * tal_strsplit - Split string into an array of substrings + * @ctx: the context to tal from (often NULL). + * @string: the string to split (can be take()). + * @delims: delimiters where lines should be split (can be take()). + * @flags: whether to include empty substrings. + * + * This function splits a single string into multiple strings. + * + * If @string is take(), the returned array will point into the + * mangled @string. + * + * Multiple delimiters result in empty substrings. By definition, no + * delimiters will appear in the substrings. + * + * The final char * in the array will be NULL, and tal_count() will + * return the number of elements plus 1 (for that NULL). + * + * Example: + * #include + * ... + * static unsigned int count_long_lines(const char *string) + * { + * char **lines; + * unsigned int i, long_lines = 0; + * + * // Can only fail on out-of-memory. + * lines = tal_strsplit(NULL, string, "\n", STR_NO_EMPTY); + * for (i = 0; lines[i] != NULL; i++) + * if (strlen(lines[i]) > 80) + * long_lines++; + * tal_free(lines); + * return long_lines; + * } + */ +#define tal_strsplit(ctx, string, delims, flag) \ + tal_strsplit_(ctx, string, delims, flag, TAL_LABEL(char *, "[]")) +char **tal_strsplit_(const tal_t *ctx, + const char *string TAKES, + const char *delims TAKES, + enum strsplit flag, + const char *label); + +enum strjoin { + STR_TRAIL, + STR_NO_TRAIL +}; + +/** + * tal_strjoin - Join an array of substrings into one long string + * @ctx: the context to tal from (often NULL). + * @strings: the NULL-terminated array of strings to join (can be take()) + * @delim: the delimiter to insert between the strings (can be take()) + * @flags: whether to add a delimieter to the end + * + * This function joins an array of strings into a single string. The + * return value is allocated using tal. Each string in @strings is + * followed by a copy of @delim. + * + * The returned string will have tal_count() == strlen() + 1. + * + * Example: + * // Append the string "--EOL" to each line. + * static char *append_to_all_lines(const char *string) + * { + * char **lines, *ret; + * + * lines = tal_strsplit(NULL, string, "\n", STR_EMPTY_OK); + * ret = tal_strjoin(NULL, lines, "-- EOL\n", STR_TRAIL); + * tal_free(lines); + * return ret; + * } + */ +#define tal_strjoin(ctx, strings, delim, flags) \ + tal_strjoin_(ctx, strings, delim, flags, TAL_LABEL(char, "[]")) +char *tal_strjoin_(const void *ctx, + char *strings[] TAKES, + const char *delim TAKES, + enum strjoin flags, + const char *label); + +/** + * tal_strreg - match/extract from a string via (extended) regular expressions. + * @ctx: the context to tal from (often NULL) + * @string: the string to try to match (can be take()) + * @regex: the regular expression to match (can be take()) + * ...: pointers to strings to allocate for subexpressions. + * + * Returns true if we matched, in which case any parenthesized + * expressions in @regex are allocated and placed in the char ** + * arguments following @regex. NULL arguments mean the match is not + * saved. The order of the strings is the order + * of opening braces in the expression: in the case of repeated + * expressions (eg "([a-z])*") the last one is saved, in the case of + * non-existent matches (eg "([a-z]*)?") the pointer is set to NULL. + * + * Allocation failures or malformed regular expressions return false. + * The allocated strings will have tal_count() == strlen() + 1. + * + * See Also: + * regcomp(3), regex(3). + * + * Example: + * // Given "My name is Rusty" outputs "Hello Rusty!\n" + * // Given "my first name is Rusty Russell" outputs "Hello Rusty Russell!\n" + * // Given "My name isnt Rusty Russell" outputs "Hello there!\n" + * int main(int argc, char *argv[]) + * { + * char *person, *input; + * + * (void)argc; + * // Join args and trim trailing space. + * input = tal_strjoin(NULL, argv+1, " ", STR_NO_TRAIL); + * if (tal_strreg(NULL, input, + * "[Mm]y (first )?name is ([A-Za-z ]+)", + * NULL, &person)) + * printf("Hello %s!\n", person); + * else + * printf("Hello there!\n"); + * return 0; + * } + */ +#define tal_strreg(ctx, string, ...) \ + tal_strreg_(ctx, string, TAL_LABEL(char, "[]"), __VA_ARGS__) +bool tal_strreg_(const void *ctx, const char *string TAKES, + const char *label, const char *regex, ...); +#endif /* CCAN_STR_TAL_H */ diff --git a/nostrdb/bolt11/typesafe_cb.h b/nostrdb/bolt11/typesafe_cb.h new file mode 100644 index 000000000..acf346dd9 --- /dev/null +++ b/nostrdb/bolt11/typesafe_cb.h @@ -0,0 +1,134 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_TYPESAFE_CB_H +#define CCAN_TYPESAFE_CB_H +#include "../config.h" + +#if HAVE_TYPEOF && HAVE_BUILTIN_CHOOSE_EXPR && HAVE_BUILTIN_TYPES_COMPATIBLE_P +/** + * typesafe_cb_cast - only cast an expression if it matches a given type + * @desttype: the type to cast to + * @oktype: the type we allow + * @expr: the expression to cast + * + * This macro is used to create functions which allow multiple types. + * The result of this macro is used somewhere that a @desttype type is + * expected: if @expr is exactly of type @oktype, then it will be + * cast to @desttype type, otherwise left alone. + * + * This macro can be used in static initializers. + * + * This is merely useful for warnings: if the compiler does not + * support the primitives required for typesafe_cb_cast(), it becomes an + * unconditional cast, and the @oktype argument is not used. In + * particular, this means that @oktype can be a type which uses the + * "typeof": it will not be evaluated if typeof is not supported. + * + * Example: + * // We can take either an unsigned long or a void *. + * void _set_some_value(void *val); + * #define set_some_value(e) \ + * _set_some_value(typesafe_cb_cast(void *, unsigned long, (e))) + */ +#define typesafe_cb_cast(desttype, oktype, expr) \ + __builtin_choose_expr( \ + __builtin_types_compatible_p(__typeof__(0?(expr):(expr)), \ + oktype), \ + (desttype)(expr), (expr)) +#else +#define typesafe_cb_cast(desttype, oktype, expr) ((desttype)(expr)) +#endif + +/** + * typesafe_cb_cast3 - only cast an expression if it matches given types + * @desttype: the type to cast to + * @ok1: the first type we allow + * @ok2: the second type we allow + * @ok3: the third type we allow + * @expr: the expression to cast + * + * This is a convenient wrapper for multiple typesafe_cb_cast() calls. + * You can chain them inside each other (ie. use typesafe_cb_cast() + * for expr) if you need more than 3 arguments. + * + * Example: + * // We can take either a long, unsigned long, void * or a const void *. + * void _set_some_value(void *val); + * #define set_some_value(expr) \ + * _set_some_value(typesafe_cb_cast3(void *,, \ + * long, unsigned long, const void *,\ + * (expr))) + */ +#define typesafe_cb_cast3(desttype, ok1, ok2, ok3, expr) \ + typesafe_cb_cast(desttype, ok1, \ + typesafe_cb_cast(desttype, ok2, \ + typesafe_cb_cast(desttype, ok3, \ + (expr)))) + +/** + * typesafe_cb - cast a callback function if it matches the arg + * @rtype: the return type of the callback function + * @atype: the (pointer) type which the callback function expects. + * @fn: the callback function to cast + * @arg: the (pointer) argument to hand to the callback function. + * + * If a callback function takes a single argument, this macro does + * appropriate casts to a function which takes a single atype argument if the + * callback provided matches the @arg. + * + * It is assumed that @arg is of pointer type: usually @arg is passed + * or assigned to a void * elsewhere anyway. + * + * Example: + * void _register_callback(void (*fn)(void *arg), void *arg); + * #define register_callback(fn, arg) \ + * _register_callback(typesafe_cb(void, (fn), void*, (arg)), (arg)) + */ +#define typesafe_cb(rtype, atype, fn, arg) \ + typesafe_cb_cast(rtype (*)(atype), \ + rtype (*)(__typeof__(arg)), \ + (fn)) + +/** + * typesafe_cb_preargs - cast a callback function if it matches the arg + * @rtype: the return type of the callback function + * @atype: the (pointer) type which the callback function expects. + * @fn: the callback function to cast + * @arg: the (pointer) argument to hand to the callback function. + * + * This is a version of typesafe_cb() for callbacks that take other arguments + * before the @arg. + * + * Example: + * void _register_callback(void (*fn)(int, void *arg), void *arg); + * #define register_callback(fn, arg) \ + * _register_callback(typesafe_cb_preargs(void, void *, \ + * (fn), (arg), int), \ + * (arg)) + */ +#define typesafe_cb_preargs(rtype, atype, fn, arg, ...) \ + typesafe_cb_cast(rtype (*)(__VA_ARGS__, atype), \ + rtype (*)(__VA_ARGS__, __typeof__(arg)), \ + (fn)) + +/** + * typesafe_cb_postargs - cast a callback function if it matches the arg + * @rtype: the return type of the callback function + * @atype: the (pointer) type which the callback function expects. + * @fn: the callback function to cast + * @arg: the (pointer) argument to hand to the callback function. + * + * This is a version of typesafe_cb() for callbacks that take other arguments + * after the @arg. + * + * Example: + * void _register_callback(void (*fn)(void *arg, int), void *arg); + * #define register_callback(fn, arg) \ + * _register_callback(typesafe_cb_postargs(void, (fn), void *, \ + * (arg), int), \ + * (arg)) + */ +#define typesafe_cb_postargs(rtype, atype, fn, arg, ...) \ + typesafe_cb_cast(rtype (*)(atype, __VA_ARGS__), \ + rtype (*)(__typeof__(arg), __VA_ARGS__), \ + (fn)) +#endif /* CCAN_CAST_IF_TYPE_H */ diff --git a/nostrdb/bolt11/utf8.c b/nostrdb/bolt11/utf8.c new file mode 100644 index 000000000..01a736862 --- /dev/null +++ b/nostrdb/bolt11/utf8.c @@ -0,0 +1,199 @@ +/* MIT (BSD) license - see LICENSE file for details - taken from ccan. thanks rusty! */ + +#include "utf8.h" +#include +#include + +/* I loved this table, so I stole it: */ +/* + * Copyright (c) 2017 Christian Hansen + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * UTF-8 Encoding Form + * + * U+0000..U+007F 0xxxxxxx <= 7 bits + * U+0080..U+07FF 110xxxxx 10xxxxxx <= 11 bits + * U+0800..U+FFFF 1110xxxx 10xxxxxx 10xxxxxx <= 16 bits + * U+10000..U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx <= 21 bits + * + * + * U+0000..U+007F 00..7F + * N C0..C1 80..BF 1100000x 10xxxxxx + * U+0080..U+07FF C2..DF 80..BF + * N E0 80..9F 80..BF 11100000 100xxxxx + * U+0800..U+0FFF E0 A0..BF 80..BF + * U+1000..U+CFFF E1..EC 80..BF 80..BF + * U+D000..U+D7FF ED 80..9F 80..BF + * S ED A0..BF 80..BF 11101101 101xxxxx + * U+E000..U+FFFF EE..EF 80..BF 80..BF + * N F0 80..8F 80..BF 80..BF 11110000 1000xxxx + * U+10000..U+3FFFF F0 90..BF 80..BF 80..BF + * U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF + * U+100000..U+10FFFF F4 80..8F 80..BF 80..BF 11110100 1000xxxx + * + * Legend: + * N = Non-shortest form + * S = Surrogates + */ +bool utf8_decode(struct utf8_state *utf8_state, char c) +{ + if (utf8_state->used_len == utf8_state->total_len) { + utf8_state->used_len = 1; + /* First character in sequence. */ + if (((unsigned char)c & 0x80) == 0) { + /* ASCII, easy. */ + if (c == 0) + goto bad_encoding; + utf8_state->total_len = 1; + utf8_state->c = c; + goto finished_decoding; + } else if (((unsigned char)c & 0xE0) == 0xC0) { + utf8_state->total_len = 2; + utf8_state->c = ((unsigned char)c & 0x1F); + return false; + } else if (((unsigned char)c & 0xF0) == 0xE0) { + utf8_state->total_len = 3; + utf8_state->c = ((unsigned char)c & 0x0F); + return false; + } else if (((unsigned char)c & 0xF8) == 0xF0) { + utf8_state->total_len = 4; + utf8_state->c = ((unsigned char)c & 0x07); + return false; + } + goto bad_encoding; + } + + if (((unsigned char)c & 0xC0) != 0x80) + goto bad_encoding; + + utf8_state->c <<= 6; + utf8_state->c |= ((unsigned char)c & 0x3F); + + utf8_state->used_len++; + if (utf8_state->used_len == utf8_state->total_len) + goto finished_decoding; + return false; + +finished_decoding: + if (utf8_state->c == 0 || utf8_state->c > 0x10FFFF) + errno = ERANGE; + /* The UTF-16 "surrogate range": illegal in UTF-8 */ + else if (utf8_state->total_len == 3 + && (utf8_state->c & 0xFFFFF800) == 0x0000D800) + errno = ERANGE; + else { + int min_bits; + switch (utf8_state->total_len) { + case 1: + min_bits = 0; + break; + case 2: + min_bits = 7; + break; + case 3: + min_bits = 11; + break; + case 4: + min_bits = 16; + break; + default: + abort(); + } + if ((utf8_state->c >> min_bits) == 0) + errno = EFBIG; + else + errno = 0; + } + return true; + +bad_encoding: + utf8_state->total_len = utf8_state->used_len; + errno = EINVAL; + return true; +} + +size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]) +{ + if ((point >> 7) == 0) { + if (point == 0) { + errno = ERANGE; + return 0; + } + /* 0xxxxxxx */ + dest[0] = point; + return 1; + } + + if ((point >> 11) == 0) { + /* 110xxxxx 10xxxxxx */ + dest[1] = 0x80 | (point & 0x3F); + dest[0] = 0xC0 | (point >> 6); + return 2; + } + + if ((point >> 16) == 0) { + if (point >= 0xD800 && point <= 0xDFFF) { + errno = ERANGE; + return 0; + } + /* 1110xxxx 10xxxxxx 10xxxxxx */ + dest[2] = 0x80 | (point & 0x3F); + dest[1] = 0x80 | ((point >> 6) & 0x3F); + dest[0] = 0xE0 | (point >> 12); + return 3; + } + + if (point > 0x10FFFF) { + errno = ERANGE; + return 0; + } + + /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ + dest[3] = 0x80 | (point & 0x3F); + dest[2] = 0x80 | ((point >> 6) & 0x3F); + dest[1] = 0x80 | ((point >> 12) & 0x3F); + dest[0] = 0xF0 | (point >> 18); + return 4; +} + +/* Check for valid UTF-8 */ +bool utf8_check(const void *vbuf, size_t buflen) +{ + const unsigned char *buf = vbuf; + struct utf8_state utf8_state = UTF8_STATE_INIT; + bool need_more = false; + + for (size_t i = 0; i < buflen; i++) { + if (!utf8_decode(&utf8_state, buf[i])) { + need_more = true; + continue; + } + need_more = false; + if (errno != 0) + return false; + } + return !need_more; +} + diff --git a/nostrdb/bolt11/utf8.h b/nostrdb/bolt11/utf8.h new file mode 100644 index 000000000..1321568ad --- /dev/null +++ b/nostrdb/bolt11/utf8.h @@ -0,0 +1,57 @@ +/* MIT (BSD) license - see LICENSE file for details */ +#ifndef CCAN_UTF8_H +#define CCAN_UTF8_H +#include +#include +#include + +/* Unicode is limited to 21 bits. */ +#define UTF8_MAX_LEN 4 + +struct utf8_state { + /* How many characters we are expecting as part of this Unicode point */ + uint16_t total_len; + /* How many characters we've already seen. */ + uint16_t used_len; + /* Compound character, aka Unicode point. */ + uint32_t c; +}; + +#define UTF8_STATE_INIT { 0, 0, 0 } + +static inline void utf8_state_init(struct utf8_state *utf8_state) +{ + memset(utf8_state, 0, sizeof(*utf8_state)); +} + +/** + * utf8_decode - continue UTF8 decoding with this character. + * @utf8_state - initialized UTF8 state. + * @c - the character. + * + * Returns false if it needs another character to give results. + * Otherwise returns true, @utf8_state can be reused without initializeation, + * and sets errno: + * 0: success + * EINVAL: bad encoding (including a NUL character). + * EFBIG: not a minimal encoding. + * ERANGE: encoding of invalid character. + * + * You can extract the character from @utf8_state->c; @utf8_state->used_len + * indicates how many characters have been consumed. + */ +bool utf8_decode(struct utf8_state *utf8_state, char c); + +/** + * utf8_encode - encode a point into UTF8. + * @point - Unicode point to include. + * @dest - buffer to fill. + * + * Returns 0 if point was invalid, otherwise bytes of dest used. + * Sets errno to ERANGE if point was invalid. + */ +size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]); + +/* Check for valid UTF-8 */ +bool utf8_check(const void *vbuf, size_t buflen); +#endif /* CCAN_UTF8_H */ diff --git a/nostrdb/compiler.h b/nostrdb/compiler.h index deb0621e5..a9b5aa700 100644 --- a/nostrdb/compiler.h +++ b/nostrdb/compiler.h @@ -1,85 +1,317 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_COMPILER_H +#define CCAN_COMPILER_H +#include "config.h" -#ifndef COMPILER_H -#define COMPILER_H +#ifndef COLD +#if HAVE_ATTRIBUTE_COLD +/** + * COLD - a function is unlikely to be called. + * + * Used to mark an unlikely code path and optimize appropriately. + * It is usually used on logging or error routines. + * + * Example: + * static void COLD moan(const char *reason) + * { + * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); + * } + */ +#define COLD __attribute__((__cold__)) +#else +#define COLD +#endif +#endif -#include -#include -#include -#include "config.h" +#ifndef NORETURN +#if HAVE_ATTRIBUTE_NORETURN +/** + * NORETURN - a function does not return + * + * Used to mark a function which exits; useful for suppressing warnings. + * + * Example: + * static void NORETURN fail(const char *reason) + * { + * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); + * exit(1); + * } + */ +#define NORETURN __attribute__((__noreturn__)) +#else +#define NORETURN +#endif +#endif -#if HAVE_UNALIGNED_ACCESS -#define alignment_ok(p, n) 1 +#ifndef PRINTF_FMT +#if HAVE_ATTRIBUTE_PRINTF +/** + * PRINTF_FMT - a function takes printf-style arguments + * @nfmt: the 1-based number of the function's format argument. + * @narg: the 1-based number of the function's first variable argument. + * + * This allows the compiler to check your parameters as it does for printf(). + * + * Example: + * void PRINTF_FMT(2,3) my_printf(const char *prefix, const char *fmt, ...); + */ +#define PRINTF_FMT(nfmt, narg) \ + __attribute__((format(__printf__, nfmt, narg))) #else -#define alignment_ok(p, n) ((size_t)(p) % (n) == 0) +#define PRINTF_FMT(nfmt, narg) +#endif #endif +#ifndef CONST_FUNCTION +#if HAVE_ATTRIBUTE_CONST +/** + * CONST_FUNCTION - a function's return depends only on its argument + * + * This allows the compiler to assume that the function will return the exact + * same value for the exact same arguments. This implies that the function + * must not use global variables, or dereference pointer arguments. + */ +#define CONST_FUNCTION __attribute__((__const__)) +#else +#define CONST_FUNCTION +#endif + +#ifndef PURE_FUNCTION +#if HAVE_ATTRIBUTE_PURE +/** + * PURE_FUNCTION - a function is pure + * + * A pure function is one that has no side effects other than it's return value + * and uses no inputs other than it's arguments and global variables. + */ +#define PURE_FUNCTION __attribute__((__pure__)) +#else +#define PURE_FUNCTION +#endif +#endif +#endif + +#if HAVE_ATTRIBUTE_UNUSED +#ifndef UNNEEDED +/** + * UNNEEDED - a variable/function may not be needed + * + * This suppresses warnings about unused variables or functions, but tells + * the compiler that if it is unused it need not emit it into the source code. + * + * Example: + * // With some preprocessor options, this is unnecessary. + * static UNNEEDED int counter; + * + * // With some preprocessor options, this is unnecessary. + * static UNNEEDED void add_to_counter(int add) + * { + * counter += add; + * } + */ +#define UNNEEDED __attribute__((__unused__)) +#endif + +#ifndef NEEDED +#if HAVE_ATTRIBUTE_USED +/** + * NEEDED - a variable/function is needed + * + * This suppresses warnings about unused variables or functions, but tells + * the compiler that it must exist even if it (seems) unused. + * + * Example: + * // Even if this is unused, these are vital for debugging. + * static NEEDED int counter; + * static NEEDED void dump_counter(void) + * { + * printf("Counter is %i\n", counter); + * } + */ +#define NEEDED __attribute__((__used__)) +#else +/* Before used, unused functions and vars were always emitted. */ +#define NEEDED __attribute__((__unused__)) +#endif +#endif + +#ifndef UNUSED +/** + * UNUSED - a parameter is unused + * + * Some compilers (eg. gcc with -W or -Wunused) warn about unused + * function parameters. This suppresses such warnings and indicates + * to the reader that it's deliberate. + * + * Example: + * // This is used as a callback, so needs to have this prototype. + * static int some_callback(void *unused UNUSED) + * { + * return 0; + * } + */ #define UNUSED __attribute__((__unused__)) +#endif +#else +#ifndef UNNEEDED +#define UNNEEDED +#endif +#ifndef NEEDED +#define NEEDED +#endif +#ifndef UNUSED +#define UNUSED +#endif +#endif + +#ifndef IS_COMPILE_CONSTANT +#if HAVE_BUILTIN_CONSTANT_P +/** + * IS_COMPILE_CONSTANT - does the compiler know the value of this expression? + * @expr: the expression to evaluate + * + * When an expression manipulation is complicated, it is usually better to + * implement it in a function. However, if the expression being manipulated is + * known at compile time, it is better to have the compiler see the entire + * expression so it can simply substitute the result. + * + * This can be done using the IS_COMPILE_CONSTANT() macro. + * + * Example: + * enum greek { ALPHA, BETA, GAMMA, DELTA, EPSILON }; + * + * // Out-of-line version. + * const char *greek_name(enum greek greek); + * + * // Inline version. + * static inline const char *_greek_name(enum greek greek) + * { + * switch (greek) { + * case ALPHA: return "alpha"; + * case BETA: return "beta"; + * case GAMMA: return "gamma"; + * case DELTA: return "delta"; + * case EPSILON: return "epsilon"; + * default: return "**INVALID**"; + * } + * } + * + * // Use inline if compiler knows answer. Otherwise call function + * // to avoid copies of the same code everywhere. + * #define greek_name(g) \ + * (IS_COMPILE_CONSTANT(greek) ? _greek_name(g) : greek_name(g)) + */ +#define IS_COMPILE_CONSTANT(expr) __builtin_constant_p(expr) +#else +/* If we don't know, assume it's not. */ +#define IS_COMPILE_CONSTANT(expr) 0 +#endif +#endif + +#ifndef WARN_UNUSED_RESULT +#if HAVE_WARN_UNUSED_RESULT +/** + * WARN_UNUSED_RESULT - warn if a function return value is unused. + * + * Used to mark a function where it is extremely unlikely that the caller + * can ignore the result, eg realloc(). + * + * Example: + * // buf param may be freed by this; need return value! + * static char *WARN_UNUSED_RESULT enlarge(char *buf, unsigned *size) + * { + * return realloc(buf, (*size) *= 2); + * } + */ +#define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) +#else +#define WARN_UNUSED_RESULT +#endif +#endif + +#if HAVE_ATTRIBUTE_DEPRECATED /** - * BUILD_ASSERT - assert a build-time dependency. - * @cond: the compile-time condition which must be true. + * WARN_DEPRECATED - warn that a function/type/variable is deprecated when used. * - * Your compile will fail if the condition isn't true, or can't be evaluated - * by the compiler. This can only be used within a function. + * Used to mark a function, type or variable should not be used. * * Example: - * #include - * ... - * static char *foo_to_char(struct foo *foo) - * { - * // This code needs string to be at start of foo. - * BUILD_ASSERT(offsetof(struct foo, string) == 0); - * return (char *)foo; - * } + * WARN_DEPRECATED char *oldfunc(char *buf); */ -#define BUILD_ASSERT(cond) \ - do { (void) sizeof(char [1 - 2*!(cond)]); } while(0) +#define WARN_DEPRECATED __attribute__((__deprecated__)) +#else +#define WARN_DEPRECATED +#endif + +#if HAVE_ATTRIBUTE_NONNULL /** - * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression. - * @cond: the compile-time condition which must be true. + * NO_NULL_ARGS - specify that no arguments to this function can be NULL. * - * Your compile will fail if the condition isn't true, or can't be evaluated - * by the compiler. This can be used in an expression: its value is "0". + * The compiler will warn if any pointer args are NULL. * * Example: - * #define foo_to_char(foo) \ - * ((char *)(foo) \ - * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0)) + * NO_NULL_ARGS char *my_copy(char *buf); */ -#define BUILD_ASSERT_OR_ZERO(cond) \ - (sizeof(char [1 - 2*!(cond)]) - 1) +#define NO_NULL_ARGS __attribute__((__nonnull__)) -#define memclear(mem, size) memset(mem, 0, size) -#define memclear_2(m1, s1, m2, s2) { memclear(m1, s1); memclear(m2, s2); } -#define memclear_3(m1, s1, m2, s2, m3, s3) { memclear(m1, s1); memclear(m2, s2); memclear(m3, s3); } +/** + * NON_NULL_ARGS - specify that some arguments to this function can't be NULL. + * @...: 1-based argument numbers for which args can't be NULL. + * + * The compiler will warn if any of the specified pointer args are NULL. + * + * Example: + * char *my_copy2(char *buf, char *maybenull) NON_NULL_ARGS(1); + */ +#define NON_NULL_ARGS(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else +#define NO_NULL_ARGS +#define NON_NULL_ARGS(...) +#endif -static inline void *memcheck_(const void *data, size_t len) -{ - (void)len; - return (void *)data; -} +#if HAVE_ATTRIBUTE_RETURNS_NONNULL +/** + * RETURNS_NONNULL - specify that this function cannot return NULL. + * + * Mainly an optimization opportunity, but can also suppress warnings. + * + * Example: + * RETURNS_NONNULL char *my_copy(char *buf); + */ +#define RETURNS_NONNULL __attribute__((__returns_nonnull__)) +#else +#define RETURNS_NONNULL +#endif -#if HAVE_TYPEOF +#if HAVE_ATTRIBUTE_SENTINEL /** - * memcheck - check that a memory region is initialized - * @data: start of region - * @len: length in bytes + * LAST_ARG_NULL - specify the last argument of a variadic function must be NULL. * - * When running under valgrind, this causes an error to be printed - * if the entire region is not defined. Otherwise valgrind only - * reports an error when an undefined value is used for a branch, or - * written out. + * The compiler will warn if the last argument isn't NULL. * * Example: - * // Search for space, but make sure it's all initialized. - * if (memchr(memcheck(somebytes, bytes_len), ' ', bytes_len)) { - * printf("space was found!\n"); - * } + * char *join_string(char *buf, ...) LAST_ARG_NULL; */ -#define memcheck(data, len) ((__typeof__((data)+0))memcheck_((data), (len))) +#define LAST_ARG_NULL __attribute__((__sentinel__)) #else -#define memcheck(data, len) memcheck_((data), (len)) +#define LAST_ARG_NULL #endif -#endif /* COMPILER_H */ +#if HAVE_BUILTIN_CPU_SUPPORTS +/** + * cpu_supports - test if current CPU supports the named feature. + * + * This takes a literal string, and currently only works on glibc platforms. + * + * Example: + * if (cpu_supports("mmx")) + * printf("MMX support engaged!\n"); + */ +#define cpu_supports(x) __builtin_cpu_supports(x) +#else +#define cpu_supports(x) 0 +#endif /* HAVE_BUILTIN_CPU_SUPPORTS */ + +#endif /* CCAN_COMPILER_H */ diff --git a/nostrdb/cursor.h b/nostrdb/cursor.h index 2be7f191e..aff0b55ff 100644 --- a/nostrdb/cursor.h +++ b/nostrdb/cursor.h @@ -3,15 +3,13 @@ #define JB55_CURSOR_H #include "typedefs.h" +#include "bolt11/likely.h" #include #include #include #include -#define unlikely(x) __builtin_expect((x),0) -#define likely(x) __builtin_expect((x),1) - struct cursor { unsigned char *start; unsigned char *p; diff --git a/nostrdb/nostr_bech32.c b/nostrdb/nostr_bech32.c new file mode 100644 index 000000000..9710fbe24 --- /dev/null +++ b/nostrdb/nostr_bech32.c @@ -0,0 +1,306 @@ +// +// nostr_bech32.c +// damus +// +// Created by William Casarin on 2023-04-09. +// + +#include "nostr_bech32.h" +#include +#include "cursor.h" +#include "bech32.h" + +#define MAX_TLVS 16 + +#define TLV_SPECIAL 0 +#define TLV_RELAY 1 +#define TLV_AUTHOR 2 +#define TLV_KIND 3 +#define TLV_KNOWN_TLVS 4 + +struct nostr_tlv { + u8 type; + u8 len; + const u8 *value; +}; + +struct nostr_tlvs { + struct nostr_tlv tlvs[MAX_TLVS]; + int num_tlvs; +}; + +static int parse_nostr_tlv(struct cursor *cur, struct nostr_tlv *tlv) { + // get the tlv tag + if (!pull_byte(cur, &tlv->type)) + return 0; + + // unknown, fail! + if (tlv->type >= TLV_KNOWN_TLVS) + return 0; + + // get the length + if (!pull_byte(cur, &tlv->len)) + return 0; + + // is the reported length greater then our buffer? if so fail + if (cur->p + tlv->len > cur->end) + return 0; + + tlv->value = cur->p; + cur->p += tlv->len; + + return 1; +} + +static int parse_nostr_tlvs(struct cursor *cur, struct nostr_tlvs *tlvs) { + int i; + tlvs->num_tlvs = 0; + + for (i = 0; i < MAX_TLVS; i++) { + if (parse_nostr_tlv(cur, &tlvs->tlvs[i])) { + tlvs->num_tlvs++; + } else { + break; + } + } + + if (tlvs->num_tlvs == 0) + return 0; + + return 1; +} + +static int find_tlv(struct nostr_tlvs *tlvs, u8 type, struct nostr_tlv **tlv) { + *tlv = NULL; + + for (int i = 0; i < tlvs->num_tlvs; i++) { + if (tlvs->tlvs[i].type == type) { + *tlv = &tlvs->tlvs[i]; + return 1; + } + } + + return 0; +} + +static int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type) { + // Parse type + if (strcmp(prefix, "note") == 0) { + *type = NOSTR_BECH32_NOTE; + return 1; + } else if (strcmp(prefix, "npub") == 0) { + *type = NOSTR_BECH32_NPUB; + return 1; + } else if (strcmp(prefix, "nsec") == 0) { + *type = NOSTR_BECH32_NSEC; + return 1; + } else if (strcmp(prefix, "nprofile") == 0) { + *type = NOSTR_BECH32_NPROFILE; + return 1; + } else if (strcmp(prefix, "nevent") == 0) { + *type = NOSTR_BECH32_NEVENT; + return 1; + } else if (strcmp(prefix, "nrelay") == 0) { + *type = NOSTR_BECH32_NRELAY; + return 1; + } else if (strcmp(prefix, "naddr") == 0) { + *type = NOSTR_BECH32_NADDR; + return 1; + } + + return 0; +} + +static int parse_nostr_bech32_note(struct cursor *cur, struct bech32_note *note) { + return pull_bytes(cur, 32, ¬e->event_id); +} + +static int parse_nostr_bech32_npub(struct cursor *cur, struct bech32_npub *npub) { + return pull_bytes(cur, 32, &npub->pubkey); +} + +static int parse_nostr_bech32_nsec(struct cursor *cur, struct bech32_nsec *nsec) { + return pull_bytes(cur, 32, &nsec->nsec); +} + +static int tlvs_to_relays(struct nostr_tlvs *tlvs, struct relays *relays) { + struct nostr_tlv *tlv; + struct str_block *str; + + relays->num_relays = 0; + + for (int i = 0; i < tlvs->num_tlvs; i++) { + tlv = &tlvs->tlvs[i]; + if (tlv->type != TLV_RELAY) + continue; + + if (relays->num_relays + 1 > MAX_RELAYS) + break; + + str = &relays->relays[relays->num_relays++]; + str->start = (const char*)tlv->value; + str->end = (const char*)(tlv->value + tlv->len); + } + + return 1; +} + +static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *nevent) { + struct nostr_tlvs tlvs; + struct nostr_tlv *tlv; + + if (!parse_nostr_tlvs(cur, &tlvs)) + return 0; + + if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) + return 0; + + if (tlv->len != 32) + return 0; + + nevent->event_id = tlv->value; + + if (find_tlv(&tlvs, TLV_AUTHOR, &tlv)) { + nevent->pubkey = tlv->value; + } else { + nevent->pubkey = NULL; + } + + return tlvs_to_relays(&tlvs, &nevent->relays); +} + +static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *naddr) { + struct nostr_tlvs tlvs; + struct nostr_tlv *tlv; + + if (!parse_nostr_tlvs(cur, &tlvs)) + return 0; + + if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) + return 0; + + naddr->identifier.start = (const char*)tlv->value; + naddr->identifier.end = (const char*)tlv->value + tlv->len; + + if (!find_tlv(&tlvs, TLV_AUTHOR, &tlv)) + return 0; + + naddr->pubkey = tlv->value; + + return tlvs_to_relays(&tlvs, &naddr->relays); +} + +static int parse_nostr_bech32_nprofile(struct cursor *cur, struct bech32_nprofile *nprofile) { + struct nostr_tlvs tlvs; + struct nostr_tlv *tlv; + + if (!parse_nostr_tlvs(cur, &tlvs)) + return 0; + + if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) + return 0; + + if (tlv->len != 32) + return 0; + + nprofile->pubkey = tlv->value; + + return tlvs_to_relays(&tlvs, &nprofile->relays); +} + +static int parse_nostr_bech32_nrelay(struct cursor *cur, struct bech32_nrelay *nrelay) { + struct nostr_tlvs tlvs; + struct nostr_tlv *tlv; + + if (!parse_nostr_tlvs(cur, &tlvs)) + return 0; + + if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) + return 0; + + nrelay->relay.start = (const char*)tlv->value; + nrelay->relay.end = (const char*)tlv->value + tlv->len; + + return 1; +} + +int parse_nostr_bech32(struct cursor *cur, struct nostr_bech32 *obj) { + u8 *start, *end; + + start = cur->p; + + if (!consume_until_non_alphanumeric(cur, 1)) { + cur->p = start; + return 0; + } + + end = cur->p; + + size_t data_len; + size_t input_len = end - start; + if (input_len < 10 || input_len > 10000) { + return 0; + } + + obj->buffer = malloc(input_len * 2); + if (!obj->buffer) + return 0; + + u8 data[input_len]; + char prefix[input_len]; + + if (bech32_decode_len(prefix, data, &data_len, (const char*)start, input_len) == BECH32_ENCODING_NONE) { + cur->p = start; + return 0; + } + + obj->buflen = 0; + if (!bech32_convert_bits(obj->buffer, &obj->buflen, 8, data, data_len, 5, 0)) { + goto fail; + } + + if (!parse_nostr_bech32_type(prefix, &obj->type)) { + goto fail; + } + + struct cursor bcur; + make_cursor(obj->buffer, obj->buffer + obj->buflen, &bcur); + + switch (obj->type) { + case NOSTR_BECH32_NOTE: + if (!parse_nostr_bech32_note(&bcur, &obj->data.note)) + goto fail; + break; + case NOSTR_BECH32_NPUB: + if (!parse_nostr_bech32_npub(&bcur, &obj->data.npub)) + goto fail; + break; + case NOSTR_BECH32_NSEC: + if (!parse_nostr_bech32_nsec(&bcur, &obj->data.nsec)) + goto fail; + break; + case NOSTR_BECH32_NEVENT: + if (!parse_nostr_bech32_nevent(&bcur, &obj->data.nevent)) + goto fail; + break; + case NOSTR_BECH32_NADDR: + if (!parse_nostr_bech32_naddr(&bcur, &obj->data.naddr)) + goto fail; + break; + case NOSTR_BECH32_NPROFILE: + if (!parse_nostr_bech32_nprofile(&bcur, &obj->data.nprofile)) + goto fail; + break; + case NOSTR_BECH32_NRELAY: + if (!parse_nostr_bech32_nrelay(&bcur, &obj->data.nrelay)) + goto fail; + break; + } + + return 1; + +fail: + free(obj->buffer); + cur->p = start; + return 0; +} diff --git a/nostrdb/nostr_bech32.h b/nostrdb/nostr_bech32.h new file mode 100644 index 000000000..23a381d98 --- /dev/null +++ b/nostrdb/nostr_bech32.h @@ -0,0 +1,84 @@ +// +// nostr_bech32.h +// damus +// +// Created by William Casarin on 2023-04-09. +// + +#ifndef nostr_bech32_h +#define nostr_bech32_h + +#include +#include "str_block.h" +#include "cursor.h" +typedef unsigned char u8; +#define MAX_RELAYS 10 + +struct relays { + struct str_block relays[MAX_RELAYS]; + int num_relays; +}; + +enum nostr_bech32_type { + NOSTR_BECH32_NOTE = 1, + NOSTR_BECH32_NPUB = 2, + NOSTR_BECH32_NPROFILE = 3, + NOSTR_BECH32_NEVENT = 4, + NOSTR_BECH32_NRELAY = 5, + NOSTR_BECH32_NADDR = 6, + NOSTR_BECH32_NSEC = 7, +}; + +struct bech32_note { + const u8 *event_id; +}; + +struct bech32_npub { + const u8 *pubkey; +}; + +struct bech32_nsec { + const u8 *nsec; +}; + +struct bech32_nevent { + struct relays relays; + const u8 *event_id; + const u8 *pubkey; // optional +}; + +struct bech32_nprofile { + struct relays relays; + const u8 *pubkey; +}; + +struct bech32_naddr { + struct relays relays; + struct str_block identifier; + const u8 *pubkey; +}; + +struct bech32_nrelay { + struct str_block relay; +}; + +typedef struct nostr_bech32 { + enum nostr_bech32_type type; + u8 *buffer; // holds strings and tlv stuff + size_t buflen; + + union { + struct bech32_note note; + struct bech32_npub npub; + struct bech32_nsec nsec; + struct bech32_nevent nevent; + struct bech32_nprofile nprofile; + struct bech32_naddr naddr; + struct bech32_nrelay nrelay; + } data; +} nostr_bech32_t; + + +int parse_nostr_bech32(struct cursor *cur, struct nostr_bech32 *obj); + +#endif /* nostr_bech32_h */ diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c index 8a8573f5c..f16aa0705 100644 --- a/nostrdb/nostrdb.c +++ b/nostrdb/nostrdb.c @@ -5,6 +5,8 @@ #include "cursor.h" #include "random.h" #include "sha256.h" +#include "bolt11/bolt11.h" +#include "bolt11/amount.h" #include "lmdb.h" #include "util.h" #include "cpu.h" From fa310a33bd4dfd596417a7803e289ed55d8bbbb7 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 14:30:16 -0800 Subject: [PATCH 013/146] c: move c files into nostrdb in prep for switchover --- damus-c/nostr_bech32.c | 325 ------------------- damus-c/nostr_bech32.h | 89 ----- {damus-c => nostrdb}/alignof.h | 0 {damus-c => nostrdb}/amount.c | 0 {damus-c => nostrdb}/amount.h | 0 {damus-c => nostrdb}/array_size.h | 0 {damus-c => nostrdb}/bech32.c | 0 {damus-c => nostrdb}/bech32.h | 0 {damus-c => nostrdb}/bech32_util.c | 0 {damus-c => nostrdb}/bech32_util.h | 0 {damus-c => nostrdb}/block.h | 0 {damus-c => nostrdb}/bolt11.c | 0 {damus-c => nostrdb}/bolt11.h | 0 {damus-c => nostrdb}/build_assert.h | 0 {damus-c => nostrdb}/check_type.h | 0 {damus-c => nostrdb}/config.h | 0 {damus-c => nostrdb}/container_of.h | 0 {damus-c => nostrdb}/cppmagic.h | 0 {damus-c => nostrdb}/damus-Bridging-Header.h | 0 {damus-c => nostrdb}/damus.c | 0 {damus-c => nostrdb}/damus.h | 0 {damus-c => nostrdb}/debug.h | 0 {damus-c => nostrdb}/endian.h | 0 {damus-c => nostrdb}/error.c | 0 {damus-c => nostrdb}/error.h | 0 {damus-c => nostrdb}/hash_u5.c | 0 {damus-c => nostrdb}/hash_u5.h | 0 {damus-c => nostrdb}/hex.c | 0 {damus-c => nostrdb}/hex.h | 0 {damus-c => nostrdb}/likely.h | 0 {damus-c => nostrdb}/list.c | 0 {damus-c => nostrdb}/list.h | 0 {damus-c => nostrdb}/mem.c | 0 {damus-c => nostrdb}/mem.h | 0 {damus-c => nostrdb}/node_id.c | 0 {damus-c => nostrdb}/node_id.h | 0 nostrdb/nostr_bech32.c | 19 ++ nostrdb/nostr_bech32.h | 5 + {damus-c => nostrdb}/overflows.h | 0 {damus-c => nostrdb}/parser.h | 0 {damus-c => nostrdb}/sha256.c | 0 {damus-c => nostrdb}/sha256.h | 0 {damus-c => nostrdb}/short_types.h | 0 {damus-c => nostrdb}/str.h | 0 {damus-c => nostrdb}/str_block.h | 0 {damus-c => nostrdb}/str_debug.h | 0 {damus-c => nostrdb}/structeq.h | 0 {damus-c => nostrdb}/take.c | 0 {damus-c => nostrdb}/take.h | 0 {damus-c => nostrdb}/tal.c | 0 {damus-c => nostrdb}/tal.h | 0 {damus-c => nostrdb}/talstr.c | 0 {damus-c => nostrdb}/talstr.h | 0 {damus-c => nostrdb}/typedefs.h | 0 {damus-c => nostrdb}/typesafe_cb.h | 0 {damus-c => nostrdb}/utf8.c | 0 {damus-c => nostrdb}/utf8.h | 0 {damus-c => nostrdb}/varint.h | 0 {damus-c => nostrdb}/wasm.c | 0 {damus-c => nostrdb}/wasm.h | 0 60 files changed, 24 insertions(+), 414 deletions(-) delete mode 100644 damus-c/nostr_bech32.c delete mode 100644 damus-c/nostr_bech32.h rename {damus-c => nostrdb}/alignof.h (100%) rename {damus-c => nostrdb}/amount.c (100%) rename {damus-c => nostrdb}/amount.h (100%) rename {damus-c => nostrdb}/array_size.h (100%) rename {damus-c => nostrdb}/bech32.c (100%) rename {damus-c => nostrdb}/bech32.h (100%) rename {damus-c => nostrdb}/bech32_util.c (100%) rename {damus-c => nostrdb}/bech32_util.h (100%) rename {damus-c => nostrdb}/block.h (100%) rename {damus-c => nostrdb}/bolt11.c (100%) rename {damus-c => nostrdb}/bolt11.h (100%) rename {damus-c => nostrdb}/build_assert.h (100%) rename {damus-c => nostrdb}/check_type.h (100%) rename {damus-c => nostrdb}/config.h (100%) rename {damus-c => nostrdb}/container_of.h (100%) rename {damus-c => nostrdb}/cppmagic.h (100%) rename {damus-c => nostrdb}/damus-Bridging-Header.h (100%) rename {damus-c => nostrdb}/damus.c (100%) rename {damus-c => nostrdb}/damus.h (100%) rename {damus-c => nostrdb}/debug.h (100%) rename {damus-c => nostrdb}/endian.h (100%) rename {damus-c => nostrdb}/error.c (100%) rename {damus-c => nostrdb}/error.h (100%) rename {damus-c => nostrdb}/hash_u5.c (100%) rename {damus-c => nostrdb}/hash_u5.h (100%) rename {damus-c => nostrdb}/hex.c (100%) rename {damus-c => nostrdb}/hex.h (100%) rename {damus-c => nostrdb}/likely.h (100%) rename {damus-c => nostrdb}/list.c (100%) rename {damus-c => nostrdb}/list.h (100%) rename {damus-c => nostrdb}/mem.c (100%) rename {damus-c => nostrdb}/mem.h (100%) rename {damus-c => nostrdb}/node_id.c (100%) rename {damus-c => nostrdb}/node_id.h (100%) rename {damus-c => nostrdb}/overflows.h (100%) rename {damus-c => nostrdb}/parser.h (100%) rename {damus-c => nostrdb}/sha256.c (100%) rename {damus-c => nostrdb}/sha256.h (100%) rename {damus-c => nostrdb}/short_types.h (100%) rename {damus-c => nostrdb}/str.h (100%) rename {damus-c => nostrdb}/str_block.h (100%) rename {damus-c => nostrdb}/str_debug.h (100%) rename {damus-c => nostrdb}/structeq.h (100%) rename {damus-c => nostrdb}/take.c (100%) rename {damus-c => nostrdb}/take.h (100%) rename {damus-c => nostrdb}/tal.c (100%) rename {damus-c => nostrdb}/tal.h (100%) rename {damus-c => nostrdb}/talstr.c (100%) rename {damus-c => nostrdb}/talstr.h (100%) rename {damus-c => nostrdb}/typedefs.h (100%) rename {damus-c => nostrdb}/typesafe_cb.h (100%) rename {damus-c => nostrdb}/utf8.c (100%) rename {damus-c => nostrdb}/utf8.h (100%) rename {damus-c => nostrdb}/varint.h (100%) rename {damus-c => nostrdb}/wasm.c (100%) rename {damus-c => nostrdb}/wasm.h (100%) diff --git a/damus-c/nostr_bech32.c b/damus-c/nostr_bech32.c deleted file mode 100644 index ad8172b20..000000000 --- a/damus-c/nostr_bech32.c +++ /dev/null @@ -1,325 +0,0 @@ -// -// nostr_bech32.c -// damus -// -// Created by William Casarin on 2023-04-09. -// - -#include "nostr_bech32.h" -#include -#include "endian.h" -#include "cursor.h" -#include "bech32.h" -#include - -#define MAX_TLVS 16 - -#define TLV_SPECIAL 0 -#define TLV_RELAY 1 -#define TLV_AUTHOR 2 -#define TLV_KIND 3 -#define TLV_KNOWN_TLVS 4 - -struct nostr_tlv { - u8 type; - u8 len; - const u8 *value; -}; - -struct nostr_tlvs { - struct nostr_tlv tlvs[MAX_TLVS]; - int num_tlvs; -}; - -static int parse_nostr_tlv(struct cursor *cur, struct nostr_tlv *tlv) { - // get the tlv tag - if (!pull_byte(cur, &tlv->type)) - return 0; - - // unknown, fail! - if (tlv->type >= TLV_KNOWN_TLVS) - return 0; - - // get the length - if (!pull_byte(cur, &tlv->len)) - return 0; - - // is the reported length greater then our buffer? if so fail - if (cur->p + tlv->len > cur->end) - return 0; - - tlv->value = cur->p; - cur->p += tlv->len; - - return 1; -} - -static int parse_nostr_tlvs(struct cursor *cur, struct nostr_tlvs *tlvs) { - int i; - tlvs->num_tlvs = 0; - - for (i = 0; i < MAX_TLVS; i++) { - if (parse_nostr_tlv(cur, &tlvs->tlvs[i])) { - tlvs->num_tlvs++; - } else { - break; - } - } - - if (tlvs->num_tlvs == 0) - return 0; - - return 1; -} - -static int find_tlv(struct nostr_tlvs *tlvs, u8 type, struct nostr_tlv **tlv) { - *tlv = NULL; - - for (int i = 0; i < tlvs->num_tlvs; i++) { - if (tlvs->tlvs[i].type == type) { - *tlv = &tlvs->tlvs[i]; - return 1; - } - } - - return 0; -} - -static int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type) { - // Parse type - if (strcmp(prefix, "note") == 0) { - *type = NOSTR_BECH32_NOTE; - return 1; - } else if (strcmp(prefix, "npub") == 0) { - *type = NOSTR_BECH32_NPUB; - return 1; - } else if (strcmp(prefix, "nsec") == 0) { - *type = NOSTR_BECH32_NSEC; - return 1; - } else if (strcmp(prefix, "nprofile") == 0) { - *type = NOSTR_BECH32_NPROFILE; - return 1; - } else if (strcmp(prefix, "nevent") == 0) { - *type = NOSTR_BECH32_NEVENT; - return 1; - } else if (strcmp(prefix, "nrelay") == 0) { - *type = NOSTR_BECH32_NRELAY; - return 1; - } else if (strcmp(prefix, "naddr") == 0) { - *type = NOSTR_BECH32_NADDR; - return 1; - } - - return 0; -} - -static int parse_nostr_bech32_note(struct cursor *cur, struct bech32_note *note) { - return pull_bytes(cur, 32, ¬e->event_id); -} - -static int parse_nostr_bech32_npub(struct cursor *cur, struct bech32_npub *npub) { - return pull_bytes(cur, 32, &npub->pubkey); -} - -static int parse_nostr_bech32_nsec(struct cursor *cur, struct bech32_nsec *nsec) { - return pull_bytes(cur, 32, &nsec->nsec); -} - -static int tlvs_to_relays(struct nostr_tlvs *tlvs, struct relays *relays) { - struct nostr_tlv *tlv; - struct str_block *str; - - relays->num_relays = 0; - - for (int i = 0; i < tlvs->num_tlvs; i++) { - tlv = &tlvs->tlvs[i]; - if (tlv->type != TLV_RELAY) - continue; - - if (relays->num_relays + 1 > MAX_RELAYS) - break; - - str = &relays->relays[relays->num_relays++]; - str->start = (const char*)tlv->value; - str->end = (const char*)(tlv->value + tlv->len); - } - - return 1; -} - -static uint32_t decode_tlv_u32(const uint8_t *bytes) { - beint32_t *be32_bytes = (beint32_t*)bytes; - return be32_to_cpu(*be32_bytes); -} - -static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *nevent) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - if (tlv->len != 32) - return 0; - - nevent->event_id = tlv->value; - - if (find_tlv(&tlvs, TLV_AUTHOR, &tlv)) { - nevent->pubkey = tlv->value; - } else { - nevent->pubkey = NULL; - } - - if(find_tlv(&tlvs, TLV_KIND, &tlv)) { - nevent->kind = decode_tlv_u32(tlv->value); - nevent->has_kind = true; - } else { - nevent->has_kind = false; - } - - return tlvs_to_relays(&tlvs, &nevent->relays); -} - -static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *naddr) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - naddr->identifier.start = (const char*)tlv->value; - naddr->identifier.end = (const char*)tlv->value + tlv->len; - - if (!find_tlv(&tlvs, TLV_AUTHOR, &tlv)) - return 0; - - naddr->pubkey = tlv->value; - - if(!find_tlv(&tlvs, TLV_KIND, &tlv)) { - return 0; - } - naddr->kind = decode_tlv_u32(tlv->value); - - return tlvs_to_relays(&tlvs, &naddr->relays); -} - -static int parse_nostr_bech32_nprofile(struct cursor *cur, struct bech32_nprofile *nprofile) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - if (tlv->len != 32) - return 0; - - nprofile->pubkey = tlv->value; - - return tlvs_to_relays(&tlvs, &nprofile->relays); -} - -static int parse_nostr_bech32_nrelay(struct cursor *cur, struct bech32_nrelay *nrelay) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - nrelay->relay.start = (const char*)tlv->value; - nrelay->relay.end = (const char*)tlv->value + tlv->len; - - return 1; -} - -int parse_nostr_bech32(struct cursor *cur, struct nostr_bech32 *obj) { - u8 *start, *end; - - start = cur->p; - - if (!consume_until_non_alphanumeric(cur, 1)) { - cur->p = start; - return 0; - } - - end = cur->p; - - size_t data_len; - size_t input_len = end - start; - if (input_len < 10 || input_len > 10000) { - return 0; - } - - obj->buffer = malloc(input_len * 2); - if (!obj->buffer) - return 0; - - u8 data[input_len]; - char prefix[input_len]; - - if (bech32_decode_len(prefix, data, &data_len, (const char*)start, input_len) == BECH32_ENCODING_NONE) { - cur->p = start; - return 0; - } - - obj->buflen = 0; - if (!bech32_convert_bits(obj->buffer, &obj->buflen, 8, data, data_len, 5, 0)) { - goto fail; - } - - if (!parse_nostr_bech32_type(prefix, &obj->type)) { - goto fail; - } - - struct cursor bcur; - make_cursor(obj->buffer, obj->buffer + obj->buflen, &bcur); - - switch (obj->type) { - case NOSTR_BECH32_NOTE: - if (!parse_nostr_bech32_note(&bcur, &obj->data.note)) - goto fail; - break; - case NOSTR_BECH32_NPUB: - if (!parse_nostr_bech32_npub(&bcur, &obj->data.npub)) - goto fail; - break; - case NOSTR_BECH32_NSEC: - if (!parse_nostr_bech32_nsec(&bcur, &obj->data.nsec)) - goto fail; - break; - case NOSTR_BECH32_NEVENT: - if (!parse_nostr_bech32_nevent(&bcur, &obj->data.nevent)) - goto fail; - break; - case NOSTR_BECH32_NADDR: - if (!parse_nostr_bech32_naddr(&bcur, &obj->data.naddr)) - goto fail; - break; - case NOSTR_BECH32_NPROFILE: - if (!parse_nostr_bech32_nprofile(&bcur, &obj->data.nprofile)) - goto fail; - break; - case NOSTR_BECH32_NRELAY: - if (!parse_nostr_bech32_nrelay(&bcur, &obj->data.nrelay)) - goto fail; - break; - } - - return 1; - -fail: - free(obj->buffer); - cur->p = start; - return 0; -} diff --git a/damus-c/nostr_bech32.h b/damus-c/nostr_bech32.h deleted file mode 100644 index 6155d9289..000000000 --- a/damus-c/nostr_bech32.h +++ /dev/null @@ -1,89 +0,0 @@ -// -// nostr_bech32.h -// damus -// -// Created by William Casarin on 2023-04-09. -// - -#ifndef nostr_bech32_h -#define nostr_bech32_h - -#include -#include "str_block.h" -#include "cursor.h" -#include - -typedef unsigned char u8; -#define MAX_RELAYS 10 - -struct relays { - struct str_block relays[MAX_RELAYS]; - int num_relays; -}; - -enum nostr_bech32_type { - NOSTR_BECH32_NOTE = 1, - NOSTR_BECH32_NPUB = 2, - NOSTR_BECH32_NPROFILE = 3, - NOSTR_BECH32_NEVENT = 4, - NOSTR_BECH32_NRELAY = 5, - NOSTR_BECH32_NADDR = 6, - NOSTR_BECH32_NSEC = 7, -}; - -struct bech32_note { - const u8 *event_id; -}; - -struct bech32_npub { - const u8 *pubkey; -}; - -struct bech32_nsec { - const u8 *nsec; -}; - -struct bech32_nevent { - struct relays relays; - const u8 *event_id; - const u8 *pubkey; // optional - uint32_t kind; - bool has_kind; -}; - -struct bech32_nprofile { - struct relays relays; - const u8 *pubkey; -}; - -struct bech32_naddr { - struct relays relays; - struct str_block identifier; - const u8 *pubkey; - uint32_t kind; -}; - -struct bech32_nrelay { - struct str_block relay; -}; - -typedef struct nostr_bech32 { - enum nostr_bech32_type type; - u8 *buffer; // holds strings and tlv stuff - size_t buflen; - - union { - struct bech32_note note; - struct bech32_npub npub; - struct bech32_nsec nsec; - struct bech32_nevent nevent; - struct bech32_nprofile nprofile; - struct bech32_naddr naddr; - struct bech32_nrelay nrelay; - } data; -} nostr_bech32_t; - - -int parse_nostr_bech32(struct cursor *cur, struct nostr_bech32 *obj); - -#endif /* nostr_bech32_h */ diff --git a/damus-c/alignof.h b/nostrdb/alignof.h similarity index 100% rename from damus-c/alignof.h rename to nostrdb/alignof.h diff --git a/damus-c/amount.c b/nostrdb/amount.c similarity index 100% rename from damus-c/amount.c rename to nostrdb/amount.c diff --git a/damus-c/amount.h b/nostrdb/amount.h similarity index 100% rename from damus-c/amount.h rename to nostrdb/amount.h diff --git a/damus-c/array_size.h b/nostrdb/array_size.h similarity index 100% rename from damus-c/array_size.h rename to nostrdb/array_size.h diff --git a/damus-c/bech32.c b/nostrdb/bech32.c similarity index 100% rename from damus-c/bech32.c rename to nostrdb/bech32.c diff --git a/damus-c/bech32.h b/nostrdb/bech32.h similarity index 100% rename from damus-c/bech32.h rename to nostrdb/bech32.h diff --git a/damus-c/bech32_util.c b/nostrdb/bech32_util.c similarity index 100% rename from damus-c/bech32_util.c rename to nostrdb/bech32_util.c diff --git a/damus-c/bech32_util.h b/nostrdb/bech32_util.h similarity index 100% rename from damus-c/bech32_util.h rename to nostrdb/bech32_util.h diff --git a/damus-c/block.h b/nostrdb/block.h similarity index 100% rename from damus-c/block.h rename to nostrdb/block.h diff --git a/damus-c/bolt11.c b/nostrdb/bolt11.c similarity index 100% rename from damus-c/bolt11.c rename to nostrdb/bolt11.c diff --git a/damus-c/bolt11.h b/nostrdb/bolt11.h similarity index 100% rename from damus-c/bolt11.h rename to nostrdb/bolt11.h diff --git a/damus-c/build_assert.h b/nostrdb/build_assert.h similarity index 100% rename from damus-c/build_assert.h rename to nostrdb/build_assert.h diff --git a/damus-c/check_type.h b/nostrdb/check_type.h similarity index 100% rename from damus-c/check_type.h rename to nostrdb/check_type.h diff --git a/damus-c/config.h b/nostrdb/config.h similarity index 100% rename from damus-c/config.h rename to nostrdb/config.h diff --git a/damus-c/container_of.h b/nostrdb/container_of.h similarity index 100% rename from damus-c/container_of.h rename to nostrdb/container_of.h diff --git a/damus-c/cppmagic.h b/nostrdb/cppmagic.h similarity index 100% rename from damus-c/cppmagic.h rename to nostrdb/cppmagic.h diff --git a/damus-c/damus-Bridging-Header.h b/nostrdb/damus-Bridging-Header.h similarity index 100% rename from damus-c/damus-Bridging-Header.h rename to nostrdb/damus-Bridging-Header.h diff --git a/damus-c/damus.c b/nostrdb/damus.c similarity index 100% rename from damus-c/damus.c rename to nostrdb/damus.c diff --git a/damus-c/damus.h b/nostrdb/damus.h similarity index 100% rename from damus-c/damus.h rename to nostrdb/damus.h diff --git a/damus-c/debug.h b/nostrdb/debug.h similarity index 100% rename from damus-c/debug.h rename to nostrdb/debug.h diff --git a/damus-c/endian.h b/nostrdb/endian.h similarity index 100% rename from damus-c/endian.h rename to nostrdb/endian.h diff --git a/damus-c/error.c b/nostrdb/error.c similarity index 100% rename from damus-c/error.c rename to nostrdb/error.c diff --git a/damus-c/error.h b/nostrdb/error.h similarity index 100% rename from damus-c/error.h rename to nostrdb/error.h diff --git a/damus-c/hash_u5.c b/nostrdb/hash_u5.c similarity index 100% rename from damus-c/hash_u5.c rename to nostrdb/hash_u5.c diff --git a/damus-c/hash_u5.h b/nostrdb/hash_u5.h similarity index 100% rename from damus-c/hash_u5.h rename to nostrdb/hash_u5.h diff --git a/damus-c/hex.c b/nostrdb/hex.c similarity index 100% rename from damus-c/hex.c rename to nostrdb/hex.c diff --git a/damus-c/hex.h b/nostrdb/hex.h similarity index 100% rename from damus-c/hex.h rename to nostrdb/hex.h diff --git a/damus-c/likely.h b/nostrdb/likely.h similarity index 100% rename from damus-c/likely.h rename to nostrdb/likely.h diff --git a/damus-c/list.c b/nostrdb/list.c similarity index 100% rename from damus-c/list.c rename to nostrdb/list.c diff --git a/damus-c/list.h b/nostrdb/list.h similarity index 100% rename from damus-c/list.h rename to nostrdb/list.h diff --git a/damus-c/mem.c b/nostrdb/mem.c similarity index 100% rename from damus-c/mem.c rename to nostrdb/mem.c diff --git a/damus-c/mem.h b/nostrdb/mem.h similarity index 100% rename from damus-c/mem.h rename to nostrdb/mem.h diff --git a/damus-c/node_id.c b/nostrdb/node_id.c similarity index 100% rename from damus-c/node_id.c rename to nostrdb/node_id.c diff --git a/damus-c/node_id.h b/nostrdb/node_id.h similarity index 100% rename from damus-c/node_id.h rename to nostrdb/node_id.h diff --git a/nostrdb/nostr_bech32.c b/nostrdb/nostr_bech32.c index 9710fbe24..ad8172b20 100644 --- a/nostrdb/nostr_bech32.c +++ b/nostrdb/nostr_bech32.c @@ -7,8 +7,10 @@ #include "nostr_bech32.h" #include +#include "endian.h" #include "cursor.h" #include "bech32.h" +#include #define MAX_TLVS 16 @@ -145,6 +147,11 @@ static int tlvs_to_relays(struct nostr_tlvs *tlvs, struct relays *relays) { return 1; } +static uint32_t decode_tlv_u32(const uint8_t *bytes) { + beint32_t *be32_bytes = (beint32_t*)bytes; + return be32_to_cpu(*be32_bytes); +} + static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *nevent) { struct nostr_tlvs tlvs; struct nostr_tlv *tlv; @@ -166,6 +173,13 @@ static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *n nevent->pubkey = NULL; } + if(find_tlv(&tlvs, TLV_KIND, &tlv)) { + nevent->kind = decode_tlv_u32(tlv->value); + nevent->has_kind = true; + } else { + nevent->has_kind = false; + } + return tlvs_to_relays(&tlvs, &nevent->relays); } @@ -187,6 +201,11 @@ static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *nad naddr->pubkey = tlv->value; + if(!find_tlv(&tlvs, TLV_KIND, &tlv)) { + return 0; + } + naddr->kind = decode_tlv_u32(tlv->value); + return tlvs_to_relays(&tlvs, &naddr->relays); } diff --git a/nostrdb/nostr_bech32.h b/nostrdb/nostr_bech32.h index 23a381d98..6155d9289 100644 --- a/nostrdb/nostr_bech32.h +++ b/nostrdb/nostr_bech32.h @@ -11,6 +11,8 @@ #include #include "str_block.h" #include "cursor.h" +#include + typedef unsigned char u8; #define MAX_RELAYS 10 @@ -45,6 +47,8 @@ struct bech32_nevent { struct relays relays; const u8 *event_id; const u8 *pubkey; // optional + uint32_t kind; + bool has_kind; }; struct bech32_nprofile { @@ -56,6 +60,7 @@ struct bech32_naddr { struct relays relays; struct str_block identifier; const u8 *pubkey; + uint32_t kind; }; struct bech32_nrelay { diff --git a/damus-c/overflows.h b/nostrdb/overflows.h similarity index 100% rename from damus-c/overflows.h rename to nostrdb/overflows.h diff --git a/damus-c/parser.h b/nostrdb/parser.h similarity index 100% rename from damus-c/parser.h rename to nostrdb/parser.h diff --git a/damus-c/sha256.c b/nostrdb/sha256.c similarity index 100% rename from damus-c/sha256.c rename to nostrdb/sha256.c diff --git a/damus-c/sha256.h b/nostrdb/sha256.h similarity index 100% rename from damus-c/sha256.h rename to nostrdb/sha256.h diff --git a/damus-c/short_types.h b/nostrdb/short_types.h similarity index 100% rename from damus-c/short_types.h rename to nostrdb/short_types.h diff --git a/damus-c/str.h b/nostrdb/str.h similarity index 100% rename from damus-c/str.h rename to nostrdb/str.h diff --git a/damus-c/str_block.h b/nostrdb/str_block.h similarity index 100% rename from damus-c/str_block.h rename to nostrdb/str_block.h diff --git a/damus-c/str_debug.h b/nostrdb/str_debug.h similarity index 100% rename from damus-c/str_debug.h rename to nostrdb/str_debug.h diff --git a/damus-c/structeq.h b/nostrdb/structeq.h similarity index 100% rename from damus-c/structeq.h rename to nostrdb/structeq.h diff --git a/damus-c/take.c b/nostrdb/take.c similarity index 100% rename from damus-c/take.c rename to nostrdb/take.c diff --git a/damus-c/take.h b/nostrdb/take.h similarity index 100% rename from damus-c/take.h rename to nostrdb/take.h diff --git a/damus-c/tal.c b/nostrdb/tal.c similarity index 100% rename from damus-c/tal.c rename to nostrdb/tal.c diff --git a/damus-c/tal.h b/nostrdb/tal.h similarity index 100% rename from damus-c/tal.h rename to nostrdb/tal.h diff --git a/damus-c/talstr.c b/nostrdb/talstr.c similarity index 100% rename from damus-c/talstr.c rename to nostrdb/talstr.c diff --git a/damus-c/talstr.h b/nostrdb/talstr.h similarity index 100% rename from damus-c/talstr.h rename to nostrdb/talstr.h diff --git a/damus-c/typedefs.h b/nostrdb/typedefs.h similarity index 100% rename from damus-c/typedefs.h rename to nostrdb/typedefs.h diff --git a/damus-c/typesafe_cb.h b/nostrdb/typesafe_cb.h similarity index 100% rename from damus-c/typesafe_cb.h rename to nostrdb/typesafe_cb.h diff --git a/damus-c/utf8.c b/nostrdb/utf8.c similarity index 100% rename from damus-c/utf8.c rename to nostrdb/utf8.c diff --git a/damus-c/utf8.h b/nostrdb/utf8.h similarity index 100% rename from damus-c/utf8.h rename to nostrdb/utf8.h diff --git a/damus-c/varint.h b/nostrdb/varint.h similarity index 100% rename from damus-c/varint.h rename to nostrdb/varint.h diff --git a/damus-c/wasm.c b/nostrdb/wasm.c similarity index 100% rename from damus-c/wasm.c rename to nostrdb/wasm.c diff --git a/damus-c/wasm.h b/nostrdb/wasm.h similarity index 100% rename from damus-c/wasm.h rename to nostrdb/wasm.h From 4325a71d48fbc0355e44cd42f78f5c15720d7ede Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 14:33:44 -0800 Subject: [PATCH 014/146] nostrdb: port everything over to be in as sync as possible for now --- nostrdb/Makefile | 168 +++ nostrdb/bench-ingest-many.c | 75 ++ nostrdb/bench.c | 51 + .../bindings/c/flatbuffers_common_builder.h | 6 +- .../bindings/c/flatbuffers_common_reader.h | 6 +- nostrdb/bindings/c/meta_builder.h | 4 +- nostrdb/bindings/c/meta_json_parser.h | 6 +- nostrdb/bindings/c/meta_reader.h | 6 +- nostrdb/bindings/c/meta_verifier.h | 6 +- nostrdb/bindings/c/profile_builder.h | 4 +- nostrdb/bindings/c/profile_json_parser.h | 6 +- nostrdb/bindings/c/profile_reader.h | 6 +- nostrdb/bindings/c/profile_verifier.h | 6 +- nostrdb/bindings/rust/.dir | 0 nostrdb/bindings/rust/ndb_meta.rs | 264 ++++ nostrdb/bindings/rust/ndb_profile.rs | 514 ++++++++ nostrdb/bindings/swift/NdbProfile.swift | 2 +- nostrdb/bolt11/bech32.c | 217 ++++ nostrdb/bolt11/bech32.h | 142 +++ nostrdb/config.h | 4 +- nostrdb/configurator.c | 1110 +++++++++++++++++ nostrdb/endian.h | 116 +- nostrdb/hex.h | 124 +- nostrdb/io.h | 48 + nostrdb/lmdb_util.h | 100 ++ nostrdb/ndb.c | 185 +++ nostrdb/nostr_bech32.c | 19 - nostrdb/nostr_bech32.h | 5 - nostrdb/nostrdb.c | 28 +- nostrdb/nostrdb.h | 1 - nostrdb/print_util.h | 36 + nostrdb/random.h | 5 +- nostrdb/sha256.c | 354 +++--- nostrdb/sha256.h | 78 +- nostrdb/test.c | 1009 +++++++++++++++ nostrdb/threadpool.h | 2 +- 36 files changed, 4287 insertions(+), 426 deletions(-) create mode 100644 nostrdb/Makefile create mode 100644 nostrdb/bench-ingest-many.c create mode 100644 nostrdb/bench.c create mode 100644 nostrdb/bindings/rust/.dir create mode 100644 nostrdb/bindings/rust/ndb_meta.rs create mode 100644 nostrdb/bindings/rust/ndb_profile.rs create mode 100644 nostrdb/bolt11/bech32.c create mode 100644 nostrdb/bolt11/bech32.h create mode 100644 nostrdb/configurator.c create mode 100644 nostrdb/io.h create mode 100644 nostrdb/lmdb_util.h create mode 100644 nostrdb/ndb.c create mode 100644 nostrdb/print_util.h create mode 100644 nostrdb/test.c diff --git a/nostrdb/Makefile b/nostrdb/Makefile new file mode 100644 index 000000000..f7328e96a --- /dev/null +++ b/nostrdb/Makefile @@ -0,0 +1,168 @@ +CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g -Ideps/secp256k1/include -Ideps/lmdb -Ideps/flatcc/include +HEADERS = sha256.h nostrdb.h cursor.h hex.h jsmn.h config.h sha256.h random.h memchr.h cpu.h $(C_BINDINGS) +FLATCC_SRCS=deps/flatcc/src/runtime/json_parser.c deps/flatcc/src/runtime/verifier.c deps/flatcc/src/runtime/builder.c deps/flatcc/src/runtime/emitter.c deps/flatcc/src/runtime/refmap.c +BOLT11_SRCS = bolt11/bolt11.c bolt11/bech32.c bolt11/tal.c bolt11/talstr.c bolt11/take.c bolt11/list.c bolt11/utf8.c bolt11/amount.c bolt11/hash_u5.c +SRCS = nostrdb.c sha256.c $(BOLT11_SRCS) $(FLATCC_SRCS) +LDS = $(OBJS) $(ARS) +OBJS = $(SRCS:.c=.o) +DEPS = $(OBJS) $(HEADERS) $(ARS) +ARS = deps/lmdb/liblmdb.a deps/secp256k1/.libs/libsecp256k1.a +LMDB_VER=0.9.31 +FLATCC_VER=05dc16dc2b0316e61063bb1fc75426647badce48 +PREFIX ?= /usr/local +SUBMODULES = deps/secp256k1 +C_BINDINGS_PROFILE=bindings/c/profile_builder.h bindings/c/profile_reader.h bindings/c/profile_verifier.h bindings/c/profile_json_parser.h +C_BINDINGS_META=bindings/c/meta_builder.h bindings/c/meta_reader.h bindings/c/meta_verifier.h bindings/c/meta_json_parser.h +C_BINDINGS_COMMON=bindings/c/flatbuffers_common_builder.h bindings/c/flatbuffers_common_reader.h +C_BINDINGS=$(C_BINDINGS_COMMON) $(C_BINDINGS_PROFILE) $(C_BINDINGS_META) +BINDINGS=bindings +BIN=ndb + +CHECKDATA=testdata/db/v0/data.mdb + +all: lib ndb + +lib: benches test + +ndb: ndb.c $(DEPS) + $(CC) $(CFLAGS) ndb.c $(LDS) -o $@ + +bindings: bindings-swift bindings-rust bindings-c + +check: test $(CHECKDATA) + rm -rf testdata/db/*.mdb + ./test || rm -rf testdata/db/v0 + rm -rf testdata/db/v0 + +clean: + rm -rf test bench bench-ingest bench-ingest-many + +benches: bench + +distclean: clean + rm -rf deps + +tags: + find . -name '*.c' -or -name '*.h' | xargs ctags + +configurator: configurator.c + $(CC) $< -o $@ + +config.h: configurator + ./configurator > $@ + +bindings-c: $(C_BINDINGS) + +bindings/%/.dir: + mkdir -p $(shell dirname $@) + touch $@ + +bindings/c/%_builder.h: schemas/%.fbs bindings/c/.dir + flatcc --builder $< -o bindings/c + +bindings/c/%_verifier.h bindings/c/%_reader.h: schemas/%.fbs bindings/c/.dir + flatcc --verifier -o bindings/c $< + +bindings/c/flatbuffers_common_reader.h: bindings/c/.dir + flatcc --common_reader -o bindings/c + +bindings/c/flatbuffers_common_builder.h: bindings/c/.dir + flatcc --common_builder -o bindings/c + +bindings/c/%_json_parser.h: schemas/%.fbs bindings/c/.dir + flatcc --json-parser $< -o bindings/c + +bindings-rust: bindings/rust/ndb_profile.rs bindings/rust/ndb_meta.rs + +bindings/rust/ndb_profile.rs: schemas/profile.fbs bindings/rust + flatc --gen-json-emit --rust $< + @mv profile_generated.rs $@ + +bindings/rust/ndb_meta.rs: schemas/meta.fbs bindings/swift + flatc --rust $< + @mv meta_generated.rs $@ + +bindings-swift: bindings/swift/NdbProfile.swift bindings/swift/NdbMeta.swift + +bindings/swift/NdbProfile.swift: schemas/profile.fbs bindings/swift + flatc --gen-json-emit --swift $< + @mv profile_generated.swift $@ + +bindings/swift/NdbMeta.swift: schemas/meta.fbs bindings/swift + flatc --swift $< + @mv meta_generated.swift $@ + +deps/.dir: + @mkdir -p deps + touch deps/.dir + +deps/LMDB_$(LMDB_VER).tar.gz: deps/.dir + curl -L https://github.com/LMDB/lmdb/archive/refs/tags/LMDB_$(LMDB_VER).tar.gz -o $@ + +deps/flatcc_$(FLATCC_VER).tar.gz: deps/.dir + curl -L https://github.com/jb55/flatcc/archive/$(FLATCC_VER).tar.gz -o $@ + +deps/flatcc/src/runtime/json_parser.c: deps/flatcc_$(FLATCC_VER).tar.gz deps/.dir + tar xf $< + rm -rf deps/flatcc + mv flatcc-$(FLATCC_VER) deps/flatcc + touch $@ + +deps/lmdb/lmdb.h: deps/LMDB_$(LMDB_VER).tar.gz deps/.dir + tar xf $< + rm -rf deps/lmdb + mv lmdb-LMDB_$(LMDB_VER)/libraries/liblmdb deps/lmdb + rm -rf lmdb-LMDB_$(LMDB_VER) + touch $@ + +deps/secp256k1/.git: deps/.dir + @devtools/refresh-submodules.sh $(SUBMODULES) + +deps/secp256k1/include/secp256k1.h: deps/secp256k1/.git + +deps/secp256k1/configure: deps/secp256k1/.git + cd deps/secp256k1; \ + ./autogen.sh + +deps/secp256k1/.libs/libsecp256k1.a: deps/secp256k1/config.log + cd deps/secp256k1; \ + make -j libsecp256k1.la + +deps/secp256k1/config.log: deps/secp256k1/configure + cd deps/secp256k1; \ + ./configure --disable-shared --enable-module-ecdh --enable-module-schnorrsig --enable-module-extrakeys + +deps/lmdb/liblmdb.a: deps/lmdb/lmdb.h + $(MAKE) -C deps/lmdb liblmdb.a + +bench: bench.c $(DEPS) + $(CC) $(CFLAGS) bench.c $(LDS) -o $@ + +testdata/db/ndb-v0.tar.zst: + curl https://cdn.jb55.com/s/ndb-v0.tar.zst -o $@ + +testdata/db/ndb-v0.tar: testdata/db/ndb-v0.tar.zst + zstd -d < $< > $@ + +testdata/db/v0/data.mdb: testdata/db/ndb-v0.tar + tar xf $< + rm -rf testdata/db/v0 + mv v0 testdata/db + +testdata/many-events.json.zst: + curl https://cdn.jb55.com/s/many-events.json.zst -o $@ + +testdata/many-events.json: testdata/many-events.json.zst + zstd -d $< + +bench-ingest-many: bench-ingest-many.c $(DEPS) testdata/many-events.json + $(CC) $(CFLAGS) $< $(LDS) -o $@ + +testdata/db/.dir: + @mkdir -p testdata/db + touch testdata/db/.dir + +test: test.c $(DEPS) testdata/db/.dir + $(CC) $(CFLAGS) test.c $(LDS) -o $@ + +.PHONY: tags clean diff --git a/nostrdb/bench-ingest-many.c b/nostrdb/bench-ingest-many.c new file mode 100644 index 000000000..0b4c0dfbf --- /dev/null +++ b/nostrdb/bench-ingest-many.c @@ -0,0 +1,75 @@ + + +#include "io.h" +#include "nostrdb.h" +#include +#include +#include +#include +#include +#include +#include + +int map_file(const char *filename, unsigned char **p, size_t *flen) +{ + struct stat st; + int des; + stat(filename, &st); + *flen = st.st_size; + + des = open(filename, O_RDONLY); + + *p = mmap(NULL, *flen, PROT_READ, MAP_PRIVATE, des, 0); + close(des); + + return *p != MAP_FAILED; +} + +static int bench_parser() +{ + long nanos, ms; + size_t written; + struct ndb *ndb; + struct timespec t1, t2; + char *json; + int times = 1; + struct ndb_config config; + ndb_default_config(&config); + + ndb_config_set_mapsize(&config, 1024ULL * 1024ULL * 400ULL * 10ULL); + ndb_config_set_ingest_threads(&config, 8); + ndb_config_set_flags(&config, NDB_FLAG_SKIP_NOTE_VERIFY); + + assert(ndb_init(&ndb, "testdata/db", &config)); + const char *filename = "testdata/many-events.json"; + if (!map_file(filename, (unsigned char**)&json, &written)) { + printf("mapping testdata/many-events.json failed\n"); + return 2; + } + + printf("mapped %ld bytes in %s\n", written, filename); + + clock_gettime(CLOCK_MONOTONIC, &t1); + + ndb_process_events(ndb, json, written); + + ndb_destroy(ndb); + + clock_gettime(CLOCK_MONOTONIC, &t2); + + nanos = (t2.tv_sec - t1.tv_sec) * (long)1e9 + (t2.tv_nsec - t1.tv_nsec); + ms = nanos / 1e6; + printf("ns/run\t%ld\nms/run\t%f\nns\t%ld\nms\t%ld\n", + nanos/times, (double)ms/(double)times, nanos, ms); + + return 1; +} + +int main(int argc, char *argv[], char **env) +{ + if (!bench_parser()) + return 2; + + return 0; +} + diff --git a/nostrdb/bench.c b/nostrdb/bench.c new file mode 100644 index 000000000..6dbef99f0 --- /dev/null +++ b/nostrdb/bench.c @@ -0,0 +1,51 @@ + +#include "io.h" +#include "nostrdb.h" +#include +#include +#include + +static int bench_parser(int times, const char *json, int len) +{ + static unsigned char buf[2<<18]; + + struct timespec t1, t2; + int i; + long nanos, ms; + struct ndb_note *note; + + clock_gettime(CLOCK_MONOTONIC, &t1); + for (i = 0; i < times; i++) { + if (!ndb_note_from_json(json, len, ¬e, buf, sizeof(buf))) { + return 0; + } + } + clock_gettime(CLOCK_MONOTONIC, &t2); + + nanos = (t2.tv_sec - t1.tv_sec) * (long)1e9 + (t2.tv_nsec - t1.tv_nsec); + ms = nanos / 1e6; + printf("ns/run\t%ld\nms/run\t%f\nns\t%ld\nms\t%ld\n", + nanos/times, (double)ms/(double)times, nanos, ms); + + return 1; +} + +int main(int argc, char *argv[], char **env) +{ + static const int alloc_size = 2 << 18; + int times = 10000, len = 0; + unsigned char buf[alloc_size]; + + if (!read_file("testdata/contacts.json", buf, alloc_size, &len)) + return 1; + + if (argc >= 2) + times = atoi(argv[1]); + + fprintf(stderr, "benching parser %d times\n", times); + if (!bench_parser(times, (const char*)&buf[0], len)) + return 2; + + return 0; +} + diff --git a/nostrdb/bindings/c/flatbuffers_common_builder.h b/nostrdb/bindings/c/flatbuffers_common_builder.h index 6266b9894..a4be1ce6e 100644 --- a/nostrdb/bindings/c/flatbuffers_common_builder.h +++ b/nostrdb/bindings/c/flatbuffers_common_builder.h @@ -5,9 +5,9 @@ /* Common FlatBuffers build functionality for C. */ -#include "flatcc_prologue.h" +#include "flatcc/flatcc_prologue.h" #ifndef FLATBUILDER_H -#include "flatcc_builder.h" +#include "flatcc/flatcc_builder.h" #endif typedef flatcc_builder_t flatbuffers_builder_t; typedef flatcc_builder_ref_t flatbuffers_ref_t; @@ -681,5 +681,5 @@ __flatbuffers_build_scalar(flatbuffers_, flatbuffers_double, double) __flatbuffers_build_string(flatbuffers_) __flatbuffers_build_buffer(flatbuffers_) -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* FLATBUFFERS_COMMON_BUILDER_H */ diff --git a/nostrdb/bindings/c/flatbuffers_common_reader.h b/nostrdb/bindings/c/flatbuffers_common_reader.h index 49e479e29..c57530868 100644 --- a/nostrdb/bindings/c/flatbuffers_common_reader.h +++ b/nostrdb/bindings/c/flatbuffers_common_reader.h @@ -5,8 +5,8 @@ /* Common FlatBuffers read functionality for C. */ -#include "flatcc_prologue.h" -#include "flatcc_flatbuffers.h" +#include "flatcc/flatcc_prologue.h" +#include "flatcc/flatcc_flatbuffers.h" #define __flatbuffers_read_scalar_at_byteoffset(N, p, o) N ## _read_from_pe((uint8_t *)(p) + (o)) @@ -574,5 +574,5 @@ static inline N ## _ ## K ## t N ## _as_typed_root(const void *buffer__tmp)\ #define __flatbuffers_struct_as_root(N) __flatbuffers_buffer_as_root(N, struct_) #define __flatbuffers_table_as_root(N) __flatbuffers_buffer_as_root(N, table_) -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* FLATBUFFERS_COMMON_H */ diff --git a/nostrdb/bindings/c/meta_builder.h b/nostrdb/bindings/c/meta_builder.h index ad850bd53..5efa8bb65 100644 --- a/nostrdb/bindings/c/meta_builder.h +++ b/nostrdb/bindings/c/meta_builder.h @@ -9,7 +9,7 @@ #ifndef FLATBUFFERS_COMMON_BUILDER_H #include "flatbuffers_common_builder.h" #endif -#include "flatcc_prologue.h" +#include "flatcc/flatcc_prologue.h" #ifndef flatbuffers_identifier #define flatbuffers_identifier 0 #endif @@ -65,5 +65,5 @@ static NdbEventMeta_ref_t NdbEventMeta_clone(flatbuffers_builder_t *B, NdbEventM __flatbuffers_memoize_end(B, t, NdbEventMeta_end(B)); } -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* META_BUILDER_H */ diff --git a/nostrdb/bindings/c/meta_json_parser.h b/nostrdb/bindings/c/meta_json_parser.h index 94fcebd09..44fa6bd3e 100644 --- a/nostrdb/bindings/c/meta_json_parser.h +++ b/nostrdb/bindings/c/meta_json_parser.h @@ -3,8 +3,8 @@ /* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */ -#include "flatcc_json_parser.h" -#include "flatcc_prologue.h" +#include "flatcc/flatcc_json_parser.h" +#include "flatcc/flatcc_prologue.h" /* * Parses the default root table or struct of the schema and constructs a FlatBuffer. @@ -246,5 +246,5 @@ static int meta_parse_json(flatcc_builder_t *B, flatcc_json_parser_t *ctx, return 0; } -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* META_JSON_PARSER_H */ diff --git a/nostrdb/bindings/c/meta_reader.h b/nostrdb/bindings/c/meta_reader.h index 90f2223ee..98f49aaf7 100644 --- a/nostrdb/bindings/c/meta_reader.h +++ b/nostrdb/bindings/c/meta_reader.h @@ -6,11 +6,11 @@ #ifndef FLATBUFFERS_COMMON_READER_H #include "flatbuffers_common_reader.h" #endif -#include "flatcc_flatbuffers.h" +#include "flatcc/flatcc_flatbuffers.h" #ifndef __alignas_is_defined #include #endif -#include "flatcc_prologue.h" +#include "flatcc/flatcc_prologue.h" #ifndef flatbuffers_identifier #define flatbuffers_identifier 0 #endif @@ -54,5 +54,5 @@ __flatbuffers_define_scalar_field(4, NdbEventMeta, zaps, flatbuffers_int32, int3 __flatbuffers_define_scalar_field(5, NdbEventMeta, zap_total, flatbuffers_int64, int64_t, INT64_C(0)) -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* META_READER_H */ diff --git a/nostrdb/bindings/c/meta_verifier.h b/nostrdb/bindings/c/meta_verifier.h index db801cf6f..f1a52537a 100644 --- a/nostrdb/bindings/c/meta_verifier.h +++ b/nostrdb/bindings/c/meta_verifier.h @@ -6,8 +6,8 @@ #ifndef META_READER_H #include "meta_reader.h" #endif -#include "flatcc_verifier.h" -#include "flatcc_prologue.h" +#include "flatcc/flatcc_verifier.h" +#include "flatcc/flatcc_prologue.h" static int NdbEventMeta_verify_table(flatcc_table_verifier_descriptor_t *td); @@ -43,5 +43,5 @@ static inline int NdbEventMeta_verify_as_root_with_type_hash(const void *buf, si return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &NdbEventMeta_verify_table); } -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* META_VERIFIER_H */ diff --git a/nostrdb/bindings/c/profile_builder.h b/nostrdb/bindings/c/profile_builder.h index 97341d552..4c57b5111 100644 --- a/nostrdb/bindings/c/profile_builder.h +++ b/nostrdb/bindings/c/profile_builder.h @@ -9,7 +9,7 @@ #ifndef FLATBUFFERS_COMMON_BUILDER_H #include "flatbuffers_common_builder.h" #endif -#include "flatcc_prologue.h" +#include "flatcc/flatcc_prologue.h" #ifndef flatbuffers_identifier #define flatbuffers_identifier 0 #endif @@ -127,5 +127,5 @@ static NdbProfileRecord_ref_t NdbProfileRecord_clone(flatbuffers_builder_t *B, N __flatbuffers_memoize_end(B, t, NdbProfileRecord_end(B)); } -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* PROFILE_BUILDER_H */ diff --git a/nostrdb/bindings/c/profile_json_parser.h b/nostrdb/bindings/c/profile_json_parser.h index 5c33a7442..30c0d2b9a 100644 --- a/nostrdb/bindings/c/profile_json_parser.h +++ b/nostrdb/bindings/c/profile_json_parser.h @@ -3,8 +3,8 @@ /* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */ -#include "flatcc_json_parser.h" -#include "flatcc_prologue.h" +#include "flatcc/flatcc_json_parser.h" +#include "flatcc/flatcc_prologue.h" /* * Parses the default root table or struct of the schema and constructs a FlatBuffer. @@ -408,5 +408,5 @@ static int profile_parse_json(flatcc_builder_t *B, flatcc_json_parser_t *ctx, return 0; } -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* PROFILE_JSON_PARSER_H */ diff --git a/nostrdb/bindings/c/profile_reader.h b/nostrdb/bindings/c/profile_reader.h index 069ec2cbc..136611dda 100644 --- a/nostrdb/bindings/c/profile_reader.h +++ b/nostrdb/bindings/c/profile_reader.h @@ -6,11 +6,11 @@ #ifndef FLATBUFFERS_COMMON_READER_H #include "flatbuffers_common_reader.h" #endif -#include "flatcc_flatbuffers.h" +#include "flatcc/flatcc_flatbuffers.h" #ifndef __alignas_is_defined #include #endif -#include "flatcc_prologue.h" +#include "flatcc/flatcc_prologue.h" #ifndef flatbuffers_identifier #define flatbuffers_identifier 0 #endif @@ -89,5 +89,5 @@ __flatbuffers_define_scalar_field(2, NdbProfileRecord, note_key, flatbuffers_uin __flatbuffers_define_string_field(3, NdbProfileRecord, lnurl, 0) -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* PROFILE_READER_H */ diff --git a/nostrdb/bindings/c/profile_verifier.h b/nostrdb/bindings/c/profile_verifier.h index 9595ab7aa..afae85e04 100644 --- a/nostrdb/bindings/c/profile_verifier.h +++ b/nostrdb/bindings/c/profile_verifier.h @@ -6,8 +6,8 @@ #ifndef PROFILE_READER_H #include "profile_reader.h" #endif -#include "flatcc_verifier.h" -#include "flatcc_prologue.h" +#include "flatcc/flatcc_verifier.h" +#include "flatcc/flatcc_prologue.h" static int NdbProfile_verify_table(flatcc_table_verifier_descriptor_t *td); static int NdbProfileRecord_verify_table(flatcc_table_verifier_descriptor_t *td); @@ -80,5 +80,5 @@ static inline int NdbProfileRecord_verify_as_root_with_type_hash(const void *buf return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &NdbProfileRecord_verify_table); } -#include "flatcc_epilogue.h" +#include "flatcc/flatcc_epilogue.h" #endif /* PROFILE_VERIFIER_H */ diff --git a/nostrdb/bindings/rust/.dir b/nostrdb/bindings/rust/.dir new file mode 100644 index 000000000..e69de29bb diff --git a/nostrdb/bindings/rust/ndb_meta.rs b/nostrdb/bindings/rust/ndb_meta.rs new file mode 100644 index 000000000..10554dc56 --- /dev/null +++ b/nostrdb/bindings/rust/ndb_meta.rs @@ -0,0 +1,264 @@ +// automatically generated by the FlatBuffers compiler, do not modify + + +// @generated + +use core::mem; +use core::cmp::Ordering; + +extern crate flatbuffers; +use self::flatbuffers::{EndianScalar, Follow}; + +pub enum NdbEventMetaOffset {} +#[derive(Copy, Clone, PartialEq)] + +pub struct NdbEventMeta<'a> { + pub _tab: flatbuffers::Table<'a>, +} + +impl<'a> flatbuffers::Follow<'a> for NdbEventMeta<'a> { + type Inner = NdbEventMeta<'a>; + #[inline] + unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { + Self { _tab: flatbuffers::Table::new(buf, loc) } + } +} + +impl<'a> NdbEventMeta<'a> { + pub const VT_RECEIVED_AT: flatbuffers::VOffsetT = 4; + pub const VT_REACTIONS: flatbuffers::VOffsetT = 6; + pub const VT_QUOTES: flatbuffers::VOffsetT = 8; + pub const VT_REPOSTS: flatbuffers::VOffsetT = 10; + pub const VT_ZAPS: flatbuffers::VOffsetT = 12; + pub const VT_ZAP_TOTAL: flatbuffers::VOffsetT = 14; + + #[inline] + pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self { + NdbEventMeta { _tab: table } + } + #[allow(unused_mut)] + pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr>( + _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr>, + args: &'args NdbEventMetaArgs + ) -> flatbuffers::WIPOffset> { + let mut builder = NdbEventMetaBuilder::new(_fbb); + builder.add_zap_total(args.zap_total); + builder.add_zaps(args.zaps); + builder.add_reposts(args.reposts); + builder.add_quotes(args.quotes); + builder.add_reactions(args.reactions); + builder.add_received_at(args.received_at); + builder.finish() + } + + + #[inline] + pub fn received_at(&self) -> i32 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbEventMeta::VT_RECEIVED_AT, Some(0)).unwrap()} + } + #[inline] + pub fn reactions(&self) -> i32 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbEventMeta::VT_REACTIONS, Some(0)).unwrap()} + } + #[inline] + pub fn quotes(&self) -> i32 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbEventMeta::VT_QUOTES, Some(0)).unwrap()} + } + #[inline] + pub fn reposts(&self) -> i32 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbEventMeta::VT_REPOSTS, Some(0)).unwrap()} + } + #[inline] + pub fn zaps(&self) -> i32 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbEventMeta::VT_ZAPS, Some(0)).unwrap()} + } + #[inline] + pub fn zap_total(&self) -> i64 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbEventMeta::VT_ZAP_TOTAL, Some(0)).unwrap()} + } +} + +impl flatbuffers::Verifiable for NdbEventMeta<'_> { + #[inline] + fn run_verifier( + v: &mut flatbuffers::Verifier, pos: usize + ) -> Result<(), flatbuffers::InvalidFlatbuffer> { + use self::flatbuffers::Verifiable; + v.visit_table(pos)? + .visit_field::("received_at", Self::VT_RECEIVED_AT, false)? + .visit_field::("reactions", Self::VT_REACTIONS, false)? + .visit_field::("quotes", Self::VT_QUOTES, false)? + .visit_field::("reposts", Self::VT_REPOSTS, false)? + .visit_field::("zaps", Self::VT_ZAPS, false)? + .visit_field::("zap_total", Self::VT_ZAP_TOTAL, false)? + .finish(); + Ok(()) + } +} +pub struct NdbEventMetaArgs { + pub received_at: i32, + pub reactions: i32, + pub quotes: i32, + pub reposts: i32, + pub zaps: i32, + pub zap_total: i64, +} +impl<'a> Default for NdbEventMetaArgs { + #[inline] + fn default() -> Self { + NdbEventMetaArgs { + received_at: 0, + reactions: 0, + quotes: 0, + reposts: 0, + zaps: 0, + zap_total: 0, + } + } +} + +pub struct NdbEventMetaBuilder<'a: 'b, 'b> { + fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a>, + start_: flatbuffers::WIPOffset, +} +impl<'a: 'b, 'b> NdbEventMetaBuilder<'a, 'b> { + #[inline] + pub fn add_received_at(&mut self, received_at: i32) { + self.fbb_.push_slot::(NdbEventMeta::VT_RECEIVED_AT, received_at, 0); + } + #[inline] + pub fn add_reactions(&mut self, reactions: i32) { + self.fbb_.push_slot::(NdbEventMeta::VT_REACTIONS, reactions, 0); + } + #[inline] + pub fn add_quotes(&mut self, quotes: i32) { + self.fbb_.push_slot::(NdbEventMeta::VT_QUOTES, quotes, 0); + } + #[inline] + pub fn add_reposts(&mut self, reposts: i32) { + self.fbb_.push_slot::(NdbEventMeta::VT_REPOSTS, reposts, 0); + } + #[inline] + pub fn add_zaps(&mut self, zaps: i32) { + self.fbb_.push_slot::(NdbEventMeta::VT_ZAPS, zaps, 0); + } + #[inline] + pub fn add_zap_total(&mut self, zap_total: i64) { + self.fbb_.push_slot::(NdbEventMeta::VT_ZAP_TOTAL, zap_total, 0); + } + #[inline] + pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>) -> NdbEventMetaBuilder<'a, 'b> { + let start = _fbb.start_table(); + NdbEventMetaBuilder { + fbb_: _fbb, + start_: start, + } + } + #[inline] + pub fn finish(self) -> flatbuffers::WIPOffset> { + let o = self.fbb_.end_table(self.start_); + flatbuffers::WIPOffset::new(o.value()) + } +} + +impl core::fmt::Debug for NdbEventMeta<'_> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let mut ds = f.debug_struct("NdbEventMeta"); + ds.field("received_at", &self.received_at()); + ds.field("reactions", &self.reactions()); + ds.field("quotes", &self.quotes()); + ds.field("reposts", &self.reposts()); + ds.field("zaps", &self.zaps()); + ds.field("zap_total", &self.zap_total()); + ds.finish() + } +} +#[inline] +/// Verifies that a buffer of bytes contains a `NdbEventMeta` +/// and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_ndb_event_meta_unchecked`. +pub fn root_as_ndb_event_meta(buf: &[u8]) -> Result { + flatbuffers::root::(buf) +} +#[inline] +/// Verifies that a buffer of bytes contains a size prefixed +/// `NdbEventMeta` and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `size_prefixed_root_as_ndb_event_meta_unchecked`. +pub fn size_prefixed_root_as_ndb_event_meta(buf: &[u8]) -> Result { + flatbuffers::size_prefixed_root::(buf) +} +#[inline] +/// Verifies, with the given options, that a buffer of bytes +/// contains a `NdbEventMeta` and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_ndb_event_meta_unchecked`. +pub fn root_as_ndb_event_meta_with_opts<'b, 'o>( + opts: &'o flatbuffers::VerifierOptions, + buf: &'b [u8], +) -> Result, flatbuffers::InvalidFlatbuffer> { + flatbuffers::root_with_opts::>(opts, buf) +} +#[inline] +/// Verifies, with the given verifier options, that a buffer of +/// bytes contains a size prefixed `NdbEventMeta` and returns +/// it. Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_ndb_event_meta_unchecked`. +pub fn size_prefixed_root_as_ndb_event_meta_with_opts<'b, 'o>( + opts: &'o flatbuffers::VerifierOptions, + buf: &'b [u8], +) -> Result, flatbuffers::InvalidFlatbuffer> { + flatbuffers::size_prefixed_root_with_opts::>(opts, buf) +} +#[inline] +/// Assumes, without verification, that a buffer of bytes contains a NdbEventMeta and returns it. +/// # Safety +/// Callers must trust the given bytes do indeed contain a valid `NdbEventMeta`. +pub unsafe fn root_as_ndb_event_meta_unchecked(buf: &[u8]) -> NdbEventMeta { + flatbuffers::root_unchecked::(buf) +} +#[inline] +/// Assumes, without verification, that a buffer of bytes contains a size prefixed NdbEventMeta and returns it. +/// # Safety +/// Callers must trust the given bytes do indeed contain a valid size prefixed `NdbEventMeta`. +pub unsafe fn size_prefixed_root_as_ndb_event_meta_unchecked(buf: &[u8]) -> NdbEventMeta { + flatbuffers::size_prefixed_root_unchecked::(buf) +} +#[inline] +pub fn finish_ndb_event_meta_buffer<'a, 'b>( + fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>, + root: flatbuffers::WIPOffset>) { + fbb.finish(root, None); +} + +#[inline] +pub fn finish_size_prefixed_ndb_event_meta_buffer<'a, 'b>(fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>, root: flatbuffers::WIPOffset>) { + fbb.finish_size_prefixed(root, None); +} diff --git a/nostrdb/bindings/rust/ndb_profile.rs b/nostrdb/bindings/rust/ndb_profile.rs new file mode 100644 index 000000000..b0fe90e4b --- /dev/null +++ b/nostrdb/bindings/rust/ndb_profile.rs @@ -0,0 +1,514 @@ +// automatically generated by the FlatBuffers compiler, do not modify + + +// @generated + +use core::mem; +use core::cmp::Ordering; + +extern crate flatbuffers; +use self::flatbuffers::{EndianScalar, Follow}; + +pub enum NdbProfileOffset {} +#[derive(Copy, Clone, PartialEq)] + +pub struct NdbProfile<'a> { + pub _tab: flatbuffers::Table<'a>, +} + +impl<'a> flatbuffers::Follow<'a> for NdbProfile<'a> { + type Inner = NdbProfile<'a>; + #[inline] + unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { + Self { _tab: flatbuffers::Table::new(buf, loc) } + } +} + +impl<'a> NdbProfile<'a> { + pub const VT_NAME: flatbuffers::VOffsetT = 4; + pub const VT_WEBSITE: flatbuffers::VOffsetT = 6; + pub const VT_ABOUT: flatbuffers::VOffsetT = 8; + pub const VT_LUD16: flatbuffers::VOffsetT = 10; + pub const VT_BANNER: flatbuffers::VOffsetT = 12; + pub const VT_DISPLAY_NAME: flatbuffers::VOffsetT = 14; + pub const VT_REACTIONS: flatbuffers::VOffsetT = 16; + pub const VT_PICTURE: flatbuffers::VOffsetT = 18; + pub const VT_NIP05: flatbuffers::VOffsetT = 20; + pub const VT_DAMUS_DONATION: flatbuffers::VOffsetT = 22; + pub const VT_DAMUS_DONATION_V2: flatbuffers::VOffsetT = 24; + pub const VT_LUD06: flatbuffers::VOffsetT = 26; + + #[inline] + pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self { + NdbProfile { _tab: table } + } + #[allow(unused_mut)] + pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr>( + _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr>, + args: &'args NdbProfileArgs<'args> + ) -> flatbuffers::WIPOffset> { + let mut builder = NdbProfileBuilder::new(_fbb); + if let Some(x) = args.lud06 { builder.add_lud06(x); } + builder.add_damus_donation_v2(args.damus_donation_v2); + builder.add_damus_donation(args.damus_donation); + if let Some(x) = args.nip05 { builder.add_nip05(x); } + if let Some(x) = args.picture { builder.add_picture(x); } + if let Some(x) = args.display_name { builder.add_display_name(x); } + if let Some(x) = args.banner { builder.add_banner(x); } + if let Some(x) = args.lud16 { builder.add_lud16(x); } + if let Some(x) = args.about { builder.add_about(x); } + if let Some(x) = args.website { builder.add_website(x); } + if let Some(x) = args.name { builder.add_name(x); } + builder.add_reactions(args.reactions); + builder.finish() + } + + + #[inline] + pub fn name(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfile::VT_NAME, None)} + } + #[inline] + pub fn website(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfile::VT_WEBSITE, None)} + } + #[inline] + pub fn about(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfile::VT_ABOUT, None)} + } + #[inline] + pub fn lud16(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfile::VT_LUD16, None)} + } + #[inline] + pub fn banner(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfile::VT_BANNER, None)} + } + #[inline] + pub fn display_name(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfile::VT_DISPLAY_NAME, None)} + } + #[inline] + pub fn reactions(&self) -> bool { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbProfile::VT_REACTIONS, Some(true)).unwrap()} + } + #[inline] + pub fn picture(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfile::VT_PICTURE, None)} + } + #[inline] + pub fn nip05(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfile::VT_NIP05, None)} + } + #[inline] + pub fn damus_donation(&self) -> i32 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbProfile::VT_DAMUS_DONATION, Some(0)).unwrap()} + } + #[inline] + pub fn damus_donation_v2(&self) -> i32 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbProfile::VT_DAMUS_DONATION_V2, Some(0)).unwrap()} + } + #[inline] + pub fn lud06(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfile::VT_LUD06, None)} + } +} + +impl flatbuffers::Verifiable for NdbProfile<'_> { + #[inline] + fn run_verifier( + v: &mut flatbuffers::Verifier, pos: usize + ) -> Result<(), flatbuffers::InvalidFlatbuffer> { + use self::flatbuffers::Verifiable; + v.visit_table(pos)? + .visit_field::>("name", Self::VT_NAME, false)? + .visit_field::>("website", Self::VT_WEBSITE, false)? + .visit_field::>("about", Self::VT_ABOUT, false)? + .visit_field::>("lud16", Self::VT_LUD16, false)? + .visit_field::>("banner", Self::VT_BANNER, false)? + .visit_field::>("display_name", Self::VT_DISPLAY_NAME, false)? + .visit_field::("reactions", Self::VT_REACTIONS, false)? + .visit_field::>("picture", Self::VT_PICTURE, false)? + .visit_field::>("nip05", Self::VT_NIP05, false)? + .visit_field::("damus_donation", Self::VT_DAMUS_DONATION, false)? + .visit_field::("damus_donation_v2", Self::VT_DAMUS_DONATION_V2, false)? + .visit_field::>("lud06", Self::VT_LUD06, false)? + .finish(); + Ok(()) + } +} +pub struct NdbProfileArgs<'a> { + pub name: Option>, + pub website: Option>, + pub about: Option>, + pub lud16: Option>, + pub banner: Option>, + pub display_name: Option>, + pub reactions: bool, + pub picture: Option>, + pub nip05: Option>, + pub damus_donation: i32, + pub damus_donation_v2: i32, + pub lud06: Option>, +} +impl<'a> Default for NdbProfileArgs<'a> { + #[inline] + fn default() -> Self { + NdbProfileArgs { + name: None, + website: None, + about: None, + lud16: None, + banner: None, + display_name: None, + reactions: true, + picture: None, + nip05: None, + damus_donation: 0, + damus_donation_v2: 0, + lud06: None, + } + } +} + +pub struct NdbProfileBuilder<'a: 'b, 'b> { + fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a>, + start_: flatbuffers::WIPOffset, +} +impl<'a: 'b, 'b> NdbProfileBuilder<'a, 'b> { + #[inline] + pub fn add_name(&mut self, name: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfile::VT_NAME, name); + } + #[inline] + pub fn add_website(&mut self, website: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfile::VT_WEBSITE, website); + } + #[inline] + pub fn add_about(&mut self, about: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfile::VT_ABOUT, about); + } + #[inline] + pub fn add_lud16(&mut self, lud16: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfile::VT_LUD16, lud16); + } + #[inline] + pub fn add_banner(&mut self, banner: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfile::VT_BANNER, banner); + } + #[inline] + pub fn add_display_name(&mut self, display_name: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfile::VT_DISPLAY_NAME, display_name); + } + #[inline] + pub fn add_reactions(&mut self, reactions: bool) { + self.fbb_.push_slot::(NdbProfile::VT_REACTIONS, reactions, true); + } + #[inline] + pub fn add_picture(&mut self, picture: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfile::VT_PICTURE, picture); + } + #[inline] + pub fn add_nip05(&mut self, nip05: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfile::VT_NIP05, nip05); + } + #[inline] + pub fn add_damus_donation(&mut self, damus_donation: i32) { + self.fbb_.push_slot::(NdbProfile::VT_DAMUS_DONATION, damus_donation, 0); + } + #[inline] + pub fn add_damus_donation_v2(&mut self, damus_donation_v2: i32) { + self.fbb_.push_slot::(NdbProfile::VT_DAMUS_DONATION_V2, damus_donation_v2, 0); + } + #[inline] + pub fn add_lud06(&mut self, lud06: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfile::VT_LUD06, lud06); + } + #[inline] + pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>) -> NdbProfileBuilder<'a, 'b> { + let start = _fbb.start_table(); + NdbProfileBuilder { + fbb_: _fbb, + start_: start, + } + } + #[inline] + pub fn finish(self) -> flatbuffers::WIPOffset> { + let o = self.fbb_.end_table(self.start_); + flatbuffers::WIPOffset::new(o.value()) + } +} + +impl core::fmt::Debug for NdbProfile<'_> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let mut ds = f.debug_struct("NdbProfile"); + ds.field("name", &self.name()); + ds.field("website", &self.website()); + ds.field("about", &self.about()); + ds.field("lud16", &self.lud16()); + ds.field("banner", &self.banner()); + ds.field("display_name", &self.display_name()); + ds.field("reactions", &self.reactions()); + ds.field("picture", &self.picture()); + ds.field("nip05", &self.nip05()); + ds.field("damus_donation", &self.damus_donation()); + ds.field("damus_donation_v2", &self.damus_donation_v2()); + ds.field("lud06", &self.lud06()); + ds.finish() + } +} +pub enum NdbProfileRecordOffset {} +#[derive(Copy, Clone, PartialEq)] + +pub struct NdbProfileRecord<'a> { + pub _tab: flatbuffers::Table<'a>, +} + +impl<'a> flatbuffers::Follow<'a> for NdbProfileRecord<'a> { + type Inner = NdbProfileRecord<'a>; + #[inline] + unsafe fn follow(buf: &'a [u8], loc: usize) -> Self::Inner { + Self { _tab: flatbuffers::Table::new(buf, loc) } + } +} + +impl<'a> NdbProfileRecord<'a> { + pub const VT_PROFILE: flatbuffers::VOffsetT = 4; + pub const VT_RECEIVED_AT: flatbuffers::VOffsetT = 6; + pub const VT_NOTE_KEY: flatbuffers::VOffsetT = 8; + pub const VT_LNURL: flatbuffers::VOffsetT = 10; + + #[inline] + pub unsafe fn init_from_table(table: flatbuffers::Table<'a>) -> Self { + NdbProfileRecord { _tab: table } + } + #[allow(unused_mut)] + pub fn create<'bldr: 'args, 'args: 'mut_bldr, 'mut_bldr>( + _fbb: &'mut_bldr mut flatbuffers::FlatBufferBuilder<'bldr>, + args: &'args NdbProfileRecordArgs<'args> + ) -> flatbuffers::WIPOffset> { + let mut builder = NdbProfileRecordBuilder::new(_fbb); + builder.add_note_key(args.note_key); + builder.add_received_at(args.received_at); + if let Some(x) = args.lnurl { builder.add_lnurl(x); } + if let Some(x) = args.profile { builder.add_profile(x); } + builder.finish() + } + + + #[inline] + pub fn profile(&self) -> Option> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfileRecord::VT_PROFILE, None)} + } + #[inline] + pub fn received_at(&self) -> u64 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbProfileRecord::VT_RECEIVED_AT, Some(0)).unwrap()} + } + #[inline] + pub fn note_key(&self) -> u64 { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::(NdbProfileRecord::VT_NOTE_KEY, Some(0)).unwrap()} + } + #[inline] + pub fn lnurl(&self) -> Option<&'a str> { + // Safety: + // Created from valid Table for this object + // which contains a valid value in this slot + unsafe { self._tab.get::>(NdbProfileRecord::VT_LNURL, None)} + } +} + +impl flatbuffers::Verifiable for NdbProfileRecord<'_> { + #[inline] + fn run_verifier( + v: &mut flatbuffers::Verifier, pos: usize + ) -> Result<(), flatbuffers::InvalidFlatbuffer> { + use self::flatbuffers::Verifiable; + v.visit_table(pos)? + .visit_field::>("profile", Self::VT_PROFILE, false)? + .visit_field::("received_at", Self::VT_RECEIVED_AT, false)? + .visit_field::("note_key", Self::VT_NOTE_KEY, false)? + .visit_field::>("lnurl", Self::VT_LNURL, false)? + .finish(); + Ok(()) + } +} +pub struct NdbProfileRecordArgs<'a> { + pub profile: Option>>, + pub received_at: u64, + pub note_key: u64, + pub lnurl: Option>, +} +impl<'a> Default for NdbProfileRecordArgs<'a> { + #[inline] + fn default() -> Self { + NdbProfileRecordArgs { + profile: None, + received_at: 0, + note_key: 0, + lnurl: None, + } + } +} + +pub struct NdbProfileRecordBuilder<'a: 'b, 'b> { + fbb_: &'b mut flatbuffers::FlatBufferBuilder<'a>, + start_: flatbuffers::WIPOffset, +} +impl<'a: 'b, 'b> NdbProfileRecordBuilder<'a, 'b> { + #[inline] + pub fn add_profile(&mut self, profile: flatbuffers::WIPOffset>) { + self.fbb_.push_slot_always::>(NdbProfileRecord::VT_PROFILE, profile); + } + #[inline] + pub fn add_received_at(&mut self, received_at: u64) { + self.fbb_.push_slot::(NdbProfileRecord::VT_RECEIVED_AT, received_at, 0); + } + #[inline] + pub fn add_note_key(&mut self, note_key: u64) { + self.fbb_.push_slot::(NdbProfileRecord::VT_NOTE_KEY, note_key, 0); + } + #[inline] + pub fn add_lnurl(&mut self, lnurl: flatbuffers::WIPOffset<&'b str>) { + self.fbb_.push_slot_always::>(NdbProfileRecord::VT_LNURL, lnurl); + } + #[inline] + pub fn new(_fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>) -> NdbProfileRecordBuilder<'a, 'b> { + let start = _fbb.start_table(); + NdbProfileRecordBuilder { + fbb_: _fbb, + start_: start, + } + } + #[inline] + pub fn finish(self) -> flatbuffers::WIPOffset> { + let o = self.fbb_.end_table(self.start_); + flatbuffers::WIPOffset::new(o.value()) + } +} + +impl core::fmt::Debug for NdbProfileRecord<'_> { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let mut ds = f.debug_struct("NdbProfileRecord"); + ds.field("profile", &self.profile()); + ds.field("received_at", &self.received_at()); + ds.field("note_key", &self.note_key()); + ds.field("lnurl", &self.lnurl()); + ds.finish() + } +} +#[inline] +/// Verifies that a buffer of bytes contains a `NdbProfileRecord` +/// and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_ndb_profile_record_unchecked`. +pub fn root_as_ndb_profile_record(buf: &[u8]) -> Result { + flatbuffers::root::(buf) +} +#[inline] +/// Verifies that a buffer of bytes contains a size prefixed +/// `NdbProfileRecord` and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `size_prefixed_root_as_ndb_profile_record_unchecked`. +pub fn size_prefixed_root_as_ndb_profile_record(buf: &[u8]) -> Result { + flatbuffers::size_prefixed_root::(buf) +} +#[inline] +/// Verifies, with the given options, that a buffer of bytes +/// contains a `NdbProfileRecord` and returns it. +/// Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_ndb_profile_record_unchecked`. +pub fn root_as_ndb_profile_record_with_opts<'b, 'o>( + opts: &'o flatbuffers::VerifierOptions, + buf: &'b [u8], +) -> Result, flatbuffers::InvalidFlatbuffer> { + flatbuffers::root_with_opts::>(opts, buf) +} +#[inline] +/// Verifies, with the given verifier options, that a buffer of +/// bytes contains a size prefixed `NdbProfileRecord` and returns +/// it. Note that verification is still experimental and may not +/// catch every error, or be maximally performant. For the +/// previous, unchecked, behavior use +/// `root_as_ndb_profile_record_unchecked`. +pub fn size_prefixed_root_as_ndb_profile_record_with_opts<'b, 'o>( + opts: &'o flatbuffers::VerifierOptions, + buf: &'b [u8], +) -> Result, flatbuffers::InvalidFlatbuffer> { + flatbuffers::size_prefixed_root_with_opts::>(opts, buf) +} +#[inline] +/// Assumes, without verification, that a buffer of bytes contains a NdbProfileRecord and returns it. +/// # Safety +/// Callers must trust the given bytes do indeed contain a valid `NdbProfileRecord`. +pub unsafe fn root_as_ndb_profile_record_unchecked(buf: &[u8]) -> NdbProfileRecord { + flatbuffers::root_unchecked::(buf) +} +#[inline] +/// Assumes, without verification, that a buffer of bytes contains a size prefixed NdbProfileRecord and returns it. +/// # Safety +/// Callers must trust the given bytes do indeed contain a valid size prefixed `NdbProfileRecord`. +pub unsafe fn size_prefixed_root_as_ndb_profile_record_unchecked(buf: &[u8]) -> NdbProfileRecord { + flatbuffers::size_prefixed_root_unchecked::(buf) +} +#[inline] +pub fn finish_ndb_profile_record_buffer<'a, 'b>( + fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>, + root: flatbuffers::WIPOffset>) { + fbb.finish(root, None); +} + +#[inline] +pub fn finish_size_prefixed_ndb_profile_record_buffer<'a, 'b>(fbb: &'b mut flatbuffers::FlatBufferBuilder<'a>, root: flatbuffers::WIPOffset>) { + fbb.finish_size_prefixed(root, None); +} diff --git a/nostrdb/bindings/swift/NdbProfile.swift b/nostrdb/bindings/swift/NdbProfile.swift index 513dfa428..eaecf8a61 100644 --- a/nostrdb/bindings/swift/NdbProfile.swift +++ b/nostrdb/bindings/swift/NdbProfile.swift @@ -2,7 +2,7 @@ // swiftlint:disable all // swiftformat:disable all - +import FlatBuffers public struct NdbProfile: FlatBufferObject, Verifiable { diff --git a/nostrdb/bolt11/bech32.c b/nostrdb/bolt11/bech32.c new file mode 100644 index 000000000..321ca53b3 --- /dev/null +++ b/nostrdb/bolt11/bech32.c @@ -0,0 +1,217 @@ +/* Stolen from https://github.com/sipa/bech32/blob/master/ref/c/segwit_addr.c, + * with only the two ' > 90' checks hoisted, and more internals exposed */ + +/* Copyright (c) 2017, 2021 Pieter Wuille + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#include "../config.h" +#include +#include "bech32.h" +#include + +static uint32_t bech32_polymod_step(uint32_t pre) { + uint8_t b = pre >> 25; + return ((pre & 0x1FFFFFF) << 5) ^ + (-((b >> 0) & 1) & 0x3b6a57b2UL) ^ + (-((b >> 1) & 1) & 0x26508e6dUL) ^ + (-((b >> 2) & 1) & 0x1ea119faUL) ^ + (-((b >> 3) & 1) & 0x3d4233ddUL) ^ + (-((b >> 4) & 1) & 0x2a1462b3UL); +} + +static uint32_t bech32_final_constant(bech32_encoding enc) { + if (enc == BECH32_ENCODING_BECH32) return 1; + if (enc == BECH32_ENCODING_BECH32M) return 0x2bc830a3; + assert(0); +} + +const char bech32_charset[] = "qpzry9x8gf2tvdw0s3jn54khce6mua7l"; + +const int8_t bech32_charset_rev[128] = { + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 15, -1, 10, 17, 21, 20, 26, 30, 7, 5, -1, -1, -1, -1, -1, -1, + -1, 29, -1, 24, 13, 25, 9, 8, 23, -1, 18, 22, 31, 27, 19, -1, + 1, 0, 3, 16, 11, 28, 12, 14, 6, 4, 2, -1, -1, -1, -1, -1, + -1, 29, -1, 24, 13, 25, 9, 8, 23, -1, 18, 22, 31, 27, 19, -1, + 1, 0, 3, 16, 11, 28, 12, 14, 6, 4, 2, -1, -1, -1, -1, -1 +}; + +int bech32_encode(char *output, const char *hrp, const uint8_t *data, size_t data_len, size_t max_input_len, bech32_encoding enc) { + uint32_t chk = 1; + size_t i = 0; + while (hrp[i] != 0) { + int ch = hrp[i]; + if (ch < 33 || ch > 126) { + return 0; + } + + if (ch >= 'A' && ch <= 'Z') return 0; + chk = bech32_polymod_step(chk) ^ (ch >> 5); + ++i; + } + if (i + 7 + data_len > max_input_len) return 0; + chk = bech32_polymod_step(chk); + while (*hrp != 0) { + chk = bech32_polymod_step(chk) ^ (*hrp & 0x1f); + *(output++) = *(hrp++); + } + *(output++) = '1'; + for (i = 0; i < data_len; ++i) { + if (*data >> 5) return 0; + chk = bech32_polymod_step(chk) ^ (*data); + *(output++) = bech32_charset[*(data++)]; + } + for (i = 0; i < 6; ++i) { + chk = bech32_polymod_step(chk); + } + chk ^= bech32_final_constant(enc); + for (i = 0; i < 6; ++i) { + *(output++) = bech32_charset[(chk >> ((5 - i) * 5)) & 0x1f]; + } + *output = 0; + return 1; +} + +bech32_encoding bech32_decode_len(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t input_len) { + uint32_t chk = 1; + size_t i; + size_t hrp_len; + int have_lower = 0, have_upper = 0; + if (input_len < 8) { + return BECH32_ENCODING_NONE; + } + *data_len = 0; + while (*data_len < input_len && input[(input_len - 1) - *data_len] != '1') { + ++(*data_len); + } + hrp_len = input_len - (1 + *data_len); + if (1 + *data_len >= input_len || *data_len < 6) { + return BECH32_ENCODING_NONE; + } + *(data_len) -= 6; + for (i = 0; i < hrp_len; ++i) { + int ch = input[i]; + if (ch < 33 || ch > 126) { + return BECH32_ENCODING_NONE; + } + if (ch >= 'a' && ch <= 'z') { + have_lower = 1; + } else if (ch >= 'A' && ch <= 'Z') { + have_upper = 1; + ch = (ch - 'A') + 'a'; + } + hrp[i] = ch; + chk = bech32_polymod_step(chk) ^ (ch >> 5); + } + hrp[i] = 0; + chk = bech32_polymod_step(chk); + for (i = 0; i < hrp_len; ++i) { + chk = bech32_polymod_step(chk) ^ (input[i] & 0x1f); + } + ++i; + while (i < input_len) { + int v = (input[i] & 0x80) ? -1 : bech32_charset_rev[(int)input[i]]; + if (input[i] >= 'a' && input[i] <= 'z') have_lower = 1; + if (input[i] >= 'A' && input[i] <= 'Z') have_upper = 1; + if (v == -1) { + return BECH32_ENCODING_NONE; + } + chk = bech32_polymod_step(chk) ^ v; + if (i + 6 < input_len) { + data[i - (1 + hrp_len)] = v; + } + ++i; + } + if (have_lower && have_upper) { + return BECH32_ENCODING_NONE; + } + if (chk == bech32_final_constant(BECH32_ENCODING_BECH32)) { + return BECH32_ENCODING_BECH32; + } else if (chk == bech32_final_constant(BECH32_ENCODING_BECH32M)) { + return BECH32_ENCODING_BECH32M; + } else { + return BECH32_ENCODING_NONE; + } +} + +bech32_encoding bech32_decode(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t max_input_len) { + size_t len = strlen(input); + if (len > max_input_len) { + return BECH32_ENCODING_NONE; + } + return bech32_decode_len(hrp, data, data_len, input, len); +} + +int bech32_convert_bits(uint8_t* out, size_t* outlen, int outbits, const uint8_t* in, size_t inlen, int inbits, int pad) { + uint32_t val = 0; + int bits = 0; + uint32_t maxv = (((uint32_t)1) << outbits) - 1; + while (inlen--) { + val = (val << inbits) | *(in++); + bits += inbits; + while (bits >= outbits) { + bits -= outbits; + out[(*outlen)++] = (val >> bits) & maxv; + } + } + if (pad) { + if (bits) { + out[(*outlen)++] = (val << (outbits - bits)) & maxv; + } + } else if (((val << (outbits - bits)) & maxv) || bits >= inbits) { + return 0; + } + return 1; +} + +int segwit_addr_encode(char *output, const char *hrp, int witver, const uint8_t *witprog, size_t witprog_len) { + uint8_t data[65]; + size_t datalen = 0; + bech32_encoding enc = BECH32_ENCODING_BECH32; + if (witver > 16) return 0; + if (witver == 0 && witprog_len != 20 && witprog_len != 32) return 0; + if (witprog_len < 2 || witprog_len > 40) return 0; + if (witver > 0) enc = BECH32_ENCODING_BECH32M; + data[0] = witver; + bech32_convert_bits(data + 1, &datalen, 5, witprog, witprog_len, 8, 1); + ++datalen; + return bech32_encode(output, hrp, data, datalen, 90, enc); +} + +int segwit_addr_decode(int* witver, uint8_t* witdata, size_t* witdata_len, const char* hrp, const char* addr) { + uint8_t data[84]; + char hrp_actual[84]; + size_t data_len; + bech32_encoding enc = bech32_decode(hrp_actual, data, &data_len, addr, 90); + if (enc == BECH32_ENCODING_NONE) return 0; + if (data_len == 0 || data_len > 65) return 0; + if (strncmp(hrp, hrp_actual, 84) != 0) return 0; + if (data[0] > 16) return 0; + if (data[0] == 0 && enc != BECH32_ENCODING_BECH32) return 0; + if (data[0] > 0 && enc != BECH32_ENCODING_BECH32M) return 0; + *witdata_len = 0; + if (!bech32_convert_bits(witdata, witdata_len, 8, data + 1, data_len - 1, 5, 0)) return 0; + if (*witdata_len < 2 || *witdata_len > 40) return 0; + if (data[0] == 0 && *witdata_len != 20 && *witdata_len != 32) return 0; + *witver = data[0]; + return 1; +} diff --git a/nostrdb/bolt11/bech32.h b/nostrdb/bolt11/bech32.h new file mode 100644 index 000000000..065013161 --- /dev/null +++ b/nostrdb/bolt11/bech32.h @@ -0,0 +1,142 @@ +/* Stolen from https://github.com/sipa/bech32/blob/master/ref/c/segwit_addr.h, + * with only the two ' > 90' checks hoisted */ + +/* Copyright (c) 2017, 2021 Pieter Wuille + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#ifndef LIGHTNING_COMMON_BECH32_H +#define LIGHTNING_COMMON_BECH32_H +#include "../config.h" + +#include +#include + +/** Encode a SegWit address + * + * Out: output: Pointer to a buffer of size 73 + strlen(hrp) that will be + * updated to contain the null-terminated address. + * In: hrp: Pointer to the null-terminated human readable part to use + * (chain/network specific). + * ver: Version of the witness program (between 0 and 16 inclusive). + * prog: Data bytes for the witness program (between 2 and 40 bytes). + * prog_len: Number of data bytes in prog. + * Returns 1 if successful. + */ +int segwit_addr_encode( + char *output, + const char *hrp, + int ver, + const uint8_t *prog, + size_t prog_len +); + +/** Decode a SegWit address + * + * Out: ver: Pointer to an int that will be updated to contain the witness + * program version (between 0 and 16 inclusive). + * prog: Pointer to a buffer of size 40 that will be updated to + * contain the witness program bytes. + * prog_len: Pointer to a size_t that will be updated to contain the length + * of bytes in prog. + * hrp: Pointer to the null-terminated human readable part that is + * expected (chain/network specific). + * addr: Pointer to the null-terminated address. + * Returns 1 if successful. + */ +int segwit_addr_decode( + int* ver, + uint8_t* prog, + size_t* prog_len, + const char* hrp, + const char* addr +); + +/** Supported encodings. */ +typedef enum { + BECH32_ENCODING_NONE, + BECH32_ENCODING_BECH32, + BECH32_ENCODING_BECH32M +} bech32_encoding; + +/** Encode a Bech32 or Bech32m string + * + * Out: output: Pointer to a buffer of size strlen(hrp) + data_len + 8 that + * will be updated to contain the null-terminated Bech32 string. + * In: hrp : Pointer to the null-terminated human readable part. + * data : Pointer to an array of 5-bit values. + * data_len: Length of the data array. + * max_input_len: Maximum valid length of input (90 for segwit usage). + * enc: Which encoding to use (BECH32_ENCODING_BECH32{,M}). + * Returns 1 if successful. + */ +int bech32_encode( + char *output, + const char *hrp, + const uint8_t *data, + size_t data_len, + size_t max_input_len, + bech32_encoding enc +); + +/** Decode a Bech32 or Bech32m string + * + * Out: hrp: Pointer to a buffer of size strlen(input) - 6. Will be + * updated to contain the null-terminated human readable part. + * data: Pointer to a buffer of size strlen(input) - 8 that will + * hold the encoded 5-bit data values. + * data_len: Pointer to a size_t that will be updated to be the number + * of entries in data. + * In: input: Pointer to a null-terminated Bech32 string. + * max_input_len: Maximum valid length of input (90 for segwit usage). + * Returns BECH32_ENCODING_BECH32{,M} to indicate decoding was successful + * with the specified encoding standard. BECH32_ENCODING_NONE is returned if + * decoding failed. + */ +bech32_encoding bech32_decode( + char *hrp, + uint8_t *data, + size_t *data_len, + const char *input, + size_t max_input_len +); + +bech32_encoding bech32_decode_len( + char *hrp, + uint8_t *data, + size_t *data_len, + const char *input, + size_t input_len +); + +/* Helper from bech32: translates inbits-bit bytes to outbits-bit bytes. + * @outlen is incremented as bytes are added. + * @pad is true if we're to pad, otherwise truncate last byte if necessary + */ +int bech32_convert_bits(uint8_t* out, size_t* outlen, int outbits, + const uint8_t* in, size_t inlen, int inbits, + int pad); + +/* The charset, and reverse mapping */ +extern const char bech32_charset[32]; +extern const int8_t bech32_charset_rev[128]; + +#endif /* LIGHTNING_COMMON_BECH32_H */ + diff --git a/nostrdb/config.h b/nostrdb/config.h index ed2f8e5cc..d16dda9bc 100644 --- a/nostrdb/config.h +++ b/nostrdb/config.h @@ -12,7 +12,7 @@ #define HAVE_UNALIGNED_ACCESS 1 #define HAVE_TYPEOF 1 #define HAVE_BIG_ENDIAN 0 -#define HAVE_BYTESWAP_H 0 -#define HAVE_BSWAP_64 0 +#define HAVE_BYTESWAP_H 1 +#define HAVE_BSWAP_64 1 #define HAVE_LITTLE_ENDIAN 1 #endif /* CCAN_CONFIG_H */ diff --git a/nostrdb/configurator.c b/nostrdb/configurator.c new file mode 100644 index 000000000..68d7fc6b3 --- /dev/null +++ b/nostrdb/configurator.c @@ -0,0 +1,1110 @@ +/* Simple tool to create config.h. + * Would be much easier with ccan modules, but deliberately standalone. + * + * Copyright 2011 Rusty Russell . MIT license. + * + * c12r_err, c12r_errx functions copied from ccan/err/err.c + * Copyright Rusty Russell . CC0 (Public domain) License. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ +#define _POSIX_C_SOURCE 200809L /* For pclose, popen, strdup */ + +#define EXIT_BAD_USAGE 1 +#define EXIT_TROUBLE_RUNNING 2 +#define EXIT_BAD_TEST 3 +#define EXIT_BAD_INPUT 4 + +#include +#include +#include +#include +#include +#include +#include + +#ifdef _MSC_VER +#define popen _popen +#define pclose _pclose +#endif + +#ifdef _MSC_VER +#define DEFAULT_COMPILER "cl" +/* Note: Dash options avoid POSIX path conversion when used under msys bash + * and are therefore preferred to slash (e.g. -nologo over /nologo) + * Note: Disable Warning 4200 "nonstandard extension used : zero-sized array + * in struct/union" for flexible array members. + */ +#define DEFAULT_FLAGS "-nologo -Zi -W4 -wd4200 " \ + "-D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS" +#define DEFAULT_OUTPUT_EXE_FLAG "-Fe:" +#else +#define DEFAULT_COMPILER "cc" +#define DEFAULT_FLAGS "-g3 -ggdb -Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition" +#define DEFAULT_OUTPUT_EXE_FLAG "-o" +#endif + +#define OUTPUT_FILE "configurator.out" +#define INPUT_FILE "configuratortest.c" + +#ifdef _WIN32 +#define DIR_SEP "\\" +#else +#define DIR_SEP "/" +#endif + +static const char *progname = ""; +static int verbose; +static bool like_a_libtool = false; + +struct test { + const char *name; + const char *desc; + /* + * Template style flags (pick one): + * OUTSIDE_MAIN: + * - put a simple boilerplate main below it. + * DEFINES_FUNC: + * - defines a static function called func; adds ref to avoid warnings + * INSIDE_MAIN: + * - put this inside main(). + * DEFINES_EVERYTHING: + * - don't add any boilerplate at all. + * + * Execution flags: + * EXECUTE: + * - a runtime test; must compile, exit 0 means flag is set. + * MAY_NOT_COMPILE: + * - Only useful with EXECUTE: don't get upset if it doesn't compile. + * : + * - a compile test, if it compiles must run and exit 0. + */ + const char *style; + const char *depends; + const char *link; + const char *fragment; + const char *flags; + const char *overrides; /* On success, force this to '1' */ + bool done; + bool answer; +}; + +/* Terminated by a NULL name */ +static struct test *tests; + +static const struct test base_tests[] = { + { "HAVE_UNALIGNED_ACCESS", "unaligned access to int", + "DEFINES_EVERYTHING|EXECUTE", NULL, NULL, + "#include \n" + "int main(int argc, char *argv[]) {\n" + " (void)argc;\n" + " char pad[sizeof(int *) * 1];\n" + " memcpy(pad, argv[0], sizeof(pad));\n" + " int *x = (int *)pad, *y = (int *)(pad + 1);\n" + " return *x == *y;\n" + "}\n" }, + { "HAVE_TYPEOF", "__typeof__ support", + "INSIDE_MAIN", NULL, NULL, + "__typeof__(argc) i; i = argc; return i == argc ? 0 : 1;" }, + { "HAVE_BIG_ENDIAN", "big endian", + "INSIDE_MAIN|EXECUTE", NULL, NULL, + "union { int i; char c[sizeof(int)]; } u;\n" + "u.i = 0x01020304;\n" + "return u.c[0] == 0x01 && u.c[1] == 0x02 && u.c[2] == 0x03 && u.c[3] == 0x04 ? 0 : 1;" }, + { "HAVE_BYTESWAP_H", "", + "OUTSIDE_MAIN", NULL, NULL, + "#include \n" }, + { "HAVE_BSWAP_64", "bswap64 in byteswap.h", + "DEFINES_FUNC", "HAVE_BYTESWAP_H", NULL, + "#include \n" + "static int func(int x) { return bswap_64(x); }" }, + { "HAVE_LITTLE_ENDIAN", "little endian", + "INSIDE_MAIN|EXECUTE", NULL, NULL, + "union { int i; char c[sizeof(int)]; } u;\n" + "u.i = 0x01020304;\n" + "return u.c[0] == 0x04 && u.c[1] == 0x03 && u.c[2] == 0x02 && u.c[3] == 0x01 ? 0 : 1;" }, + /* + { "HAVE_32BIT_OFF_T", "off_t is 32 bits", + "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, + "#include \n" + "int main(void) {\n" + " return sizeof(off_t) == 4 ? 0 : 1;\n" + "}\n" }, + { "HAVE_ALIGNOF", "__alignof__ support", + "INSIDE_MAIN", NULL, NULL, + "return __alignof__(double) > 0 ? 0 : 1;" }, + { "HAVE_ASPRINTF", "asprintf() declaration", + "DEFINES_FUNC", NULL, NULL, + "#ifndef _GNU_SOURCE\n" + "#define _GNU_SOURCE\n" + "#endif\n" + "#include \n" + "static char *func(int x) {" + " char *p;\n" + " if (asprintf(&p, \"%u\", x) == -1) \n" + " p = NULL;\n" + " return p;\n" + "}" }, + { "HAVE_ATTRIBUTE_COLD", "__attribute__((cold)) support", + "DEFINES_FUNC", NULL, NULL, + "static int __attribute__((cold)) func(int x) { return x; }" }, + { "HAVE_ATTRIBUTE_CONST", "__attribute__((const)) support", + "DEFINES_FUNC", NULL, NULL, + "static int __attribute__((const)) func(int x) { return x; }" }, + { "HAVE_ATTRIBUTE_DEPRECATED", "__attribute__((deprecated)) support", + "DEFINES_FUNC", NULL, NULL, + "static int __attribute__((deprecated)) func(int x) { return x; }" }, + { "HAVE_ATTRIBUTE_NONNULL", "__attribute__((nonnull)) support", + "DEFINES_FUNC", NULL, NULL, + "static char *__attribute__((nonnull)) func(char *p) { return p; }" }, + { "HAVE_ATTRIBUTE_RETURNS_NONNULL", "__attribute__((returns_nonnull)) support", + "DEFINES_FUNC", NULL, NULL, + "static const char *__attribute__((returns_nonnull)) func(void) { return \"hi\"; }" }, + { "HAVE_ATTRIBUTE_SENTINEL", "__attribute__((sentinel)) support", + "DEFINES_FUNC", NULL, NULL, + "static int __attribute__((sentinel)) func(int i, ...) { return i; }" }, + { "HAVE_ATTRIBUTE_PURE", "__attribute__((pure)) support", + "DEFINES_FUNC", NULL, NULL, + "static int __attribute__((pure)) func(int x) { return x; }" }, + { "HAVE_ATTRIBUTE_MAY_ALIAS", "__attribute__((may_alias)) support", + "OUTSIDE_MAIN", NULL, NULL, + "typedef short __attribute__((__may_alias__)) short_a;" }, + { "HAVE_ATTRIBUTE_NORETURN", "__attribute__((noreturn)) support", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "static void __attribute__((noreturn)) func(int x) { exit(x); }" }, + { "HAVE_ATTRIBUTE_PRINTF", "__attribute__ format printf support", + "DEFINES_FUNC", NULL, NULL, + "static void __attribute__((format(__printf__, 1, 2))) func(const char *fmt, ...) { (void)fmt; }" }, + { "HAVE_ATTRIBUTE_UNUSED", "__attribute__((unused)) support", + "OUTSIDE_MAIN", NULL, NULL, + "static int __attribute__((unused)) func(int x) { return x; }" }, + { "HAVE_ATTRIBUTE_USED", "__attribute__((used)) support", + "OUTSIDE_MAIN", NULL, NULL, + "static int __attribute__((used)) func(int x) { return x; }" }, + { "HAVE_BACKTRACE", "backtrace() in ", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "static int func(int x) {" + " void *bt[10];\n" + " return backtrace(bt, 10) < x;\n" + "}" }, + { "HAVE_BUILTIN_CHOOSE_EXPR", "__builtin_choose_expr support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_choose_expr(1, 0, \"garbage\");" }, + { "HAVE_BUILTIN_CLZ", "__builtin_clz support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_clz(1) == (sizeof(int)*8 - 1) ? 0 : 1;" }, + { "HAVE_BUILTIN_CLZL", "__builtin_clzl support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_clzl(1) == (sizeof(long)*8 - 1) ? 0 : 1;" }, + { "HAVE_BUILTIN_CLZLL", "__builtin_clzll support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_clzll(1) == (sizeof(long long)*8 - 1) ? 0 : 1;" }, + { "HAVE_BUILTIN_CTZ", "__builtin_ctz support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_ctz(1 << (sizeof(int)*8 - 1)) == (sizeof(int)*8 - 1) ? 0 : 1;" }, + { "HAVE_BUILTIN_CTZL", "__builtin_ctzl support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_ctzl(1UL << (sizeof(long)*8 - 1)) == (sizeof(long)*8 - 1) ? 0 : 1;" }, + { "HAVE_BUILTIN_CTZLL", "__builtin_ctzll support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_ctzll(1ULL << (sizeof(long long)*8 - 1)) == (sizeof(long long)*8 - 1) ? 0 : 1;" }, + { "HAVE_BUILTIN_CONSTANT_P", "__builtin_constant_p support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_constant_p(1) ? 0 : 1;" }, + { "HAVE_BUILTIN_EXPECT", "__builtin_expect support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_expect(argc == 1, 1) ? 0 : 1;" }, + { "HAVE_BUILTIN_FFS", "__builtin_ffs support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_ffs(0) == 0 ? 0 : 1;" }, + { "HAVE_BUILTIN_FFSL", "__builtin_ffsl support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_ffsl(0L) == 0 ? 0 : 1;" }, + { "HAVE_BUILTIN_FFSLL", "__builtin_ffsll support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_ffsll(0LL) == 0 ? 0 : 1;" }, + { "HAVE_BUILTIN_POPCOUNT", "__builtin_popcount support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_popcount(255) == 8 ? 0 : 1;" }, + { "HAVE_BUILTIN_POPCOUNTL", "__builtin_popcountl support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_popcountl(255L) == 8 ? 0 : 1;" }, + { "HAVE_BUILTIN_POPCOUNTLL", "__builtin_popcountll support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_popcountll(255LL) == 8 ? 0 : 1;" }, + { "HAVE_BUILTIN_TYPES_COMPATIBLE_P", "__builtin_types_compatible_p support", + "INSIDE_MAIN", NULL, NULL, + "return __builtin_types_compatible_p(char *, int) ? 1 : 0;" }, + { "HAVE_ICCARM_INTRINSICS", "", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "int func(int v) {\n" + " return __CLZ(__RBIT(v));\n" + "}" }, + { "HAVE_CLOCK_GETTIME", "clock_gettime() declaration", + "DEFINES_FUNC", "HAVE_STRUCT_TIMESPEC", NULL, + "#include \n" + "static struct timespec func(void) {\n" + " struct timespec ts;\n" + " clock_gettime(CLOCK_REALTIME, &ts);\n" + " return ts;\n" + "}\n" }, + { "HAVE_CLOCK_GETTIME_IN_LIBRT", "clock_gettime() in librt", + "DEFINES_FUNC", + "HAVE_STRUCT_TIMESPEC !HAVE_CLOCK_GETTIME", + "-lrt", + "#include \n" + "static struct timespec func(void) {\n" + " struct timespec ts;\n" + " clock_gettime(CLOCK_REALTIME, &ts);\n" + " return ts;\n" + "}\n", + "HAVE_CLOCK_GETTIME" }, + { "HAVE_COMPOUND_LITERALS", "compound literal support", + "INSIDE_MAIN", NULL, NULL, + "int *foo = (int[]) { 1, 2, 3, 4 };\n" + "return foo[0] ? 0 : 1;" }, + { "HAVE_FCHDIR", "fchdir support", + "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, + "#include \n" + "#include \n" + "#include \n" + "#include \n" + "int main(void) {\n" + " int fd = open(\"..\", O_RDONLY);\n" + " return fchdir(fd) == 0 ? 0 : 1;\n" + "}\n" }, + { "HAVE_ERR_H", "", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "static void func(int arg) {\n" + " if (arg == 0)\n" + " err(1, \"err %u\", arg);\n" + " if (arg == 1)\n" + " errx(1, \"err %u\", arg);\n" + " if (arg == 3)\n" + " warn(\"warn %u\", arg);\n" + " if (arg == 4)\n" + " warnx(\"warn %u\", arg);\n" + "}\n" }, + { "HAVE_FILE_OFFSET_BITS", "_FILE_OFFSET_BITS to get 64-bit offsets", + "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", + "HAVE_32BIT_OFF_T", NULL, + "#define _FILE_OFFSET_BITS 64\n" + "#include \n" + "int main(void) {\n" + " return sizeof(off_t) == 8 ? 0 : 1;\n" + "}\n" }, + { "HAVE_FOR_LOOP_DECLARATION", "for loop declaration support", + "INSIDE_MAIN", NULL, NULL, + "int ret = 1;\n" + "for (int i = 0; i < argc; i++) { ret = 0; };\n" + "return ret;" }, + { "HAVE_FLEXIBLE_ARRAY_MEMBER", "flexible array member support", + "OUTSIDE_MAIN", NULL, NULL, + "struct foo { unsigned int x; int arr[]; };" }, + { "HAVE_GETPAGESIZE", "getpagesize() in ", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "static int func(void) { return getpagesize(); }" }, + { "HAVE_ISBLANK", "isblank() in ", + "DEFINES_FUNC", NULL, NULL, + "#ifndef _GNU_SOURCE\n" + "#define _GNU_SOURCE\n" + "#endif\n" + "#include \n" + "static int func(void) { return isblank(' '); }" }, + { "HAVE_MEMMEM", "memmem in ", + "DEFINES_FUNC", NULL, NULL, + "#ifndef _GNU_SOURCE\n" + "#define _GNU_SOURCE\n" + "#endif\n" + "#include \n" + "static void *func(void *h, size_t hl, void *n, size_t nl) {\n" + "return memmem(h, hl, n, nl);" + "}\n", }, + { "HAVE_MEMRCHR", "memrchr in ", + "DEFINES_FUNC", NULL, NULL, + "#ifndef _GNU_SOURCE\n" + "#define _GNU_SOURCE\n" + "#endif\n" + "#include \n" + "static void *func(void *s, int c, size_t n) {\n" + "return memrchr(s, c, n);" + "}\n", }, + { "HAVE_MMAP", "mmap() declaration", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "static void *func(int fd) {\n" + " return mmap(0, 65536, PROT_READ, MAP_SHARED, fd, 0);\n" + "}" }, + { "HAVE_PROC_SELF_MAPS", "/proc/self/maps exists", + "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, + "#include \n" + "#include \n" + "#include \n" + "int main(void) {\n" + " return open(\"/proc/self/maps\", O_RDONLY) != -1 ? 0 : 1;\n" + "}\n" }, + { "HAVE_QSORT_R_PRIVATE_LAST", "qsort_r cmp takes trailing arg", + "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, + "#ifndef _GNU_SOURCE\n" + "#define _GNU_SOURCE\n" + "#endif\n" + "#include \n" + "static int cmp(const void *lp, const void *rp, void *priv) {\n" + " *(unsigned int *)priv = 1;\n" + " return *(const int *)lp - *(const int *)rp; }\n" + "int main(void) {\n" + " int array[] = { 9, 2, 5 };\n" + " unsigned int called = 0;\n" + " qsort_r(array, 3, sizeof(int), cmp, &called);\n" + " return called && array[0] == 2 && array[1] == 5 && array[2] == 9 ? 0 : 1;\n" + "}\n" }, + { "HAVE_STRUCT_TIMESPEC", "struct timespec declaration", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "static void func(void) {\n" + " struct timespec ts;\n" + " ts.tv_sec = ts.tv_nsec = 1;\n" + "}\n" }, + { "HAVE_SECTION_START_STOP", "__attribute__((section)) and __start/__stop", + "DEFINES_FUNC", NULL, NULL, + "static void *__attribute__((__section__(\"mysec\"))) p = &p;\n" + "static int func(void) {\n" + " extern void *__start_mysec[], *__stop_mysec[];\n" + " return __stop_mysec - __start_mysec;\n" + "}\n" }, + { "HAVE_STACK_GROWS_UPWARDS", "stack grows upwards", + "DEFINES_EVERYTHING|EXECUTE", NULL, NULL, + "#include \n" + "static ptrdiff_t nest(const void *base, unsigned int i)\n" + "{\n" + " if (i == 0)\n" + " return (const char *)&i - (const char *)base;\n" + " return nest(base, i-1);\n" + "}\n" + "int main(int argc, char *argv[]) {\n" + " (void)argv;\n" + " return (nest(&argc, argc) > 0) ? 0 : 1;\n" + "}\n" }, + { "HAVE_STATEMENT_EXPR", "statement expression support", + "INSIDE_MAIN", NULL, NULL, + "return ({ int x = argc; x == argc ? 0 : 1; });" }, + { "HAVE_SYS_FILIO_H", "", + "OUTSIDE_MAIN", NULL, NULL, + "#include \n" }, + { "HAVE_SYS_TERMIOS_H", "", + "OUTSIDE_MAIN", NULL, NULL, + "#include \n" }, + { "HAVE_SYS_UNISTD_H", "", + "OUTSIDE_MAIN", NULL, NULL, + "#include \n" }, + { "HAVE_UTIME", "utime() declaration", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "#include \n" + "static int func(const char *filename) {\n" + " struct utimbuf times = { 0 };\n" + " return utime(filename, ×);\n" + "}" }, + { "HAVE_WARN_UNUSED_RESULT", "__attribute__((warn_unused_result))", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "#include \n" + "static __attribute__((warn_unused_result)) int func(int i) {\n" + " return i + 1;\n" + "}" }, + { "HAVE_OPENMP", "#pragma omp and -fopenmp support", + "INSIDE_MAIN|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, + "int i;\n" + "#pragma omp parallel for\n" + "for(i = 0; i < 0; i++) {};\n" + "return 0;\n", + "-Werror -fopenmp" }, + { "HAVE_VALGRIND_MEMCHECK_H", "", + "OUTSIDE_MAIN", NULL, NULL, + "#include \n" }, + { "HAVE_UCONTEXT", "working \n" + "static int x = 0;\n" + "static char stack[2048];\n" + "static ucontext_t a, b;\n" + "static void fn(void) {\n" + " x |= 2;\n" + " setcontext(&b);\n" + " x |= 4;\n" + "}\n" + "int main(void) {\n" + " x |= 1;\n" + " getcontext(&a);\n" + " a.uc_stack.ss_sp = stack;\n" + " a.uc_stack.ss_size = sizeof(stack);\n" + " makecontext(&a, fn, 0);\n" + " swapcontext(&b, &a);\n" + " return (x == 3) ? 0 : 1;\n" + "}\n" + }, + { "HAVE_POINTER_SAFE_MAKECONTEXT", "passing pointers via makecontext()", + "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", + "HAVE_UCONTEXT", NULL, + "#include \n" + "#include \n" + "static int worked = 0;\n" + "static char stack[1024];\n" + "static ucontext_t a, b;\n" + "static void fn(void *p, void *q) {\n" + " void *cp = &worked;\n" + " void *cq = (void *)(~((ptrdiff_t)cp));\n" + " if ((p == cp) && (q == cq))\n" + " worked = 1;\n" + " setcontext(&b);\n" + "}\n" + "int main(void) {\n" + " void *ap = &worked;\n" + " void *aq = (void *)(~((ptrdiff_t)ap));\n" + " getcontext(&a);\n" + " a.uc_stack.ss_sp = stack;\n" + " a.uc_stack.ss_size = sizeof(stack);\n" + " makecontext(&a, (void (*)(void))fn, 2, ap, aq);\n" + " swapcontext(&b, &a);\n" + " return worked ? 0 : 1;\n" + "}\n" + }, + { "HAVE_BUILTIN_CPU_SUPPORTS", "__builtin_cpu_supports()", + "DEFINES_FUNC", NULL, NULL, + "#include \n" + "static bool func(void) {\n" + " return __builtin_cpu_supports(\"mmx\");\n" + "}" + }, + { "HAVE_CLOSEFROM", "closefrom() offered by system", + "DEFINES_EVERYTHING", NULL, NULL, + "#include \n" + "#include \n" + "int main(void) {\n" + " closefrom(STDERR_FILENO + 1);\n" + " return 0;\n" + "}\n" + }, + { "HAVE_F_CLOSEM", "F_CLOSEM defined for fctnl.", + "DEFINES_EVERYTHING", NULL, NULL, + "#include \n" + "#include \n" + "int main(void) {\n" + " int res = fcntl(STDERR_FILENO + 1, F_CLOSEM, 0);\n" + " return res < 0;\n" + "}\n" + }, + { "HAVE_NR_CLOSE_RANGE", "close_range syscall available as __NR_close_range.", + "DEFINES_EVERYTHING", NULL, NULL, + "#include \n" + "#include \n" + "#include \n" + "int main(void) {\n" + " int res = syscall(__NR_close_range, STDERR_FILENO + 1, INT_MAX, 0);\n" + " return res < 0;\n" + "}\n" + }, + { "HAVE_F_MAXFD", "F_MAXFD defined for fcntl.", + "DEFINES_EVERYTHING", NULL, NULL, + "#include \n" + "#include \n" + "int main(void) {\n" + " int res = fcntl(0, F_MAXFD);\n" + " return res < 0;\n" + "}\n" + }, + */ +}; + +static void c12r_err(int eval, const char *fmt, ...) +{ + int err_errno = errno; + va_list ap; + + fprintf(stderr, "%s: ", progname); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fprintf(stderr, ": %s\n", strerror(err_errno)); + exit(eval); +} + +static void c12r_errx(int eval, const char *fmt, ...) +{ + va_list ap; + + fprintf(stderr, "%s: ", progname); + va_start(ap, fmt); + vfprintf(stderr, fmt, ap); + va_end(ap); + fprintf(stderr, "\n"); + exit(eval); +} + +static void start_test(const char *what, const char *why) +{ + if (like_a_libtool) { + printf("%s%s... ", what, why); + fflush(stdout); + } +} + +static void end_test(bool result) +{ + if (like_a_libtool) + printf("%s\n", result ? "yes" : "no"); +} + +static size_t fcopy(FILE *fsrc, FILE *fdst) +{ + char buffer[BUFSIZ]; + size_t rsize, wsize; + size_t copied = 0; + + while ((rsize = fread(buffer, 1, BUFSIZ, fsrc)) > 0) { + wsize = fwrite(buffer, 1, rsize, fdst); + copied += wsize; + if (wsize != rsize) + break; + } + + return copied; +} + +static char *grab_stream(FILE *file) +{ + size_t max, ret, size = 0; + char *buffer; + + max = BUFSIZ; + buffer = malloc(max); + while ((ret = fread(buffer+size, 1, max - size, file)) == max - size) { + size += ret; + buffer = realloc(buffer, max *= 2); + } + size += ret; + if (ferror(file)) + c12r_err(EXIT_TROUBLE_RUNNING, "reading from command"); + buffer[size] = '\0'; + return buffer; +} + +static char *run(const char *cmd, int *exitstatus) +{ + static const char redir[] = " 2>&1"; + size_t cmdlen; + char *cmdredir; + FILE *cmdout; + char *ret; + + cmdlen = strlen(cmd); + cmdredir = malloc(cmdlen + sizeof(redir)); + memcpy(cmdredir, cmd, cmdlen); + memcpy(cmdredir + cmdlen, redir, sizeof(redir)); + + cmdout = popen(cmdredir, "r"); + if (!cmdout) + c12r_err(EXIT_TROUBLE_RUNNING, "popen \"%s\"", cmdredir); + + free(cmdredir); + + ret = grab_stream(cmdout); + *exitstatus = pclose(cmdout); + return ret; +} + +static char *connect_args(const char *argv[], const char *outflag, + const char *files) +{ + unsigned int i; + char *ret; + size_t len = strlen(outflag) + strlen(files) + 1; + + for (i = 1; argv[i]; i++) + len += 1 + strlen(argv[i]); + + ret = malloc(len); + len = 0; + for (i = 1; argv[i]; i++) { + strcpy(ret + len, argv[i]); + len += strlen(argv[i]); + if (argv[i+1] || *outflag) + ret[len++] = ' '; + } + strcpy(ret + len, outflag); + len += strlen(outflag); + strcpy(ret + len, files); + return ret; +} + +static struct test *find_test(const char *name) +{ + unsigned int i; + + for (i = 0; tests[i].name; i++) { + if (strcmp(tests[i].name, name) == 0) + return &tests[i]; + } + c12r_errx(EXIT_BAD_TEST, "Unknown test %s", name); + abort(); +} + +#define PRE_BOILERPLATE "/* Test program generated by configurator. */\n" +#define MAIN_START_BOILERPLATE \ + "int main(int argc, char *argv[]) {\n" \ + " (void)argc;\n" \ + " (void)argv;\n" +#define USE_FUNC_BOILERPLATE "(void)func;\n" +#define MAIN_BODY_BOILERPLATE "return 0;\n" +#define MAIN_END_BOILERPLATE "}\n" + +static bool run_test(const char *cmd, const char *wrapper, struct test *test) +{ + char *output, *newcmd; + FILE *outf; + int status; + + if (test->done) + return test->answer; + + if (test->depends) { + size_t len; + const char *deps = test->depends; + char *dep; + + /* Space-separated dependencies, could be ! for inverse. */ + while ((len = strcspn(deps, " ")) != 0) { + bool positive = true; + if (deps[len]) { + dep = strdup(deps); + dep[len] = '\0'; + } else { + dep = (char *)deps; + } + + if (dep[0] == '!') { + dep++; + positive = false; + } + if (run_test(cmd, wrapper, find_test(dep)) != positive) { + test->answer = false; + test->done = true; + return test->answer; + } + if (deps[len]) + free(dep); + + deps += len; + deps += strspn(deps, " "); + } + } + + outf = fopen(INPUT_FILE, verbose > 1 ? "w+" : "w"); + if (!outf) + c12r_err(EXIT_TROUBLE_RUNNING, "creating %s", INPUT_FILE); + + fprintf(outf, "%s", PRE_BOILERPLATE); + + if (strstr(test->style, "INSIDE_MAIN")) { + fprintf(outf, "%s", MAIN_START_BOILERPLATE); + fprintf(outf, "%s", test->fragment); + fprintf(outf, "%s", MAIN_END_BOILERPLATE); + } else if (strstr(test->style, "OUTSIDE_MAIN")) { + fprintf(outf, "%s", test->fragment); + fprintf(outf, "%s", MAIN_START_BOILERPLATE); + fprintf(outf, "%s", MAIN_BODY_BOILERPLATE); + fprintf(outf, "%s", MAIN_END_BOILERPLATE); + } else if (strstr(test->style, "DEFINES_FUNC")) { + fprintf(outf, "%s", test->fragment); + fprintf(outf, "%s", MAIN_START_BOILERPLATE); + fprintf(outf, "%s", USE_FUNC_BOILERPLATE); + fprintf(outf, "%s", MAIN_BODY_BOILERPLATE); + fprintf(outf, "%s", MAIN_END_BOILERPLATE); + } else if (strstr(test->style, "DEFINES_EVERYTHING")) { + fprintf(outf, "%s", test->fragment); + } else + c12r_errx(EXIT_BAD_TEST, "Unknown style for test %s: %s", + test->name, test->style); + + if (verbose > 1) { + fseek(outf, 0, SEEK_SET); + fcopy(outf, stdout); + } + + fclose(outf); + + newcmd = strdup(cmd); + + if (test->flags) { + newcmd = realloc(newcmd, strlen(newcmd) + strlen(" ") + + strlen(test->flags) + 1); + strcat(newcmd, " "); + strcat(newcmd, test->flags); + if (verbose > 1) + printf("Extra flags line: %s", newcmd); + } + + if (test->link) { + newcmd = realloc(newcmd, strlen(newcmd) + strlen(" ") + + strlen(test->link) + 1); + strcat(newcmd, " "); + strcat(newcmd, test->link); + if (verbose > 1) + printf("Extra link line: %s", newcmd); + } + + start_test("checking for ", test->desc); + output = run(newcmd, &status); + + free(newcmd); + + if (status != 0 || strstr(output, "warning")) { + if (verbose) + printf("Compile %s for %s, status %i: %s\n", + status ? "fail" : "warning", + test->name, status, output); + if (strstr(test->style, "EXECUTE") + && !strstr(test->style, "MAY_NOT_COMPILE")) + c12r_errx(EXIT_BAD_TEST, + "Test for %s did not compile:\n%s", + test->name, output); + test->answer = false; + free(output); + } else { + /* Compile succeeded. */ + free(output); + /* We run INSIDE_MAIN tests for sanity checking. */ + if (strstr(test->style, "EXECUTE") + || strstr(test->style, "INSIDE_MAIN")) { + char *cmd = malloc(strlen(wrapper) + strlen(" ." DIR_SEP OUTPUT_FILE) + 1); + + strcpy(cmd, wrapper); + strcat(cmd, " ." DIR_SEP OUTPUT_FILE); + output = run(cmd, &status); + free(cmd); + if (!strstr(test->style, "EXECUTE") && status != 0) + c12r_errx(EXIT_BAD_TEST, + "Test for %s failed with %i:\n%s", + test->name, status, output); + if (verbose && status) + printf("%s exited %i\n", test->name, status); + free(output); + } + test->answer = (status == 0); + } + test->done = true; + end_test(test->answer); + + if (test->answer && test->overrides) { + struct test *override = find_test(test->overrides); + override->done = true; + override->answer = true; + } + return test->answer; +} + +static char *any_field(char **fieldname) +{ + char buf[1000]; + for (;;) { + char *p, *eq; + + if (!fgets(buf, sizeof(buf), stdin)) + return NULL; + + p = buf; + /* Ignore whitespace, lines starting with # */ + while (*p == ' ' || *p == '\t') + p++; + if (*p == '#' || *p == '\n') + continue; + + eq = strchr(p, '='); + if (!eq) + c12r_errx(EXIT_BAD_INPUT, "no = in line: %s", p); + *eq = '\0'; + *fieldname = strdup(p); + p = eq + 1; + if (strlen(p) && p[strlen(p)-1] == '\n') + p[strlen(p)-1] = '\0'; + return strdup(p); + } +} + +static char *read_field(const char *name, bool compulsory) +{ + char *fieldname, *value; + + value = any_field(&fieldname); + if (!value) { + if (!compulsory) + return NULL; + c12r_errx(EXIT_BAD_INPUT, "Could not read field %s", name); + } + if (strcmp(fieldname, name) != 0) + c12r_errx(EXIT_BAD_INPUT, + "Expected field %s not %s", name, fieldname); + return value; +} + +/* Test descriptions from stdin: + * Lines starting with # or whitespace-only are ignored. + * + * First three non-ignored lines must be: + * var= + * desc= + * style=OUTSIDE_MAIN DEFINES_FUNC INSIDE_MAIN DEFINES_EVERYTHING EXECUTE MAY_NOT_COMPILE + * + * Followed by optional lines: + * depends= + * link= + * flags= + * overrides= + * + * Finally a code line, either: + * code= OR + * code= + * + * + * + * And looks like this next comment: */ +/*END*/ +static bool read_test(struct test *test) +{ + char *field, *value; + char buf[1000]; + + memset(test, 0, sizeof(*test)); + test->name = read_field("var", false); + if (!test->name) + return false; + test->desc = read_field("desc", true); + test->style = read_field("style", true); + /* Read any optional fields. */ + while ((value = any_field(&field)) != NULL) { + if (strcmp(field, "depends") == 0) + test->depends = value; + else if (strcmp(field, "link") == 0) + test->link = value; + else if (strcmp(field, "flags") == 0) + test->flags = value; + else if (strcmp(field, "overrides") == 0) + test->overrides = value; + else if (strcmp(field, "code") == 0) + break; + else + c12r_errx(EXIT_BAD_INPUT, "Unknown field %s in %s", + field, test->name); + } + if (!value) + c12r_errx(EXIT_BAD_INPUT, "Missing code in %s", test->name); + + if (strlen(value) == 0) { + /* Multiline program, read to END comment */ + while (fgets(buf, sizeof(buf), stdin) != 0) { + size_t n; + if (strncmp(buf, "/*END*/", 7) == 0) + break; + n = strlen(value); + value = realloc(value, n + strlen(buf) + 1); + strcpy(value + n, buf); + n += strlen(buf); + } + } + test->fragment = value; + return true; +} + +static void read_tests(size_t num_tests) +{ + while (read_test(tests + num_tests)) { + num_tests++; + tests = realloc(tests, (num_tests + 1) * sizeof(tests[0])); + tests[num_tests].name = NULL; + } +} + +int main(int argc, const char *argv[]) +{ + char *cmd; + unsigned int i; + const char *default_args[] + = { "", DEFAULT_COMPILER, DEFAULT_FLAGS, NULL }; + const char *outflag = DEFAULT_OUTPUT_EXE_FLAG; + const char *configurator_cc = NULL; + const char *wrapper = ""; + const char *orig_cc; + const char *varfile = NULL; + const char *headerfile = NULL; + bool extra_tests = false; + FILE *outf; + + if (argc > 0) + progname = argv[0]; + + while (argc > 1) { + if (strcmp(argv[1], "--help") == 0) { + printf("Usage: configurator [-v] [--var-file=] [-O] [--configurator-cc=] [--wrapper=] [--autotools-style] [--extra-tests] [ ...]\n" + " will have \" \" appended\n" + "Default: %s %s %s\n", + DEFAULT_COMPILER, DEFAULT_FLAGS, + DEFAULT_OUTPUT_EXE_FLAG); + exit(0); + } + if (strncmp(argv[1], "-O", 2) == 0) { + argc--; + argv++; + outflag = argv[1] + 2; + if (!*outflag) { + fprintf(stderr, + "%s: option requires an argument -- O\n", + argv[0]); + exit(EXIT_BAD_USAGE); + } + } else if (strcmp(argv[1], "-v") == 0) { + argc--; + argv++; + verbose++; + } else if (strcmp(argv[1], "-vv") == 0) { + argc--; + argv++; + verbose += 2; + } else if (strncmp(argv[1], "--configurator-cc=", 18) == 0) { + configurator_cc = argv[1] + 18; + argc--; + argv++; + } else if (strncmp(argv[1], "--wrapper=", 10) == 0) { + wrapper = argv[1] + 10; + argc--; + argv++; + } else if (strncmp(argv[1], "--var-file=", 11) == 0) { + varfile = argv[1] + 11; + argc--; + argv++; + } else if (strcmp(argv[1], "--autotools-style") == 0) { + like_a_libtool = true; + argc--; + argv++; + } else if (strncmp(argv[1], "--header-file=", 14) == 0) { + headerfile = argv[1] + 14; + argc--; + argv++; + } else if (strcmp(argv[1], "--extra-tests") == 0) { + extra_tests = true; + argc--; + argv++; + } else if (strcmp(argv[1], "--") == 0) { + break; + } else if (argv[1][0] == '-') { + c12r_errx(EXIT_BAD_USAGE, "Unknown option %s", argv[1]); + } else { + break; + } + } + + if (argc == 1) + argv = default_args; + + /* Copy with NULL entry at end */ + tests = calloc(sizeof(base_tests)/sizeof(base_tests[0]) + 1, + sizeof(base_tests[0])); + memcpy(tests, base_tests, sizeof(base_tests)); + + if (extra_tests) + read_tests(sizeof(base_tests)/sizeof(base_tests[0])); + + orig_cc = argv[1]; + if (configurator_cc) + argv[1] = configurator_cc; + + cmd = connect_args(argv, outflag, OUTPUT_FILE " " INPUT_FILE); + if (like_a_libtool) { + start_test("Making autoconf users comfortable", ""); + sleep(1); + end_test(1); + } + for (i = 0; tests[i].name; i++) + run_test(cmd, wrapper, &tests[i]); + free(cmd); + + remove(OUTPUT_FILE); + remove(INPUT_FILE); + + if (varfile) { + FILE *vars; + + if (strcmp(varfile, "-") == 0) + vars = stdout; + else { + start_test("Writing variables to ", varfile); + vars = fopen(varfile, "a"); + if (!vars) + c12r_err(EXIT_TROUBLE_RUNNING, + "Could not open %s", varfile); + } + for (i = 0; tests[i].name; i++) + fprintf(vars, "%s=%u\n", tests[i].name, tests[i].answer); + if (vars != stdout) { + if (fclose(vars) != 0) + c12r_err(EXIT_TROUBLE_RUNNING, + "Closing %s", varfile); + end_test(1); + } + } + + if (headerfile) { + start_test("Writing header to ", headerfile); + outf = fopen(headerfile, "w"); + if (!outf) + c12r_err(EXIT_TROUBLE_RUNNING, + "Could not open %s", headerfile); + } else + outf = stdout; + + fprintf(outf, "/* Generated by CCAN configurator */\n" + "#ifndef CCAN_CONFIG_H\n" + "#define CCAN_CONFIG_H\n"); + fprintf(outf, "#ifndef _GNU_SOURCE\n"); + fprintf(outf, "#define _GNU_SOURCE /* Always use GNU extensions. */\n"); + fprintf(outf, "#endif\n"); + fprintf(outf, "#define CCAN_COMPILER \"%s\"\n", orig_cc); + cmd = connect_args(argv + 1, "", ""); + fprintf(outf, "#define CCAN_CFLAGS \"%s\"\n", cmd); + free(cmd); + fprintf(outf, "#define CCAN_OUTPUT_EXE_CFLAG \"%s\"\n\n", outflag); + /* This one implies "#include + #include "config.h" +#include "cursor.h" /** * BSWAP_16 - reverse bytes in a constant uint16_t value. @@ -11,13 +13,13 @@ * Designed to be usable in constant-requiring initializers. * * Example: - * struct mystruct { - * char buf[BSWAP_16(0x1234)]; - * }; + * struct mystruct { + * char buf[BSWAP_16(0x1234)]; + * }; */ -#define BSWAP_16(val) \ - ((((uint16_t)(val) & 0x00ff) << 8) \ - | (((uint16_t)(val) & 0xff00) >> 8)) +#define BSWAP_16(val) \ + ((((uint16_t)(val) & 0x00ff) << 8) \ + | (((uint16_t)(val) & 0xff00) >> 8)) /** * BSWAP_32 - reverse bytes in a constant uint32_t value. @@ -26,15 +28,15 @@ * Designed to be usable in constant-requiring initializers. * * Example: - * struct mystruct { - * char buf[BSWAP_32(0xff000000)]; - * }; + * struct mystruct { + * char buf[BSWAP_32(0xff000000)]; + * }; */ -#define BSWAP_32(val) \ - ((((uint32_t)(val) & 0x000000ff) << 24) \ - | (((uint32_t)(val) & 0x0000ff00) << 8) \ - | (((uint32_t)(val) & 0x00ff0000) >> 8) \ - | (((uint32_t)(val) & 0xff000000) >> 24)) +#define BSWAP_32(val) \ + ((((uint32_t)(val) & 0x000000ff) << 24) \ + | (((uint32_t)(val) & 0x0000ff00) << 8) \ + | (((uint32_t)(val) & 0x00ff0000) >> 8) \ + | (((uint32_t)(val) & 0xff000000) >> 24)) /** * BSWAP_64 - reverse bytes in a constant uint64_t value. @@ -43,19 +45,19 @@ * Designed to be usable in constant-requiring initializers. * * Example: - * struct mystruct { - * char buf[BSWAP_64(0xff00000000000000ULL)]; - * }; - */ -#define BSWAP_64(val) \ - ((((uint64_t)(val) & 0x00000000000000ffULL) << 56) \ - | (((uint64_t)(val) & 0x000000000000ff00ULL) << 40) \ - | (((uint64_t)(val) & 0x0000000000ff0000ULL) << 24) \ - | (((uint64_t)(val) & 0x00000000ff000000ULL) << 8) \ - | (((uint64_t)(val) & 0x000000ff00000000ULL) >> 8) \ - | (((uint64_t)(val) & 0x0000ff0000000000ULL) >> 24) \ - | (((uint64_t)(val) & 0x00ff000000000000ULL) >> 40) \ - | (((uint64_t)(val) & 0xff00000000000000ULL) >> 56)) + * struct mystruct { + * char buf[BSWAP_64(0xff00000000000000ULL)]; + * }; + */ +#define BSWAP_64(val) \ + ((((uint64_t)(val) & 0x00000000000000ffULL) << 56) \ + | (((uint64_t)(val) & 0x000000000000ff00ULL) << 40) \ + | (((uint64_t)(val) & 0x0000000000ff0000ULL) << 24) \ + | (((uint64_t)(val) & 0x00000000ff000000ULL) << 8) \ + | (((uint64_t)(val) & 0x000000ff00000000ULL) >> 8) \ + | (((uint64_t)(val) & 0x0000ff0000000000ULL) >> 24) \ + | (((uint64_t)(val) & 0x00ff000000000000ULL) >> 40) \ + | (((uint64_t)(val) & 0xff00000000000000ULL) >> 56)) #if HAVE_BYTESWAP_H #include @@ -65,12 +67,12 @@ * @val: value whose bytes to swap. * * Example: - * // Output contains "1024 is 4 as two bytes reversed" - * printf("1024 is %u as two bytes reversed\n", bswap_16(1024)); + * // Output contains "1024 is 4 as two bytes reversed" + * printf("1024 is %u as two bytes reversed\n", bswap_16(1024)); */ static inline uint16_t bswap_16(uint16_t val) { - return BSWAP_16(val); + return BSWAP_16(val); } /** @@ -78,12 +80,12 @@ static inline uint16_t bswap_16(uint16_t val) * @val: value whose bytes to swap. * * Example: - * // Output contains "1024 is 262144 as four bytes reversed" - * printf("1024 is %u as four bytes reversed\n", bswap_32(1024)); + * // Output contains "1024 is 262144 as four bytes reversed" + * printf("1024 is %u as four bytes reversed\n", bswap_32(1024)); */ static inline uint32_t bswap_32(uint32_t val) { - return BSWAP_32(val); + return BSWAP_32(val); } #endif /* !HAVE_BYTESWAP_H */ @@ -93,19 +95,19 @@ static inline uint32_t bswap_32(uint32_t val) * @val: value whose bytes to swap. * * Example: - * // Output contains "1024 is 1125899906842624 as eight bytes reversed" - * printf("1024 is %llu as eight bytes reversed\n", - * (unsigned long long)bswap_64(1024)); + * // Output contains "1024 is 1125899906842624 as eight bytes reversed" + * printf("1024 is %llu as eight bytes reversed\n", + * (unsigned long long)bswap_64(1024)); */ static inline uint64_t bswap_64(uint64_t val) { - return BSWAP_64(val); + return BSWAP_64(val); } #endif /* Needed for Glibc like endiness check */ -#define __LITTLE_ENDIAN 1234 -#define __BIG_ENDIAN 4321 +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 /* Sanity check the defines. We don't handle weird endianness. */ #if !HAVE_LITTLE_ENDIAN && !HAVE_BIG_ENDIAN @@ -114,13 +116,13 @@ static inline uint64_t bswap_64(uint64_t val) #error "Can't compile for both big and little endian." #elif HAVE_LITTLE_ENDIAN #ifndef __BYTE_ORDER -#define __BYTE_ORDER __LITTLE_ENDIAN +#define __BYTE_ORDER __LITTLE_ENDIAN #elif __BYTE_ORDER != __LITTLE_ENDIAN #error "__BYTE_ORDER already defined, but not equal to __LITTLE_ENDIAN" #endif #elif HAVE_BIG_ENDIAN #ifndef __BYTE_ORDER -#define __BYTE_ORDER __BIG_ENDIAN +#define __BYTE_ORDER __BIG_ENDIAN #elif __BYTE_ORDER != __BIG_ENDIAN #error "__BYTE_ORDER already defined, but not equal to __BIG_ENDIAN" #endif @@ -242,7 +244,7 @@ typedef uint16_t ENDIAN_TYPE beint16_t; */ static inline leint64_t cpu_to_le64(uint64_t native) { - return CPU_TO_LE64(native); + return CPU_TO_LE64(native); } /** @@ -251,7 +253,7 @@ static inline leint64_t cpu_to_le64(uint64_t native) */ static inline leint32_t cpu_to_le32(uint32_t native) { - return CPU_TO_LE32(native); + return CPU_TO_LE32(native); } /** @@ -260,7 +262,7 @@ static inline leint32_t cpu_to_le32(uint32_t native) */ static inline leint16_t cpu_to_le16(uint16_t native) { - return CPU_TO_LE16(native); + return CPU_TO_LE16(native); } /** @@ -269,7 +271,7 @@ static inline leint16_t cpu_to_le16(uint16_t native) */ static inline uint64_t le64_to_cpu(leint64_t le_val) { - return LE64_TO_CPU(le_val); + return LE64_TO_CPU(le_val); } /** @@ -278,7 +280,7 @@ static inline uint64_t le64_to_cpu(leint64_t le_val) */ static inline uint32_t le32_to_cpu(leint32_t le_val) { - return LE32_TO_CPU(le_val); + return LE32_TO_CPU(le_val); } /** @@ -287,7 +289,7 @@ static inline uint32_t le32_to_cpu(leint32_t le_val) */ static inline uint16_t le16_to_cpu(leint16_t le_val) { - return LE16_TO_CPU(le_val); + return LE16_TO_CPU(le_val); } /** @@ -296,7 +298,7 @@ static inline uint16_t le16_to_cpu(leint16_t le_val) */ static inline beint64_t cpu_to_be64(uint64_t native) { - return CPU_TO_BE64(native); + return CPU_TO_BE64(native); } /** @@ -305,7 +307,7 @@ static inline beint64_t cpu_to_be64(uint64_t native) */ static inline beint32_t cpu_to_be32(uint32_t native) { - return CPU_TO_BE32(native); + return CPU_TO_BE32(native); } /** @@ -314,7 +316,7 @@ static inline beint32_t cpu_to_be32(uint32_t native) */ static inline beint16_t cpu_to_be16(uint16_t native) { - return CPU_TO_BE16(native); + return CPU_TO_BE16(native); } /** @@ -323,7 +325,7 @@ static inline beint16_t cpu_to_be16(uint16_t native) */ static inline uint64_t be64_to_cpu(beint64_t be_val) { - return BE64_TO_CPU(be_val); + return BE64_TO_CPU(be_val); } /** @@ -332,7 +334,7 @@ static inline uint64_t be64_to_cpu(beint64_t be_val) */ static inline uint32_t be32_to_cpu(beint32_t be_val) { - return BE32_TO_CPU(be_val); + return BE32_TO_CPU(be_val); } /** @@ -341,11 +343,9 @@ static inline uint32_t be32_to_cpu(beint32_t be_val) */ static inline uint16_t be16_to_cpu(beint16_t be_val) { - return BE16_TO_CPU(be_val); + return BE16_TO_CPU(be_val); } -/* Whichever they include first, they get these definitions. */ -#ifdef CCAN_SHORT_TYPES_H /** * be64/be32/be16 - 64/32/16 bit big-endian representation. */ @@ -359,5 +359,7 @@ typedef beint16_t be16; typedef leint64_t le64; typedef leint32_t le32; typedef leint16_t le16; -#endif + + #endif /* CCAN_ENDIAN_H */ + diff --git a/nostrdb/hex.h b/nostrdb/hex.h index 75f0ad49c..ce20ff4f8 100644 --- a/nostrdb/hex.h +++ b/nostrdb/hex.h @@ -1,84 +1,68 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_HEX_H -#define CCAN_HEX_H -#include "config.h" -#include -#include -/** - * hex_decode - Unpack a hex string. - * @str: the hexadecimal string - * @slen: the length of @str - * @buf: the buffer to write the data into - * @bufsize: the length of - * - * Returns false if there are any characters which aren't 0-9, a-f or A-F, - * of the string wasn't the right length for @bufsize. - * - * Example: - * unsigned char data[20]; - * - * if (!hex_decode(argv[1], strlen(argv[1]), data, 20)) - * printf("String is malformed!\n"); - */ -bool hex_decode(const char *str, size_t slen, void *buf, size_t bufsize); +#ifndef HEX_H +#define HEX_H + +#include -/** - * hex_encode - Create a nul-terminated hex string - * @buf: the buffer to read the data from - * @bufsize: the length of buf - * @dest: the string to fill - * @destsize: the max size of the string - * - * Returns true if the string, including terminator, fit in @destsize; - * - * Example: - * unsigned char buf[] = { 0x1F, 0x2F }; - * char str[5]; - * - * if (!hex_encode(buf, sizeof(buf), str, sizeof(str))) - * abort(); - */ -bool hex_encode(const void *buf, size_t bufsize, char *dest, size_t destsize); +static const char hex_table[256] = { + ['0'] = 0, ['1'] = 1, ['2'] = 2, ['3'] = 3, + ['4'] = 4, ['5'] = 5, ['6'] = 6, ['7'] = 7, + ['8'] = 8, ['9'] = 9, ['a'] = 10, ['b'] = 11, + ['c'] = 12, ['d'] = 13, ['e'] = 14, ['f'] = 15, + ['A'] = 10, ['B'] = 11, ['C'] = 12, ['D'] = 13, + ['E'] = 14, ['F'] = 15 +}; -/** - * hex_str_size - Calculate how big a nul-terminated hex string is - * @bytes: bytes of data to represent - * - * Example: - * unsigned char buf[] = { 0x1F, 0x2F }; - * char str[hex_str_size(sizeof(buf))]; - * - * hex_encode(buf, sizeof(buf), str, sizeof(str)); - */ -static inline size_t hex_str_size(size_t bytes) +static inline int char_to_hex(unsigned char *val, unsigned char c) { - return 2 * bytes + 1; + if (hex_table[c] || c == '0') { + *val = hex_table[c]; + return 1; + } + return 0; } -/** - * hex_data_size - Calculate how many bytes of data in a hex string - * @strlen: the length of the string (with or without NUL) - * - * Example: - * const char str[] = "1F2F"; - * unsigned char buf[hex_data_size(sizeof(str))]; - * - * hex_decode(str, strlen(str), buf, sizeof(buf)); - */ -static inline size_t hex_data_size(size_t strlen) +static inline int hex_decode(const char *str, size_t slen, void *buf, size_t bufsize) { - return strlen / 2; + unsigned char v1, v2; + unsigned char *p = buf; + + while (slen > 1) { + if (!char_to_hex(&v1, str[0]) || !char_to_hex(&v2, str[1])) + return 0; + if (!bufsize) + return 0; + *(p++) = (v1 << 4) | v2; + str += 2; + slen -= 2; + bufsize--; + } + return slen == 0 && bufsize == 0; } + static inline char hexchar(unsigned int val) { - if (val < 10) - return '0' + val; - if (val < 16) - return 'a' + val - 10; - abort(); + if (val < 10) + return '0' + val; + if (val < 16) + return 'a' + val - 10; + abort(); +} + +static int hex_encode(const void *buf, size_t bufsize, char *dest) +{ + size_t i; + + for (i = 0; i < bufsize; i++) { + unsigned int c = ((const unsigned char *)buf)[i]; + *(dest++) = hexchar(c >> 4); + *(dest++) = hexchar(c & 0xF); + } + *dest = '\0'; + + return 1; } -#endif /* CCAN_HEX_H */ +#endif diff --git a/nostrdb/io.h b/nostrdb/io.h new file mode 100644 index 000000000..b7d136821 --- /dev/null +++ b/nostrdb/io.h @@ -0,0 +1,48 @@ + +#include + +static int read_fd(FILE *fd, unsigned char *buf, int buflen, int *written) +{ + unsigned char *p = buf; + int len = 0; + *written = 0; + + do { + len = fread(p, 1, 4096, fd); + *written += len; + p += len; + if (p > buf + buflen) + return 0; + } while (len == 4096); + + return 1; +} + +static int write_file(const char *filename, unsigned char *buf, int buflen) +{ + FILE *file = NULL; + int ok; + + file = fopen(filename, "w"); + if (file == NULL) + return 0; + + ok = fwrite(buf, buflen, 1, file); + fclose(file); + return ok; +} + +static int read_file(const char *filename, unsigned char *buf, int buflen, int *written) +{ + FILE *file = NULL; + int ok; + + file = fopen(filename, "r"); + if (file == NULL) + return 1; + + ok = read_fd(file, buf, buflen, written); + fclose(file); + return ok; +} + diff --git a/nostrdb/lmdb_util.h b/nostrdb/lmdb_util.h new file mode 100644 index 000000000..28a4732ea --- /dev/null +++ b/nostrdb/lmdb_util.h @@ -0,0 +1,100 @@ + +// Define callback function type +typedef bool (*lmdb_callback_t)(const MDB_val*, const MDB_val*); + + +int lmdb_foreach(MDB_txn *txn, MDB_dbi dbi, MDB_val *start, MDB_val *start_dup, callback_t cb, bool reverse) { + int success = 0; + MDB_cursor *cursor; + + // Open a cursor on the provided transaction and database + int rc = mdb_cursor_open(txn, dbi, &cursor); + + if (rc != 0) + return 0; + + MDB_val k = *start, v = *start_dup; + MDB_cursor_op op = reverse ? MDB_PREV : MDB_NEXT; + + // If we're scanning in reverse... + if (reverse) { + // Try to position the cursor at the first key-value pair where + // both the key and the value are greater than or equal to our + // starting point. + rc = mdb_cursor_get(cursor, &k, &v, MDB_GET_BOTH_RANGE); + if (rc == 0) { + if (v.mv_size != start_dup->mv_size || + memcmp(v.mv_data, start_dup->mv_data, v.mv_size) != 0) { + // If the value doesn't match our starting + // point, step back to the previous record. + if (mdb_cursor_get(cursor, &k, &v, MDB_PREV) != 0) + goto cleanup; + } + } else { + // If we couldn't find a record that matches both our + // starting key and value, try to find a record that + // matches just our starting key. + if (mdb_cursor_get(cursor, &k, &v, MDB_SET) == 0) { + // If we find a match, move to the last value + // for this key, since we're scanning in + // reverse. + if (mdb_cursor_get(cursor, &k, &v, MDB_LAST_DUP) != 0) + goto cleanup; + } else { + // If we can't find a record with our starting + // key, try to find the first record with a key + // greater than our starting key. + if (mdb_cursor_get(cursor, &k, &v, MDB_SET_RANGE) == 0) { + // If we find such a record, step back + // to the previous record. + if (mdb_cursor_get(cursor, &k, &v, MDB_PREV) != 0) + goto cleanup; + } else { + // If we can't even find a record with + // a key greater than our starting key, + // fall back to starting from the last + // record in the database. + if (mdb_cursor_get(cursor, &k, &v, MDB_LAST) != 0) + goto cleanup; + } + } + } + // If we're not scanning in reverse... + else { + // Try to position the cursor at the first key-value + // pair where both the key and the value are greater + // than or equal to our starting point. + if (mdb_cursor_get(cursor, &k, &v, MDB_SET) != 0) { + // If we couldn't find a record that matches + // both our starting key and value, try to find + // a record that matches just our starting key. + if (mdb_cursor_get(cursor, &k, &v, MDB_SET_RANGE) != 0) + goto cleanup; + + // If we can't find a record with our starting + // key, try to find the first record with a key + // greater than our starting key. + if (mdb_cursor_get(cursor, &k, &v, MDB_FIRST_DUP) != 0) + goto cleanup; + } + } + } + + // Whether we're scanning forward or backward, start the actual + // iteration, moving one step at a time in the appropriate direction + // and calling the provided callback for each record. + do { + if (!cb(&k, &v)) + goto cleanup; + } while (mdb_cursor_get(cursor, &k, &v, op) == 0); + + // If we make it through the entire iteration without the callback + // returning false, return true to signal success. + success = 1; + +cleanup: + mdb_cursor_close(cursor); + return success; +} + + diff --git a/nostrdb/ndb.c b/nostrdb/ndb.c new file mode 100644 index 000000000..e5c6e8cbf --- /dev/null +++ b/nostrdb/ndb.c @@ -0,0 +1,185 @@ + + +#include "nostrdb.h" +#include "print_util.h" +#include +#include +#include +#include +#include +#include + +static int usage() +{ + printf("usage: ndb [--skip-verification] [-d db_dir] \n\n"); + printf("commands\n\n"); + printf(" stat\n"); + printf(" search [--oldest-first] [--limit 42] \n"); + printf(" import \n\n"); + printf("settings\n\n"); + printf(" --skip-verification skip signature validation\n"); + printf(" -d set database directory\n"); + return 1; +} + + +static int map_file(const char *filename, unsigned char **p, size_t *flen) +{ + struct stat st; + int des; + stat(filename, &st); + *flen = st.st_size; + + des = open(filename, O_RDONLY); + + *p = mmap(NULL, *flen, PROT_READ, MAP_PRIVATE, des, 0); + close(des); + + return *p != MAP_FAILED; +} + +static inline void print_stat_counts(struct ndb_stat_counts *counts) +{ + printf("%zu\t%zu\t%zu\t%zu\n", + counts->count, + counts->key_size, + counts->value_size, + counts->key_size + counts->value_size); +} + +static void print_stats(struct ndb_stat *stat) +{ + int i; + const char *name; + struct ndb_stat_counts *c; + + struct ndb_stat_counts total; + ndb_stat_counts_init(&total); + + printf("name\tcount\tkey_bytes\tvalue_bytes\ttotal_bytes\n"); + printf("---\ndbs\n---\n"); + for (i = 0; i < NDB_DBS; i++) { + name = ndb_db_name(i); + + total.count += stat->dbs[i].count; + total.key_size += stat->dbs[i].key_size; + total.value_size += stat->dbs[i].value_size; + + printf("%s\t", name); + print_stat_counts(&stat->dbs[i]); + } + + printf("total\t"); + print_stat_counts(&total); + + printf("-----\nkinds\n-----\n"); + for (i = 0; i < NDB_CKIND_COUNT; i++) { + c = &stat->common_kinds[i]; + if (c->count == 0) + continue; + + printf("%s\t", ndb_kind_name(i)); + print_stat_counts(c); + } + + if (stat->other_kinds.count != 0) { + printf("other\t"); + print_stat_counts(&stat->other_kinds); + } +} + +int ndb_print_search_keys(struct ndb_txn *txn); + +int main(int argc, char *argv[]) +{ + struct ndb *ndb; + int i, flags, limit; + struct ndb_stat stat; + struct ndb_txn txn; + struct ndb_text_search_results results; + struct ndb_text_search_result *result; + const char *dir; + unsigned char *data; + size_t data_len; + struct ndb_config config; + struct ndb_text_search_config search_config; + ndb_default_config(&config); + ndb_default_text_search_config(&search_config); + ndb_config_set_mapsize(&config, 1024ULL * 1024ULL * 1024ULL * 1024ULL /* 1 TiB */); + + if (argc < 2) { + return usage(); + } + + dir = "."; + flags = 0; + for (i = 0; i < 2; i++) + { + if (!strcmp(argv[1], "-d") && argv[2]) { + dir = argv[2]; + argv += 2; + argc -= 2; + } else if (!strcmp(argv[1], "--skip-verification")) { + flags = NDB_FLAG_SKIP_NOTE_VERIFY; + argv += 1; + argc -= 1; + } + } + + ndb_config_set_flags(&config, flags); + + fprintf(stderr, "using db '%s'\n", dir); + + if (!ndb_init(&ndb, dir, &config)) { + return 2; + } + + if (argc >= 3 && !strcmp(argv[1], "search")) { + for (i = 0; i < 2; i++) { + if (!strcmp(argv[2], "--oldest-first")) { + ndb_text_search_config_set_order(&search_config, NDB_ORDER_ASCENDING); + argv++; + argc--; + } else if (!strcmp(argv[2], "--limit")) { + limit = atoi(argv[3]); + ndb_text_search_config_set_limit(&search_config, limit); + argv += 2; + argc -= 2; + } + } + + ndb_begin_query(ndb, &txn); + ndb_text_search(&txn, argv[2], &results, &search_config); + + // print results for now + for (i = 0; i < results.num_results; i++) { + result = &results.results[i]; + printf("[%02d] ", i+1); + ndb_print_text_search_result(&txn, result); + } + + ndb_end_query(&txn); + } else if (argc == 2 && !strcmp(argv[1], "stat")) { + if (!ndb_stat(ndb, &stat)) { + return 3; + } + + print_stats(&stat); + } else if (argc == 3 && !strcmp(argv[1], "import")) { + if (!strcmp(argv[2], "-")) { + ndb_process_events_stream(ndb, stdin); + } else { + map_file(argv[2], &data, &data_len); + ndb_process_events(ndb, (const char *)data, data_len); + ndb_process_client_events(ndb, (const char *)data, data_len); + } + } else if (argc == 2 && !strcmp(argv[1], "print-search-keys")) { + ndb_begin_query(ndb, &txn); + ndb_print_search_keys(&txn); + ndb_end_query(&txn); + } else { + return usage(); + } + + ndb_destroy(ndb); +} diff --git a/nostrdb/nostr_bech32.c b/nostrdb/nostr_bech32.c index ad8172b20..9710fbe24 100644 --- a/nostrdb/nostr_bech32.c +++ b/nostrdb/nostr_bech32.c @@ -7,10 +7,8 @@ #include "nostr_bech32.h" #include -#include "endian.h" #include "cursor.h" #include "bech32.h" -#include #define MAX_TLVS 16 @@ -147,11 +145,6 @@ static int tlvs_to_relays(struct nostr_tlvs *tlvs, struct relays *relays) { return 1; } -static uint32_t decode_tlv_u32(const uint8_t *bytes) { - beint32_t *be32_bytes = (beint32_t*)bytes; - return be32_to_cpu(*be32_bytes); -} - static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *nevent) { struct nostr_tlvs tlvs; struct nostr_tlv *tlv; @@ -173,13 +166,6 @@ static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *n nevent->pubkey = NULL; } - if(find_tlv(&tlvs, TLV_KIND, &tlv)) { - nevent->kind = decode_tlv_u32(tlv->value); - nevent->has_kind = true; - } else { - nevent->has_kind = false; - } - return tlvs_to_relays(&tlvs, &nevent->relays); } @@ -201,11 +187,6 @@ static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *nad naddr->pubkey = tlv->value; - if(!find_tlv(&tlvs, TLV_KIND, &tlv)) { - return 0; - } - naddr->kind = decode_tlv_u32(tlv->value); - return tlvs_to_relays(&tlvs, &naddr->relays); } diff --git a/nostrdb/nostr_bech32.h b/nostrdb/nostr_bech32.h index 6155d9289..23a381d98 100644 --- a/nostrdb/nostr_bech32.h +++ b/nostrdb/nostr_bech32.h @@ -11,8 +11,6 @@ #include #include "str_block.h" #include "cursor.h" -#include - typedef unsigned char u8; #define MAX_RELAYS 10 @@ -47,8 +45,6 @@ struct bech32_nevent { struct relays relays; const u8 *event_id; const u8 *pubkey; // optional - uint32_t kind; - bool has_kind; }; struct bech32_nprofile { @@ -60,7 +56,6 @@ struct bech32_naddr { struct relays relays; struct str_block identifier; const u8 *pubkey; - uint32_t kind; }; struct bech32_nrelay { diff --git a/nostrdb/nostrdb.c b/nostrdb/nostrdb.c index f16aa0705..f86e5d0d6 100644 --- a/nostrdb/nostrdb.c +++ b/nostrdb/nostrdb.c @@ -912,9 +912,9 @@ static int _ndb_begin_query(struct ndb *ndb, struct ndb_txn *txn, int flags) { txn->lmdb = &ndb->lmdb; MDB_txn **mdb_txn = (MDB_txn **)&txn->mdb_txn; - if (!txn->lmdb->env) - return 0; - return mdb_txn_begin(txn->lmdb->env, NULL, flags, mdb_txn) == 0; + if (!txn->lmdb->env) + return 0; + return mdb_txn_begin(txn->lmdb->env, NULL, flags, mdb_txn) == 0; } int ndb_begin_query(struct ndb *ndb, struct ndb_txn *txn) @@ -2163,15 +2163,6 @@ static int ndb_write_note_kind_index(struct ndb_txn *txn, struct ndb_note *note, return 1; } -static void consume_whitespace_or_punctuation(struct cursor *cur) -{ - while (cur->p < cur->end) { - if (!is_right_boundary(*cur->p)) - return; - cur->p++; - } -} - static int ndb_write_word_to_index(struct ndb_txn *txn, const char *word, int word_len, int word_index, uint64_t timestamp, uint64_t note_id) @@ -3570,7 +3561,7 @@ static int ndb_event_commitment(struct ndb_note *ev, unsigned char *buf, int buf struct cursor cur; int ok; - if (!hex_encode(ev->pubkey, sizeof(ev->pubkey), pubkey, sizeof(pubkey))) + if (!hex_encode(ev->pubkey, sizeof(ev->pubkey), pubkey)) return 0; make_cursor(buf, buf + buflen, &cur); @@ -4111,17 +4102,6 @@ int ndb_ws_event_from_json(const char *json, int len, struct ndb_tce *tce, tce->command_result.msg = json + tok->start; tce->command_result.msglen = toksize(tok); - return 1; - } else if (tok_len == 4 && !memcmp("AUTH", json + tok->start, 4)) { - tce->evtype = NDB_TCE_AUTH; - - tok = &parser.toks[parser.i++]; - if (tok->type != JSMN_STRING) - return 0; - - tce->subid = json + tok->start; - tce->subid_len = toksize(tok); - return 1; } diff --git a/nostrdb/nostrdb.h b/nostrdb/nostrdb.h index 88cec55a8..1a01c6f10 100644 --- a/nostrdb/nostrdb.h +++ b/nostrdb/nostrdb.h @@ -85,7 +85,6 @@ enum tce_type { NDB_TCE_OK = 0x2, NDB_TCE_NOTICE = 0x3, NDB_TCE_EOSE = 0x4, - NDB_TCE_AUTH = 0x5, }; enum ndb_ingest_filter_action { diff --git a/nostrdb/print_util.h b/nostrdb/print_util.h new file mode 100644 index 000000000..1f60b0744 --- /dev/null +++ b/nostrdb/print_util.h @@ -0,0 +1,36 @@ + +static void ndb_print_text_search_key(struct ndb_text_search_key *key) +{ + printf("K<'%.*s' %d %" PRIu64 " note_id:%" PRIu64 ">", key->str_len, key->str, + key->word_index, + key->timestamp, + key->note_id); +} + +static void print_hex(unsigned char* data, size_t size) { + size_t i; + for (i = 0; i < size; i++) { + printf("%02x", data[i]); + } +} + + +static void ndb_print_text_search_result(struct ndb_txn *txn, + struct ndb_text_search_result *r) +{ + size_t len; + struct ndb_note *note; + + ndb_print_text_search_key(&r->key); + + if (!(note = ndb_get_note_by_key(txn, r->key.note_id, &len))) { + printf(": note not found"); + return; + } + + printf(" "); + print_hex(ndb_note_id(note), 32); + + printf("\n%s\n\n---\n", ndb_note_content(note)); +} + diff --git a/nostrdb/random.h b/nostrdb/random.h index 152f7845b..166703805 100644 --- a/nostrdb/random.h +++ b/nostrdb/random.h @@ -21,8 +21,7 @@ #include #include #elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) -//#include -#include +#include #elif defined(__OpenBSD__) #include #else @@ -54,7 +53,7 @@ static int fill_random(unsigned char* data, size_t size) { #elif defined(__APPLE__) || defined(__OpenBSD__) /* If `getentropy(2)` is not available you should fallback to either * `SecRandomCopyBytes` or /dev/urandom */ - int res = SecRandomCopyBytes(kSecRandomDefault, size, data); + int res = getentropy(data, size); if (res == 0) { return 1; } else { diff --git a/nostrdb/sha256.c b/nostrdb/sha256.c index a6d99e901..e8ddbb747 100644 --- a/nostrdb/sha256.c +++ b/nostrdb/sha256.c @@ -7,8 +7,8 @@ * file COPYING or http://www.opensource.org/licenses/mit-license.php. */ #include "sha256.h" -#include "compiler.h" #include "endian.h" +#include "compiler.h" #include #include #include @@ -16,293 +16,287 @@ static void invalidate_sha256(struct sha256_ctx *ctx) { #ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL - ctx->c.md_len = 0; + ctx->c.md_len = 0; #else - ctx->bytes = (size_t)-1; + ctx->bytes = (size_t)-1; #endif } -static void check_sha256(struct sha256_ctx *ctx UNUSED) +static void check_sha256(struct sha256_ctx *ctx) { #ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL - assert(ctx->c.md_len != 0); + assert(ctx->c.md_len != 0); #else - assert(ctx->bytes != (size_t)-1); + assert(ctx->bytes != (size_t)-1); #endif } #ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL void sha256_init(struct sha256_ctx *ctx) { - SHA256_Init(&ctx->c); + SHA256_Init(&ctx->c); } void sha256_update(struct sha256_ctx *ctx, const void *p, size_t size) { - check_sha256(ctx); - SHA256_Update(&ctx->c, p, size); + check_sha256(ctx); + SHA256_Update(&ctx->c, p, size); } void sha256_done(struct sha256_ctx *ctx, struct sha256 *res) { - SHA256_Final(res->u.u8, &ctx->c); - invalidate_sha256(ctx); + SHA256_Final(res->u.u8, &ctx->c); + invalidate_sha256(ctx); } #else static uint32_t Ch(uint32_t x, uint32_t y, uint32_t z) { - return z ^ (x & (y ^ z)); + return z ^ (x & (y ^ z)); } static uint32_t Maj(uint32_t x, uint32_t y, uint32_t z) { - return (x & y) | (z & (x | y)); + return (x & y) | (z & (x | y)); } static uint32_t Sigma0(uint32_t x) { - return (x >> 2 | x << 30) ^ (x >> 13 | x << 19) ^ (x >> 22 | x << 10); + return (x >> 2 | x << 30) ^ (x >> 13 | x << 19) ^ (x >> 22 | x << 10); } static uint32_t Sigma1(uint32_t x) { - return (x >> 6 | x << 26) ^ (x >> 11 | x << 21) ^ (x >> 25 | x << 7); + return (x >> 6 | x << 26) ^ (x >> 11 | x << 21) ^ (x >> 25 | x << 7); } static uint32_t sigma0(uint32_t x) { - return (x >> 7 | x << 25) ^ (x >> 18 | x << 14) ^ (x >> 3); + return (x >> 7 | x << 25) ^ (x >> 18 | x << 14) ^ (x >> 3); } static uint32_t sigma1(uint32_t x) { - return (x >> 17 | x << 15) ^ (x >> 19 | x << 13) ^ (x >> 10); + return (x >> 17 | x << 15) ^ (x >> 19 | x << 13) ^ (x >> 10); } /** One round of SHA-256. */ static void Round(uint32_t a, uint32_t b, uint32_t c, uint32_t *d, uint32_t e, uint32_t f, uint32_t g, uint32_t *h, uint32_t k, uint32_t w) { - uint32_t t1 = *h + Sigma1(e) + Ch(e, f, g) + k + w; - uint32_t t2 = Sigma0(a) + Maj(a, b, c); - *d += t1; - *h = t1 + t2; + uint32_t t1 = *h + Sigma1(e) + Ch(e, f, g) + k + w; + uint32_t t2 = Sigma0(a) + Maj(a, b, c); + *d += t1; + *h = t1 + t2; } /** Perform one SHA-256 transformation, processing a 64-byte chunk. */ static void Transform(uint32_t *s, const uint32_t *chunk) { - uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7]; - uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; - - Round(a, b, c, &d, e, f, g, &h, 0x428a2f98, w0 = be32_to_cpu(chunk[0])); - Round(h, a, b, &c, d, e, f, &g, 0x71374491, w1 = be32_to_cpu(chunk[1])); - Round(g, h, a, &b, c, d, e, &f, 0xb5c0fbcf, w2 = be32_to_cpu(chunk[2])); - Round(f, g, h, &a, b, c, d, &e, 0xe9b5dba5, w3 = be32_to_cpu(chunk[3])); - Round(e, f, g, &h, a, b, c, &d, 0x3956c25b, w4 = be32_to_cpu(chunk[4])); - Round(d, e, f, &g, h, a, b, &c, 0x59f111f1, w5 = be32_to_cpu(chunk[5])); - Round(c, d, e, &f, g, h, a, &b, 0x923f82a4, w6 = be32_to_cpu(chunk[6])); - Round(b, c, d, &e, f, g, h, &a, 0xab1c5ed5, w7 = be32_to_cpu(chunk[7])); - Round(a, b, c, &d, e, f, g, &h, 0xd807aa98, w8 = be32_to_cpu(chunk[8])); - Round(h, a, b, &c, d, e, f, &g, 0x12835b01, w9 = be32_to_cpu(chunk[9])); - Round(g, h, a, &b, c, d, e, &f, 0x243185be, w10 = be32_to_cpu(chunk[10])); - Round(f, g, h, &a, b, c, d, &e, 0x550c7dc3, w11 = be32_to_cpu(chunk[11])); - Round(e, f, g, &h, a, b, c, &d, 0x72be5d74, w12 = be32_to_cpu(chunk[12])); - Round(d, e, f, &g, h, a, b, &c, 0x80deb1fe, w13 = be32_to_cpu(chunk[13])); - Round(c, d, e, &f, g, h, a, &b, 0x9bdc06a7, w14 = be32_to_cpu(chunk[14])); - Round(b, c, d, &e, f, g, h, &a, 0xc19bf174, w15 = be32_to_cpu(chunk[15])); - - Round(a, b, c, &d, e, f, g, &h, 0xe49b69c1, w0 += sigma1(w14) + w9 + sigma0(w1)); - Round(h, a, b, &c, d, e, f, &g, 0xefbe4786, w1 += sigma1(w15) + w10 + sigma0(w2)); - Round(g, h, a, &b, c, d, e, &f, 0x0fc19dc6, w2 += sigma1(w0) + w11 + sigma0(w3)); - Round(f, g, h, &a, b, c, d, &e, 0x240ca1cc, w3 += sigma1(w1) + w12 + sigma0(w4)); - Round(e, f, g, &h, a, b, c, &d, 0x2de92c6f, w4 += sigma1(w2) + w13 + sigma0(w5)); - Round(d, e, f, &g, h, a, b, &c, 0x4a7484aa, w5 += sigma1(w3) + w14 + sigma0(w6)); - Round(c, d, e, &f, g, h, a, &b, 0x5cb0a9dc, w6 += sigma1(w4) + w15 + sigma0(w7)); - Round(b, c, d, &e, f, g, h, &a, 0x76f988da, w7 += sigma1(w5) + w0 + sigma0(w8)); - Round(a, b, c, &d, e, f, g, &h, 0x983e5152, w8 += sigma1(w6) + w1 + sigma0(w9)); - Round(h, a, b, &c, d, e, f, &g, 0xa831c66d, w9 += sigma1(w7) + w2 + sigma0(w10)); - Round(g, h, a, &b, c, d, e, &f, 0xb00327c8, w10 += sigma1(w8) + w3 + sigma0(w11)); - Round(f, g, h, &a, b, c, d, &e, 0xbf597fc7, w11 += sigma1(w9) + w4 + sigma0(w12)); - Round(e, f, g, &h, a, b, c, &d, 0xc6e00bf3, w12 += sigma1(w10) + w5 + sigma0(w13)); - Round(d, e, f, &g, h, a, b, &c, 0xd5a79147, w13 += sigma1(w11) + w6 + sigma0(w14)); - Round(c, d, e, &f, g, h, a, &b, 0x06ca6351, w14 += sigma1(w12) + w7 + sigma0(w15)); - Round(b, c, d, &e, f, g, h, &a, 0x14292967, w15 += sigma1(w13) + w8 + sigma0(w0)); - - Round(a, b, c, &d, e, f, g, &h, 0x27b70a85, w0 += sigma1(w14) + w9 + sigma0(w1)); - Round(h, a, b, &c, d, e, f, &g, 0x2e1b2138, w1 += sigma1(w15) + w10 + sigma0(w2)); - Round(g, h, a, &b, c, d, e, &f, 0x4d2c6dfc, w2 += sigma1(w0) + w11 + sigma0(w3)); - Round(f, g, h, &a, b, c, d, &e, 0x53380d13, w3 += sigma1(w1) + w12 + sigma0(w4)); - Round(e, f, g, &h, a, b, c, &d, 0x650a7354, w4 += sigma1(w2) + w13 + sigma0(w5)); - Round(d, e, f, &g, h, a, b, &c, 0x766a0abb, w5 += sigma1(w3) + w14 + sigma0(w6)); - Round(c, d, e, &f, g, h, a, &b, 0x81c2c92e, w6 += sigma1(w4) + w15 + sigma0(w7)); - Round(b, c, d, &e, f, g, h, &a, 0x92722c85, w7 += sigma1(w5) + w0 + sigma0(w8)); - Round(a, b, c, &d, e, f, g, &h, 0xa2bfe8a1, w8 += sigma1(w6) + w1 + sigma0(w9)); - Round(h, a, b, &c, d, e, f, &g, 0xa81a664b, w9 += sigma1(w7) + w2 + sigma0(w10)); - Round(g, h, a, &b, c, d, e, &f, 0xc24b8b70, w10 += sigma1(w8) + w3 + sigma0(w11)); - Round(f, g, h, &a, b, c, d, &e, 0xc76c51a3, w11 += sigma1(w9) + w4 + sigma0(w12)); - Round(e, f, g, &h, a, b, c, &d, 0xd192e819, w12 += sigma1(w10) + w5 + sigma0(w13)); - Round(d, e, f, &g, h, a, b, &c, 0xd6990624, w13 += sigma1(w11) + w6 + sigma0(w14)); - Round(c, d, e, &f, g, h, a, &b, 0xf40e3585, w14 += sigma1(w12) + w7 + sigma0(w15)); - Round(b, c, d, &e, f, g, h, &a, 0x106aa070, w15 += sigma1(w13) + w8 + sigma0(w0)); - - Round(a, b, c, &d, e, f, g, &h, 0x19a4c116, w0 += sigma1(w14) + w9 + sigma0(w1)); - Round(h, a, b, &c, d, e, f, &g, 0x1e376c08, w1 += sigma1(w15) + w10 + sigma0(w2)); - Round(g, h, a, &b, c, d, e, &f, 0x2748774c, w2 += sigma1(w0) + w11 + sigma0(w3)); - Round(f, g, h, &a, b, c, d, &e, 0x34b0bcb5, w3 += sigma1(w1) + w12 + sigma0(w4)); - Round(e, f, g, &h, a, b, c, &d, 0x391c0cb3, w4 += sigma1(w2) + w13 + sigma0(w5)); - Round(d, e, f, &g, h, a, b, &c, 0x4ed8aa4a, w5 += sigma1(w3) + w14 + sigma0(w6)); - Round(c, d, e, &f, g, h, a, &b, 0x5b9cca4f, w6 += sigma1(w4) + w15 + sigma0(w7)); - Round(b, c, d, &e, f, g, h, &a, 0x682e6ff3, w7 += sigma1(w5) + w0 + sigma0(w8)); - Round(a, b, c, &d, e, f, g, &h, 0x748f82ee, w8 += sigma1(w6) + w1 + sigma0(w9)); - Round(h, a, b, &c, d, e, f, &g, 0x78a5636f, w9 += sigma1(w7) + w2 + sigma0(w10)); - Round(g, h, a, &b, c, d, e, &f, 0x84c87814, w10 += sigma1(w8) + w3 + sigma0(w11)); - Round(f, g, h, &a, b, c, d, &e, 0x8cc70208, w11 += sigma1(w9) + w4 + sigma0(w12)); - Round(e, f, g, &h, a, b, c, &d, 0x90befffa, w12 += sigma1(w10) + w5 + sigma0(w13)); - Round(d, e, f, &g, h, a, b, &c, 0xa4506ceb, w13 += sigma1(w11) + w6 + sigma0(w14)); - Round(c, d, e, &f, g, h, a, &b, 0xbef9a3f7, w14 + sigma1(w12) + w7 + sigma0(w15)); - Round(b, c, d, &e, f, g, h, &a, 0xc67178f2, w15 + sigma1(w13) + w8 + sigma0(w0)); - - s[0] += a; - s[1] += b; - s[2] += c; - s[3] += d; - s[4] += e; - s[5] += f; - s[6] += g; - s[7] += h; -} + uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7]; + uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; -static bool alignment_ok(const void *p UNUSED, size_t n UNUSED) -{ -#if HAVE_UNALIGNED_ACCESS - return true; -#else - return ((size_t)p % n == 0); -#endif + Round(a, b, c, &d, e, f, g, &h, 0x428a2f98, w0 = be32_to_cpu(chunk[0])); + Round(h, a, b, &c, d, e, f, &g, 0x71374491, w1 = be32_to_cpu(chunk[1])); + Round(g, h, a, &b, c, d, e, &f, 0xb5c0fbcf, w2 = be32_to_cpu(chunk[2])); + Round(f, g, h, &a, b, c, d, &e, 0xe9b5dba5, w3 = be32_to_cpu(chunk[3])); + Round(e, f, g, &h, a, b, c, &d, 0x3956c25b, w4 = be32_to_cpu(chunk[4])); + Round(d, e, f, &g, h, a, b, &c, 0x59f111f1, w5 = be32_to_cpu(chunk[5])); + Round(c, d, e, &f, g, h, a, &b, 0x923f82a4, w6 = be32_to_cpu(chunk[6])); + Round(b, c, d, &e, f, g, h, &a, 0xab1c5ed5, w7 = be32_to_cpu(chunk[7])); + Round(a, b, c, &d, e, f, g, &h, 0xd807aa98, w8 = be32_to_cpu(chunk[8])); + Round(h, a, b, &c, d, e, f, &g, 0x12835b01, w9 = be32_to_cpu(chunk[9])); + Round(g, h, a, &b, c, d, e, &f, 0x243185be, w10 = be32_to_cpu(chunk[10])); + Round(f, g, h, &a, b, c, d, &e, 0x550c7dc3, w11 = be32_to_cpu(chunk[11])); + Round(e, f, g, &h, a, b, c, &d, 0x72be5d74, w12 = be32_to_cpu(chunk[12])); + Round(d, e, f, &g, h, a, b, &c, 0x80deb1fe, w13 = be32_to_cpu(chunk[13])); + Round(c, d, e, &f, g, h, a, &b, 0x9bdc06a7, w14 = be32_to_cpu(chunk[14])); + Round(b, c, d, &e, f, g, h, &a, 0xc19bf174, w15 = be32_to_cpu(chunk[15])); + + Round(a, b, c, &d, e, f, g, &h, 0xe49b69c1, w0 += sigma1(w14) + w9 + sigma0(w1)); + Round(h, a, b, &c, d, e, f, &g, 0xefbe4786, w1 += sigma1(w15) + w10 + sigma0(w2)); + Round(g, h, a, &b, c, d, e, &f, 0x0fc19dc6, w2 += sigma1(w0) + w11 + sigma0(w3)); + Round(f, g, h, &a, b, c, d, &e, 0x240ca1cc, w3 += sigma1(w1) + w12 + sigma0(w4)); + Round(e, f, g, &h, a, b, c, &d, 0x2de92c6f, w4 += sigma1(w2) + w13 + sigma0(w5)); + Round(d, e, f, &g, h, a, b, &c, 0x4a7484aa, w5 += sigma1(w3) + w14 + sigma0(w6)); + Round(c, d, e, &f, g, h, a, &b, 0x5cb0a9dc, w6 += sigma1(w4) + w15 + sigma0(w7)); + Round(b, c, d, &e, f, g, h, &a, 0x76f988da, w7 += sigma1(w5) + w0 + sigma0(w8)); + Round(a, b, c, &d, e, f, g, &h, 0x983e5152, w8 += sigma1(w6) + w1 + sigma0(w9)); + Round(h, a, b, &c, d, e, f, &g, 0xa831c66d, w9 += sigma1(w7) + w2 + sigma0(w10)); + Round(g, h, a, &b, c, d, e, &f, 0xb00327c8, w10 += sigma1(w8) + w3 + sigma0(w11)); + Round(f, g, h, &a, b, c, d, &e, 0xbf597fc7, w11 += sigma1(w9) + w4 + sigma0(w12)); + Round(e, f, g, &h, a, b, c, &d, 0xc6e00bf3, w12 += sigma1(w10) + w5 + sigma0(w13)); + Round(d, e, f, &g, h, a, b, &c, 0xd5a79147, w13 += sigma1(w11) + w6 + sigma0(w14)); + Round(c, d, e, &f, g, h, a, &b, 0x06ca6351, w14 += sigma1(w12) + w7 + sigma0(w15)); + Round(b, c, d, &e, f, g, h, &a, 0x14292967, w15 += sigma1(w13) + w8 + sigma0(w0)); + + Round(a, b, c, &d, e, f, g, &h, 0x27b70a85, w0 += sigma1(w14) + w9 + sigma0(w1)); + Round(h, a, b, &c, d, e, f, &g, 0x2e1b2138, w1 += sigma1(w15) + w10 + sigma0(w2)); + Round(g, h, a, &b, c, d, e, &f, 0x4d2c6dfc, w2 += sigma1(w0) + w11 + sigma0(w3)); + Round(f, g, h, &a, b, c, d, &e, 0x53380d13, w3 += sigma1(w1) + w12 + sigma0(w4)); + Round(e, f, g, &h, a, b, c, &d, 0x650a7354, w4 += sigma1(w2) + w13 + sigma0(w5)); + Round(d, e, f, &g, h, a, b, &c, 0x766a0abb, w5 += sigma1(w3) + w14 + sigma0(w6)); + Round(c, d, e, &f, g, h, a, &b, 0x81c2c92e, w6 += sigma1(w4) + w15 + sigma0(w7)); + Round(b, c, d, &e, f, g, h, &a, 0x92722c85, w7 += sigma1(w5) + w0 + sigma0(w8)); + Round(a, b, c, &d, e, f, g, &h, 0xa2bfe8a1, w8 += sigma1(w6) + w1 + sigma0(w9)); + Round(h, a, b, &c, d, e, f, &g, 0xa81a664b, w9 += sigma1(w7) + w2 + sigma0(w10)); + Round(g, h, a, &b, c, d, e, &f, 0xc24b8b70, w10 += sigma1(w8) + w3 + sigma0(w11)); + Round(f, g, h, &a, b, c, d, &e, 0xc76c51a3, w11 += sigma1(w9) + w4 + sigma0(w12)); + Round(e, f, g, &h, a, b, c, &d, 0xd192e819, w12 += sigma1(w10) + w5 + sigma0(w13)); + Round(d, e, f, &g, h, a, b, &c, 0xd6990624, w13 += sigma1(w11) + w6 + sigma0(w14)); + Round(c, d, e, &f, g, h, a, &b, 0xf40e3585, w14 += sigma1(w12) + w7 + sigma0(w15)); + Round(b, c, d, &e, f, g, h, &a, 0x106aa070, w15 += sigma1(w13) + w8 + sigma0(w0)); + + Round(a, b, c, &d, e, f, g, &h, 0x19a4c116, w0 += sigma1(w14) + w9 + sigma0(w1)); + Round(h, a, b, &c, d, e, f, &g, 0x1e376c08, w1 += sigma1(w15) + w10 + sigma0(w2)); + Round(g, h, a, &b, c, d, e, &f, 0x2748774c, w2 += sigma1(w0) + w11 + sigma0(w3)); + Round(f, g, h, &a, b, c, d, &e, 0x34b0bcb5, w3 += sigma1(w1) + w12 + sigma0(w4)); + Round(e, f, g, &h, a, b, c, &d, 0x391c0cb3, w4 += sigma1(w2) + w13 + sigma0(w5)); + Round(d, e, f, &g, h, a, b, &c, 0x4ed8aa4a, w5 += sigma1(w3) + w14 + sigma0(w6)); + Round(c, d, e, &f, g, h, a, &b, 0x5b9cca4f, w6 += sigma1(w4) + w15 + sigma0(w7)); + Round(b, c, d, &e, f, g, h, &a, 0x682e6ff3, w7 += sigma1(w5) + w0 + sigma0(w8)); + Round(a, b, c, &d, e, f, g, &h, 0x748f82ee, w8 += sigma1(w6) + w1 + sigma0(w9)); + Round(h, a, b, &c, d, e, f, &g, 0x78a5636f, w9 += sigma1(w7) + w2 + sigma0(w10)); + Round(g, h, a, &b, c, d, e, &f, 0x84c87814, w10 += sigma1(w8) + w3 + sigma0(w11)); + Round(f, g, h, &a, b, c, d, &e, 0x8cc70208, w11 += sigma1(w9) + w4 + sigma0(w12)); + Round(e, f, g, &h, a, b, c, &d, 0x90befffa, w12 += sigma1(w10) + w5 + sigma0(w13)); + Round(d, e, f, &g, h, a, b, &c, 0xa4506ceb, w13 += sigma1(w11) + w6 + sigma0(w14)); + Round(c, d, e, &f, g, h, a, &b, 0xbef9a3f7, w14 + sigma1(w12) + w7 + sigma0(w15)); + Round(b, c, d, &e, f, g, h, &a, 0xc67178f2, w15 + sigma1(w13) + w8 + sigma0(w0)); + + s[0] += a; + s[1] += b; + s[2] += c; + s[3] += d; + s[4] += e; + s[5] += f; + s[6] += g; + s[7] += h; } + static void add(struct sha256_ctx *ctx, const void *p, size_t len) { - const unsigned char *data = p; - size_t bufsize = ctx->bytes % 64; - - if (bufsize + len >= 64) { - /* Fill the buffer, and process it. */ - memcpy(ctx->buf.u8 + bufsize, data, 64 - bufsize); - ctx->bytes += 64 - bufsize; - data += 64 - bufsize; - len -= 64 - bufsize; - Transform(ctx->s, ctx->buf.u32); - bufsize = 0; - } - - while (len >= 64) { - /* Process full chunks directly from the source. */ - if (alignment_ok(data, sizeof(uint32_t))) - Transform(ctx->s, (const uint32_t *)data); - else { - memcpy(ctx->buf.u8, data, sizeof(ctx->buf)); - Transform(ctx->s, ctx->buf.u32); - } - ctx->bytes += 64; - data += 64; - len -= 64; - } - - if (len) { - /* Fill the buffer with what remains. */ - memcpy(ctx->buf.u8 + bufsize, data, len); - ctx->bytes += len; - } + const unsigned char *data = p; + size_t bufsize = ctx->bytes % 64; + + if (bufsize + len >= 64) { + /* Fill the buffer, and process it. */ + memcpy(ctx->buf.u8 + bufsize, data, 64 - bufsize); + ctx->bytes += 64 - bufsize; + data += 64 - bufsize; + len -= 64 - bufsize; + Transform(ctx->s, ctx->buf.u32); + bufsize = 0; + } + + while (len >= 64) { + /* Process full chunks directly from the source. */ + if (alignment_ok(data, sizeof(uint32_t))) + Transform(ctx->s, (const uint32_t *)data); + else { + memcpy(ctx->buf.u8, data, sizeof(ctx->buf)); + Transform(ctx->s, ctx->buf.u32); + } + ctx->bytes += 64; + data += 64; + len -= 64; + } + + if (len) { + /* Fill the buffer with what remains. */ + memcpy(ctx->buf.u8 + bufsize, data, len); + ctx->bytes += len; + } } void sha256_init(struct sha256_ctx *ctx) { - struct sha256_ctx init = SHA256_INIT; - *ctx = init; + struct sha256_ctx init = SHA256_INIT; + *ctx = init; } void sha256_update(struct sha256_ctx *ctx, const void *p, size_t size) { - check_sha256(ctx); - add(ctx, p, size); + check_sha256(ctx); + add(ctx, p, size); } void sha256_done(struct sha256_ctx *ctx, struct sha256 *res) { - static const unsigned char pad[64] = {0x80}; - uint64_t sizedesc; - size_t i; - - sizedesc = cpu_to_be64((uint64_t)ctx->bytes << 3); - /* Add '1' bit to terminate, then all 0 bits, up to next block - 8. */ - add(ctx, pad, 1 + ((128 - 8 - (ctx->bytes % 64) - 1) % 64)); - /* Add number of bits of data (big endian) */ - add(ctx, &sizedesc, 8); - for (i = 0; i < sizeof(ctx->s) / sizeof(ctx->s[0]); i++) - res->u.u32[i] = cpu_to_be32(ctx->s[i]); - invalidate_sha256(ctx); + static const unsigned char pad[64] = {0x80}; + uint64_t sizedesc; + size_t i; + + sizedesc = cpu_to_be64((uint64_t)ctx->bytes << 3); + /* Add '1' bit to terminate, then all 0 bits, up to next block - 8. */ + add(ctx, pad, 1 + ((128 - 8 - (ctx->bytes % 64) - 1) % 64)); + /* Add number of bits of data (big endian) */ + add(ctx, &sizedesc, 8); + for (i = 0; i < sizeof(ctx->s) / sizeof(ctx->s[0]); i++) + res->u.u32[i] = cpu_to_be32(ctx->s[i]); + invalidate_sha256(ctx); } #endif void sha256(struct sha256 *sha, const void *p, size_t size) { - struct sha256_ctx ctx; + struct sha256_ctx ctx; - sha256_init(&ctx); - sha256_update(&ctx, p, size); - sha256_done(&ctx, sha); + sha256_init(&ctx); + sha256_update(&ctx, p, size); + sha256_done(&ctx, sha); } - + void sha256_u8(struct sha256_ctx *ctx, uint8_t v) { - sha256_update(ctx, &v, sizeof(v)); + sha256_update(ctx, &v, sizeof(v)); } void sha256_u16(struct sha256_ctx *ctx, uint16_t v) { - sha256_update(ctx, &v, sizeof(v)); + sha256_update(ctx, &v, sizeof(v)); } void sha256_u32(struct sha256_ctx *ctx, uint32_t v) { - sha256_update(ctx, &v, sizeof(v)); + sha256_update(ctx, &v, sizeof(v)); } void sha256_u64(struct sha256_ctx *ctx, uint64_t v) { - sha256_update(ctx, &v, sizeof(v)); + sha256_update(ctx, &v, sizeof(v)); } /* Add as little-endian */ void sha256_le16(struct sha256_ctx *ctx, uint16_t v) { - leint16_t lev = cpu_to_le16(v); - sha256_update(ctx, &lev, sizeof(lev)); + leint16_t lev = cpu_to_le16(v); + sha256_update(ctx, &lev, sizeof(lev)); } - + void sha256_le32(struct sha256_ctx *ctx, uint32_t v) { - leint32_t lev = cpu_to_le32(v); - sha256_update(ctx, &lev, sizeof(lev)); + leint32_t lev = cpu_to_le32(v); + sha256_update(ctx, &lev, sizeof(lev)); } - + void sha256_le64(struct sha256_ctx *ctx, uint64_t v) { - leint64_t lev = cpu_to_le64(v); - sha256_update(ctx, &lev, sizeof(lev)); + leint64_t lev = cpu_to_le64(v); + sha256_update(ctx, &lev, sizeof(lev)); } /* Add as big-endian */ void sha256_be16(struct sha256_ctx *ctx, uint16_t v) { - beint16_t bev = cpu_to_be16(v); - sha256_update(ctx, &bev, sizeof(bev)); + beint16_t bev = cpu_to_be16(v); + sha256_update(ctx, &bev, sizeof(bev)); } - + void sha256_be32(struct sha256_ctx *ctx, uint32_t v) { - beint32_t bev = cpu_to_be32(v); - sha256_update(ctx, &bev, sizeof(bev)); + beint32_t bev = cpu_to_be32(v); + sha256_update(ctx, &bev, sizeof(bev)); } - + void sha256_be64(struct sha256_ctx *ctx, uint64_t v) { - beint64_t bev = cpu_to_be64(v); - sha256_update(ctx, &bev, sizeof(bev)); + beint64_t bev = cpu_to_be64(v); + sha256_update(ctx, &bev, sizeof(bev)); } + + diff --git a/nostrdb/sha256.h b/nostrdb/sha256.h index 0032eb7ba..2a9283120 100644 --- a/nostrdb/sha256.h +++ b/nostrdb/sha256.h @@ -1,7 +1,14 @@ + #ifndef CCAN_CRYPTO_SHA256_H #define CCAN_CRYPTO_SHA256_H + + +/** Output length for `wally_sha256` */ +#define SHA256_LEN 32 + + /* BSD-MIT - see LICENSE file for details */ -#include "config.h" +/* #include "config.h" */ #include #include @@ -20,17 +27,17 @@ * Other fields may be added to the union in future. */ struct sha256 { - union { - uint32_t u32[8]; - unsigned char u8[32]; - } u; + union { + uint32_t u32[8]; + unsigned char u8[32]; + } u; }; /** * sha256 - return sha256 of an object. * @sha256: the sha256 to fill in * @p: pointer to memory, - * @size: the number of bytes pointed to by + * @size: the number of bytes pointed to by @p * * The bytes pointed to by @p is SHA256 hashed into @sha256. This is * equivalent to sha256_init(), sha256_update() then sha256_done(). @@ -42,14 +49,14 @@ void sha256(struct sha256 *sha, const void *p, size_t size); */ struct sha256_ctx { #ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL - SHA256_CTX c; + SHA256_CTX c; #else - uint32_t s[8]; - union { - uint32_t u32[16]; - unsigned char u8[64]; - } buf; - size_t bytes; + uint32_t s[8]; + union { + uint32_t u32[16]; + unsigned char u8[64]; + } buf; + size_t bytes; #endif }; @@ -66,13 +73,13 @@ struct sha256_ctx { * Example: * static void hash_all(const char **arr, struct sha256 *hash) * { - * size_t i; - * struct sha256_ctx ctx; + * size_t i; + * struct sha256_ctx ctx; * - * sha256_init(&ctx); - * for (i = 0; arr[i]; i++) - * sha256_update(&ctx, arr[i], strlen(arr[i])); - * sha256_done(&ctx, hash); + * sha256_init(&ctx); + * for (i = 0; arr[i]; i++) + * sha256_update(&ctx, arr[i], strlen(arr[i])); + * sha256_done(&ctx, hash); * } */ void sha256_init(struct sha256_ctx *ctx); @@ -86,33 +93,33 @@ void sha256_init(struct sha256_ctx *ctx); * Example: * static void hash_all(const char **arr, struct sha256 *hash) * { - * size_t i; - * struct sha256_ctx ctx = SHA256_INIT; + * size_t i; + * struct sha256_ctx ctx = SHA256_INIT; * - * for (i = 0; arr[i]; i++) - * sha256_update(&ctx, arr[i], strlen(arr[i])); - * sha256_done(&ctx, hash); + * for (i = 0; arr[i]; i++) + * sha256_update(&ctx, arr[i], strlen(arr[i])); + * sha256_done(&ctx, hash); * } */ #ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL -#define SHA256_INIT \ - { { { 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, \ - 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul }, \ - 0x0, 0x0, \ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, \ - 0x0, 0x20 } } +#define SHA256_INIT \ + { { { 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, \ + 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul }, \ + 0x0, 0x0, \ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, \ + 0x0, 0x20 } } #else -#define SHA256_INIT \ - { { 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, \ - 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul }, \ - { { 0 } }, 0 } +#define SHA256_INIT \ + { { 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, \ + 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul }, \ + { { 0 } }, 0 } #endif /** * sha256_update - include some memory in the hash. * @ctx: the sha256_ctx to use * @p: pointer to memory, - * @size: the number of bytes pointed to by + * @size: the number of bytes pointed to by @p * * You can call this multiple times to hash more data, before calling * sha256_done(). @@ -144,4 +151,5 @@ void sha256_le64(struct sha256_ctx *ctx, uint64_t v); void sha256_be16(struct sha256_ctx *ctx, uint16_t v); void sha256_be32(struct sha256_ctx *ctx, uint32_t v); void sha256_be64(struct sha256_ctx *ctx, uint64_t v); + #endif /* CCAN_CRYPTO_SHA256_H */ diff --git a/nostrdb/test.c b/nostrdb/test.c new file mode 100644 index 000000000..2a09f9afb --- /dev/null +++ b/nostrdb/test.c @@ -0,0 +1,1009 @@ + +#include "nostrdb.h" +#include "hex.h" +#include "io.h" +#include "bolt11/bolt11.h" +#include "bolt11/amount.h" +#include "protected_queue.h" +#include "memchr.h" +#include "print_util.h" +#include "bindings/c/profile_reader.h" +#include "bindings/c/profile_verifier.h" +#include "bindings/c/meta_reader.h" +#include "bindings/c/meta_verifier.h" + +#include +#include +#include + +#define ARRAY_SIZE(x) (sizeof(x) / sizeof(x[0])) + +static const char *test_dir = "./testdata/db"; + +static NdbProfile_table_t lookup_profile(struct ndb_txn *txn, uint64_t pk) +{ + void *root; + size_t len; + assert((root = ndb_get_profile_by_key(txn, pk, &len))); + assert(root); + + NdbProfileRecord_table_t profile_record = NdbProfileRecord_as_root(root); + NdbProfile_table_t profile = NdbProfileRecord_profile_get(profile_record); + return profile; +} + +static void print_search(struct ndb_txn *txn, struct ndb_search *search) +{ + NdbProfile_table_t profile = lookup_profile(txn, search->profile_key); + const char *name = NdbProfile_name_get(profile); + const char *display_name = NdbProfile_display_name_get(profile); + printf("searched_name name:'%s' display_name:'%s' pk:%" PRIu64 " ts:%" PRIu64 " id:", name, display_name, search->profile_key, search->key->timestamp); + print_hex(search->key->id, 32); + printf("\n"); +} + + +static void test_filters() +{ + struct ndb_filter filter, *f; + struct ndb_note *note; + unsigned char buffer[4096]; + + const char *test_note = "{\"id\": \"160e76ca67405d7ce9ef7d2dd72f3f36401c8661a73d45498af842d40b01b736\",\"pubkey\": \"67c67870aebc327eb2a2e765e6dbb42f0f120d2c4e4e28dc16b824cf72a5acc1\",\"created_at\": 1700688516,\"kind\": 1337,\"tags\": [[\"t\",\"hashtag\"],[\"t\",\"grownostr\"],[\"p\",\"4d2e7a6a8e08007ace5a03391d21735f45caf1bf3d67b492adc28967ab46525e\"]],\"content\": \"\",\"sig\": \"20c2d070261ed269559ada40ca5ac395c389681ee3b5f7d50de19dd9b328dd70cf27d9d13875e87c968d9b49fa05f66e90f18037be4529b9e582c7e2afac3f06\"}"; + + f = &filter; + assert(ndb_note_from_json(test_note, strlen(test_note), ¬e, buffer, sizeof(buffer))); + + assert(ndb_filter_init(f)); + assert(ndb_filter_start_field(f, NDB_FILTER_KINDS)); + assert(ndb_filter_add_int_element(f, 1337)); + assert(ndb_filter_add_int_element(f, 2)); + + assert(f->current->count == 2); + assert(f->current->field.type == NDB_FILTER_KINDS); + + // can't start if we've already started + assert(ndb_filter_start_field(f, NDB_FILTER_KINDS) == 0); + assert(ndb_filter_start_field(f, NDB_FILTER_GENERIC) == 0); + ndb_filter_end_field(f); + + // try matching the filter + assert(ndb_filter_matches(f, note)); + + _ndb_note_set_kind(note, 1); + + // inverse match + assert(!ndb_filter_matches(f, note)); + + // should also match 2 + _ndb_note_set_kind(note, 2); + assert(ndb_filter_matches(f, note)); + + // don't free, just reset data pointers + ndb_filter_reset(f); + + // now try generic matches + assert(ndb_filter_start_generic_field(f, 't')); + assert(ndb_filter_add_str_element(f, "grownostr")); + ndb_filter_end_field(f); + assert(ndb_filter_start_field(f, NDB_FILTER_KINDS)); + assert(ndb_filter_add_int_element(f, 3)); + ndb_filter_end_field(f); + + // shouldn't match the kind filter + assert(!ndb_filter_matches(f, note)); + + _ndb_note_set_kind(note, 3); + + // now it should + assert(ndb_filter_matches(f, note)); + + ndb_filter_reset(f); + assert(ndb_filter_start_field(f, NDB_FILTER_AUTHORS)); + assert(ndb_filter_add_id_element(f, ndb_note_pubkey(note))); + ndb_filter_end_field(f); + assert(f->current == NULL); + assert(ndb_filter_matches(f, note)); + + ndb_filter_free(f); +} + +// Test fetched_at profile records. These are saved when new profiles are +// processed, or the last time we've fetched the profile. +static void test_fetched_at() +{ + struct ndb *ndb; + struct ndb_txn txn; + uint64_t fetched_at, t1, t2; + struct ndb_config config; + ndb_default_config(&config); + + assert(ndb_init(&ndb, test_dir, &config)); + + const unsigned char pubkey[] = { 0x87, 0xfb, 0xc6, 0xd5, 0x98, 0x31, 0xa8, 0x23, 0xa4, 0x5d, 0x10, 0x1f, + 0x86, 0x94, 0x2c, 0x41, 0xcd, 0xe2, 0x90, 0x23, 0xf4, 0x09, 0x20, 0x24, + 0xa2, 0x7c, 0x50, 0x10, 0x3c, 0x15, 0x40, 0x01 }; + + const char profile_1[] = "[\"EVENT\",{\"id\": \"a44eb8fb6931d6155b04038bef0624407e46c85c61e5758392cbb615f00184ca\",\"pubkey\": \"87fbc6d59831a823a45d101f86942c41cde29023f4092024a27c50103c154001\",\"created_at\": 1695593354,\"kind\": 0,\"tags\": [],\"content\": \"{\\\"name\\\":\\\"b\\\"}\",\"sig\": \"7540bbde4b4479275e20d95acaa64027359a73989927f878825093cba2f468bd8e195919a77b4c230acecddf92e6b4bee26918b0c0842f84ec7c1fae82453906\"}]"; + + t1 = time(NULL); + + // process the first event, this should set the fetched_at + assert(ndb_process_client_event(ndb, profile_1, sizeof(profile_1))); + + // we sleep for a second because we want to make sure the fetched_at is not + // updated for the next record, which is an older profile. + sleep(1); + + assert(ndb_begin_query(ndb, &txn)); + + // this should be set to t1 + fetched_at = ndb_read_last_profile_fetch(&txn, pubkey); + + assert(fetched_at == t1); + + t2 = time(NULL); + assert(t1 != t2); // sanity + + const char profile_2[] = "[\"EVENT\",{\"id\": \"9b2861dda8fc602ec2753f92f1a443c9565de606e0c8f4fd2db4f2506a3b13ca\",\"pubkey\": \"87fbc6d59831a823a45d101f86942c41cde29023f4092024a27c50103c154001\",\"created_at\": 1695593347,\"kind\": 0,\"tags\": [],\"content\": \"{\\\"name\\\":\\\"a\\\"}\",\"sig\": \"f48da228f8967d33c3caf0a78f853b5144631eb86c7777fd25949123a5272a92765a0963d4686dd0efe05b7a9b986bfac8d43070b234153acbae5006d5a90f31\"}]"; + + t2 = time(NULL); + + // process the second event, since this is older it should not change + // fetched_at + assert(ndb_process_client_event(ndb, profile_2, sizeof(profile_2))); + + // we sleep for a second because we want to make sure the fetched_at is not + // updated for the next record, which is an older profile. + sleep(1); + + fetched_at = ndb_read_last_profile_fetch(&txn, pubkey); + assert(fetched_at == t1); +} + +static void test_reaction_counter() +{ + static const int alloc_size = 1024 * 1024; + char *json = malloc(alloc_size); + struct ndb *ndb; + size_t len; + void *root; + int written, reactions; + NdbEventMeta_table_t meta; + struct ndb_txn txn; + struct ndb_config config; + ndb_default_config(&config); + + assert(ndb_init(&ndb, test_dir, &config)); + + read_file("testdata/reactions.json", (unsigned char*)json, alloc_size, &written); + assert(ndb_process_client_events(ndb, json, written)); + ndb_destroy(ndb); + + assert(ndb_init(&ndb, test_dir, &config)); + + assert(ndb_begin_query(ndb, &txn)); + + const unsigned char id[32] = { + 0x1a, 0x41, 0x56, 0x30, 0x31, 0x09, 0xbb, 0x4a, 0x66, 0x0a, 0x6a, 0x90, + 0x04, 0xb0, 0xcd, 0xce, 0x8d, 0x83, 0xc3, 0x99, 0x1d, 0xe7, 0x86, 0x4f, + 0x18, 0x76, 0xeb, 0x0f, 0x62, 0x2c, 0x68, 0xe8 + }; + + assert((root = ndb_get_note_meta(&txn, id, &len))); + assert(0 == NdbEventMeta_verify_as_root(root, len)); + assert((meta = NdbEventMeta_as_root(root))); + + reactions = NdbEventMeta_reactions_get(meta); + //printf("counted reactions: %d\n", reactions); + assert(reactions == 2); + ndb_end_query(&txn); + ndb_destroy(ndb); +} + +static void test_profile_search(struct ndb *ndb) +{ + struct ndb_txn txn; + struct ndb_search search; + int i; + const char *name; + NdbProfile_table_t profile; + + assert(ndb_begin_query(ndb, &txn)); + assert(ndb_search_profile(&txn, &search, "jean")); + //print_search(&txn, &search); + profile = lookup_profile(&txn, search.profile_key); + name = NdbProfile_name_get(profile); + assert(!strncmp(name, "jean", 4)); + + assert(ndb_search_profile_next(&search)); + //print_search(&txn, &search); + profile = lookup_profile(&txn, search.profile_key); + name = NdbProfile_name_get(profile); + //assert(strncmp(name, "jean", 4)); + + for (i = 0; i < 3; i++) { + ndb_search_profile_next(&search); + //print_search(&txn, &search); + } + + //assert(!strcmp(name, "jb55")); + + ndb_search_profile_end(&search); + ndb_end_query(&txn); +} + +static void test_profile_updates() +{ + static const int alloc_size = 1024 * 1024; + char *json = malloc(alloc_size); + struct ndb *ndb; + size_t len; + void *record; + int written; + struct ndb_txn txn; + uint64_t key; + struct ndb_config config; + ndb_default_config(&config); + + assert(ndb_init(&ndb, test_dir, &config)); + + read_file("testdata/profile-updates.json", (unsigned char*)json, alloc_size, &written); + + assert(ndb_process_client_events(ndb, json, written)); + + ndb_destroy(ndb); + + assert(ndb_init(&ndb, test_dir, &config)); + + assert(ndb_begin_query(ndb, &txn)); + const unsigned char pk[32] = { + 0x87, 0xfb, 0xc6, 0xd5, 0x98, 0x31, 0xa8, 0x23, 0xa4, 0x5d, + 0x10, 0x1f, 0x86, 0x94, 0x2c, 0x41, 0xcd, 0xe2, 0x90, 0x23, + 0xf4, 0x09, 0x20, 0x24, 0xa2, 0x7c, 0x50, 0x10, 0x3c, 0x15, + 0x40, 0x01 + }; + record = ndb_get_profile_by_pubkey(&txn, pk, &len, &key); + + assert(record); + int res = NdbProfileRecord_verify_as_root(record, len); + assert(res == 0); + + NdbProfileRecord_table_t profile_record = NdbProfileRecord_as_root(record); + NdbProfile_table_t profile = NdbProfileRecord_profile_get(profile_record); + const char *name = NdbProfile_name_get(profile); + + assert(!strcmp(name, "c")); + + ndb_destroy(ndb); +} + +static void test_load_profiles() +{ + static const int alloc_size = 1024 * 1024; + char *json = malloc(alloc_size); + struct ndb *ndb; + int written; + struct ndb_config config; + ndb_default_config(&config); + + assert(ndb_init(&ndb, test_dir, &config)); + + read_file("testdata/profiles.json", (unsigned char*)json, alloc_size, &written); + + assert(ndb_process_events(ndb, json, written)); + + ndb_destroy(ndb); + + assert(ndb_init(&ndb, test_dir, &config)); + unsigned char id[32] = { + 0x22, 0x05, 0x0b, 0x6d, 0x97, 0xbb, 0x9d, 0xa0, 0x9e, 0x90, 0xed, 0x0c, + 0x6d, 0xd9, 0x5e, 0xed, 0x1d, 0x42, 0x3e, 0x27, 0xd5, 0xcb, 0xa5, 0x94, + 0xd2, 0xb4, 0xd1, 0x3a, 0x55, 0x43, 0x09, 0x07 }; + const char *expected_content = "{\"website\":\"selenejin.com\",\"lud06\":\"\",\"nip05\":\"selenejin@BitcoinNostr.com\",\"picture\":\"https://nostr.build/i/3549697beda0fe1f4ae621f359c639373d92b7c8d5c62582b656c5843138c9ed.jpg\",\"display_name\":\"Selene Jin\",\"about\":\"INTJ | Founding Designer @Blockstream\",\"name\":\"SeleneJin\"}"; + + struct ndb_txn txn; + assert(ndb_begin_query(ndb, &txn)); + struct ndb_note *note = ndb_get_note_by_id(&txn, id, NULL, NULL); + assert(note != NULL); + assert(!strcmp(ndb_note_content(note), expected_content)); + ndb_end_query(&txn); + + test_profile_search(ndb); + + ndb_destroy(ndb); + + free(json); +} + +static void test_fuzz_events() { + struct ndb *ndb; + const char *str = "[\"EVENT\"\"\"{\"content\"\"created_at\":0 \"id\"\"5086a8f76fe1da7fb56a25d1bebbafd70fca62e36a72c6263f900ff49b8f8604\"\"kind\":0 \"pubkey\":9c87f94bcbe2a837adc28d46c34eeaab8fc2e1cdf94fe19d4b99ae6a5e6acedc \"sig\"\"27374975879c94658412469cee6db73d538971d21a7b580726a407329a4cafc677fb56b946994cea59c3d9e118fef27e4e61de9d2c46ac0a65df14153 ea93cf5\"\"tags\"[[][\"\"]]}]"; + struct ndb_config config; + ndb_default_config(&config); + + ndb_init(&ndb, test_dir, &config); + ndb_process_event(ndb, str, strlen(str)); + ndb_destroy(ndb); +} + +static void test_migrate() { + static const char *v0_dir = "testdata/db/v0"; + struct ndb *ndb; + struct ndb_config config; + ndb_default_config(&config); + ndb_config_set_flags(&config, NDB_FLAG_NOMIGRATE); + + fprintf(stderr, "testing migrate on v0\n"); + assert(ndb_init(&ndb, v0_dir, &config)); + assert(ndb_db_version(ndb) == 0); + ndb_destroy(ndb); + + ndb_config_set_flags(&config, 0); + + assert(ndb_init(&ndb, v0_dir, &config)); + ndb_destroy(ndb); + assert(ndb_init(&ndb, v0_dir, &config)); + assert(ndb_db_version(ndb) == 3); + + test_profile_search(ndb); + ndb_destroy(ndb); +} + +static void test_basic_event() { + unsigned char buf[512]; + struct ndb_builder builder, *b = &builder; + struct ndb_note *note; + int ok; + + unsigned char id[32]; + memset(id, 1, 32); + + unsigned char pubkey[32]; + memset(pubkey, 2, 32); + + unsigned char sig[64]; + memset(sig, 3, 64); + + const char *hex_pk = "5d9b81b2d4d5609c5565286fc3b511dc6b9a1b3d7d1174310c624d61d1f82bb9"; + + ok = ndb_builder_init(b, buf, sizeof(buf)); + assert(ok); + note = builder.note; + + //memset(note->padding, 3, sizeof(note->padding)); + + ok = ndb_builder_set_content(b, hex_pk, strlen(hex_pk)); assert(ok); + ndb_builder_set_id(b, id); assert(ok); + ndb_builder_set_pubkey(b, pubkey); assert(ok); + ndb_builder_set_sig(b, sig); assert(ok); + + ok = ndb_builder_new_tag(b); assert(ok); + ok = ndb_builder_push_tag_str(b, "p", 1); assert(ok); + ok = ndb_builder_push_tag_str(b, hex_pk, 64); assert(ok); + + ok = ndb_builder_new_tag(b); assert(ok); + ok = ndb_builder_push_tag_str(b, "word", 4); assert(ok); + ok = ndb_builder_push_tag_str(b, "words", 5); assert(ok); + ok = ndb_builder_push_tag_str(b, "w", 1); assert(ok); + + ok = ndb_builder_finalize(b, ¬e, NULL); + assert(ok); + + // content should never be packed id + // TODO: figure out how to test this now that we don't expose it + // assert(note->content.packed.flag != NDB_PACKED_ID); + assert(ndb_tags_count(ndb_note_tags(note)) == 2); + + // test iterator + struct ndb_iterator iter, *it = &iter; + + ndb_tags_iterate_start(note, it); + ok = ndb_tags_iterate_next(it); + assert(ok); + + assert(ndb_tag_count(it->tag) == 2); + const char *p = ndb_iter_tag_str(it, 0).str; + struct ndb_str hpk = ndb_iter_tag_str(it, 1); + + hex_decode(hex_pk, 64, id, 32); + + assert(hpk.flag == NDB_PACKED_ID); + assert(memcmp(hpk.id, id, 32) == 0); + assert(!strcmp(p, "p")); + + ok = ndb_tags_iterate_next(it); + assert(ok); + assert(ndb_tag_count(it->tag) == 3); + assert(!strcmp(ndb_iter_tag_str(it, 0).str, "word")); + assert(!strcmp(ndb_iter_tag_str(it, 1).str, "words")); + assert(!strcmp(ndb_iter_tag_str(it, 2).str, "w")); + + ok = ndb_tags_iterate_next(it); + assert(!ok); +} + +static void test_empty_tags() { + struct ndb_builder builder, *b = &builder; + struct ndb_iterator iter, *it = &iter; + struct ndb_note *note; + int ok; + unsigned char buf[1024]; + + ok = ndb_builder_init(b, buf, sizeof(buf)); + assert(ok); + + ok = ndb_builder_finalize(b, ¬e, NULL); + assert(ok); + + assert(ndb_tags_count(ndb_note_tags(note)) == 0); + + ndb_tags_iterate_start(note, it); + ok = ndb_tags_iterate_next(it); + assert(!ok); +} + +static void print_tag(struct ndb_note *note, struct ndb_tag *tag) { + struct ndb_str str; + int tag_count = ndb_tag_count(tag); + for (int i = 0; i < tag_count; i++) { + str = ndb_tag_str(note, tag, i); + if (str.flag == NDB_PACKED_ID) { + printf(" "); + } else { + printf("%s ", str.str); + } + } + printf("\n"); +} + +static void test_parse_contact_list() +{ + int size, written = 0; + unsigned char id[32]; + static const int alloc_size = 2 << 18; + unsigned char *json = malloc(alloc_size); + unsigned char *buf = malloc(alloc_size); + struct ndb_note *note; + + read_file("testdata/contacts.json", json, alloc_size, &written); + + size = ndb_note_from_json((const char*)json, written, ¬e, buf, alloc_size); + printf("ndb_note_from_json size %d\n", size); + assert(size > 0); + assert(size == 34328); + + memcpy(id, ndb_note_id(note), 32); + memset(ndb_note_id(note), 0, 32); + assert(ndb_calculate_id(note, json, alloc_size)); + assert(!memcmp(ndb_note_id(note), id, 32)); + + const char* expected_content = + "{\"wss://nos.lol\":{\"write\":true,\"read\":true}," + "\"wss://relay.damus.io\":{\"write\":true,\"read\":true}," + "\"ws://monad.jb55.com:8080\":{\"write\":true,\"read\":true}," + "\"wss://nostr.wine\":{\"write\":true,\"read\":true}," + "\"wss://welcome.nostr.wine\":{\"write\":true,\"read\":true}," + "\"wss://eden.nostr.land\":{\"write\":true,\"read\":true}," + "\"wss://relay.mostr.pub\":{\"write\":true,\"read\":true}," + "\"wss://nostr-pub.wellorder.net\":{\"write\":true,\"read\":true}}"; + + assert(!strcmp(expected_content, ndb_note_content(note))); + assert(ndb_note_created_at(note) == 1689904312); + assert(ndb_note_kind(note) == 3); + assert(ndb_tags_count(ndb_note_tags(note)) == 786); + //printf("note content length %d\n", ndb_note_content_length(note)); + printf("ndb_content_len %d, expected_len %ld\n", + ndb_note_content_length(note), + strlen(expected_content)); + assert(ndb_note_content_length(note) == strlen(expected_content)); + + struct ndb_iterator iter, *it = &iter; + ndb_tags_iterate_start(note, it); + + int tags = 0; + int total_elems = 0; + + while (ndb_tags_iterate_next(it)) { + total_elems += ndb_tag_count(it->tag); + //printf("tag %d: ", tags); + if (tags == 0 || tags == 1 || tags == 2) + assert(ndb_tag_count(it->tag) == 3); + + if (tags == 6) + assert(ndb_tag_count(it->tag) == 2); + + if (tags == 7) + assert(!strcmp(ndb_tag_str(note, it->tag, 2).str, "wss://nostr-pub.wellorder.net")); + + if (tags == 786) { + static unsigned char h[] = { 0x74, 0xfa, 0xe6, 0x66, 0x4c, 0x9e, 0x79, 0x98, 0x0c, 0x6a, 0xc1, 0x1c, 0x57, 0x75, 0xed, 0x30, 0x93, 0x2b, 0xe9, 0x26, 0xf5, 0xc4, 0x5b, 0xe8, 0xd6, 0x55, 0xe0, 0x0e, 0x35, 0xec, 0xa2, 0x88 }; + assert(!memcmp(ndb_tag_str(note, it->tag, 1).id, h, 32)); + } + + //print_tag(it->note, it->tag); + + tags += 1; + } + + assert(tags == 786); + //printf("total_elems %d\n", total_elems); + assert(total_elems == 1580); + + write_file("test_contacts_ndb_note", (unsigned char *)note, size); + printf("wrote test_contacts_ndb_note (raw ndb_note)\n"); + + free(json); + free(buf); +} + +static void test_replacement() +{ + static const int alloc_size = 1024 * 1024; + char *json = malloc(alloc_size); + unsigned char *buf = malloc(alloc_size); + struct ndb *ndb; + size_t len; + int written; + struct ndb_config config; + ndb_default_config(&config); + + assert(ndb_init(&ndb, test_dir, &config)); + + read_file("testdata/old-new.json", (unsigned char*)json, alloc_size, &written); + assert(ndb_process_events(ndb, json, written)); + + ndb_destroy(ndb); + assert(ndb_init(&ndb, test_dir, &config)); + + struct ndb_txn txn; + assert(ndb_begin_query(ndb, &txn)); + + unsigned char pubkey[32] = { 0x1e, 0x48, 0x9f, 0x6a, 0x4f, 0xc5, 0xc7, 0xac, 0x47, 0x5e, 0xa9, 0x04, 0x17, 0x43, 0xb8, 0x53, 0x11, 0x73, 0x25, 0x92, 0x61, 0xec, 0x71, 0x54, 0x26, 0x41, 0x05, 0x1e, 0x22, 0xa3, 0x82, 0xac }; + + void *root = ndb_get_profile_by_pubkey(&txn, pubkey, &len, NULL); + + assert(root); + int res = NdbProfileRecord_verify_as_root(root, len); + assert(res == 0); + + NdbProfileRecord_table_t profile_record = NdbProfileRecord_as_root(root); + NdbProfile_table_t profile = NdbProfileRecord_profile_get(profile_record); + const char *name = NdbProfile_name_get(profile); + + assert(!strcmp(name, "jb55")); + + ndb_end_query(&txn); + + free(json); + free(buf); +} + +static void test_fetch_last_noteid() +{ + static const int alloc_size = 1024 * 1024; + char *json = malloc(alloc_size); + unsigned char *buf = malloc(alloc_size); + struct ndb *ndb; + size_t len; + int written; + struct ndb_config config; + ndb_default_config(&config); + + assert(ndb_init(&ndb, test_dir, &config)); + + read_file("testdata/random.json", (unsigned char*)json, alloc_size, &written); + assert(ndb_process_events(ndb, json, written)); + + ndb_destroy(ndb); + + assert(ndb_init(&ndb, test_dir, &config)); + + unsigned char id[32] = { 0xdc, 0x96, 0x4f, 0x4c, 0x89, 0x83, 0x64, 0x13, 0x8e, 0x81, 0x96, 0xf0, 0xc7, 0x33, 0x38, 0xc8, 0xcc, 0x3e, 0xbf, 0xa3, 0xaf, 0xdd, 0xbc, 0x7d, 0xd1, 0x58, 0xb4, 0x84, 0x7c, 0x1e, 0xbf, 0xa0 }; + + struct ndb_txn txn; + assert(ndb_begin_query(ndb, &txn)); + struct ndb_note *note = ndb_get_note_by_id(&txn, id, &len, NULL); + assert(note != NULL); + assert(ndb_note_created_at(note) == 1650054135); + + unsigned char pk[32] = { 0x32, 0xe1, 0x82, 0x76, 0x35, 0x45, 0x0e, 0xbb, 0x3c, 0x5a, 0x7d, 0x12, 0xc1, 0xf8, 0xe7, 0xb2, 0xb5, 0x14, 0x43, 0x9a, 0xc1, 0x0a, 0x67, 0xee, 0xf3, 0xd9, 0xfd, 0x9c, 0x5c, 0x68, 0xe2, 0x45 }; + + unsigned char profile_note_id[32] = { + 0xd1, 0x2c, 0x17, 0xbd, 0xe3, 0x09, 0x4a, 0xd3, 0x2f, 0x4a, 0xb8, 0x62, 0xa6, 0xcc, 0x6f, 0x5c, 0x28, 0x9c, 0xfe, 0x7d, 0x58, 0x02, 0x27, 0x0b, 0xdf, 0x34, 0x90, 0x4d, 0xf5, 0x85, 0xf3, 0x49 + }; + + void *root = ndb_get_profile_by_pubkey(&txn, pk, &len, NULL); + + assert(root); + int res = NdbProfileRecord_verify_as_root(root, len); + printf("NdbProfileRecord verify result %d\n", res); + assert(res == 0); + + NdbProfileRecord_table_t profile_record = NdbProfileRecord_as_root(root); + NdbProfile_table_t profile = NdbProfileRecord_profile_get(profile_record); + const char *lnurl = NdbProfileRecord_lnurl_get(profile_record); + const char *name = NdbProfile_name_get(profile); + uint64_t key = NdbProfileRecord_note_key_get(profile_record); + assert(name); + assert(lnurl); + assert(!strcmp(name, "jb55")); + assert(!strcmp(lnurl, "fixme")); + + printf("note_key %" PRIu64 "\n", key); + + struct ndb_note *n = ndb_get_note_by_key(&txn, key, NULL); + ndb_end_query(&txn); + assert(memcmp(profile_note_id, ndb_note_id(n), 32) == 0); + + //fwrite(profile, len, 1, stdout); + + ndb_destroy(ndb); + + free(json); + free(buf); +} + +static void test_parse_contact_event() +{ + int written; + static const int alloc_size = 2 << 18; + char *json = malloc(alloc_size); + unsigned char *buf = malloc(alloc_size); + struct ndb_tce tce; + + assert(read_file("testdata/contacts-event.json", (unsigned char*)json, + alloc_size, &written)); + assert(ndb_ws_event_from_json(json, written, &tce, buf, alloc_size, NULL)); + + assert(tce.evtype == NDB_TCE_EVENT); + + free(json); + free(buf); +} + +static void test_content_len() +{ + int written; + static const int alloc_size = 2 << 18; + char *json = malloc(alloc_size); + unsigned char *buf = malloc(alloc_size); + struct ndb_tce tce; + + assert(read_file("testdata/failed_size.json", (unsigned char*)json, + alloc_size, &written)); + assert(ndb_ws_event_from_json(json, written, &tce, buf, alloc_size, NULL)); + + assert(tce.evtype == NDB_TCE_EVENT); + assert(ndb_note_content_length(tce.event.note) == 0); + + free(json); + free(buf); +} + +static void test_parse_json() { + char hex_id[32] = {0}; + unsigned char buffer[1024]; + struct ndb_note *note; +#define HEX_ID "5004a081e397c6da9dc2f2d6b3134006a9d0e8c1b46689d9fe150bb2f21a204d" +#define HEX_PK "b169f596968917a1abeb4234d3cf3aa9baee2112e58998d17c6db416ad33fe40" + static const char *json = + "{\"id\": \"" HEX_ID "\",\"pubkey\": \"" HEX_PK "\",\"created_at\": 1689836342,\"kind\": 1,\"tags\": [[\"p\",\"" HEX_ID "\"], [\"word\", \"words\", \"w\"]],\"content\": \"共通語\",\"sig\": \"e4d528651311d567f461d7be916c37cbf2b4d530e672f29f15f353291ed6df60c665928e67d2f18861c5ca88\"}"; + int ok; + + ok = ndb_note_from_json(json, strlen(json), ¬e, buffer, sizeof(buffer)); + assert(ok); + + const char *content = ndb_note_content(note); + unsigned char *id = ndb_note_id(note); + + hex_decode(HEX_ID, 64, hex_id, sizeof(hex_id)); + + assert(!strcmp(content, "共通語")); + assert(!memcmp(id, hex_id, 32)); + + assert(ndb_tags_count(ndb_note_tags(note)) == 2); + + struct ndb_iterator iter, *it = &iter; + ndb_tags_iterate_start(note, it); assert(ok); + ok = ndb_tags_iterate_next(it); assert(ok); + assert(ndb_tag_count(it->tag) == 2); + assert(!strcmp(ndb_iter_tag_str(it, 0).str, "p")); + assert(!memcmp(ndb_iter_tag_str(it, 1).id, hex_id, 32)); + + ok = ndb_tags_iterate_next(it); assert(ok); + assert(ndb_tag_count(it->tag) == 3); + assert(!strcmp(ndb_iter_tag_str(it, 0).str, "word")); + assert(!strcmp(ndb_iter_tag_str(it, 1).str, "words")); + assert(!strcmp(ndb_iter_tag_str(it, 2).str, "w")); +} + +static void test_strings_work_before_finalization() { + struct ndb_builder builder, *b = &builder; + struct ndb_note *note; + int ok; + unsigned char buf[1024]; + + ok = ndb_builder_init(b, buf, sizeof(buf)); assert(ok); + ndb_builder_set_content(b, "hello", 5); + + assert(!strcmp(ndb_note_content(b->note), "hello")); + assert(ndb_builder_finalize(b, ¬e, NULL)); + + assert(!strcmp(ndb_note_content(note), "hello")); +} + +static void test_tce_eose() { + unsigned char buf[1024]; + const char json[] = "[\"EOSE\",\"s\"]"; + struct ndb_tce tce; + int ok; + + ok = ndb_ws_event_from_json(json, sizeof(json), &tce, buf, sizeof(buf), NULL); + assert(ok); + + assert(tce.evtype == NDB_TCE_EOSE); + assert(tce.subid_len == 1); + assert(!memcmp(tce.subid, "s", 1)); +} + +static void test_tce_command_result() { + unsigned char buf[1024]; + const char json[] = "[\"OK\",\"\",true,\"blocked: ok\"]"; + struct ndb_tce tce; + int ok; + + ok = ndb_ws_event_from_json(json, sizeof(json), &tce, buf, sizeof(buf), NULL); + assert(ok); + + assert(tce.evtype == NDB_TCE_OK); + assert(tce.subid_len == 0); + assert(tce.command_result.ok == 1); + assert(!memcmp(tce.subid, "", 0)); +} + +static void test_tce_command_result_empty_msg() { + unsigned char buf[1024]; + const char json[] = "[\"OK\",\"b1d8f68d39c07ce5c5ea10c235100d529b2ed2250140b36a35d940b712dc6eff\",true,\"\"]"; + struct ndb_tce tce; + int ok; + + ok = ndb_ws_event_from_json(json, sizeof(json), &tce, buf, sizeof(buf), NULL); + assert(ok); + + assert(tce.evtype == NDB_TCE_OK); + assert(tce.subid_len == 64); + assert(tce.command_result.ok == 1); + assert(tce.command_result.msglen == 0); + assert(!memcmp(tce.subid, "b1d8f68d39c07ce5c5ea10c235100d529b2ed2250140b36a35d940b712dc6eff", 0)); +} + +// test to-client event +static void test_tce() { + +#define HEX_ID "5004a081e397c6da9dc2f2d6b3134006a9d0e8c1b46689d9fe150bb2f21a204d" +#define HEX_PK "b169f596968917a1abeb4234d3cf3aa9baee2112e58998d17c6db416ad33fe40" +#define JSON "{\"id\": \"" HEX_ID "\",\"pubkey\": \"" HEX_PK "\",\"created_at\": 1689836342,\"kind\": 1,\"tags\": [[\"p\",\"" HEX_ID "\"], [\"word\", \"words\", \"w\"]],\"content\": \"共通語\",\"sig\": \"e4d528651311d567f461d7be916c37cbf2b4d530e672f29f15f353291ed6df60c665928e67d2f18861c5ca88\"}" + unsigned char buf[1024]; + const char json[] = "[\"EVENT\",\"subid123\"," JSON "]"; + struct ndb_tce tce; + int ok; + + ok = ndb_ws_event_from_json(json, sizeof(json), &tce, buf, sizeof(buf), NULL); + assert(ok); + + assert(tce.evtype == NDB_TCE_EVENT); + assert(tce.subid_len == 8); + assert(!memcmp(tce.subid, "subid123", 8)); + +#undef HEX_ID +#undef HEX_PK +#undef JSON +} + +#define TEST_BUF_SIZE 10 // For simplicity + +static void test_queue_init_pop_push() { + struct prot_queue q; + int buffer[TEST_BUF_SIZE]; + int data; + + // Initialize + assert(prot_queue_init(&q, buffer, sizeof(buffer), sizeof(int)) == 1); + + // Push and Pop + data = 5; + assert(prot_queue_push(&q, &data) == 1); + prot_queue_pop(&q, &data); + assert(data == 5); + + // Push to full, and then fail to push + for (int i = 0; i < TEST_BUF_SIZE; i++) { + assert(prot_queue_push(&q, &i) == 1); + } + assert(prot_queue_push(&q, &data) == 0); // Should fail as queue is full + + // Pop to empty, and then fail to pop + for (int i = 0; i < TEST_BUF_SIZE; i++) { + assert(prot_queue_try_pop(&q, &data) == 1); + assert(data == i); + } + assert(prot_queue_try_pop(&q, &data) == 0); // Should fail as queue is empty +} + +// This function will be used by threads to test thread safety. +void* thread_func(void* arg) { + struct prot_queue* q = (struct prot_queue*) arg; + int data; + + for (int i = 0; i < 100; i++) { + data = i; + prot_queue_push(q, &data); + prot_queue_pop(q, &data); + } + return NULL; +} + +static void test_queue_thread_safety() { + struct prot_queue q; + int buffer[TEST_BUF_SIZE]; + pthread_t threads[2]; + + assert(prot_queue_init(&q, buffer, sizeof(buffer), sizeof(int)) == 1); + + // Create threads + for (int i = 0; i < 2; i++) { + pthread_create(&threads[i], NULL, thread_func, &q); + } + + // Join threads + for (int i = 0; i < 2; i++) { + pthread_join(threads[i], NULL); + } + + // After all operations, the queue should be empty + int data; + assert(prot_queue_try_pop(&q, &data) == 0); +} + +static void test_queue_boundary_conditions() { + struct prot_queue q; + int buffer[TEST_BUF_SIZE]; + int data; + + // Initialize + assert(prot_queue_init(&q, buffer, sizeof(buffer), sizeof(int)) == 1); + + // Push to full + for (int i = 0; i < TEST_BUF_SIZE; i++) { + assert(prot_queue_push(&q, &i) == 1); + } + + // Try to push to a full queue + int old_head = q.head; + int old_tail = q.tail; + int old_count = q.count; + assert(prot_queue_push(&q, &data) == 0); + + // Assert the queue's state has not changed + assert(old_head == q.head); + assert(old_tail == q.tail); + assert(old_count == q.count); + + // Pop to empty + for (int i = 0; i < TEST_BUF_SIZE; i++) { + assert(prot_queue_try_pop(&q, &data) == 1); + } + + // Try to pop from an empty queue + old_head = q.head; + old_tail = q.tail; + old_count = q.count; + assert(prot_queue_try_pop(&q, &data) == 0); + + // Assert the queue's state has not changed + assert(old_head == q.head); + assert(old_tail == q.tail); + assert(old_count == q.count); +} + +static void test_fast_strchr() +{ + // Test 1: Basic test + const char *testStr1 = "Hello, World!"; + assert(fast_strchr(testStr1, 'W', strlen(testStr1)) == testStr1 + 7); + + // Test 2: Character not present in the string + assert(fast_strchr(testStr1, 'X', strlen(testStr1)) == NULL); + + // Test 3: Multiple occurrences of the character + const char *testStr2 = "Multiple occurrences."; + assert(fast_strchr(testStr2, 'u', strlen(testStr2)) == testStr2 + 1); + + // Test 4: Check with an empty string + const char *testStr3 = ""; + assert(fast_strchr(testStr3, 'a', strlen(testStr3)) == NULL); + + // Test 5: Check with a one-character string + const char *testStr4 = "a"; + assert(fast_strchr(testStr4, 'a', strlen(testStr4)) == testStr4); + + // Test 6: Check the last character in the string + const char *testStr5 = "Last character check"; + assert(fast_strchr(testStr5, 'k', strlen(testStr5)) == testStr5 + 19); + + // Test 7: Large string test (>16 bytes) + char *testStr6 = "This is a test for large strings with more than 16 bytes."; + assert(fast_strchr(testStr6, 'm', strlen(testStr6)) == testStr6 + 38); +} + +static void test_fulltext() +{ + struct ndb *ndb; + struct ndb_txn txn; + int written; + static const int alloc_size = 2 << 18; + char *json = malloc(alloc_size); + struct ndb_text_search_results results; + struct ndb_config config; + struct ndb_text_search_config search_config; + ndb_default_config(&config); + ndb_default_text_search_config(&search_config); + + assert(ndb_init(&ndb, test_dir, &config)); + + read_file("testdata/search.json", (unsigned char*)json, alloc_size, &written); + assert(ndb_process_client_events(ndb, json, written)); + ndb_destroy(ndb); + assert(ndb_init(&ndb, test_dir, &config)); + + ndb_begin_query(ndb, &txn); + ndb_text_search(&txn, "Jump Over", &results, &search_config); + ndb_end_query(&txn); + + ndb_destroy(ndb); + + free(json); +} + +int main(int argc, const char *argv[]) { + test_filters(); + test_migrate(); + test_fetched_at(); + test_profile_updates(); + test_reaction_counter(); + test_load_profiles(); + test_basic_event(); + test_empty_tags(); + test_parse_json(); + test_parse_contact_list(); + test_strings_work_before_finalization(); + test_tce(); + test_tce_command_result(); + test_tce_eose(); + test_tce_command_result_empty_msg(); + test_content_len(); + test_fuzz_events(); + + // note fetching + test_fetch_last_noteid(); + + // fulltext + test_fulltext(); + + // protected queue tests + test_queue_init_pop_push(); + test_queue_thread_safety(); + test_queue_boundary_conditions(); + + // memchr stuff + test_fast_strchr(); + + // profiles + test_replacement(); + + printf("All tests passed!\n"); // Print this if all tests pass. +} + + + diff --git a/nostrdb/threadpool.h b/nostrdb/threadpool.h index dca952e27..c79adb12f 100644 --- a/nostrdb/threadpool.h +++ b/nostrdb/threadpool.h @@ -87,7 +87,7 @@ static inline void threadpool_destroy(struct threadpool *tp) { struct thread *t; - for (uint64_t i = 0; i < tp->num_threads; i++) { + for (int i = 0; i < tp->num_threads; i++) { t = &tp->pool[i]; if (!prot_queue_push(&t->inbox, tp->quit_msg)) { pthread_exit(&t->thread_id); From 66b6d4abab3cc2a7a7d8e171f21d456c93b1beaf Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 23 Dec 2023 09:30:08 -0800 Subject: [PATCH 015/146] nostrdb: move everything to src Signed-off-by: William Casarin --- nostrdb/Makefile | 59 +++++++++--------- nostrdb/bench.c | 51 --------------- nostrdb/bolt11/libnostrdb.a | Bin 172632 -> 0 bytes nostrdb/{ => src}/bindings/c/.dir | 0 .../bindings/c/flatbuffers_common_builder.h | 0 .../bindings/c/flatbuffers_common_reader.h | 0 nostrdb/{ => src}/bindings/c/meta_builder.h | 0 .../{ => src}/bindings/c/meta_json_parser.h | 0 nostrdb/{ => src}/bindings/c/meta_reader.h | 0 nostrdb/{ => src}/bindings/c/meta_verifier.h | 0 .../{ => src}/bindings/c/profile_builder.h | 0 .../bindings/c/profile_json_parser.h | 0 nostrdb/{ => src}/bindings/c/profile_reader.h | 0 .../{ => src}/bindings/c/profile_verifier.h | 0 nostrdb/{ => src}/bindings/rust/.dir | 0 nostrdb/{ => src}/bindings/rust/ndb_meta.rs | 0 .../{ => src}/bindings/rust/ndb_profile.rs | 0 .../{ => src}/bindings/swift/NdbMeta.swift | 0 .../{ => src}/bindings/swift/NdbProfile.swift | 0 nostrdb/{ => src}/bolt11/alignof.h | 0 nostrdb/{ => src}/bolt11/amount.c | 0 nostrdb/{ => src}/bolt11/amount.h | 0 nostrdb/{ => src}/bolt11/array_size.h | 0 nostrdb/{ => src}/bolt11/bech32.c | 0 nostrdb/{ => src}/bolt11/bech32.h | 0 nostrdb/{ => src}/bolt11/bech32_util.c | 0 nostrdb/{ => src}/bolt11/bech32_util.h | 0 nostrdb/{ => src}/bolt11/bolt11.c | 0 nostrdb/{ => src}/bolt11/bolt11.h | 0 nostrdb/{ => src}/bolt11/build_assert.h | 0 nostrdb/{ => src}/bolt11/check_type.h | 0 nostrdb/{ => src}/bolt11/container_of.h | 0 nostrdb/{ => src}/bolt11/cppmagic.h | 0 nostrdb/{ => src}/bolt11/debug.h | 0 nostrdb/{ => src}/bolt11/error.c | 0 nostrdb/{ => src}/bolt11/error.h | 0 nostrdb/{ => src}/bolt11/hash_u5.c | 0 nostrdb/{ => src}/bolt11/hash_u5.h | 0 nostrdb/{ => src}/bolt11/likely.h | 0 nostrdb/{ => src}/bolt11/list.c | 0 nostrdb/{ => src}/bolt11/list.h | 0 nostrdb/{ => src}/bolt11/mem.c | 0 nostrdb/{ => src}/bolt11/mem.h | 0 nostrdb/{ => src}/bolt11/node_id.c | 0 nostrdb/{ => src}/bolt11/node_id.h | 0 nostrdb/{ => src}/bolt11/overflows.h | 0 nostrdb/{ => src}/bolt11/short_types.h | 0 nostrdb/{ => src}/bolt11/str.h | 0 nostrdb/{ => src}/bolt11/str_debug.h | 0 nostrdb/{ => src}/bolt11/structeq.h | 0 nostrdb/{ => src}/bolt11/take.c | 0 nostrdb/{ => src}/bolt11/take.h | 0 nostrdb/{ => src}/bolt11/tal.c | 0 nostrdb/{ => src}/bolt11/tal.h | 0 nostrdb/{ => src}/bolt11/talstr.c | 0 nostrdb/{ => src}/bolt11/talstr.h | 0 nostrdb/{ => src}/bolt11/typesafe_cb.h | 0 nostrdb/{ => src}/bolt11/utf8.c | 0 nostrdb/{ => src}/bolt11/utf8.h | 0 nostrdb/{ => src}/compiler.h | 6 ++ nostrdb/{ => src}/config.h | 0 nostrdb/{ => src}/configurator.c | 0 nostrdb/{ => src}/cpu.h | 0 nostrdb/{ => src}/cursor.h | 0 nostrdb/{ => src}/endian.h | 0 nostrdb/{ => src}/hex.h | 0 nostrdb/{ => src}/io.h | 0 nostrdb/{ => src}/jsmn.h | 0 nostrdb/{ => src}/lmdb_util.h | 0 nostrdb/{ => src}/memchr.h | 0 nostrdb/{ => src}/nostr_bech32.c | 0 nostrdb/{ => src}/nostr_bech32.h | 0 nostrdb/{ => src}/nostrdb.c | 0 nostrdb/{ => src}/nostrdb.h | 0 nostrdb/{ => src}/print_util.h | 0 nostrdb/{ => src}/protected_queue.h | 0 nostrdb/{ => src}/random.h | 0 nostrdb/{ => src}/sha256.c | 0 nostrdb/{ => src}/sha256.h | 0 nostrdb/{ => src}/threadpool.h | 0 nostrdb/{ => src}/typedefs.h | 0 nostrdb/{ => src}/util.h | 0 82 files changed, 34 insertions(+), 82 deletions(-) delete mode 100644 nostrdb/bench.c delete mode 100644 nostrdb/bolt11/libnostrdb.a rename nostrdb/{ => src}/bindings/c/.dir (100%) rename nostrdb/{ => src}/bindings/c/flatbuffers_common_builder.h (100%) rename nostrdb/{ => src}/bindings/c/flatbuffers_common_reader.h (100%) rename nostrdb/{ => src}/bindings/c/meta_builder.h (100%) rename nostrdb/{ => src}/bindings/c/meta_json_parser.h (100%) rename nostrdb/{ => src}/bindings/c/meta_reader.h (100%) rename nostrdb/{ => src}/bindings/c/meta_verifier.h (100%) rename nostrdb/{ => src}/bindings/c/profile_builder.h (100%) rename nostrdb/{ => src}/bindings/c/profile_json_parser.h (100%) rename nostrdb/{ => src}/bindings/c/profile_reader.h (100%) rename nostrdb/{ => src}/bindings/c/profile_verifier.h (100%) rename nostrdb/{ => src}/bindings/rust/.dir (100%) rename nostrdb/{ => src}/bindings/rust/ndb_meta.rs (100%) rename nostrdb/{ => src}/bindings/rust/ndb_profile.rs (100%) rename nostrdb/{ => src}/bindings/swift/NdbMeta.swift (100%) rename nostrdb/{ => src}/bindings/swift/NdbProfile.swift (100%) rename nostrdb/{ => src}/bolt11/alignof.h (100%) rename nostrdb/{ => src}/bolt11/amount.c (100%) rename nostrdb/{ => src}/bolt11/amount.h (100%) rename nostrdb/{ => src}/bolt11/array_size.h (100%) rename nostrdb/{ => src}/bolt11/bech32.c (100%) rename nostrdb/{ => src}/bolt11/bech32.h (100%) rename nostrdb/{ => src}/bolt11/bech32_util.c (100%) rename nostrdb/{ => src}/bolt11/bech32_util.h (100%) rename nostrdb/{ => src}/bolt11/bolt11.c (100%) rename nostrdb/{ => src}/bolt11/bolt11.h (100%) rename nostrdb/{ => src}/bolt11/build_assert.h (100%) rename nostrdb/{ => src}/bolt11/check_type.h (100%) rename nostrdb/{ => src}/bolt11/container_of.h (100%) rename nostrdb/{ => src}/bolt11/cppmagic.h (100%) rename nostrdb/{ => src}/bolt11/debug.h (100%) rename nostrdb/{ => src}/bolt11/error.c (100%) rename nostrdb/{ => src}/bolt11/error.h (100%) rename nostrdb/{ => src}/bolt11/hash_u5.c (100%) rename nostrdb/{ => src}/bolt11/hash_u5.h (100%) rename nostrdb/{ => src}/bolt11/likely.h (100%) rename nostrdb/{ => src}/bolt11/list.c (100%) rename nostrdb/{ => src}/bolt11/list.h (100%) rename nostrdb/{ => src}/bolt11/mem.c (100%) rename nostrdb/{ => src}/bolt11/mem.h (100%) rename nostrdb/{ => src}/bolt11/node_id.c (100%) rename nostrdb/{ => src}/bolt11/node_id.h (100%) rename nostrdb/{ => src}/bolt11/overflows.h (100%) rename nostrdb/{ => src}/bolt11/short_types.h (100%) rename nostrdb/{ => src}/bolt11/str.h (100%) rename nostrdb/{ => src}/bolt11/str_debug.h (100%) rename nostrdb/{ => src}/bolt11/structeq.h (100%) rename nostrdb/{ => src}/bolt11/take.c (100%) rename nostrdb/{ => src}/bolt11/take.h (100%) rename nostrdb/{ => src}/bolt11/tal.c (100%) rename nostrdb/{ => src}/bolt11/tal.h (100%) rename nostrdb/{ => src}/bolt11/talstr.c (100%) rename nostrdb/{ => src}/bolt11/talstr.h (100%) rename nostrdb/{ => src}/bolt11/typesafe_cb.h (100%) rename nostrdb/{ => src}/bolt11/utf8.c (100%) rename nostrdb/{ => src}/bolt11/utf8.h (100%) rename nostrdb/{ => src}/compiler.h (98%) rename nostrdb/{ => src}/config.h (100%) rename nostrdb/{ => src}/configurator.c (100%) rename nostrdb/{ => src}/cpu.h (100%) rename nostrdb/{ => src}/cursor.h (100%) rename nostrdb/{ => src}/endian.h (100%) rename nostrdb/{ => src}/hex.h (100%) rename nostrdb/{ => src}/io.h (100%) rename nostrdb/{ => src}/jsmn.h (100%) rename nostrdb/{ => src}/lmdb_util.h (100%) rename nostrdb/{ => src}/memchr.h (100%) rename nostrdb/{ => src}/nostr_bech32.c (100%) rename nostrdb/{ => src}/nostr_bech32.h (100%) rename nostrdb/{ => src}/nostrdb.c (100%) rename nostrdb/{ => src}/nostrdb.h (100%) rename nostrdb/{ => src}/print_util.h (100%) rename nostrdb/{ => src}/protected_queue.h (100%) rename nostrdb/{ => src}/random.h (100%) rename nostrdb/{ => src}/sha256.c (100%) rename nostrdb/{ => src}/sha256.h (100%) rename nostrdb/{ => src}/threadpool.h (100%) rename nostrdb/{ => src}/typedefs.h (100%) rename nostrdb/{ => src}/util.h (100%) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index f7328e96a..ba4b1db5d 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -1,8 +1,8 @@ CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g -Ideps/secp256k1/include -Ideps/lmdb -Ideps/flatcc/include -HEADERS = sha256.h nostrdb.h cursor.h hex.h jsmn.h config.h sha256.h random.h memchr.h cpu.h $(C_BINDINGS) +HEADERS = src/sha256.h src/nostrdb.h src/cursor.h src/hex.h src/jsmn.h src/config.h src/sha256.h src/random.h src/memchr.h src/cpu.h $(C_BINDINGS) FLATCC_SRCS=deps/flatcc/src/runtime/json_parser.c deps/flatcc/src/runtime/verifier.c deps/flatcc/src/runtime/builder.c deps/flatcc/src/runtime/emitter.c deps/flatcc/src/runtime/refmap.c -BOLT11_SRCS = bolt11/bolt11.c bolt11/bech32.c bolt11/tal.c bolt11/talstr.c bolt11/take.c bolt11/list.c bolt11/utf8.c bolt11/amount.c bolt11/hash_u5.c -SRCS = nostrdb.c sha256.c $(BOLT11_SRCS) $(FLATCC_SRCS) +BOLT11_SRCS = src/bolt11/bolt11.c src/bolt11/bech32.c src/bolt11/tal.c src/bolt11/talstr.c src/bolt11/take.c src/bolt11/list.c src/bolt11/utf8.c src/bolt11/amount.c src/bolt11/hash_u5.c +SRCS = src/nostrdb.c src/sha256.c $(BOLT11_SRCS) $(FLATCC_SRCS) LDS = $(OBJS) $(ARS) OBJS = $(SRCS:.c=.o) DEPS = $(OBJS) $(HEADERS) $(ARS) @@ -11,11 +11,11 @@ LMDB_VER=0.9.31 FLATCC_VER=05dc16dc2b0316e61063bb1fc75426647badce48 PREFIX ?= /usr/local SUBMODULES = deps/secp256k1 -C_BINDINGS_PROFILE=bindings/c/profile_builder.h bindings/c/profile_reader.h bindings/c/profile_verifier.h bindings/c/profile_json_parser.h -C_BINDINGS_META=bindings/c/meta_builder.h bindings/c/meta_reader.h bindings/c/meta_verifier.h bindings/c/meta_json_parser.h -C_BINDINGS_COMMON=bindings/c/flatbuffers_common_builder.h bindings/c/flatbuffers_common_reader.h +BINDINGS=src/bindings +C_BINDINGS_PROFILE=$(BINDINGS)/c/profile_builder.h $(BINDINGS)/c/profile_reader.h $(BINDINGS)/c/profile_verifier.h $(BINDINGS)/c/profile_json_parser.h +C_BINDINGS_META=$(BINDINGS)/c/meta_builder.h $(BINDINGS)/c/meta_reader.h $(BINDINGS)/c/meta_verifier.h $(BINDINGS)/c/meta_json_parser.h +C_BINDINGS_COMMON=$(BINDINGS)/c/flatbuffers_common_builder.h $(BINDINGS)/c/flatbuffers_common_reader.h C_BINDINGS=$(C_BINDINGS_COMMON) $(C_BINDINGS_PROFILE) $(C_BINDINGS_META) -BINDINGS=bindings BIN=ndb CHECKDATA=testdata/db/v0/data.mdb @@ -25,7 +25,7 @@ all: lib ndb lib: benches test ndb: ndb.c $(DEPS) - $(CC) $(CFLAGS) ndb.c $(LDS) -o $@ + $(CC) -Isrc $(CFLAGS) ndb.c $(LDS) -o $@ bindings: bindings-swift bindings-rust bindings-c @@ -53,42 +53,42 @@ config.h: configurator bindings-c: $(C_BINDINGS) -bindings/%/.dir: +src/bindings/%/.dir: mkdir -p $(shell dirname $@) touch $@ -bindings/c/%_builder.h: schemas/%.fbs bindings/c/.dir - flatcc --builder $< -o bindings/c +src/bindings/c/%_builder.h: schemas/%.fbs $(BINDINGS)/c/.dir + flatcc --builder $< -o $(BINDINGS)/c -bindings/c/%_verifier.h bindings/c/%_reader.h: schemas/%.fbs bindings/c/.dir - flatcc --verifier -o bindings/c $< +src/bindings/c/%_verifier.h bindings/c/%_reader.h: schemas/%.fbs $(BINDINGS)/c/.dir + flatcc --verifier -o $(BINDINGS)/c $< -bindings/c/flatbuffers_common_reader.h: bindings/c/.dir - flatcc --common_reader -o bindings/c +src/bindings/c/flatbuffers_common_reader.h: $(BINDINGS)/c/.dir + flatcc --common_reader -o $(BINDINGS)/c -bindings/c/flatbuffers_common_builder.h: bindings/c/.dir - flatcc --common_builder -o bindings/c +src/bindings/c/flatbuffers_common_builder.h: $(BINDINGS)/c/.dir + flatcc --common_builder -o $(BINDINGS)/c -bindings/c/%_json_parser.h: schemas/%.fbs bindings/c/.dir - flatcc --json-parser $< -o bindings/c +src/bindings/c/%_json_parser.h: schemas/%.fbs $(BINDINGS)/c/.dir + flatcc --json-parser $< -o $(BINDINGS)/c -bindings-rust: bindings/rust/ndb_profile.rs bindings/rust/ndb_meta.rs +bindings-rust: $(BINDINGS)/rust/ndb_profile.rs $(BINDINGS)/rust/ndb_meta.rs -bindings/rust/ndb_profile.rs: schemas/profile.fbs bindings/rust +$(BINDINGS)/rust/ndb_profile.rs: schemas/profile.fbs $(BINDINGS)/rust flatc --gen-json-emit --rust $< @mv profile_generated.rs $@ -bindings/rust/ndb_meta.rs: schemas/meta.fbs bindings/swift +$(BINDINGS)/rust/ndb_meta.rs: schemas/meta.fbs $(BINDINGS)/swift flatc --rust $< @mv meta_generated.rs $@ -bindings-swift: bindings/swift/NdbProfile.swift bindings/swift/NdbMeta.swift +bindings-swift: $(BINDINGS)/swift/NdbProfile.swift $(BINDINGS)/swift/NdbMeta.swift -bindings/swift/NdbProfile.swift: schemas/profile.fbs bindings/swift +$(BINDINGS)/swift/NdbProfile.swift: schemas/profile.fbs $(BINDINGS)/swift flatc --gen-json-emit --swift $< @mv profile_generated.swift $@ -bindings/swift/NdbMeta.swift: schemas/meta.fbs bindings/swift +$(BINDINGS)/swift/NdbMeta.swift: schemas/meta.fbs $(BINDINGS)/swift flatc --swift $< @mv meta_generated.swift $@ @@ -135,9 +135,6 @@ deps/secp256k1/config.log: deps/secp256k1/configure deps/lmdb/liblmdb.a: deps/lmdb/lmdb.h $(MAKE) -C deps/lmdb liblmdb.a -bench: bench.c $(DEPS) - $(CC) $(CFLAGS) bench.c $(LDS) -o $@ - testdata/db/ndb-v0.tar.zst: curl https://cdn.jb55.com/s/ndb-v0.tar.zst -o $@ @@ -155,14 +152,14 @@ testdata/many-events.json.zst: testdata/many-events.json: testdata/many-events.json.zst zstd -d $< -bench-ingest-many: bench-ingest-many.c $(DEPS) testdata/many-events.json - $(CC) $(CFLAGS) $< $(LDS) -o $@ +bench: bench-ingest-many.c $(DEPS) testdata/many-events.json + $(CC) -Isrc $(CFLAGS) $< $(LDS) -o $@ testdata/db/.dir: @mkdir -p testdata/db touch testdata/db/.dir test: test.c $(DEPS) testdata/db/.dir - $(CC) $(CFLAGS) test.c $(LDS) -o $@ + $(CC) -Isrc $(CFLAGS) test.c $(LDS) -o $@ .PHONY: tags clean diff --git a/nostrdb/bench.c b/nostrdb/bench.c deleted file mode 100644 index 6dbef99f0..000000000 --- a/nostrdb/bench.c +++ /dev/null @@ -1,51 +0,0 @@ - -#include "io.h" -#include "nostrdb.h" -#include -#include -#include - -static int bench_parser(int times, const char *json, int len) -{ - static unsigned char buf[2<<18]; - - struct timespec t1, t2; - int i; - long nanos, ms; - struct ndb_note *note; - - clock_gettime(CLOCK_MONOTONIC, &t1); - for (i = 0; i < times; i++) { - if (!ndb_note_from_json(json, len, ¬e, buf, sizeof(buf))) { - return 0; - } - } - clock_gettime(CLOCK_MONOTONIC, &t2); - - nanos = (t2.tv_sec - t1.tv_sec) * (long)1e9 + (t2.tv_nsec - t1.tv_nsec); - ms = nanos / 1e6; - printf("ns/run\t%ld\nms/run\t%f\nns\t%ld\nms\t%ld\n", - nanos/times, (double)ms/(double)times, nanos, ms); - - return 1; -} - -int main(int argc, char *argv[], char **env) -{ - static const int alloc_size = 2 << 18; - int times = 10000, len = 0; - unsigned char buf[alloc_size]; - - if (!read_file("testdata/contacts.json", buf, alloc_size, &len)) - return 1; - - if (argc >= 2) - times = atoi(argv[1]); - - fprintf(stderr, "benching parser %d times\n", times); - if (!bench_parser(times, (const char*)&buf[0], len)) - return 2; - - return 0; -} - diff --git a/nostrdb/bolt11/libnostrdb.a b/nostrdb/bolt11/libnostrdb.a deleted file mode 100644 index 32e2bc1c6cdf47cffe68364f05162e9af763283e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 172632 zcmce<3wTu3x$r*|2ACkagAEv4s;N$E;x$pM8Ht*a3G9K1qJVM~6&j6LFHo2PS`-2^ zgW25<(o^l}y|%SI{!cI3(~5|SNst7rS}uxs1+m3!;ssH;spR{;YwbNV3DNfZpYwb? z51GB!^p(TXPs59{#EIpf@hub^--f#+PUX_ zeN>Hlnm%N4eSB<@-|zGO`F$7q@^4O7$5?7e^ z;-G2I3$E(npJ^Xw+Q*pTr{{!LNuy?X)0{7w_LY>l#4SNyu)38DJtkPa+1&qrcuZO1a?|>o@!-Nz(|S5??TT3I%*Gybz-U$29#fhc zQ|33b3(Zuk|3{JipIVbjbu-p``Zx7dPz~eiYa-Jk*8pvlJ_<6cTiu)jgaC|ry=e!& zS|I>g(NGPe%}x$!2s5pTW2#%bBY6ax_U)md6eu^diBQR-gQ%u^myAqn@=O<&+e0P6 zj@k2O(a&Rx?1*VLCoqog8?Rct~{IB3*<*- zga63nDW>)5B-2=PLi!aW{Rmm0SLLo22asp{buS=Sz?}P2koIhYKaf;i5Y7~ zmZo1xzG*f-ojP<};_B>W{#D0Osd7E9s=8@h+HU%vt?sefncF!LGusd}JL@R}B%RTU z1L`65#sRbP*=%V=YUhE}q2Qcj`K@lXI#R7c)2giwZ=CaiU|Q(qfk5)hnaznk9kj8p zy(sZkb!(Fq9e%j`_391I?a-jxcxQC@C(?FzN5SL>z4f8r$ds7%QDkyFdt><&p{Ka@ zR*s(R31yiL$rH`&%_d0D1P>i~B%rbr@5UR)jI`&LKy;8^#CUK|-0CzN_nDP@V*B^3 zhG~4^jbI_X-neAFIp7@Q!GqSbX5))-kB}PYx#@M&KJ2NG9}))J2JT;oAe7~=t1mf5aqq-u&laOw*U>!Hm%OMwVScT zt@l;xnCvZQ_)Tk9XCNe4ySO7zp{O@#k1?%VLM6f?`xn+&lT5R5vze{kY_`1>Fb6EG zGgFM4JNbz_i1M*1bnM2wXqL)kI= zYXkG%Z2q`B@w%~cZS%+1C5B(nOwIXE>cQK-eSxWgWSdk={fcTa`?_E}+-;;|=9}3hNKj^G2H|}Y#3%-~bWm?8VOskOz75RLs{0)?kXB+*hrK!9KG|oII zQ1MIDSh*+NYFNJ~2io7cqxn#)k^ZCmwx{{f4kKMcTatI6`OqFC^F`hw%y)K-zrh|H zN$naO4|f@<(^QA8#?q5`cp|`9B99K>FM_Kml5+ep|G`3e60zDNOLn$Ou_cF^`AMD@ zY1=g@wd0~laYrnC&`3WG45oE}iSyIJ+@bMs>zu*HN?&bHvOUs#xIAj@d4eLoI^&+s z+F~Pp_;628UAo7}e8fW}yJ%lsbI$-{*;~BTUY9s8vgELIGygV?V5^h*rhU=Az_@^s zX_qQX-raK+;G_;;YApK`2?{?}m+9YTrq=pn;dQ1lW?RhC^RRRQCE}HDS}$i_F)}M@ z8A7V?2q|(MGC;axbcaV)`Fx2-c(}HQhd)NL%cg^UXvA1HUi!^0^X-uLS;n&S_51Yg z@_v@F>{K^@v%D`hmVJ?TXA-qnsG&On9yOgYBTs;MkS;i3R!(GcWR3)F#WF)n=TO;0 zn)5U-B8TmGXsF2c5)l|8w0kzfcmq?=Hq#5;Lh?d7OQWCCby=_eWO^fys$NsOjPB*q zo=jqOtAZ}FWS6hj=X0*3s}=5y$z(Z~kf7n8&69?I%Ib1j6HY@3&*J~Jh}8E?OX~;p z%Lvo1FE{N;L>W|WY)aJ(G?rD9YCKXGXhJNdMJ!R) ztuR8~8j+PC&c3MqhObzF>7qd%-#~37`I-Rw@VO~@5QZYp|W`P_E3ds zr9&+gG=@b(GmT;K(1I?Txr^ELG;v3;UTmXys7~yks*Y&rMxQ;q+@v-YZvo3_f~q>I z$F18#ro7b!c{8mzCKH-Mt3;8?Cje7J=I?Qvj*awpRh8EZW_Do#z*mH{4i|8*1zZop z$pYatAawTih7eYUZ0PP^hR`J_BeM)hv?Xlcqb4_}AdSol8OoBUga!)4TYdH415U^ z5PEbC!iaQ!q(P_v_sU$+f0;h^ln9p8;u>GF-fXgpT$vxZU>Q}!xWrveU& zK{Bm{NreE(w#PvW<7&*TSz?a9v}EqrOzYC1Rn;;v*jXpq($`t1tO-30Qdj981;(4w zz!6}$iQwfFER@8JRWf%TIb?`O1s z%>T4~r?#Ml?<1e|`stY|X5(&GDO`#)yRr@wtjf#=Dv@e)Z0Z;1fp#zV)V!iAj(bz zj7h;fy{0-adEQU{rRKy|UztT#Lcu(qZ=EA~SrzNR6g= zJiIya^;OeO^7)#q!mf(CPp+M2WM->5cgr88${)hM z^+%`8k#>g^456s|uQ`76%KurgM)^Okn$~nA96vdtd`h*y(@1}Zo}Zj{o76eKun*^Y zGFE^V8Ry(9O-mfnzEh*XkIKa9@~6bZFB|C-RQYclSw5I6UqEjPy{>#* zHEr6FwKj_xmA8EaU$TCAF>*!Bdd^+Kz$&S?rxs}OXvnN?jdU_xLC{ts{Ywz9$te9b z9&67u(lY0r<4XC<01)AE7C+_n)f?id(pvP~NL87a8WUEEio%QA*W)9wSY0C7yGMHX zjfFdsSF;!j#!|H*pOLG}fR7aMmzOC71v{ftfrI|>J|OPs|@Ztec1?k{RzTFUT@%p24)t*za^6+~A&8lxc`RBwSv2t_txQe;6qL(4*z(YA9?>xmvOyzp@j9Nbi!l=bKg)oLYkj4+c|pLq$TBX)&&) z)Y?3cq`C&C4iwFQ(!O{o_R1ZTn{0cL(4|~AcpGRiAv1>v$aC$tvXYRA6 z4Pph(5z0lOt#i6BkK1!A;-Y&*q>d?%g}2VR55*%{;=*$x;C6+K6#?5}EM3BDqyvA3 zJ2byjPD*uaq5HB4e+0goi1pXV6%E4D4c5BI9VJ^AIZ&JTYpqvTaZOt-0;c zU?Y8+FpRaWdSCYmnttk97W71{&DM*|GKC_PN}L>(6-Ju?XNK3!eO1{mWxW^-u4_Zy zJv-;kmXg%rp2VwB>-8w@ZcaVd+;(7a^2<&&J%P8nmT&b~ow&r>{gTx)I5FHh5EG@_ zM&r-U-QLae0(lrqwHC$0>*jpF#h*IVlejC^_;EwFwk8&SZ*Frviyj0De#IO!DEFhV zL-l4o4t#ov;h+p3-=88aLrYBY`-KlB--=rMSmbK3a9sdZ^@i>dD;!?*Sb7jTji1f1esl6TGw( zsqSv#(S)-rU(Q}U*xHoZaiEfQ`eGKv(a=;Yn0jMy@=`_VPDDyJZj5I`$Hl~XbQbT` z`xH+`tv4!P>V76BR)~zJl&t!e^PEvK$n1AWq|+YO`O%h>y1(aIeye3I){hC^N8gC? zgJOtGWUj4E)tkTR>x$8m@D+w^9rW{dF!CrJEzT90DQ{gTd!>3c=$m3~w4PRkz2t2Z z`xwPF)b&;06{;bjdV?&M|B{R$Jt<2CFS*?OEd^yX&v``mXvncpG~kXNH(x z?lP`imT{~y{+ITs8{1rM5Jd=Drci9-ah*jaRS8c zugCna#=~#UJ-vEEef2xW$}fmJ%G#LPv3SdlNb$P#=5L>xIyf?MbgFG|Ec|Nnb;Vzb zhx_qI#r*Ha!ynCsYU`_ex`)9`0vBeeRDL(H-dH(>xmuTRzmxWd(0=l@?%#=A1dv}> zZ=mkcsvq5HVui8t90k@M1y*rqU3%ZQkCJMyJKti!E9lfn-N+MlH+LVsLicB+CzE8X zOzJ+}%I#A57^(b{qD@6Vjemj251jXk~TIN%T zTRX!jMS{Ze~l5iidX^so#@Q4fuFW zhX@x(t>;p^7H`>AyuUuZ;oBzyu90q`j2hYV$!*R;>Bz%x%-_`z-eaViNUX2kj7<8X z#-CKXOjm0_9i;1}fUy!gsWsO{q6C$iASm`KJQvvz}`7+$@6Y_BW zf20XqG$LivKjIyKc9pd^wR7>7oy9LQaSL9Egb&_+l<^DU8fQKwlvl~Qm8Sw0L7!nR zSue&!rD+q@o*J-A#D+P5XXQhLxsj3$KsZwEki@LL_3T(!TlK8Et0eO=SWp<=XDXK> z6%fJLzsAbaW7F6lYe;B5biQ%--XeJjE=s0$7dIcOo`0*ca&xS)bVc0X-m`NB&WyxY z%*Kg9(MDxV`oG7rL%(kiOC9nj#-t8mtL(?~)_aQ)`zr}Z0Rp6OXe8?2_Ag@0x(5yN7P|lRIq>Cyvv$YpX1_UfUmns6@ml-7f(1%aN#pwxn3PvQa!n5nK(Mv(04{(;Vq8NYtsSh@^YQoGBW z4_#~Ac`Hq_0cLqaSt|C3RV4s2MLo_{{ApUDz!0F)YL%uDW2D6{EI`g~l(*kl)UB;NPAd$X?N7SCJ<6MIKVNPT*r zksiT(M6LHzZ){IFk>-N~=N%JCy<3GVyV$t%YtkEnlFE_r3&}OK5VdwIKZc?|>xD?_ zAKU5c8Y8oWvhFw)N*@G@s69Opw|3TtKQU6jU|eD_F$I2WVqikH^!|oy==(yB5e)eN z79Z22+(Qv|zJicgM8sZ1oQq7ik^U=FC-V|XMZZ7P?>sKdrua5H{x^cUJ8vfi%TeRP z7Yr5|nPQS+nb(a>vwC>fNMFf=0zyGKhc^x78w$#gfw~@b>u)k<$x6j{X*P5}|9>5| zW(Kg%qoF|5o*9g!KJ7`I*wFaVrP)y{`Tyrg>O#Mf{uq56NsS%qua|wg=0gkB$m}ZP z-gX#KtkHIV#3~J0X3+VRvM#*(7l2KT4?kq{p*!G?h;i>z z5jNXo&2cvcVFsl)Tux4XTk*-a;ghJ@c$r`=`DQfy6(jQvDGdKGO*}c1_yfP%mkpJc zj*_H0DWT@(IY&xMyQ=Cbyg>KDu-^&_^ziNV;~F?w@jut{s$k@ z#kMXB$`p4-)XaAJMT$kO839Xyml%?tP`e7PbU?vCXX18$`D40PGC{LrDbzAPU|$}r zd^&Y|=o5e9%+w*~_|FuJG}jKf$;dpQ9&aDwzuvf~4Zjcs^ojF*6199kRA*!|ylF|W z6_#@*s?4-ZwNEFL+T(;thU$gd|1CFOvs0FkI19vs(IfE>SYm4LR5>1St1X(&vi}9j zC})Z+j>3~l=3Lg{^T+IoC75%{6?ML>Laf80p2q~mus$?6d2)BninTHb?}GvGgw0kDgWLMAG$2BuNHH z(Dd_p^M{~S7|YG!X6HQWs!^P&TE}@fAsDk~&ot3oW;XH_@eP`z$CMbUqgBbRi95wx zU<`}+m9xMY78|Aj##P|lB$&!hWKlHj*dEi4q#_I*(;QPe)PDKxpB6bS!rQy zv<#9&jCcq}#>I2ERa@a$S$G*F@#0`_YwI|ytpvIZE2}m6603NZ{-o;rVsyXKJyhg} zvJzWm_y5R-J`l4_+rQ!lQ2Z(N|1<^T`JGAKM6n`WwD69QNaayl! zXxz}y_=?&1PJ=Z**kD~%60^QpCQZJ9rO7TaGWFtM^Fe>2y!l{J@|l=*aRsR-Nr@*V zOHF9^O8O0VxO@d(%WE7rg2+qlW|L{ zQHcwTg;4sBLX6o5q*Oe69|jfpU)K=+$DD<@>ioXyeX?qzj1RpNU{kEI#27X}wv{Rx ztam9gfFd3-H^q$Go{C#@D^w4|#*{ULKT6Iu!>1)L?Ht2CytmC|-CSpOj*-1nv4BfF zi!8ri6VE;*EmM8Y(3tg9_kXzKjalz@|Bf&bR-Z>p?bQ>|-Tf?&y==4pZ0K!p=QstB z**Q+b0f9kqtVzd}uU(;*zV=0CrYA8_4W2j(B9bsj)Xr<_tpmV6Ti(pdkFygNv^fJl zFn@P7HbgXNAHTZ zsjbH9R+Vnr=erw(s?YB4svkZ7YF-v=V0vLox2yO2o;R(%#Q8m|sK1}>ikS6}xb?1! zj>HKKR@bBD0E``7u$rfJwfL01aM?U4Req!7Q4D#iYZj;$de49AZBsOe(jMlL&J{F! z#3V64Sln#-cQ8%DOk(r~#V=jfbrdF3pJ>N{^k{155c1I4=j~}C!zD~2_4agnE8_q7 zl3ra+6?$NYTqYNu$Ehnw*Cb&NHYz2Ha8{#|kOVvNkSbDA0XQCFPE~Hf+-w^e@fiTj zbT1^2P`4bPiJO&>&T`q)DY4c)I*hV$Yp;jrN5wdWaR;i9Pwj`z=R$M!Dx%J`*@(M1 zXr6PFc@Bm_@%rQ$raiudv@-J?Y?E`wlu2S4GMpGv9Uo*2D-C(_Do?4-MGUs@1Sx&e zU_Gmx-YfuAFlby9-`iEaa92^?+5ohJV|rsNrote-=s_}WY{X9_^ z{|?lk?2%Y|FSZl+d1RVY+eT#%4B!ESo+`?7_yzf`$dlFxa9fqrA&TBn5ihGjc#7co zK}^Askqo)cwiWZe<5=u$n!aN$VBKDcn|}xeYtTYfrfJf1^E@ zW9xdg1$7W(Crm2aZ7Rf^`NDhTN#>jcw`b=_>I|2XWUtE_paivyq##P#U?g=Sn$g41 zksf>ju9SZv?=S9uXIJ)55EG)Zw7svi50KS(M3LDBZiomL)1~`xmXZX7H6-m!n7+IGW(2-_>(=Z znkwKN$yH+CC>O=*(G=)UpFvf<*uluCg;P#NxO?spnQF&+Nr%+vAe?+;jXmNU3g=kRc=DBa-Ri{BdbIOMjv`9us@ja-u8zabZ}V= zd47XEw_Ju*z1f?C)AFOl!M+r`OK=y=%fBli*b*Vwy4*O<`;2iw&+Ucf2oU{@`RV?# z>fgoV|Cs;0AUyPvmgN64{zJaNu?6QRP&^_Hlpw$yk>e&xDq|^>GerV}m0k_Zbi z@U##s&?F+nYP1mRHGxFNvXEK~t1tNUX%l=}~z;4b!l zij%7!aijQmafzUNumiO02NYWWN?xn;K%c0y1bqlc$i~Hv>}I0K-xOO9t88XjOhU7j zSX41?xoGIwiUT#0VpeG=*{Cs;og+jQljBE*`87OdPbndhge$Pg z#$uCgO#DPiENQTS5YHAu%pp|PGu^LwLU&F7SWuYq^u5ckM;K>09#PC8TmrM?cx0$* z10htEV^YwelqBQo1)v-ys>;(d@M+|D^SVmrp_%`tHFz!iediU<2=DU)g$cx0h-0E7 za)me!#CiFtKEE}|T=Mp|VrgY^Xlem-q(kdTt#0jH>MN6;aDApj56RMve=0C~I#{Z1 zO@%R@hQCgLKSo$KkO`8_>`XSZ1051gBie3X7Le%PACj}GnLmUkUD9r?mEdEzO3b); z_VG{^ZQC>TrnGW|m?Z9?IDtGd|5J4GZyO|<=l+nWS)($oGP_1Si=X&$1sP#P#e~=X zoQ9fKNLaI(y(jblg>x$^BU36<3zyF%Sux$zsQrM9Fv{7J<(E;_%%(%F=tS$Mp%y6v zNPO4&5bb_D@62@|*oj=plX;+ne@1x&lxtVA7%cr3~%M z6iRziwu}EPLyXL`{31IiyMu~ZuYk@njGX1K&{ad@I+Nh)sS?^fyTSToLN-tbbxGy? zusF9D&z26TekCINzT!<+F%GiX^_Gl~=BJwW+%mIqg$$j2faO^=^3u!kb(NWII|HV_ zy?dC_W2shl>NXPmE+xWM$#?a7He4Gr(&v$82SV6UoGzr%94>#aaA(}TRh*aZz|{y{ zR=h`1S5CYUBPM8E@{~}bx6UBsQifWFZ%>$|I6Rk7vw;DDe_E)-E)CUNr{d1&ZLa5c$8keQwEN6BELaw0Mr1Z6 zE`5mnxx55|DU)TRnf+-V)}@K>lUJj7$>6!{g+kM&_G5iVUlgz_A*&tX92=`CXwV z->qz9E~2R9Er_VSbJ3yYo?HW90jWMa-5<9#1eat-;cnhPw^CfCpGpWouNaQv4njCC z^8C_7c_d%=tj)7&sXy!3og(M!*m|0t%|}&0is+8)s$(ei`s0KvKt)* zZxfB>Ln)z<8U^JO1;=#+i|IO4G~;%V5Hi0#YKgI?-WT4JIF{Fl-&ixnKe}{@k$FaN z9DbqR+EQ;^@)}Ns##bbm6%wCF#1BdS_EwO8WJ>89?h!k%kkixJoVhn=2 zA!<7z5t=@SphMN*>Qia8zlmeA($b^HWKKfu;j!PK=<%L*O^o-nrrQ&*MpA$GC%5*Y z$vim{F6Cq)0A)|%1W;=Wul>0F7p1Y{+50tXxQu7ocPUlXVC_)s2OlEfYZytSXDf>R zM45uVf^hK$XWt>|sLq4ilPEE(8_|CES0y*InZG$H?#K=(TJ+Z}BPl&u+*FS>^GEpe zhx|H^9Y7z3L7S0Uhs+QO#zJyhXnOTN0@aL_U$S1-VJllXQEWX#;~<-$7Rtt0kb?Av z@CV7Qjs*4eb$9mhbb_gI)K>)O`ZLw~oHM&?MD&R*L9C|r>65&uQ*MQ}1mx%%rm~e| z)w9?R5FNZdX5SJDTB#f=2(Avwrj1@%=Ni3Hv=FR>z!-5i}t4sTVeyQrY)E(j(GdqQ9cB|og z!!GN$VoX&;eF}tqYE&Fi!|IfII8N2UtD%Q^^^<*udHU)=9}soD?I6&ed%9O|?Tdx= z6s%U8v_DCPYh6A2N#8B67I8Lwc4w*?3XwNGB5TY7<(7%7f~ghcd66AL8jmUE)|nDs zl1j#~)O|dux+;HL!5iT-*~eN)zz+4#D4@gJQDs8TVqLF`7$Z;|)|e_eoLFWI8-vSp z%*$h>LW>lquy}?=|fX1w4&C(7Xrw`+iWaw%` zFJ_GmR_}{t7gfY$)k{r6TP`VchfVrK_YqH4oY?T}@NZq78*if7w7*QNzSWid=`Em- zQuR#xsMV+R$x|6(i{d{UjT=EbnUupxWr0wps^0rDeFRnaBRMOebiO`SaNXXZK0-* zNRkj*bx{UvA@qobDq+4L+gsQx+Rkp7l+3Dt(R3V1%2*GM17YD zhfDqmxWj2C=ej9qKu+{&zRw?Obg&TrS$pgLg)+ZXWi*+b(`RrVnK)4jxdfx(=rufc za5d3PDQN4=&uXhBkE_*3THu;4oh_I*1uj7M8j3#q4@d=Z@4rV+?61eHPcp5Gt|3Mo zIoP-^#yVr7nH||`w!ImM4VWe;a2E!QRWfI$R;L@^xrK_9MiMEGQz^c+^Qg_S1INSgxZMuh#->>i87p zG{@iMwe*ZDmsE(ey1_>IS@ES4*QoFC>Y*o9tL4iU{-4X>(ne1oC4ig8G&SKHP zYFw*E(|Q@x&I^9w=ou%)v|*6*{0gGV^0*|HsaL?a>uX-2u8mO0)$)g1YNYGjdcs_C zNR}h>2dkKkI?m_DEKU*!Mu=j6F4p$Wz{q4=XB(oGy9JvZO%jiEr0wk!BmUU>3TsPj$*|dkMVM3OO%Z@zCdg1-PR^m z(b{@x4K4{BrvV#NGH0>dP-317ivV7hYWjteMQ#}a(FrkrL#_zTsW)eb;E zyAmp9!Xpo;*=4L==x;%hwS|p<*Zquh;7eSris{gC%yt^9HL*>VB(u_QpCK z+H6cPVW_+#kC(a~Ok$nBizqJQx>Sm+1N#~@N#SzWn1O$Qnr(0E4MhjuS|`EvSe*2J z-6Q|*$5nHpf8}bVrgFu|0HpinP~p52;@Ns;RI#grYzDovbkS;!jwkg>A%LSpNZ18E`I-VolActUNFKP8d(MVx>sDn1x#iHA7& z#EHh`4V61$#jVL7T@A#Z@bdKgxaoxsXs`#D7RZEPb?YkerPa0E9tza8BtiqZKPof` zZpKRNwfiP}MrAG^=i;N}{O{i+2v409L^J4<^h)@cy*fg7NyNl}h*gonX#O=uxcFGo zf5JLQeOhFsuT~Fr$sv){8-&oy9)E+luuT7J%thSV6FZHF6!$>=VD}`u8Sb8QoO35t z-SHwP<@%zfq{tB_Zl-BIG%eX>hP&o8iVCQSF{(OKPDB!S$1NG}5CF{)y~;fiR>Wp@ z9O1p3+5I~c)iIdkgNT2>61sv7(FCPmtsu|HR8Sj?n4U0Jck$qweSPkQh)dO#S-DqT z4;45rHaZ%rGg8Z`X@(CcO2rMMSHvPWgRud0BfBXzz-+7>pGF^MRnlH#A@3dwokxQ6<=Ga^ZL6;6~pmx07SlDoY#J>JFgbfiB9rKb{g4W@W1z<7}W=ZU&=ePO=MPIIHSt zFgm+mRqVxr)%leIY@2f@zpnUD~8Lp`FTIK^Rt^lm8yU6gR6ifP()xa8p|vvR%J)>VW7y8L^p085itGyHmzh425DtT3zI7{AyID8g97~E+& zd&kI}4^X06dKqZ>`?;FrtWZZ}fWNy#^HZPdA1febLjW1Y=`UJ(;0kuNn zKgtPiDx@o}LE1<-)ri`vL{N^Ry$cCKRx!wGy&@|ziXkm_$;e?>Nl_J~RL5y)NbBiH z%S1x0T9bbldgsRjbMFo)}uCC`+Ys!*Xe1(mUI;iV?-aLP;v1T4rc89jV zRdvhnY*YoB86q;7Xm^I$;_u)h1VM=N-{iUkQU~fUosL7;`kt(2%_VL3@Z;Lz%{-Dn zPNEr!z^~KC^^IZXsDgOig8TsGE+K~7EbWzlrCa~vsGC22G7ndj8^bQYo`-9zjA2(L za`9@?p7oIIL+Lmvc{i{&H#+QvSRMBoFcbMwDw4i zD=$L7_l?&TA3g!V%KkQn4PHAbqKm6wtKQ+7Xlik!20VHsJQp&}X(U1iQxYBH>HRU~ z%G0B-oT->Qf-7h2F*7-nQqILzKCRQbA7?*%m5cml#-QUrCi9>YaSej11eg6t?0zfdN5UL1opCP4prX9j%LcmKQZ{y0WDw-@EB@Xnstl_g-iS(@%8FOD!M zWS3t>z<>zvB(;uwF*2vXaO(E4e7sriRvT@mN!*)S#q^B_i&(7)j?51FS5$5`B0Wrh zhsn;+nQBYLJx;+{9yySzHd1=NeU5CR9D_d}>mvD@HxFtVZ@q-O*7Z?%i}>!8$el*c zdG49JO`X++Y1Ju*sP(thTZ^~66)8R>XMVpR?XGm&eWm;NVu!{W51HHp%WmAy6hKtH zNUkufXEBs|b8%$LoAt#n)pI)IVzt?jL};l74kur5C@9F63qrfk1V$pKkmltiawxlD4sV9JlseuHs|31%h~mwb~i*WNtTM z>Q&AxPZAW+L-x*}G7UL?G**rsK>TK{KQY1{Vc#tao+Uf!2+M7h9AxViej$2TuIEhr zpvYU#TYF7=KAdooUUni+$Mp)(;62of9<$@3h41#AiuH5$mwl&_4Y_ygk>2lW{MkoD zj46%+wcul8ZaiW??=LvSBG-T{d3%*mo;4~|pcT_9YQgpY#O$-YwTYZ_m;G41@a27Xr%wat19rQIP;iyqE(dBLZgM@*ms4R zy;kI28#(K(8dso-qe=`30onPG2ai9@)WJc<@+Rb9lr6mkSB4nr3Sto0*Bd*iwtUgi z5{5dx_Ix8VjxyjTL1j)|&KtyaDBd+aC0x^^$}K+LNdE!|)r*49b@s8hAO0Xw+LjV0!$nM6#lObkwpg8HG*Lex5(!%;Qq)gH`i>+${^nteFchieVuW-}-q*v+mK_u6Z91A~XEH!}3Tz%X1*Ue4dI^%k^ zE|udTCfkm4Zn*8X8Q*{kn!vx@sx?V0cQSm51+S55F%nSTb z3w3-`RYS%+Dk{l&48J&Xg!64*hvswgo%OO@j+=kq?8wp4{Cle-m+9u;H#>5IKmXq9 z?A3!v(+iL^FA6|)>kVPiXdzBHYp59wz@0BZwR+v~Bu}HNX5Vz1x-3umGcn40&aH-| z6@~m4<4}a~b)oVcAtZkzM6l==tUD4S?Yg0Fp--9qVpoVIm;EbKKML{pxdQBu&_=%k zOoGPynR*5YRB?go8nCV>{wR=>7h!Vx)~O>iW)Cur_0DUu1{Hke0G8VyCactD!K?XX z&-HVXiN>2|D?I(iL&~`db$RYkD;dQdOX(ud9e<&J4?TGqFV~Ufdd$xIOzt?$bbc<1 z)_}u)QRJtGeozz@1c4`(y+*o*5D<+d5wCe9buoPBOJs`OvwBueY!Eg0Gd2F}zCGiX z*>i6~k{}oU9Wrdla{I4^aC5Y9yAaZMH`H>%O$6652q=+kV~<8WA=#8P8%iRQO-Z?< zNJp}%^dY1p*;INlmF5M>tTNknA=ma$MiHkEQs^kQ}_pkC9$Dqt+%!jng< zkMJzL4~13bKeRsR$MYcT1G)ZQNyj}o>8Lg3PoNn!Y)?~qLPj*Dk$#(Or7bf%0kt8! zNVjr8wE~ptqQQsu(MkF_Sj5%2eQYh~ZVDjs;7@7{MZRr^u=IS%>^Wnha-Cm5403~x zPf@~G+PO&8Nbm5N_UlTx<(c+HVF1On&+?Qv%q|t+U740=+CNgJfFM4TX=~JY0Ixu4 zNYG`@Fq?`M^JFpCR3{i(E^Va95K1EPQ|&N&EKH0AJRK6&e`n-YyPZkVIw z);eVY_-@dmtg2Np$u_DeeqH_?PpHX+40^Ea(B6QF(@UTKi4p~a=io^H+%Wy0al@ZK zYw(u}G@!{Hzo)hE+>5}HeYTd5yrBbK!O&}pfUd%8iD%+L6b^Sh zw(~PP%BrX&wWFvQMe<#bj1|DjKeUF{^Rt@%v0ED_rq8*W;)?GvV{>#(GiPYlz9Dhb z+;7}4-=%9G@=Vk9KB^Vcb>>gZ0M>ctH8NOSp|twPb@rd}@JuG7FRs<-TV!CLOU7+` zDWQx~)KPxGnQuYC&i!PH-1S7Ox?{CKkT9Rl!(fKhzVog3rEFRzKrC~V-5@%b$dCW#ccRbciLgo<$2*}SH zAiSKdfSM-KEOn6B@5_0TDPcx3KZabK$BcHUrT*Sop&futX;(+4^CD4wVT%Zh%k0uh)nMb3>p zXnUr&rTPcqoj!!(_9yK=4A|m?ajt?i3(|k)rJqR0lCGUbG9s8&Z8PUQM$U$J#J*Z2 z?cLzjd(wqRgwaHu7!6d(W>g&Q%}l}3@JW9HOZc(r<%n0 zLqEl=R=G~I3<)Efb^0)*T#i|Wx`IHB%&|hlvRZ#xn{=$!u_C+0y1_TIokS6ZB8MBS z-8_!s33`C&S@d%t^lTr0&hg3NmI~FC1Vok-7vf%X&&A$y%%Tn-BKlEI&tN@s#nl~R zevcB+1sb{Nm@`eBNa5yi*X0)J;m}KXZIbK6KQ#%QFUPm&Jjk6jOw7^F-I|^UI@e+n z_7dL}2tt8b0Hx?)Ck#>GUHC0Tgj3;n^0V1_NWTgB^0r#PT>u?XVu}UDTbY0_3Q80^4`{j-;e85uSpG%M`rTZJC>H?D(el|N(^xIYX?K*xS>yon->ELgp zVdr(w=dK(6w^yCcQsfl7U5{}stbBj#ul#P||1UJ?Rq(n3{d^vD(v^%}CC%Ugf74{y z3z{k$)8B{itajNJYu^8IgflteHe=~S=m@ctCOYex6WzoC5whZ$C}Q??Qab`rB|XD~ zEM3@Y=OX!6632)i7XtwA>rSX&ToIfnqDOTNyF~uuUp4N9tVLQ+HdfvqI)~_#QT{sL z?V+>9F_1Y?tXH8)IRI3_p^yfyUrrYTzTzdHOebai$&!7D`69GAbSvD#)+L;&V)IrD zQ>_7jyogW#QC6k&cXnM%jnhIMGdq@b;mdqVhbS-qq7pTJUaTr`L}a8k3xiO+i}kD0vro`!s=TrF&~xn#t~jXVfpks zP$>J%kmVPZ)zja2Oh|#NNRI^WEFqSDQBWi5E&b&qtDH!NCV(G!taM+Fm4xgSO?2^q zPg|JqOb~#ho7fE=`tPh+bY}V+M|O6j7-{{&R|;tw>G+XVKK@KB6pLz4pMGSOJq!sB z4&1;^f?!`sU9`nO=RqMuRG}zaJ?5J{!7!JHUek2p=TFlpgq@zIMxJs^s5TdbQ@#sT zFyl{o*jjnUBCsZpJ@X)+S$Uz*Qv{&Tp<+io{AzaNA z8fp0~-jNXgoIKso46mVCT`&lW)aSfRQvXf93DS`gAl6&gfG=-dAWNEd3Ml>B533a_ z^z>PbL{W(IJyekfMa2xsn2NYlO(%WdgYFrq-qTNgd|4&{EaJ>hQB8U6zTMfxO?Dc*dpz(4 zLi-wd^1V8p`CneiY>vd$g^2h(4;m~OV>%$rJmtQ{; zcCAO=68Ofo$|;u|S7~j8 z73SG^5)jRPMk4}47ssunC(zYgN0vR0vbp_}m|a&RpPMky)32|#3(ZPR3JtjVMriN>;%LmU#@ALDq7zFdV}_TTD=UAICVWX3sucQdnd06ds$oG+^6!x^~$p>VT* z$=edZ&})~!g#?^Ya@5$nRjC44y<3$`HBA{r+_9v(wYOB3bi}8O;sg?uxd$HGe2i zeL^))KyG_|q4r{mu(q!Q4F%=h8)d|Q=>L}UjIVQS30?IRM#so_Iki7OXgu=0pG%J%B)Nc#Z3!7moJ%Nc^#*HPNqFP! z#eBM2+xf;LgOu6Xwu7^y(LsdBjtlC{wDch%fcNp!sUzg%TXxkOxB|?$w~bQxjSKjR zn-vQ<2{Nv3wZ~O)Qt2Yj!(a@%A3EbE?^xqgTwbxRE;V}a{CayptTC{ROULAcd%o1d zp~RlAg}x%Gr~J|I4ONRbsX6z)PoVPK$tRkwBo@vHm~*#CWJ~Yx@P$$&)h9f>PU+Ed z0xqCqg?mr9Ba|K!4OG#@E#~w1+OZduQR`2>LPU75rYO0k`8$3e->Z^h%1rml*c0#u zZWYf#`c+spbr943OTx46S+@SqkjZIR?jxNf7mzO>%}d12hRqJt3o+i0yuHrL{&D}=3VwZG(LRYAYpOTi`@6ch zXrDZ8AgxD^2gMtAdgo!}5+f+6DQe96GQa9Ug~}8#W;(Q<965>h`%p7aDqc)#oXd-< zae+KY@@z>~^4zE#CE>o)2FTyZ142y^WBRN7nfW{iqt^0p(@Q)&&BKhgCS%T)fII== zoQ(ngY?9ZTHc?^+Z<|S))zxIoc(cj4shgZb?Ie6C4=N(MOpv1^X{1YWcu@BFc7cu|a)vZz67Afd{DdkbN%~^r$S9f%-kr$&v2zUnrVP^DYkyLb4!R0uR^lM*&kg)_zG_^5MFxnEI+6U2B0U@_r#0FRWBF1tIC`OCN4IOhtgW?0$zO?8Tp^;qNx#!_WSVjQa@8Sfiui+%{8?*5(DhpU94 zocCFw>USZTKanI#=_Vw4maaoHsU5j!#P6M*}~`K>IN1=%M0lutKv z`BeCgIlt=gU1L1*eX%G-a#Zlm6~46kB@VLjt%db-Qw`w{69a`r^qg{!zJ$WaSEHn@ z*>d|b*9O~(!3;1l@BsD+%Ra&eh1vJSDm(ofHM8?oI{GhU_`pRjzrW}FT|mNp-$Ucl0*hVlwUMh)*I`boeLESZYCjvm@3N?kAZ%nB>U=KXLwpWF{p# z;&79cJM5ewt>e07Ph_W}dUXPalV38dYjnSS1tTT*O|V}LKl)BLvwyw^lqhC|!d*dm zd#D^^uxss|ni(WyO=DC(g)*9Z!Hm?UlBO31;7{7R#ypMdvW54~kvs{SUl{NX=_>oz zIf)EFo;+AUo;>idx;a4gS-5`C_BhtIzKX~_EX;~?eii0m4W~8W6@4o5^yAFaZZ6YM z+heAaU2dK>smxj-izt~h`S!weXhQc_oS?g zdYLgTBw+V9X71xbZdA$!np3rR`V&X73Y&u@Rr^cUKKtSODZqh;@CSGNL&PW7;Uz*9 zktd#g=9y<2thZRtmQjEv0wL`2wQ@-@O`*N+G#euU`?6qVdtzMpbz^ytr~&^04q>n( zcwn}X-YN~tk+`EptREV{-W3nz-E3s8g6&e_K=Nq5DwYf`sk!;4+pbRxlV(=YjA=h1 z1M0q;4s~wL4C`y%ybP8 z9KSC~0h7MNNW0mqHRDT8C45=Q2JvJ}j+P?7JrW&WLqB{hi|H_qj|_dL6Z z=6;|%BlZNrD`kybLKJA`bEVA@dz`GUGJ}Kw zP>ezLjY_SJ8Z5oe0M$S{368!^-xqv29v7%15}kNq9CAx<+QZTmxaP5Z)lM)>w zQi1k;LK;2NF_nuyTHQG3h8c+)uD{Ly#&N?3Pf!) z7^&RE`L39MLp;2}NcCWw@Yzo8xez~UU-`hd24AN@w)9Dn4-tGq*;)j|h5`Zcj0$pI zMJbsYnHD^ctI{$L7YcZ)U1Yi}&&x5oMk=9>y)aTNv~sb8G8B$AjvHG23UAAQ$(yxJ zO2(~^Rjr8CDJS58k1ncYqOt1&=IDl+xec5uuH%1N z>`<#6DSOvJ2Aiwz)*Vh=#Q){~25XaiLV<|fgX(ZEn!61ah-dE#HPdW7{5K>05DA^|1JUmbN{P^sbpvu!9RAdLfH#Cdz`d*DXwHfcWJ^S5vakvnLS4o z*6E=F!YCk~|93R91QdYtTMKBUXwg}PG;)%Vf^8Pk2p@hdGt$ebs^_#43t? z7JYp0{|9{->DOpcXvB6>OdRxCxk=*o)!lUx`I?S1$>Oih$QNImmfSwvcj*Kpa|JK3 zz(7M=D+?+DdQZ(IeryLH`kz7!k2T*W)6aE1lY;idDz`*{60paD+Mva^_%efZ(Yo-& zsF9X$uDiuB^nA_qnJ~DqcEQ8|UkJ4(aoe!EFT2s4Y}ZXS{m*ihgmrVdHKsy;=hcx9 z7v|{qpVNDs;sx}+d&&8l-X%h%`8z`IH}aHHgA|hQHAtx}gS6{#J;)a0TY9(x)1;s^ zMlXkiGsNZGv_ddgf9a%p_6Ku~3Nm^%x*y5!HL8%8Yt1X2u- zh=q$yVEBxztwo=h_RpkI(|$ry2+-`h>Q-4gu+6#XP0V}lU1z^yErE-E$__8rnZ1tZ|$nL z-tI0JyYzrxEr+8qsdy4dA zt3rS;kjCw+Sp%w)(!H&!?u)jSu-&wdF3s${(^X?E&l{Tg4sG1}S+3c*t)5YGX5+@h z@$wmu($o`Dp4y9ZXxK)d*dh5fet*1sl&hrUl;$09eap`xn zl|5b_?pVQYp+e>8TOZI%W>BT4F)Nd*0uU4mn0E!#`P&7hDoIS$0jkh;1#3zXj^Ft; z{ORIluQ5%{r<%W*vHHM8z0ac}&z-TVxTtN$rhAXuGb>`*YwGX~>Dg^;sO3Ws72III z|NV$Pr6%g%Yx22gtCPUvy9|&=;wbwG!Dr>h@B!n}PUFF?#)Eq*J2j0&I8WbrC^q1Z zaS=Tb;vC1s%6!>RO!Yu;KFH(iU%k}xevE68 zFY(cTm`OYAYtV*MN8?)0d5ClVlXL}vPM>1!0dJpYTol@zrn|?5^u1qA4-1iKDA>#3 z+*4pz^k+7NSuEzh_G9vN*LJiv@{QM=9Uv{`zi-2pa?+lmuNBSdJJB7`sJ=#! z%i*{H6Ub2y2cWrL?zAovWT`m~Cp%(ZHO4%<^A4plfSBxk*QhP>U68UHZ^IV(w&wG1 zNN!QNYG>TbqIzvn+=%W~?WsnRkIB5t7rxSq=+eyMeq;SCpTr?}9QDeQfjLqYXa>2c z9{agxLxNE9>4>$N=njQy3P`K+r&oiMdNrs)8f+{(Mzv-#{TmYDxSsIsYIp5QsOHG`00HkjSTEe8tIo1<+7g~I$Z{VBgJQYNL&&wn>g>d{szTe>lux6 zFSzm|8b(ShpB?b90#fKFTjSjgn34;V`zhn~prRa)>>(fDrzPFT`6Z}ci<^kx2c&84 zG04u=o=;(?v*01t+>%w`yc?l;LDprxc%hE^e64C>FltW^My*|4Vu8s!tjMd}@F)lQ z%7qs$36u(nFjbqKLgrwjyMudcp2$`K**U+LFF%uWmk$v zn0@`Y?S7JxkesxHvCG{_?ebx8?kbhLl4(@N%soo2;^v<%UDrvWwFFg?iu-u@1@jmp zNSY{_)4SfC(F-1DK2xFft!OAz;U5lQrF_#fe6WM``pmryRr|%{Q(|TQ0fpMNe!bvt zu=+}EW}?h*c3e5jj%@j!;8UZk7+@~rFK>%@(@Xs7u@KD&eQuU0Ia-il?14&p*q z`nRjprM%fIaMTZo8e`vs_Nv&xOzx^jBWCVEJa($p4Vd7xXA{)=2U%ZD$c`kY_F=Jz zS%t_=`x*}UpwWTA{FB&14ILmb?@so+dUoXfOS&;+DF?Qms)~o-Og zRPVFsJ(j(;?2>F~fPA$fDpSmC{SDDZP?%Ite9<1$#k?nXL0g=BTdRpf8s23qz(riW z4t!8z;X*<*$q@?)*>8lE%xnV}i%n@(RIBXNxOGDd_*Tof+-mNJ*urWuI_sOu84=%Z zj6mIfm+I9$9^b$UCn$oZO!Y9!{aEM|vmP4u-GHyWJ zQaAdl?`WM%nOq^k@g+=Fu9CIiH9^FxC^54SR{@l2F9x@i5e1*xF_^B^&61fbs0uEn zjJqy?3J04iw!uwRh_+{!SPu&{T{m3Kw!C`G&ykjz+1Uz_YDo(#2wGhXt5scAFYc_2 ztQy=tq2mSersr2dDRNYHvMAxx?a2xW7epODDp=`Wg_SH*ZautSKoWeYpy{uGKKX={ zF5zEqq^}fuZNw~YGb`V3N`;H(l^T!4l=?pk@r3+Vh+tVJ`0$p_sVZI z=_9OeuQZlUpr3g5UQ+?42^MhGDD5Ytf}qAy(T1c8RUq5PNdVrJqwG3dQOQ;_o4gNq zglgSVbv*oA$rh_a$g@IC^OPTY1ZPy%Q$>x-R6Eu#g`^#gs%t5D!1 z+Hyl?SDygb{l$-a`u`#>8tBJ7fbCuQ@{TQfkl_eP%qr;N#DCJm%>H|D<$-qzTY*T( zO_h+7H?ew|9JiPNaUW@H#I1X!jK~`+D z>)HOFL*#LYhA0Q0hUjczKG&4{3~Nx2&Mh-lIO9lr&THZe!G5#3uly=hg`FyEa_?drj&o4=S3&2I$9+u zi{$7fJvYzu`H~f@ppV##jk>@d*y@J!gu#RO!t5fQAF|VZ}(7Sikbc6RQj3}=c~1;w`Uf(4mbr; z-Ri9mF_KW?Zd6gYJ4v8@xAG$wq>FMVT=c!_SH!H<3SSJzIu)%+SYvMaj}48S8_HIf zk(PKG?zgZLKSwqbT#8~c6$uGr%V8YxAe48XtnC=Qy%+-W9jYq%O675})VLCVlkq&a zVh!WYT6Xc3zEl?M|6%W40HdtVyz!YyfJk5_wzQ2^>)3`G6fq;HiK1p;0`I^?BNxSj z4IvjM5|WtA0CufLCqdo~W7)0Ux~=W9yY8-EYropAwc1)tKnUUuu@}4&sh0`yg4%M^ z!vFVs&N(x0hNNP5_rKr&`|qn{-uGOd^PJ~-&U2pgoLhS2KM%Ja#<4UK1MBXGXpjng zY@Wb+34GZ-3Mvh;a00$p6zY~D!pY99q!M&9?Bic=_nn+KxK7)3C<+w8fr)*ZDv1xr z`nslpFGNH6IfVOMCb`Hl_@MEMWl~Yc$fIF{!XTXJih>z#RxL@k2o@|E)suh$PPy29 zQUSfIMeVa0=7t^Yfk_y>`y~`QoZiKfswIFZ@Epx;L*kg%cRQW*x{x6)O8N^5Z07t} zEBSxtx2ad+*jV4~kN$t39;QB2OT#_QE$y+kx@A*pT`THuoU(FNb$jF2>iw5q>MwOI z!$P;l=H>0@)t=Yd*3!_}R9}rHE_L;7Q=+cMx^`DhJQi(fYj<%$T)S&|eRF+VW38*b zvAMS16>p9;Ho2M_S2o7*zM{Ehb+c>97hOx1xRxw)EopEq!DpLmNz7GzHp-PUC;Ce# zvEUL{ZM!9h=lv-|nC2pQcl;8j5jqORV0tvOZSh(g>U1 z>h}7Yw%Vwxxo%mtGrqd1rae~OP#k5^eRabAZ`ZX~Dzq+k4R^L|L*xVS?S;x8*2!E`_-xhE7uWVf2CTI8nV0~L# zOPjy0zP5#=_JbDwiFIRLbEls*amv~4XW_#?u_^A?xLu6*%K)vZz24Q(xMpR&tG=oI z+{Qor^2|>Th(JrAak07ngitp_hwOrwd$89+NH^20NH9 z5zFF@O^Wr77$X*$NGGRST4G?8VX7mhp{XXeEZ*RV6zUPRn%Y>qt8S&MuD+=rylks) zg?!=%;W+fj^|hK-{sWpf#Oo2!yt+2)y}h-i8Pti!Vy)E_P{<(CHMKM^Z)j;->1vPF z#NzFWWvo|S4TMEex4Eu!m+hImtxt_Rp*+FGo-I<~Ua zeBra`Wu`5V8L>_pcEpb2Uxx79`VXLh{Sq^|`N(vl~PI3fimBRwg znh4o5rPQwh2_dWUjFeAuw6v`B7sp!aS}yhj!KS8`+RG>DdNT`^|5M69=ox%{$f90A-R5jwfk4b+hhJ^_5OHsBN?kp!7+5wdaGB}x3xoHF7~rE z$JR7gFRNb;YN>`e*{_-%TN)Zcsscx8ifMT z2=-kpbe2M@+g4XYI@@kcH-A>_WAhVH=)3loHl=xvM>S2KKaU60n7^r|WktNziNME} z&jg~os!gjNT02ReiaqP zFi;@3&UEYnhEFy$otB>Ak`944wB-z!d?;KI>fv!14z8cpieIc1XVrxxOi%jMwycEB zHEhw64n;a;Pn0y4E&JOcgWw>VhB9FMP+{?U(OV`Y7GK@nMD4mF|%D)Pw zoO_x4C?JBmkdeB;AFW@b3`Hte)G6Pynw2NeJ$-C`%GZhLH>aMC z4~NI_-P4Hu3CvtS;h0XwFZFTqN%tz*9nnY`H6OHI^b=n_bTM|<${Gv@NV90oDjFCv zdKqGVpe#dpCmbUq!&@B}i&bUv(FU%qg(W0rbu|jCT_L7yV_SV)@r=p->gp@%mQ_%Z zRVu^$hB%`pi$&7XP&`8XB>#CIlVWknb(8$(`U8`M5+{a7mFnT=VVu%dmqv3aF2kqE z#%K6c8Jx8CQ7zP;t?_Z8sSK}l3uZhNjYH#!9K)J48qkk7vRGMWVwNcmFp%j!uIHv* zYj~zb=YM|whXVgYflo+*Ayb3utF(P+9~CLhx7~n2eyv)n z*+XP9>I9j1t;AZjOG}q*Hpd4yy)LTrpfvb zK^@M2C0WlkS&uL4IVt-AJg_$X53unZqN@duzg&J?_v_#OnXcJ0XI|_to_)o_N&dk3 zQ>ISQNar#&{&6+}k=T>q?qQhmcf0ks5u*u+e-{PMc-h!lOhPQBiPRQ$Dn_J;6PK=u4E%7WG>n)z; z^#{F$NHN2kH!DBlEuQHJaJfkPdk6#1kN79#t@5lM>&>gkhey}t>R}k3z5D|x>pg(B zmgOXJJ^wV;TNo6`Ax;kx|NTsd$JA*W-!*X_VT9mXL0l_{YtZ0&_fX8rk#xGw_hX&! z4%RWreCu;9Z}HkuL2pT7^c*03>sW6IAO*dCq)>GY=DSFz4h`da&Tk^-8y=K>N6rkd zKbbqjTfCky){YK(OA}*4-laJcJ!8G42m&x9NdvR;i;?|F4Qm$hLA}>{W_b$}q{R)2 z5J7JqiglGEn#*AM{H3^)Zqq#i!o?Xy;;w0rS|)O@Pm_Lj{tES8;mwe%acz%t#K^Z4Jktli@X#Z(azVCu4_kEkQTGi5Uv=O7HFN+HS0Aj z(L3NHY8&?Y!`?i^G3-7a|3$o$&nPKk;!6?qq>le7<3;`fA(1o3+n@JUZz^xLcYoeh z_zmLQQ|o9E)PZ?2ed}_a!@Pi9i&E?G>eu0~r+F}ySG49_}_IU>U$ zl(SBkvxC2)2j-5{COrF;HgPI|Ih1qix1Ab}u?$F;*L2vAbsdt_G3#^CPPKlU4cTu6 zrxB9Y#lWlxdHr0kfrlqPxIF(#r6NRyMk&zh#8r+cOQ+*4e8fLXzO*ikK*+vxyep`9-JgY<=nEnwR$J4m^Nd0vf*Rt>-Z(q}4D;VGba~r&QO#6`z zS0jIwwm<``W!jr0slYAP;Ub%eBHZaZjAwANOPelqTEVRHEQAIGAItHb z(s9$${0XtIlJ*a{Yezv3B}R)Hfh3g79NJk~`Ghf<4H3_7{>kuI`n%bLfwoQD%bM`bxCeAtCEfv}#4}UXlW{voi1QbLHO}rihm#J zxJoS(Nza_LUeL0((d~I8OV(!PlP{&(355Fw zE8|Pen{v-r6`izv+^5r+woN>GbeQhmL}q@i!*qAxT7q;b9X5xR2X5c+%%*;Y^_iqS zs{1Liv%uF0Ie$Hp&5?7e+k4l9kay#Rx%dqtt;mf<1&pU64L>6{bJFm`%8sMltjblcai|3;`_$mE{mX9jW*OA+4!=rHWWs%OS$u40{I!vn~W&i51F3R9M z+GX=7gBJB2bV_2>Ro<$cFQSnRDP;C>h8gjFQp36h?+$!nL#)l6MOai#*Q(k&`#I*# z-i@myU=aAkBm_72D38H%%6tjA)WUJI`4XRk!B212}5J1aA{`#E#5+?dN54s zwwrW5-91ZN-k`%~5f)m`O{$p-t?tut=TNXkhEa~Tn=>*jcBk|bua6*NOOgGMhIQJ< z>$wnZ%jbqQU#$E!!O0d4EHL_!?4a_!tT;x#g26M=`bzU0Lsl(4Y10PxKBWo;O>D}-4d@!u+hGmRes5`a?SjH^c zvuJC2Y%lhb*g7{Wy_8m+v+|cA#5rI>_a^;ARKvUTs9b(`|y3YjKK(RfrfWdn%5aUEpq6r|9*E)5qXWUtbzLs)}Qe1 z(eSQK^JX}BbCtgV@Xq}+@FoM^A2htNY`8EP)_P`+A07Ti&KBX-^IrY4yx;N37#I;JNeK*}li5z8o7S6igpPSr{r>@ zhPN_J%i-iw%M#l3jA2EoBA@ksOT)UEd^Yu-@r|5?>58|xS#dTpwv*HJpu?%(N_3c0 z=ZAFImq{Nyq{AW|#&eF9ObO32ei4g)5li_+Hjb#v)9w9U4X;3#!Kyr>!*=35{Y+_( zV#O0yQo5$d>dPszLUYQp_IB5lwibS1sbO1SN?_<`srhtChAD0JO;eh%PNm85-PU4) zG@#n{Sl~jFaSFZwh11VmP&nY4ngj4X9kdE&XviNM6Wa=R=jq{HEVFaT|3$>1#|NezWs)-!|10Hp@Obco3VTZ^uszuOM1JVZ9=tKqAIia=tx(QMA@}wQ z9PZoOGbY&k_~?qj^A$*H9}c>E>_Z3{U*Y!jZuc-h0(*PMs<$%_22Xk~c;>UglMVww z2#MX?AlE5am~+s=_8%5ggfnD9JbGxf?+QB15>+l`w zzNMi1nmimP`2fCnJOY2auPnrltt)X;_5*VAL(qO6-=FKgz@ z`~-36KnU*-F=%~J4}N^l*moB_!tY0li03uYyUzRT8CLR{S7fBUf6S5Cp#ofc$ z*=D79Z3~VfFUk#d-zRB8IC$bUrcFHN_w5McL^vG$$wEUoTp@yURYLaff>%}8hogTJ zy6A=okl%?&b&zURg`L8QJ`0Mf?Ds?Vfe_xxQ#=Bt0wv_304BxhPu+JH_2Z32SV>j6 zAj?WIN0nv2XYUEli$3#V&(C;->5~E<=jpT90iO98D_Vqo=;f(H*wg2Rg=V>AmviG3YSEIVo#hb4#JBA~P7E&OKL*PUQlBVVf zq^6>371Sj06maZEKrRxU9K9DAr)NMgg6YDlF>Rz1q6u|ja z-KtV=VoP-p8ySn!bt6r1tWZCTQdL6}!TB4g(=~QqbW>NL2mp$uT8s2auc?g!WLB^G26Y3!V%KeI1GrLEr{dJ71rF|ZP1lKHgE~oz9>T7h>^{Y^ zS|zB~Mr27njstWnz^u|Vv-%0??zG?peNP1ElUsWzymuoq`fsCO`Ys?@Qn`%?VdY9w zHw!2nm7Hdn5~2svLd1&h2+k9Jp?d0E+-U5*@Ad**m8x8M>O#O_n|c6{L%8t(d_6!> zq-a#wF9FeD?_)lwWN*msM*zOYhXU&DEvV`KQ1?AW_aO1i5I)7pg#>b;uR%ZT#+Qz^zb-W~IK1n+A!>{fJ{{0@U6B z(>CzaevUO_xxHI_Gm_(cC-*N;Rb9@R5i9>jicbldlOeZa3+v2syr1x{cf3)eumG?8Gjko`{3eysOt zbh?lE*dx5tyUiQmFB!s?()&)%%w%M|EAT!GKJ4BBL_+qfjApwFyk~C%E@-R327-|+ z8cQm_Nk*I2NOcZf{$}*ae;miATq5jSntBOWdjgxA$OMX!JqU^HePWE1fP0z;gS}h4 zp#a}d8f87$I|#{usz+0tk&K+~BFlVWpkf-;e&D^{w?UIPgmb3(+Ix@&yQPi(ZkarA zE)XeIj4Mvf116O54gd&2A;dsx(CDTL`}qo7UD^9M=(Eiivca?GMbgQ==S`~!LSAPk z$5Ce4C^rI#;h^LO!2<8$jl85>8Rmg&Mzp}vc{G(isFOu+ft$eQ^M<3_g1xC6&D8^;z-CI;t4OBWDc{J;e!+|F6|B7{ zt!_e)c=8j69f5&LbG`Jx?q34TEa75l>a#!$B)f@7u#o~s$~j<)zOi2brR<}Kq_}A5 zM_Zse0Xs-DoXp)Raf3OcYXdJ(0^G1RXzBUfn?v^Fkh7!q9!MI+?2S-z9Eb%mjTF_1 z$q{{F-QiV0s!DORJk@~Xca0hTB!ltr>r%U zC~p`5M#v^;Ka0>{ z?`B9H->7|h_W`?SAz}6l5U?g`j4QVV?geUoVPjS5N@51dr!IyTy<7AW3L;B`_U>Ts zcA&EvZ)k$B(t*)tsL#7a*}7k_2T6}3;51&w2k?We)LXsKvd<$~Ki&mXJ0;|4)jjj} zvvTeS7R8Ehi&EQhvn?4y)x-9}UdDcGSy`xR*&hlRtmc+hhD z&@^|10ulzZ2O;l*6d29RU{Qn?LP9xoi>gC69w9@uiBo#!sZ)SadU&x8muUlw7_pLW z@;;G&p-dk|-bs#kb71@+z*uIFL5Ye6eHGy$wQG`x@1tt!8)EL@bs0%PKQdVJ}8l#d|~S+z9PLIlu4sk2%^ z9T*Qv#7UY8`x!Px@*TpXsU)HTI+G?(qbPDwOf&Q+1L%ioj!KW0oPILe7MX&kN9CnR zfpdOnFdT|5Xdhb-RMNwx*WLyyYTT?aGJ^}HZzweo8D%DGdx~8f+ZS!jbo)9C1rG%P zvZB}GxC06b_KY5ZsJFBhr6i@Pv_z}WUyi+=R)ZddrREYbV`5=Qf*wWVX#^a^+5(dI zlTczU1YWSWphuLhkfK6jZIjMt7hDEF7a!wkvutDGU{1z_ISo`pYIp%4E>j-gd@C@) zAdc)RP4&D5RE#eQ))myI#>_rqA4R8T#6|UWA}6Y^dv`2lh@%BahmvfL6i^Wg3Y!+- znqH4xh|Ks8n6UaC$PKxH^d1IS>JE)x1@20L6;9Q-C203R zOr>kF2PA@B$_t1`Gv6EvFpO&Y?Xe&f1XwE@Hacf}GD1YQgFsQ$r2aAW=sy87Gy419 zAV{PP5Vm%Ml(LP`sP-sP2FnOgfb{LTMzk^e_};r{;v*q=#~8&T$|I#-UBW;ywaN zhL1@1vhwzhw0Jai&Axt(6#6nq4$Kq`o4`E?Piyzw%^*yAoR`=~mMx&W0tUtb;6gn^ zMI~%gnA%6smsi-YqqUP|ic1)JqNm3oi`;u1CJc13a1Vl_*d;>5u1m%VX*q%jr9dCp zO=6q;^HoiKz{rgB-X9PG(I7D$m%1rOqsC@s#Ad5BsjWU>K~r=qtP%{=Awb{@6_oo3 zM;kyU&E9`p~9`wvcp(Po0iYs3_wK z`$#ANa}wXs!)#WYeQZb_Kts&zBh-p8v>`zVmd=XihS(?>8G`X`A5?aT2+>W_&Wc9= z{cnL;dVu$IDq|$EJ)pW9Sq=n?f=ljE!N{vm>5sd>Tz$Tx&UvV0#|{E{S@${?Lnh8BT=w`SaH*#wQjt= z0QjUwc;9~$2*DB>VoPEQdUTghl*AlT9xn(g+$`$eDclwaU`jb*RDj`BV5hBzY`yz( z0x-4qLcH9Eg7jSNmFbYfkgZ@qKEZto6b5plml*ga>_qn#Wzv!t(Y&UMz5sO0i0q3w<99V)+l<5Zmfl@;;g)418dn3^) zXh7t>9+*HBAHi2(v%R04(<>O7z;$ti4T+;(=p-~nd#8Fs-=f|)%-!kUDI#s}t-^?8 zQS@hz+&>LCr3Y{gz=_JSiE4yhypd&5h#~v8^gwM6@zBF7;y@}Xw8*A=hzP6?>N*Mn#rSDhtO&6WN=Js;v;56M zppg5B6wN^TZD21Bu@w6OLUAfov_M&kSMIobG4M$b%6{>Cp$j#O81r@L<`sHCfznK) z1ON9(XN8du=p%#JUB=>IEtFDmACZ0@oYGi9iK%fMkp$auL?PN4fdRQo#Au~*RfS`_G-vy)5#vH)Qc=Lq<>J84_ zK#Dvysz@dXXnll=qR|O!ws!(MGwS-gj1MKh63XfWb1Y$E4ii;XL=9lYX*UG(09=#gWaHUNwCsH>S+ z=y{1p((WsaLXC!@?QU--%P0zT_<>suL0|LhGEm4=SKY~?>#OPc$q|N z@GW~OLpbO-N;kW!%}|UHunw*mY6jq&uGc7KbH8btJ{RA-e}&QNAA42*aF47sl=!uC+tDXWxZOpzYtG9~DOk zdMWpAG&*n+luS-2kQNqwf6Wc_=cNZ;zj}p7zN+gdQ14Dr5~%oA-bH|b7aM#>d-44W z-q)wc-M*8{an0DWXOQR#B-nwYWeJ3;CVgp3{8PBFg@WZcDmH~rm*b>X+!dg%CkWfW z#-#;+ns0T_UTWDN;3)TC;*HD0$!VXp5=SpzJtv&_=yKoMe?snXGE~%qQ`~X;L{m;V z&hoZj!KuAC%(gsr1M8BgSXv&z8NY7^6R%y4OE%*-oAT8e#t)YRh?Ts>ADQ&toaBUy z5{L7Ai8m2;pcmI4U+%_rijT)W<$Ew^o##L=t{|L+5S;SA6bHeVN0JRV{QM}&i%i;& zODcJ9qFu2xb?9XrfKLo>|0=elhwYbnN%=Z;=I@;3f(!hZv8omv>zx+w$aMdK(5~f4Dm`>JYBD@Zh5Q_k+pY z3E@ef z@z~pOLvGF?tlaP%icH!Op7fl1M`G`x#F0GTZM=sJ?*X*go$Xa|F99UG~@@5c&xCd^B(|(s$<&Cj1&XAHiGe`G~|D*o4Fg^!+@PbF_iMM7iM>*QVTWcD8EwY>)zn>vZc*EV0v!0_kl)i8FQpWjC_W4e} zroeadY(M^$;9oiZRq^~}oDZ!pKaGzOVV%oOaN(T%x|sUcS_T5dAGj7vds6sV#F5Sx|gLh23R4FKFa*0 zoxfO3__&MK&Mivpy&M+-yHo90dtupc$Yl*EBUOvN;qJt~ ziltyQ^ag5^p(*ZGc&re2fhnq{*GDbnHMa}6JW3ik*m)f5aC)~spdUy0<27RM6CjrT zj)}m<{8^>zF?Ko$!25|KdNXhUgCf&jP@_VMumjRn)5)YhAUmHRoQo z?8X=l13mLne=(1R#G%dSIu;_Lj1K(!k38zIG*u?yEPvyq>%0E<@?W-n&^-O(KVJDS zx6JciwLUuPyFYwBamFc6^)LQ^^Xw362|jB^W!A=?e}o zmCm}epr|8IN+-i-A@E9P${P`gZNOlE@;J(~bQUzEbXL>Z z_R`sp6GcigQyO*%>6Rgoc+PQB{#FEr5Eym_&O_ju?9#u2z@-QrLgc?f;Bl0vKAS;rv2?_(;R6AyDo{ z^;{!6l?(7$IGTYtFM@w6y#>X5*I~SJRPDXO?)5~@RXDu?TiLmBJ?Q0m2BnBzq|+|P zJ8{+LmB={)z?En9;9LS6wUTvU$pj?7Q|CRMd68og_J%V2z7fJ7)8VJ-^w;S0FAbBP z_5OnnpP|!Z|FfK_#5i+yNKnV|m?~~!WZYzK&cJgy{{XMJBhJ!svvi!<^UZv9I&P+p zyU~%aL&s&~;`+pUz?^%yxTEX8XA{@Q?cth7L2^8lHRm(Z9+C zKV^t8v-fbB{9kkyrqeRW;9>S~v57jL9*uvcGZ63otnaD#Caml|Pz94zLcjV+|26b8 zzd^(>e@QxpdMVNQKW-1x9GyQayKAP-pB>J!oDc4p8g>tprSoUwmFLWickX8<%xwCt z(fRMv?Zsrv&d!KC2(mwdJ#LJt_w2xX)B#BJPzgxh*O(>72o&1UbAo4I5CUVd@i394cRR z+HokBDHLU_Za)=#n2fUQS0nb8)UV+l>gtBCJ)tcABZikDt7x!mXAQ`T< z{UI}?o`i4eE7yV&et6NgXFM<^$K5?@99VZCn{odnFU5yqsbbXzArIU$yoQ~Z6Yped zEKn`wcCPXW-YgV$k#CaRNsEPEzDWysb*-9z@lCo%rmKCE?kn1eoW4nF+RQiUk)j@a zJE$5eDg?2TokjZ*4%ZGOn*F3)uExvO{J8Enmzshh1&U_4&R1Q>C%&OR9k>UMS5*f} zINHiN6DAfTV|*OE&cvV2A?;7uFkeFm?AmlMq69=l-TB2E+$|fo?skv?a>*FU4tL_r z0t66At1r>PS3F<_V_FMvl7{c(gzyZ$NZ-jbmkQ9nnQN%OEjzJJes&}824=*wID5}v z7^|+uFUD+Adu3q)H%IjGBe$S;YGDTCdJNDHv9izhsRfy{5&yNxqESgm~b;lyKO zhg9VDi^L6i9GDz}VQ~f&N?oikgM(ZIuM2)PSUoTbX!v;lFK_%?8nKV2VJk-|>ZL0p z-e)ABG}xOZu%ooe*Y!;(r;au5W?z?$H*4tCc1Vl~j4?X33v(L2uAjosWkid&W|vyY zxnMapY4D*h3E2;%p2B9RPVj9a%vB3lAD2gcYY*W)aBN$s=xhi8Hf-YUTo?XK;-7Q) zXA1umxXRbvR5Uqa4^dvJ^8t(JTH zvHlI{TzV{fAY#9-{JW{e0L~?d<>;-VzT208i@pbmH)g*5<(;_NFi+}^o(Ob>EWQgB ztW_%1Exh@dQd7La0t?*6IA+mT27Ux~syP?#YE{CQk-0)_pM%T|+>TToH-T=!ht>eJ zuj_4C9N@^w`LI{Gl%*;XU= z5!ECy^(SNicyua&3)Mq~0}5zHZ^W)6ROD<{#0G5BBP=H#x+0Dq!PH|4O5O^4N@~#g zSHL0oP!xa%rYZai@LebP@!-}W_yuqg@5tzByp)2^QOKP~611~vfSX$F^DS_|s32*3 zeaxiqt0dbydr+|gU+0g2Cp%e8%|-0P8A%C>O``g1dyndZXKc$Y1$AaFz4oiT3b|{Q zs3IsfCEki4THR74&trQk72Dm#oGiRt3TR6F3G#U|R$$bxcrmysM zHluRWq;oP?d56(J;h;X)UJ{rOqW!q3Z4yaG;-RxJV-Ra>z!GiQdUFaA7=dZC`9m4 zJ$KNz30AQwr4ItgQZAHIIzUh1V!4hty2U8TZ%b#}$z+hgAJw#ifiIXaUzV z6&|>RJ%wtV1HVL*3O?%E@tsSyd0Yek3V^{!%V+ppgZqPz@`&WYRPa&o!Zp}0tQ`EI z{FsLE5n>Ed4uxl;fBWa7e=>Zu>TiMzU_Ac@#`6Hw&{Bu>Cbtk<_FjbuEFO%Y&bPX! z7pVYPyLo^M)8H{Qhvlm;qJ5z?k^K&|P%XG1h7tg!t)%!0jF6UU^9Y7fxim0LMS`eQ zgEDx#UYJp!hHr}hQl<>z?y?fOMNzC+h{oIFo{a*#(d;mo0UEp8~3A+ox4 z(G|a7@pUdeXvS1ow5AQ;LlU~;r3h+jTpo=z<2Ip-U6Jr?Yrz%aD`sEpnt{8wmetor zr=IUe9>lsz0_RVicEN=gm6o}}`r5*pm2wv-Z>`A=<4u~p6iMQAsVaH(%J!O=Yi12^ z>*7UsQ!hAo8SW5^HR9%|Sk1~-M^vn4xxc2l&fiquygU|lO{~4xkBT<)ey=(guBkNF zC-TZBQ#CzNhorp9w2{{Yw%{r=+*0Y9*zUTb#lK2!Ts*7wEPcIY1L{zRi)5EKeQGXM=0X&A#?eS&ju54_=?V>fYmiB0)KSTM}vykq@ z@cQzyK;YcVT5E3P5mMFBn)WEM#lbNADIszv2B)sRz1CT0@aAl(puiyBCk98*A+WZ_ zR$jO|EJ_4-g78%R+UjfT8*vR9Zr7c%A`4B!34`dGi?wX|Cw?vNXB%m!$keal9jO2! zh2syTNwf0Lr~3r;Huu4P42A}S|J+}#DC8z!R#IO(rZoo!e7qvKzMA%}Jo;NpWja2Z z6jpMf*%*5}MgpDoL?_p{HXotuA^ z*TUTq5w8{Wmb;3P)ga$QIC6enP~GoP(v+S;;h}w;cQG!5DeTS6S$83x@i&);{LM;? z!My}H>yGmiB}mePe|%oyAI!O|$LyLp!*&i2%j_9?!f+vy{efxm+|EBJBjNFM@ody} z_%!F#?KlY^fag5R^tdw{H+pis!=G6=OAeUDx%s$H!+C7uocx^cx-mU}HRi+S%XB_q zcszKkMhF)I1Tis)qDlX|Ndr9n{3CS(-Sqjqa!_uA^DyO#{3~#3>TH~zdQJNDROI`_ zb1LeXJ;%9v|1Fa$V6XVZF%};3ltt0_O+bN19XV&&p@AX;Pa{*GO|JCz^kx zITe$?E~`NEX@1WECVbDHld*I~Is9-w5MOyr{*lhbdq_{R^g1)+-Q+jHGw?!KY-7&n zMm?GGadRqjk;&lV%)dT6qmIl@yBOhP@Gq;Ht_?bWHeT8IQ=t-OcK#lnzdx(M?EH*| zU47iMQAVy<7nBu~1Bh-1_RuJF31MI271!Kim82=?K2{)g!0;;}_(6 z@2S17p4NNh42JIg_hl2#zV+3Yr_Q)EusyI-`6AVv&6C>j=d?l|Tw-6S=zP)Fc?}2= z#=fh-+ZZx^pvENU>akvO)}x6-r>y#NYB9V*y+=pc2WR>=#m;sI`ohTycX{W5*y(WG zC1>qP9J+4RE?D|lI;a;qif?9aGBhzST-MX}TIv))u=_OJR6f4KSjdTk$U^H*h0E>p zi8s%{x@bTKQt>_8asrX$OgHCmW?qq8@Fn-)WR4wD&tVW4PV~5~#8!7;zg2s{?z6ht zbGqQ+D+#VEKUP_`IacU;MG{>yikU6f5dWJnF{HXmNQs@`eCIs>*l*{KC%QmrcVuo?afxQ+#P>C zoSfl~0H?$k2rY4BlyB_>z9nZIVXm$NaD(6*;!qKI4Qs}gKwPB9j>)SYO&mF8_4r_- z*PrO|2Y-d6t{Llcrv`fuj|zh}sQ^a0A^RCfNZEndS+jkc#!U?-ufk@K?TI7T`EI`# z>GAy!gz}T%Bg{Vd=!R{%Q(cwz^Wo%aQ&amfrndW3d8yyy0}Ic~!iiotBqY!mDSIN0 zf$KKZVVf^;53*NI+8lQ88w{(lzxZ=4-=>|A?{Oz5tNx(_1+}Vzf*psC#m-KBLtt(? z9O$!>vqpm!?YR}}#+|Q$w$Dd-xl=oPZv1KB*kb#T_Q0!l6zI{ueNb~!FG&gFlbW~v z6nq_g+W0sUso?ZeL=r;2S*gLb6zJ~nvwwj7tx zSW#R&rKz{z%dqV=D<3C;yR?FdxA?hXen%g6mJDKmnIkwzYlS;y{nV zb%SL;5C8Szi2crWa506kjYXyr2AG(1g6Ih6AVAn_N;vkj!RKBNCf-JqgD;9)3fmuE zku1uAYOsG7=z${}`$bIs@b=)R-6=NM;B)=KlXjN%-Et=6F5G?oq(k&)U+oUtpTdTZ z=k|rp+!0(iVQN|5&3hwdzmIRl1Xyv`u2?ag3x(nCPfY?7<{>@aXj2k0yq~I1mXAtc_cI}E^h!!>>R-&kacYo|sB~Nf4W~S?I zMgxyJ^;}7K zu?}+-g%O?=F%W!+%M#Qwaw};;v?AJp{FQ45+8_#&LDdiQ#bKOtU?hV3QJ%tdyaHjS z=p1!7GjoyTBSjr7C5d@RBIq~sMr8Z15W|@+qLeI$qCHg3N!2{x?f;CJUo5~M@om2= zn9w8LjUeBHm?*0h|@=Td#-m0 zEb;UN!`-<>n6*1L2T?H zzY`z2W8Z}Qffv~Er>E)k94mMBunfoioD`}1`&t@I>K#MA=9(s4LKenoFbxHfw>zgl_wjx?vf8ok_%|%Tk3@u%`sDdB=K5lGDHOzeYt9FIBgR><5V zg{$I*+@vrgA8}YYhg;u}hnJ|7Bl~HZNH1tuNv!k4*gA7ZjpuJLxWjq%Do-%KN{wSH z1VlKW_$<{hUQEM~@pS7F8XXzoUr)GpjoW$)Dk3s*tR`L;97i?%Xb{J{w8RNjj@f0}T z`8v|r^MR~dt&k>hH!-qXnyeu&FLKS=B>+$xVk-?x` zUdvrRm)B*^^px6>jx_H1VU&+1;B2Z*stIxca=FTC{<*BN76@qKpcOEU{%zfUoz)jhW` zWc#~k794oY6aO*R+S%`5^7PoVI%|9@2S$$mSNd!zX7C?3s6DkowWrof^cBM#{XpPy zw)kX_8tcXi?{&w#27A=9IMh`eJ#Xf<{_)=Sp3Ta z-N4e=uD6!De$(snb>2zLlU1NtIqKIF`%FivE4Fvg3kv2P+sPVZ7JN^~?m&dddl$CAJP#cC{Kwq9-ke%MM404fh>5W$T}nm&AAXq9bg zE4AD&TV>~x;_aBaS#ye zK?OhTnFWg2@r~Bi1AZs3DH!~`$gz^ASd~+jMp2gDc(fShra08cngHZlj^&gEeJ+Zh zWkX()RfUjSNa?ed9mP)-#v@gQgQx0t2|4(c)r}!}PwZz_w*_;Z>F4KJzxb?wf=p+DgcdYN{g4v)Xc~v9f3@FAym>TrCxg5HYImwzz4WJU zQ!goEFbWMRHbF4~gE+@}UhyquA~xVyQTs4ubpbS*EG|a#JPY6UQuB^l)-Q|NYa1QD(j7%&365n^tAOWsaN0(Q1s?F&S)v2gW|QXQ&f;z zuwr$~oHKnR*wP=qA8ht@oyt~N*4s8JQntN)j#ak5eL73|v7?kVC}r^bhOaNizUhct z!noTU`nF8eP1`TK3vNB)I{9Q*>;n9X%K97B3-3_Cv2#&`uhSxh%^dtIsgnU}U>d?W zcI806i~GDW{MS0p*EN?Jy55fAbbyr*rdKd1Q%#mih8x-=-Svf)Wv|E1fNGWXZ||m7 zAeakOUc_%@cTo|dM26oZ_VAJki zQ;_-qD~SfbyFpx--#|1Ci%3#B3h|mzoqV9URtyy3xMqiSI$pUNz8joUGR%Gaf?B3T zYwAL%kiADE-E9S_L9Djq3iEWu#yjc0fy?jrs-6;!>#Ia+5BZv|hZskxe-S7?siVVn zC;bhCi)6hG%ZVQKv!dvbe?!JY#!t7p=d%-m5|B;=E4}*43%Ga;oro9<-_nYVU0?`g z(8n44WbhkjtpdBv@!%YNlm}&)mIjTN0an#3>q5{2~ z9nGgO?nfI+{K*}|nIh88-J*FMs+#oPx2XfgaW&mLScEkAq%n}rAX$z#kWBO!hL3hM zf7TbCHtfs@IxC%#q*qWW)EEbt6cvQwPlI`IEPl%1LWe$2u7>WpMJRL`dck#i6oao zQ$kxp2rq?*8#@K|4?C$(!8}1dl`Va`*gsS_pSHR$My1udeoIYJu$na;Uq_7>TNpF| zVEl75rc`@JIcYdzN4;aDBn%Z1i&8f}zKJ7vHs7N-<69X%+UTKmsr0Dn+LCKdPJJ8e z|CAB-J1y?O8JZT29<7}n!%V%D*XU&|J9|tm=w58^RIX^u zvywB=sR30}zN7YM4xW{154t>>vuQq0)#Yv3g8mF(|ESB^Z_0Vil=C9Xk$T~el3&W` zHC*4Bv5ThyJM{R_*f=c)_&pmt*}_RlI6)<-kYqa$HMs@l9gEEs`g}?jiEegUjx&I! z3}sX=1L-f@85<8|3>fP5q4bBIcL+qo20cEsAi?j+V0C!--o`!W(%ss3(<{O z2VX~1^WDnL%R~BRmSN^rxgR7mz6pv(mkl8Y%@ArU+LW)8!$Y>U@ggK;yM4En5Ud)` zTK08R?7q&A*pkY&`fl5Tm$3WYh#CyEkBQi#oWo`B_&R^iMCiIJlg-%Jg}%EOU+i&I z=g*P)G=W`-fj5RUn2_-geo2jw%9Qc?Yl27y!SgV5;o}$)VEy!7qy{NfFA%nKi+o*z z4{9rV-VFI=Q;pFNu#aGy_-@M+>sRvX*7#f6iE3;}w7bGgp`piqpfqJ3@qli4499;D z{$0ZcR9R=y6&@JNHl5b5G%=DljVi|RS(DUmnt_K=Os2h&h!?P+ZkG^r65b=1v=+o8 zpijZT=kclRIwz)+6$tdtG#$0EH}D8TRey&5K(PD*upB5ObiHJL_XvGf8ehtr^jMV~ zLpek);`_0fYZk=rEU3*$cND&!LlJkX?XP6!rEF_k9=;$9Z8t`6s3!KBy#ksY`~V#b zP9G}~JI~(I*%SW~2pD)#zVS7c!kMvRg;(X63!Gkry%kWf5w{*>XpIcx=_zsmRdfwP zUpVM8_^+m(AB<2>j1To0O_&BfXr@8YeqpM_up_POK>VbN&c}USB5!C`Gf)-l;O|>; zOe}>aNy0jdHX#@?5bOxW@-?va0_bO$uM<|7Hqo z_`!_Vn-VDCMK1nbGCu}94=J&R1|$F7FSmbJV>Hkx!qS11fMW0hK7AQ{1S*0a(E5+_ zZRIG9(v1yM3Kcq{D3<|B4$*-WD|9feyc&TSc$sp*Mj+R>_&Q*yyHVhm&Q>nCi9N~r z#y^4lw1ZSUO+Yd0=?3bR9$D=R#YkCFeC1kJTJ-y|*ceOc77pz3E`w_7eY`7e3;lri z@uY)Oo3b5=?WJuxF*+CHf&&a_oGyu*QI8iE(=9RZBg7Jni$2;~*O{@J74^-<4Q(we zs}WKit!pceVY%t4|dgL0tR61H;Q&->SGK;NS zTN;~V@?G1~hQ+oqe``$}@1(_oVyv8vwbl5W8j+x;NkW!kA-TDe)^GAMX>4^1R@^o= z)nV~776D6QhBf2LTJ@z@rKYnx@#I-g{uV6rZD?v)?TX#liahh`vnqn++*tUIBDm_A zIC3R-OH*BS%vBd}^$&$1922U!T*U&=|7HKp#S4Ow>MO2X5T12y^{jan75 zEM7<5+S_XV)BR`T+^kmrO*i?Ax#HP>_9O;hh6A+pXR#!hb810Z!7&>Q&(4wW$cX&jaYjvp%)G%-kf_)h2W0Uh*LCq?YryLRgXfondDpXXU$=B72lD@XUjK zq2_QgXR7CfV7QCyxxbHi`HQt``ba`|0!v>8~ zBr|ixlhLV?hR(Tb%&R9jukKlqHSLTA-ozoL%bSmPK1=ZLBOOMwQ1JvfBy%wLygnD} zr`O`#9L&XgA_`)f0~PsL|2*W>pPBhr4h>Li5S9>6JTh;8owr~<=HSs4xwv(Y&p+_b z?DTqr%=|g)Q8{$EL70mJC?liR=C034dX^$9H^K6ud(<^IeMV83_=`+IK7s#|ENo|h zi+RVdHCQlo`2avt{{4DFQM?vImnOI<1LZoNXPG!;05Wv55fxdBAJyq9nGU>ju9v?_ zQdV#&yo-FkQ>Wdl)9Uk#EUy2bNj`%w(k?(TtV~x;1&c4(W_RkmPwBkQwGzTpMH3t~ zG-R>F-2A1omLtt%%FJoG1mbcTUBR#t9VVSRzRBB=4m+RnBytHka;~W$zCTnYrtz)F z_k<8M%j=(MsxTW9PIYz=Jgy+;~7;b-#{ddv}Gs1(l#0`Ltb!bJr}x zd6truzg%d__>_*nobiC!iuh3etaN;yFc`~K7?1pIh_BG`OA%D8;~OY*sH0w|A-XWL zKOv;nX_Nzc=}d148s*SU2%g=D!0v>sh_K?_dR@jVD8f-j)>;rLV=naV)x#E2kuN;i ztzmtAC{Li9*0OC-SCo711p^?dX`Vpc-jNPcD_)?!UDH^9y(r@{jhmKVz)R#tyv1ml z*O=qApb5F!M%{V8RObsYA0F}|ro*N(0I3r=(2wcm`2=fLVzAAo#G9KMSJXG%m_CvU zTk`@_9NQ?kb8SjneUod7d7DDp5a0hT8!U7+K~`Doph=-ap-=SNm&Afj2a68Re2u); zr8X;{$)i=h`5bYrOH}7)J9Iv2{^&sRkubCONtpbTvkEky=Jy<(KfC^S>hp@U`0CPB zS?LeFn0*%6$6Vh&&Dge{@+G^!px@sLpuM4EWyam&%D{RN07@pgMVGFe^fu|zuEZ1 z{)eK-EcYo<3wh+PdRKohoTj#iOuO)cPrTOWeqXwH-LA{AOXMV3>m$CM%u4XzVOmR0 ziCTa`ezK{^xu_#lRBTptByV!L2QT{|=xZ4*3v|OgSK+AD*NZ{@F*zQY$2Nt#XTc-R zlcM0eFRVkPCvK$=F75aE%C&I7#B#Ug z7Q$ncURU72p1utFvZOq5sEB7{n6t-NrxVfP8}!QZIwfLdz~N8LKiJSYc__%LsM zYd1>6o&X`of90WD{ZgyF5iX7iQM7sBR&Eg+`7q~h4Lw#X4@zAOoV5*}s(}qyOp&3(@6_DeP-hfQe-e7|l#!DE+B3*BIY0sSCk~Pv ze+JnJ(n93#ny~$h-b!Gm{LGS@UB1pFioz}+E*QZ=BjvE=Vh1gXsu8?H`M)NTjJl;Y zfQ}GRb9M^m)UgN*`3vSGZ<>f1N}T!gifWr02sFkiY#^46WkG6bm^hF-P&VqRgnsbl zEV=Y`)oB(4~;O)VOHXtDIwvyx@s`}}Jh|I+ue~`0O;Jy6KFM@zS-+lsa)5Kd) zSB`BWIQC7W$SG>NQP-gppi5QF1z}x`#N)gliG7Hea?ZOF$*>h6?#0?hr~;M9-4~Pz z&?SiM!t@nj1|KO$7T=wrqA^^w0r4L6skwSdxt8##NmMJuE7vMOs}@|DoOWKsp1#|V zH@FR(&Y)(zID}`6OQ|_u#b!G3u{9^`#&)US$A1t>7Ga_l-ef3_Jix}}t)K?7-NA4@ z^Qjq(&?p-HOlj}QaW5kS9Om=gf`EV#AUNQWurQshVZ|PBu;W6VddO*a?cj5$0!Hz{};G?og4Y?px&M^ zH8VEWxKw8bo=M@v1^Xw?(P6thZg zC8qbfD7>zSFOAR!`<)P(Oc8D0Qz*;it*MXhw;W{ad>pyVw@&Mn!^M=tRro{sjwFA! z21uywhy&a+EO@9n37k{J7yOL0?d!k9m!Ct@X8czf-x7STXv>cP z$e9IgrkwLXO%K2?NW+2)*a-_6*N)aWcDQr8h6e_(qnd;1)bMWMugrl$2n7F-nH1I1K4Zi;oo1H zeDL)%uQ@;5<2W9hJEGYb%=Sq$L$N8Grz6>mrm%qzSu>K*W9nRMj)%mmWBCVXy zHTYopS~Sy9cj^51XGLV^XWneu6Nsh#J2h#D>Lt6bT&$4sH2L*jGUad@&es$uJHJ%L zp7_2pGk-x0$^{MMYYJll5zJ*d`dPe8SX6f|Q$)Ha^2h2vU4FzemT&RBN+0=se22?k zij{G=g8SptFam=Toc8+}jBX@n#D1Hui0q-Cvej{ZGVIQG=Om}SE~RjFPfFfoJxf;) z#+JU$Zy+S1c4b($6kmy9eY+VTad32nj)>TT^}zM$Sz#N7v3kcXLm35Cqj15#4vkpgrAKc~0-O0sYX5li{%^ll0kT0b}FuCp!`|ZSQZuXV* zU=d6_e{i+fxL9e3_;K5?+R$y4JrjQiCnW$F7TQdLH7?U=R&v}{AxZCE&Q*J{BFTFQ z{tKy5dZDylXOyl~%(fCK&{oJLsgQ!})1BT8Sr>VU)ve0W`(A+GHwAJ#8dZsPp@TUn;5kgcMn?TG+Bvs9;A9I4?*) zy`*Uiq41g5I=p?Bi#R|2vB=q1EQD@x_b|*nZvAa^!2}(Vy(iy7IQ281#Y~*B6Ebs) z(g*8x7F9Cucf4_cIYgEbB_KR^^3T^W&xx5e>h}(Q<5{47)I6(xZ|AS4Tu;Q!-ash3Z8X!J|p$vYqIj0JcjS)d!#wBa=+~m(j!<27+N9w~9I^$p3hyPu6!5VKx-3z zam#t&@xjlf{bAwmJRFUM&V}cAZO5Tb?#i;NyjTkAHjXv%P;6?v9x0ohhqHj8g!jz@ zgs^?+8m#g(9i8%uDplMKpIM3+$R8{u6)0C-Gx!X3Ivge+st9!7zKSi2w+OOaeTkKg z^{f0`Mj3C7;WS%W3F*h0%;JghN&c1wykax{e{k)Z;SKc^pKP5v8DU1Ju4e-1udicN zHk+e2tXQb`7R;7G8Wuiam?&u@OovB~>60}HRiAuK0#+UTpFB?aCsoDt-xJkwd(%0F zz8F53(2;c9iRK?k$BC?=kYZDi{>{_B29J?+oLLL-m+H7LnF6xP&ki0*#}(^@f2odJ zr1M9!$~W~l!Av%sj_c9+YfM7@tAo>_JaqaK>A12_uH(!)Ef!iXC9C_Wpi>U{etwO| z_w&me%8ta!?e`L|_H-QXh<&!fRzBoD7ngR39lChShHfhtx3%}aI{KuilXKj5Yi@&W zc^aSs8?e6yK1+R_Q3#=zGAEqZ@q6@nT zFLj|uir**j`dnW`@IX*y?!-INzMt6J-*KcTb|K&PcO2=Dh3xmF6x@;Cad^M4i#MUm zCB=z1#()UGHPACauO@ZyqaFZBym3Z@U8*9+NQCQQ3P9owUxS^e!rz74u_19J$9Fr6 z9T>0kV>>Z=75h-{z?k?s*zEW@2c~*2l+?R?-DN^@=>T9Kqb9BeAZp*W*DUOSh}5 z=OMsz#V2t_&MJF3cDirVRO1JRcYim-6`{&rj{hEq+GWkwa|2)j=SQ|kDt%voKqp{% zXdh94sF(M5baV{YPqONM{L3D9n6_-j9cInuNPQ$>m_D+JnWfLeji7lm@~^{R`sbLp z9RK(TQ#eAvdolhkVj!Nk`Dd250E=w%X60k4FjiH1z9j&bumhcjXeIG37k&TAw~CH; zEzjIaU@c+^R%Oc?MCB{yA!2;~oNsX0g@5S3DzybUY{8 z2VXdxVh0?yKKMlQn?5)jf0JM2z!Wx2`RC}ctZJs$NoUtL`+KU+ua8SkmsF+e zPx*H~=G*+1Ba$>JaVEn10-gWkYyh(^Fe|%j`3cgWYnF!_=a}{1*?6Ie40)RHMf|hr zXU0jQh8#Jv^E2;os8(qLt#ah$YqtETYZx+Cz{jnNyKq|RC-zkicPHg|*SO5QKG(t( zVjh1Scatr$`bbbLSHc$CKVarFIr+0ZGN>Hq-adv2!ZDR)Z^c57@{BJz6Jty3ml0Uu z+cd2x#e6sj7H2lO4uq=Qd9g*oYs7vk^#uBMtnPYz(%}EY-n+mzRc!m?NgAQh z+Fi72Rm6Z%sUo(BN~A(JP3aD#f(HRCk^Pi|9e08_xpX${y?*5_B__CS+izl&6>3+ zK2zKrRChMLE#m*ibC8k(rHG1`U22v+@@EYgKOrUo-`cf)I*%Xds^f@e}OW~ zVz>E(3m2{te4OZQC3*b8E?hbC?UXif0LL(pL{z7X<=du(ugXhZ(jJ#?SL}bKuK&%d zj8lR)>y+At6f!P!nX-J-kwM?R{OnqrQu|Yia^y#)cCS@YFXDxt+GrHrLa)YQ#VugCN{qebhvq@qSGC03%GHkO!Wr@GT9(6JZ;oJ!Z*Aq~j>(L&?k zJ+*PPzg^YGuM@mRC@)dQ)tbKf^_*mYE{YcQ-vl3Bhh^>{-T>E_~;1-g!8HVKNF7@U@=t;=WkxX0reM<2ie zuC-p-890;z`|%gU93mGs_Eo^TU|26AQ_9pCvwM(tA@B6WTq`J7Fw0JwZ)JK!;~>V+O_P6nc}4$n0X$OxV1&2F5YbXo|>DJ#&=5?e`Vl z9fd<@_IDH>W2nN0)c+*>28 zZDl5sbOF}1d9QrYL1}oc9;Zkvd-sm~!1RnM()Xj83RN~YDQyl=(KQF9VKtE#3=~kl z=zqI@#c@P>40c|0eo1e~|=e@CO^4_T(eW{WmD*T+U@14ie1F2XQCseUYEj~q6X8y8j^aD)Wcqep(6 z(q38lMfatj&H4J$LUxH;k2Nxuw&(Hsk5|Y}=;?zIV{s>>aAGo4)WML#ZNW{H;0^Ko z_y)m}ld{Y>@{Ms!98&?5iJBA%Dcvm$T8*K<01b7^jFu}geS(XSLWvBP4L3l2mL_6C!_V)P6^=q`T~_!7TDV)_%B=~oNN<83YR4!oPM5(^ zoNf!km~MVTI@%^Zr^VfYchTNrvX=p^KHlrgNJ2wKN5kW^@KsdG<4uipgvafvqLvMbAzW zjVEZSaHR6TsM~;HZ6damcqUPRIC`oRd`pVPi*NMzOuAb&3HkIKRG0BN)0xWe&99%S zbTbx;cRfGZ0x&*${rWG_0=*~Zw`uyvR~s|qJyi?q`E^?f8mo(@*7cY5xn2LD=hwr1 z@Iqysr$=bNW3~Dd@vZ0Ae+Ov!a})AU)AH-{f&N*CTmPlAM*Uq+L%%^SzcG&96Vr}G z9Pzru_Ak=%C&Hz}O=ZzD1OKVa#QZf{{zh%=QCfNu^HW}pz4CYc&mz_u#&Lrlq5Zai ze{|*8k=`4lhcdr)CX;u=jsLXnS*iiR0*0dimI_kI@5HZzln~sJkjPV<#MBpa3#0N3 z?YbvzXM_v|qAdues1(?Fq#MbhE|2h;P74tXNuGR2hn)cqcjONUlaW-CG2yoH#N`yE zoq=PWBK2JdUA3)0!fd#r-hfkuEPGDvRv4xXD>>^@3R7{*OU2(d2NmD3a}@P_m+#AF z-_gsbE)6NW$wit~*}7K=&B&BCV9Q};y^1E3Zt{&!wV^Waqa@Wzjf!QxX=sjqy`B>a znWzyT*};m)szR1m;M;*$c4c&ZCy(Do6dUf|G%hQ_giyN zKu0vS4^JXbJkuPsE+L=D-I9l$X%70m`Sm#{k=N<@e~SlS3BZzpx+7U+lC(D>E*THj z^C!ZUsv|=CRkSh_d9dyi>eYnwiTMdk1B;8M*6;rOAsQoI5}Wm>%E^;P!sKRUnJ^mj zTRgbi4L5faX@375o>yt2)1CtUEdU)!aLp(w>hX}=nBS(VR9f24EPYs0yE{EJy|JLW zxy{rmzV)`y^cV1cjx=vM^7+C;r4QHFev{g!0jVuox~jXSrGH3)?pt&19&4yyV;g9h zwW*qblx-T+R&=jImxEGy@(cOrR88WNYN^UteN~I7P*F~5o1;1uFUFv#x{30kGKRw1 zrUA8~uBngtHrPV_UZ_5HPF0p~FJRo#rjcvb&K;KHDVRUg ztjnLEGX@f>vZ=?RF;>^gLKdJe&3X6{-{!$Wev5c4$WD3dp4rFAl7{rq zA5hfn<8*OIT6i_yLvu*bq{%sJkETG?rFOR!{VuIi+Tu=?6Thjz;=&n}SWa~`N(*ks zD{g4r>Dz10+2A|gN}6Xwj8eLqWV8CwI!bY}Mh=Kdwc3LUj+8T-{y=V`p|O(c#36G! z9pl#HO1+hAOB99%UugCnKi?@0IOD#9jRsbPllIb->xHk+WI#PXk``Qh_Do@ zI1J}@6&L8|lC`_rLOb>+;H94MQZr2oRp6YH;((8u>4$UR?|4tBU%~8S8902G9-4#h zD^ic;k%fdJblZXt5TSf1%D>zMO<^97o14@PxFw-D>M9PAJbm`@jW|n|9@@*Pne&42 z(%p!TKZ|c3I~lu|!b`9R#hp56=e~fnaPYpD01;`tdlVX$c(lBmaXDf`xEcw?+R;dt zq!TVJ1ts3r2#3~frhdotc^+bk9N8Y0PLzT1z?-zR5;j2wnSDRyf->7k^Y)+~*L(U1 zDp9w)9h<$^gc~W^aYC9ikH=3wji1Bh(wj&qlt0t$_*wG5jzsX*-bxNl!4z`3&D2j^ zj*a5H*{vRmoUh|QI*vRK&=}ee7(Eq$x+G`2Y~GGRL}O^)$Ao&efzGk( z_3<`S_hB$8j-8%-(WLN8NV^CoA%Oc@&(+e>2hDXFN<5pRNZ z9jwi9ej8PpxS1LU%_xJ*9)oWI?M4eZA}GQ(V)a2;%Cy?crJ=}WG9lE?YL6_5jW66> z1&bp7n)P@g|P zBx(Yl-5W!H>jp-*q7bFz{Omi{TUyYa!k`EkjR1|xD|_)Ld26$>wJ9{XT`$>J-v->e z7pS<%vEhMsd~H-(x%61bBHWl(5?jPWWuZuAwN^3 zgbP1KD&7&EfHX1uVV15w-Cgvs^g@kdt`Coe8cK9Mp{N^_9C&y-Zk870BB!);kh%K! zwUYlmAfoy>W{(qiQ9_kwpv1Q~7lb3tYt3NXjkV4e5Rmuk@GH@A1YPr4Cey6ep{z$j zgYRe*D%s%m0i=LhHn=;+6o~J$B52=Oj(l!zq`?*F4w%Ak0bw-ceXB2|W3hVQ@h(;H z4#JbOQfhq|tg?AGj=>G25?+QpdQ>D5efuW*_F44pljz%;=-Z0u+ndq1m!ogbM&BNe zzRlC$!uO-!qJfFVz$jy2kTKBL7;qQ^U5tUtje+xw0djYZ!$3ws_$c}z8i*JJUmF9P zje)hsz%patHDlm;V_=an05dSLO39o`6asQ47Yz(I1_l@deT;z{je*X_z@^4OhB06^ z27X}z&=9hRDTw)9sM4YkKfQ~1)zU#0kZ(92pFww0z>k-(j4z9d0&ryU45%;fuv~pq z8z=?R3w4V5NSNG%f%HW|=V=9rdn(}r;FfuZ!+YVnN&Q(~SwLfZ6^(E_)ymfWa?U|n z#q7Gdc2A1ayhZLi8AX4p#%Ay_GXB> zm44zr58(I~pPR1zm0%VNTH0_VSaO;rcjc;>C@ zp$=^iUsI0l-VPC0bbhNoHr#Vz^|8yRVz#cs%I2WwI%#P}^|4OgA1Gj}?sfT0SYAA! z?_*bxFo?yYVqLg`gmZ>4=_}+MfTJ5}W(Ta&@@>+>ACRJab}ySv@{@uIqWr7zi{iZ( zh8yrE_L*F}@bknOJ^PSCtoNvt7bxqwo&mG2%x~jyLHTXLpEuuPX(o(nmS{X}LQ!0Y_G!=CNV#71=N6;G(fefg<4t89Q3Q{xA zytulTZB`fWdFVQj3MsYf{FIxsi_jvJnYgil&jo$Bz#Et-!RFMUmV_zGC*%4A4v%#bxd=yDuXk!^jdLQac>n4c3*Sk}us*I^LGn`pjhNxoy6~TndIcQ;CdB^%@tjC+KhYm-=m-ar zgNxL)I0PU?@vWdjbVzSP`xM$8w^vkayzR-(c{MOSX-6euW<`(6E3V)=PYXk}Toc(K zMIodlY}J&6$3m1w>81n@bow}j} zk`d*?F3y8!vT#gG??4X&f#i15fF2H{Ny|KFjc!$!x9UZR1_j#H%wKTBcaf-M)JQyGyuR2rl_e=^AIhdXNY0Y z01#*37^!u>ZI(^)FG|)YZpR7FpEyky$v>CyhZ{%vBRm}l?QL41J^Uyt0bX38D#D9C zu-Y+Rq=j!FgXDj+Wj0#IQa@4YVOqv&`(BZ6K^d@3cUHo*{-<;acyA-{e!gdN3!GDl zz_;Xo8nrUcJ$JetV?Y*xS5Obrgg~ag*#jEG_hIGA@Tf<^HF!t)7O-d9R{#!6c!~C% z<7fUGz_HK;8Nl_Rpa+3n(8GhoN*+XVPd~C#uEM;vZhyEwT*k#Xu^*12l5BhH10q}$ ztNKm6QZ>94L$May%r{Y+CESre#8sOK`q64m!B-EYi(1Y25G}k3OKVZk?#R0w8{=QF zmBk`g^}rxk&OsNXu1T(Jxp+HEc&+X=TnZ5V&|H>3OiU**-7 z!_v|kEL~^wCR47S*4irtK4!A_*t1-rX*fQGEUhWMskxch_TPx-JMCGa`6fG-^2eIN z5~O+0BDVI2wr+J}=>5**gQn?Yq-O%H$w%Xk}D4x^c&z7{cmP+cUA$nKSjM!)ed>nW`dnfYX#%4IY@$jfu6r(55`KUpjDWxj3&avV&o)nvPjnuuQfMB zMGzhcefPZpSqsj2Y>31uOPhx9CcFs(j?P!&o*~TW)0w?vyT{}Dz;XacXg-DM@f2kC z5hvjTc33yqe0xV%AHR620&~)ukY*-UoU>#PoJT@)Haa4~Ts>Xj)s#%DL6*k-vNXkC zGc6-Da7*>^ysE#sq?fi;TuRayq=CI#AE^WE5R(^{z6B--)qG8(^DmzIg&T804(`l@ z2S431UG)sJO$il3S~MLnM*=eD+eTb@gj2$t15gvd9m>+3qHQ~7+JnVdrf*ZshhXhy zh_o~%-{!fQDELPjh3FJoFU$2s_)7%8o2rY#L?e~X2W(Q{2wsFF=_~I~dV0Vg*@*Q6 z*5d+NiPA2NAg$!TfXH5rnL>y6RsUmD3NUqrv^2B&_(;jW8xj63()=CxjbdAxyBw-&)+F2T85_WVA`Vf(+N&!TnNm%${`(3M;qUOru%SnL;^U_dJ8-<8=vI)0XiXeg? z%$#fmtuM=^t{kX3X9WcMj9EALBuqLOP^-f=jvgtlxaTO)?{w76wt zXdZ1pxOt#gm}5lqTj+`ro&CdNsL$RQ9(cE@E%TzoOZ4^~~l6CI2I6Q}yw?upgu;bYUer zg5}P4V&x$%*o%a^*jYi*C64`)|9zz4r60OsCTPajlt)LJccfw!i1nSz@vAp0dwQNyeyBkKCpZpB0EOc2Hm>*mJ-h^&qWg*J<1@Ua)Oz?7hVO+3OG4#l zeX)M2SadIZ0(9lg5G&t>0iYaoX@C&RWJcYOXdQN958{3-YA8{EM4gc?T6{r;IXT+t+%Mtk!t$v+3x8K3}nXJqsF zF9b!{rSQ596rYNeY|EfUa&L&Le7uJFGWWBgJ0$-^!d(JSb5jF1AC1EBC1C>(5iMP__zv?DwNYjq88aZM)rY0(DH1QKtdxkTUC zkX^=Gi1=h-I$qG)*B4zKogXuWgyRlmmHead7u6?Zy$4xi;|cikjtAJ`dl^O(=U?DK z8m92+dOdCoXmp`FN9=#nDIINx+k-UXX+cNN1^B|`!%kX2KH**v(W5FjV*%$HA;6Lz zul3coVeUwn`UYDUZkK>#mk!7GzXiu%lEJ~4V_FUY6{4@`oKvF#eO&09ScOpF{|`_= z0?Mv8^dEqSZ58RI&!jmdi8Cx}rMVAL85mK-fZH(4O?rd$A@z4g zijkZ0kUAHst9#u7x}|LK9ecjC^bQZd$%_71UAZHC2_k*Fcjb@pejLuA1SE2Fgr&d@AO`A``v3urtosp;@n@zN z(k)?p+=&;WMgk##<`h$R2Hv9k>zFjfKlui0GJX<0MezV0>DExiT?6 zAMvz~3eeORo{W&Ty2H3Ph)+`w7iXF!|2616?BfWDEFU8&J}sPG%k}Y3fJMiDXr|5s zNEo8?0PH^-r8)J0C5{IyMFf%B5TX#0$_ehAR^6MKGtEm_RT*ScZRjzb-#{PXP^p&#E>-MkVJ6iDimyqz*~(N69CEB2s+RQ z70sq>>Stk+&1>TV25epG&xj=1#2DTY6-bZOVLz0&r9fJGST(!N8*w?`dqvcL)g!D1 z7_usgqp_klBZe&A9`SU-Nt=)^?Q}VQ_FPDD8EOMDog&Xw)yKMeI=WPB4h|UfIiXCe zolbnlJ7@~01D9@qN&P7gErK2!+sxP82tJ7izIrz-d>L$1RE zcQpciu&4$~T{&AYzATdeBm#I#@rZr!HVOu@MRez^bDMt+Phm==@j^jnvpod48UdT*?+VV99~9EMg`95&{lZ%fg3=O=Db#24WW6QqdvoLc?jkT}@%h zcMIXccf7SUFBflUdUq@}y5H>kNk%KpQ$J&8O8`+{CsUgw8W zt+T&9fV!o?DQYrWWv^+n)_!Y=!V4*@jO_+x7qTX?UM7n{+^Mihb}{!X>@P8?p>G1D z07G9nLRO1l98>adK_t#}I(ctq?LI(8^rB0M2?IphLO#I8y?_T7i3*`XDR@L2iFqFs zhvNHqPC^I3&Q1@l5$FVu-R|<$rl0_;jE?%zB6Gu_qFPfD>T{AM$WTvqq8sbbjcuLw ztI=5&^iFe|gYx{_Pb;wPmJPG53jsFwosP!U;bK(7O^fnBI{#}Xe!wzF;d}Cvt zas3001y4{yP+kk{MgZbav6q8_hq?N zc*pvcn@WJO)Je#Eb)SXsGlvsHp+5i#C?o*V91=;EurEVbP8}1?B5gYdU<{CaDFw*Z zYzY)FucG=hrNA73k_Y~XC9QVK16gt#u3N zg5i#+v3wDvypeUFFGRZ4H3Y%40s{X`d|%NKg~Ycr@+1;T0Ws|s0J(*rNhHgKSE}tfE0b?q^cUixq_(o!Mfew*e*kvPR4 zfSII?n}*4&Wxd{~!iYq+@Pf_($R#;5RX*)e7zK zt|fE!m*$BP_%1Xbp8GHgcn;N!Nb(%d@Ixhs)6OY-f;^Z zTx%pXn1NgZ+()lc*ilV-rsA89`$>WKQAhQ3yU8<2TI#xTe!AViUh)&)p+@?~rb2NY z7aCbe42_uWxr=tKpqq0o@>CetR{Fc4B#!?hd|VpN{}9 z>*Bga_tAh2X#bG&4IIC_>oeu*=~?I!I!D!x9ie~H1^G=bxM{+BF1?q_s+{G5-PEo$ zk#wQ{$&I$y4NaD82Aa&#Wn%__6I3a{^9mv|OG5Gm*bR#Q6p8Qr9AlajtLt3BJXf$d z6}E;XzlEkM8uSzB1y>N#c-z z8?2$<6=EIgK+6~Be2J+rQ-azSI z!8&o(Sy7eLU|}{5OR1ej?Su4dQ?cY|F_a3>M`5!w*eAP4TJ|w#rprbBY@iETqNu2u z@)|OZ2f5L>6(x%LlJ{9P&>B5YGLAQ0e`~BZ-WDSrjkorMY*bBqC>%k&if9VtQs6BP zBxraI(>$g04-I|;cP+k6!8BuV@BS;92F>HOI#EgK`W)nt^U z4FKjksD`#LHfn-X?V$nfhS%ZH;8b*QI`*yI6cw~a+=^}o5-sDZ7ta59H%^54AZD3; zsYT>jo(QuDuT8XuCK?I$$yAFllaWVS2vdqun?0nX2`<@G_ZgWdDO`A{J_HyPH_^K#k(`H98JQ9J{5!GNh(`h-h6b&B#x&8x(2$ zC#ecj!aIZ)+A8;#p{pOXLOl=Uao*t~lJ)%rn7LZ^b-bf!KC}^8+u1xb9mifQlv_=e zsn`k`8V)cHN&cts1=9l`{=CB=q2V|I0tODp^vI$_AI=0Mpa3^{u^uS+_F*Z|n(&4d zJ_?ZL(fBNwFMws=n{~aO0-$lL! zG$QB*9{U}nbbO{pdXu|_Jdo4TLD73Cn+L6-+0@^Xe~VsYDw#8up|G zpK>BGY_bWa0O3&|HY5k7ESB&|Na6_&ZAzgXCt8H=;PH{CcV~bu(S%d+Cn~o)9IioL zz)R!sFutH&kW6dkY4Ie*Koc#z2cml7sogtj1)b?I1sx7wfxNMPBW)vY8$&`nx`FuK zf)c{FAQtOZz97R(!0>BmuS@+p{33qEFxT#<>;V5b`wX~9zJs(WXx06RQ>~Q;Zw}KQ zO)Q8HVIIWr9~HOq0?$_hU(mpVe)v1~MbsS0xx;1N=KIDXwJWsaKUO${Fd_$a#{V7= z*|aOnsxNdRC0gFIzAzgU2$oa``OSEJHRCN8`yv{O>6rbn`f&!w+aO4!Ym7MwXp}K0 zjB>`7HnIErp!alr`-9C0CZq8Mk=hu)l|Mia!8kbM3H%~_0zCGokGIdn?9OdT$sxakOV_*Rj+ZJpV*KwxFPAESol^tkhFB z#x`M`r>tW11l!~aTjlhL_e`EJuGCgpI(owB3NGI}Y24&V9scX5dzO`lt)6VdT0$NY)Y_Co2ltFE$**24L=n@y9)o607a14U(1 zY?I0=J>w?bYw}c#9yb9mw$jNHCyq8n(NH>h!sJON@1$4+9E6VshAK?sCQThZVcZxr zcw$+_xKfjDMG~pUlvR{Zm|TUodw{V?rNHOtii*+GjS-XY`4cd0f^#;Qwj^Xum|R(D zLblN!TdY3h7(Z!p)g-MG5WLSjS@ch(hwv{tr!tyObPV-MtP!vvMs3sqCLibVO(;Xp zB7>fQbECt`DkhGbG@5GDN{C`X13nrSt&0W?K!{hgva)QF$5u7YGd4ytCZ=E8*wK}6 zO9#YHnNa2_L*s!B!>2LcDIh+8VJjb3HermZqU=8JxC#KpLEFS}m6g;wQPEW36eK&L zY|_1`3Ewa(O25Qt*9b%0Cn)+8UJov#tP zt*oMAa)pToM5T8M4b`$SdLNm}uj|Fojx3!FEc1B!*Ps8lFd$g=NCUeYDY~4-)<{96 z#ulG7y)mKoUhvO6y$TAt-+0r_Jsh|6%)b>G`{2LHY)P@6)2el9o3?4`=VnNm?an(t z>w*g}%D$LN?p<)nrR^{4aJj8xrz`ANUUhZnoNKP_a$VQ!bMw00K;QpwdeHiU-v4C# z3;s`Uzc%NO88>}o`IM29CRa?vTy%d~lv3iqmyRwSTQ+9on6lE5Q!p*Xp2cgi>WBqR z4fXNi;~V0_1FpPaSmjmsNDT~6-fuvwyZF*m z-8uZjl4~w{s%`iEH=fGp@PfbJc+H7>d;ERiDJO?}_O9Eq>(d7R_)~5Uul!`|C09GY zS{FDqn8Q!3zw*6}FN}Y5@u}e)_P>13gZ2qazF2u`42KVYKJwgQ<*&cA?bHMgU-k2v zuOB`7?VYTibn9^ZV<2pMHqL zL#|r+@I!&yp1AY$V;ufqX3i9Q)v;Zk)6a2u;qo7rzwp7X|5$kXFC2dCLC^e6Bma8z zucw!Ac+<15E_`%~bH&=z?{Ikh1=6ac2U7oS*Xj2;yfiPbY{->weRAydS`IInHKVca z+ul!SHGjX*kM?c(0X!F?7X^!5rJ7|{w-oBvq`WYLatm#3wiSSGrzIVpPZZj7S zGO^&;G`2eY`d@l%**1~A`QebV(=!)cb@hN3=9}_4{naPdewz1U=|5gH@&3m2>KhFY z^(g!Ltq<6;w8`{E+3S}qNUitnFb(GP&s=t2pJSJeSbNYkoWsNRT>2kf#+5vBu6YcH z_lBliGUg}q=U1DtxX074YX37&zclg1K4!6g35MHj-w%GL z%IxRx>UGcF^~l`2=00M6h{Lyzc%ot5pc@;Om>=Wt+l!w(KKz|)9_*$i<(7{*ylYU$8Het?@Tu9BPdR)`?&VK@`R?LxpS66+ z;V0hyZup?hJ6~OD`JTi1&R71j^MPkiG+Op?IMex;SKRKY??o)XaQKqv3YP9)@OrRS z%1I7)@elov%>9=)+ET2vt2E{0JskewFPYEwOiAbP^Xbq1`NXrCdxoU2cBLujm!9|R zv~^xGC8a%o4{Unn{=54-tAi;r3;4_HaqXW{<(V>)TDIhu)O@C z=bpdlhEG3F$>;E2Fa7SFN4~iD-+zS>3aWo+)vlG3Ry`4stZojE|LMT9JuUOzyv9l= z(E4*=)+5_WT5UQ|?HsuO+wI?9(%)I|(7V$vd-DRP>DGrweLw7*LQ}(S_fD*Rz0kCH zM__38sfDKM-8WBPBNxKz@>Rc%Psi_~4r|}v-Us5FAD+v75x=GvAG>5C{leqb&Gc&< zx!6L#rm{~yk?Gg}*^~U+cwQ<0R{Oj1ujx-m3+TIP{u=RHuu%M({;2)h3oyOl**^=Z z=&9zv_#@)UCXILyj=ocjxsAE4`CN0VIo;gJJluS}nUhsx>{ic0(pgE&dvXdZ{@U;# zqTsXI_-upk^kj*j7XGj^5#L_>_LKHYak<)its%~-y24%=jY-%=#lspNv#j z8kN6XD{G2HyilANIVRKP+Bb^Zt-arAh!Z0MHn{~-88*^=r)L_K$FLOWM;A)!rL78*6Tl{2GnxAh5RhQX!~3%`&mGF0HQM-w8BxVC=T}iUq=)Sk4K}5(x~r!TZOAyiW4H(7B(Xe0SR5_$Ikg-1l19B~jQDd_)ujn{OtR-8XG|LfLF;mdexZ z_kTfy2(T_BpA#A#!=|l~j*ByPTT?PDNqd-F5Af`#+wUjIyur>baBF!L{W^gA)tzSX zAmHLazcfo91cYmb+o&9-f1)=$i}^2PT=?Cs#kD5Jz_2o1^O$2;nHG7>5iOE0i+(MJ z+-+$oE2#}Fy<9k{ZlZaG%Exmn;rfjAFwHwNMx{(MpP@J^>oKjYx3&J#@XKQ{0cLpj zu#kU{mTUsOMP=>Q${LS%f@^^VJSRls`XQ@3qw`$YAI|l)Di@s}eyro*<3 zyAV^wGm8G8tdIq`d?*DYXs)%GY#Cz=+>MfqLyCxI8j_FI@_M3eO6UjVjq-$nmM4?8 z$(aUc%Srl2NgIs#0WJCsel^CR?(em_=S2G^fnJSuSDRA?QRlS8Xkps0q_yz4@Sq+y zs}o@^$Gd?BVmy>-tyu8A0!zQ7wYbvI8A&Kjfn$XvO{99)YV~H(FVo&x+PBzjc`a$h z?zEILbH=OY@fmNK`{P&6SZs#pm?VgBp-&4?Reo#y!E=iKFm3fE+JX)2hpc_0wAGKM z3-o8MleuG*#`^I*R;`txbvSsVQ?z_)@i7<-9(|>Q#@@rF^$b`R(o#J&0t+fn~&G1gI zeej>kI*$T|Cv$)Z)EMIERfk{yrDVzSH){EF6Y}f*r~lIWFj;=nK#?&KF1?-l@1M?) zKTFG>o>0Fw9hmfA5;jr&xe4iPTK?a%abB(EPsnb%LCc>QPjwleMF!Ib( z)g!cD9q)SdOL(C&6Z4PN@-L#o4Nqcz%9}u9ocicck?9RXUV2T0e=3faaLyqNoZDSJb$PC%f{coY!(tVKy}s6RH57A`|l3x z<-)gN$a9l5uerSEln#}*xPt|m(z3(QMeUwj4mZ^~&?zctZ$7x{TtFk^&QW%7V0H?U ztXCVMt!6&ZvEj&$i<^CW(&3|#bsR)_5eT~$pOVozDqV$oszR1w9@0k+%BFti z3|ZgBn`y-*_>)slhM4C(gjdo=BP7c~cRQ=OR^7l9;b^R^z@@oRl@*m#+)HG0kL-(B z`-IX>kqd>+5%jIJ@7?J8bw%n9IhgN|a~e^2rHqSp)%m?l-U0vwTh}@2YJ6>Hu2+vc zj#jMUT68)wpcgtKI^8hEMIwt>cPR2*^bQMjWO}&N20}YjWzty#SAi;J=e+eqV3p@< z;{oGN8xr0wR0A$_Z^4Zu(rqzbFzX7$!|D#M3~4?cXzYaUv#zA^h_SONMaf=C>w&|y zDc;qjuNOf8huQjCz5m*MwtEpGDs5h+SScUo4mO1ZVR=) z2wdZQ^X77>e0ET`uk1h>9qXkzo$(oi6i5WRKVgCnHEfyn;X^D;ZO02b%*n|gd6bA;DtZLTN5%H zY=Fo^sVhjyAO4rQrmY_27?1q!6-sw ztx(2Na8rEFRL0^ubkPL7$w6ytT>4r`n)kONjG;ugcGOK6NddyZN*+nOcqH}27pizS zh{Y9>2xUoNcb7QLpO-t) ztG#5$wu(ve;WfB8S}yxeq)Z)M2%3;U6Z>=Oi6HVFpH-C57(yrE2AmsFxuoZ5b3!G$ zv)ueC>zR@@&2(s2UIDZ?N%!&~DpS8gd-Y~=1LvGTG-7xNaO*|8F9PYP^=@+7K%__7 ze$;LgMe9xMtsar)e}??BdVmQ|H1SKQR+fYmeL#TXHy~y}D7`fXL_70m)P`Q_W^F*6 zlIFaQ&peb~#EUi_j$u4JiXgSUHQFAIj)(l{c&Nm8Qp?U&a0AH}hXM?VA@~aZza{LZ z7rlSDqr(mn<&5iF(py9u{SN$w!}ucx(YZ*=gNVl$@w4Cnc=*bS)BMAo-(YdN6Zac1 z9jr3)m-LXe-74lUt1CJsvNM_wU}=@unKm!0tD$P>4*daW-(1m%A@VVEpL+S){C4Vb zX+F&YvU+?Kv!B&w?;FH=RteU#v*LvTq4w>7<(}r_<)DZT>akUV?KD>S8NI~Dru-zl0oMZHvms-7rVp_3)~=8 z4>2+^dJE*>g`s}Uj-8cPnYUH^(GjV*4b0+u*|*Ou2R>a1A(aXDqjkPZcgU90Zd$v_ zgs^@E?}(lzjL(MoU^&URBOfkrOFzqCvrNDv(|xx833!}z%M+LI{uy{SMlZhoGK9Pi z(j6nZ_m-PD1U0Nl0a|?pQ=rVAUWzy7ZNv%_hu_cmh{2Z|o4MBDk~)?XisRRcEf{L_Zjx>6R}vbaAJmJx1Obn&`KKt2rnq=rF!1-fO5CnwBtG?i5$qL|-%C z61k1O@*UVO9VRk9MZ@Z2nXmf{!PQFj zkQ4VAaO+nAhs8BnzT7P{@6dUGCp7$0Yq{KWM2E`TUBM!3SiX>!Wo2V4=8@$fZkd=H zT`5ISAFuc11wj~C6r#?xbcYfySAsW#G;mX;-l|hY%xnbaKl+$g6Z@pkLlh5i)V%-? z_fq$d5FmrD7&gO2Ndq&)en1|ImY&wQ2-a$7uC#2o$TS27;lYZYMhlRpfY$!Iv4g$1T8=X|R)pI}lCE~gop2f7Ela?5g>l1t#Us@!esd~R)mwD&?k%S@)Gg@e)9B|TXX$6Hp1Ay1iTt<| zdm1>7RmPl$QNlOk8S|Wu=c#~lVLBy>G(pL^BR2#4#T~x&bWW#Ht#A?zf{co zozl|Fxwtp+T}X4%yA}Dr5d94)jO3@z1>biZsu(AmKjs~ze0Xh&_pYMA_mckwd{u%4 zxTZD64x_SNumeL!^a(nzG~os2uv&vr!_a;vZ^j~5VH}`-R7u-g79g#pGl+6uey+)z zDj(T-@fP2=7bLK7y0@XtL>S@TD5&S`ZljdT2|bloc2CDK-gk? zz7?RiGf93Jjy8z_>r@YdV!#;0&|ZNL;_jfjj)v{8lu%k$f`UGheD@+$!klXjBCRHt zwfupS1ijfMxPwQ=PSqoBGt40NM6_=WkcWKp@D6T=Jn3L}=%%TNKud~f%a4VmG-n$k z%$sO^Ck4WIC;H$!fx(h=tgC|UZ$`ESyC~HO$1cf7>H)I4qbOJc;nOq>Z0y1ui1Y11 z0l9c74Cd2DlB_(?CUO&^$mK(*`v+*CNzU0(MAfcFv@?j!V~wMS6c|MXgmIgFtd;Nn z$Yv~XFi2^Co{j%7{||D3e}W4mqi_XYq+ero`PP|b$JZV=L^0CR5+K9c8q4Od=$1Ue zSuRb2kYiEjCnl6F=wG_APu8Pp_wA?c-v<|>#gYHi=<6SdFOVKzSNnq{@=R>~`T=dw zBkCFJCvgeYAElSO1pSQA=8@q{Ifm&(+gE%*0-bPI^n$4WgH9Cg5DSx#Crn1fwC}{n z!>0kZ7Pe9Nr&zcng~>J52P7k4fyoCX6JU>M%%5;2=N@l)d0B;RY}sgBv#@z4PqyLi z2Cfo~8-tq~d z^76{E1Rz9ek28iCNWe2U>(%MuSq@;fZ(KJBW@Ew=csGd3HkTBhUT zsZv}f1G4q2J}u#-%V#mvnzTl06k=>pd_t{9e>0uHPZBi87iZ!tZlX&^-^16K$}1*M z1j%Xlki^X+PQdN`ed)E<#Ik8Om`X=aA`FflJ+;g>+9qJ6Yg5!-gy~|J_K13M3C*ir zjk2BLnw6GbtC24q*~+GsmX(dEL@TsRbd}JiC7~XI&i(I1P#o15s4@YKTKmc-lue|o zU>Yj*rZLj!9wF@5^4&r`-I?1Y(s9Polg4PM5-q3{_!~2hcnZ}fZgN#JCN#W>n_}XC z71zt?3SK;^>v;Y@>bJPC@D^KVxR=kd<#p?NLsuMNTLGXA|Ifkyv-zDTaRWWHuBFF( z{~t`|X_@9r(_5!5!dyku39X3fG3tGy3Vz($FQvmWh@U0eFXbaWLwY`?KbCtlGJO`y zKq!>1L6Gv0o)$f{B%vo8|4F7s&s>TlU-d)UW~3Gi-LhBti^pGg8t8$^jV<< zZn=nv~HK^INaiGz}orW04uQYQ{EeGN)+g=tXXB8|_ePSb!iD!=A`uzc!6 z8^r(g45fOK!4D++TJ_5qWl^AZRTvMVoMw3+vHjv>p@k~wNge@6CP z(wp>Ip}?8a7WLT*S%Dc4_fH#xJXT^Fc&?2fThJxeaK*ZWthcIU0OlVE=9YuYnP!=S z4*(7dn!ro3ju)s#{(fD%sB&FbOx<~1qpEkNu5=rlF6wp#XD;gs=5}4BXLRX!Eqw1J zZ`Uamlc$tbc&3}WmW>@*UNL%Nbb93W{a5}F=!D8M>CBBMhGKY#Ul<=2pd&)-mguL~ z6Y}XFwBf7=O|)N4#sB|me&WScW;gsdK6?G+nZWqyLH+kyd`y;q6s_6u?AFGa2*q^P z^!&Hr1HC6CGZm1S2G3*SC;C?-#b~$>-Y7rOw(Pw8kJ;HAp3NBYDB0ofY#z$n0U- zX;wk=pn*6MxGqR`I5sOOgT}%fM|N<~l$;HYy;AWub&y>N4$4*kWX0wcCZ_o8XE}D8 z&5@skUl&;5BiR*<0znUi1Wz)AoxY>zNdB)7kQUCu-}k5s5NYc}IIZE?-;a_DH3e76H7VLGqyH8g7uxUk;`S~N2&bQA3CW>(0~ zZ7luU7_k3L`ltWN^bdomf2;gKkP(u*joJGa12MrDXx(NIPd;XU3K4l*I)06FZ&)Sv zUQR~9C@v;ft%O68#fTxrB;e};yqZWVWQFMPD9QLC?}w3IoKW$lBy}0p;W#v_0JPbI z6bmxdohyMlQ}aOdx>xa?X!bs>P4C6r#Hgt~=>w-d70{?P~-xGjHwt${t8ez0HR~xUdlVjR<6qF!NSh!?WxeCc!?rabI56F zT`yZ<`v>j@j@B325NlEkaavEJ>NR3O|I*Z-)B$2LE$GF}-nSen4U$n|@-43hKIU04 z_!NPvo^XMAs7GLmv)uO{;XkD+ots~-`Y0Im9l&3<+e5;@bb%Yv-GH*jdUZAWKN|&M z@IiP?XoFpDsN_+wGX*`D!5lV3iMj5OY^7{H_*js#p?^sQEwBl{Me1q@h&^5>exW%8 z^Vp$&CnKG8od@#TW4$WjZ%5O z)~W4NZ0VAW7|^w7ox0AMvkk@=L-kZ_a7GWZ&C9wmYPfk2@vHz5kNP^J0wd*BgrXxw z3Xo79qlNHILQ0%jE2WT|Dy3W8L7wbfIN!oK49p0MGtt^_tTI`~R)@pVs5&@3+lir+ z9X=A3_2vB|@}v&^_THN)XlINA>N-5AlX-{G#`1rU!>Vri5k@8?T>NO;o{guwB0AsG@FggA#I% z&90?Qa&0)}kn%e9XnRszxUoc)3-W4Q>g@wd)Z3wMcb~%iUkTnwWt4;-Cdsy3Kf5!2 zs9ASE<%SfoUQ*LUh1&owj$ zUFm{YxmVA^aV2Uzbn2O zsV2`4dXG>MNy)7M0`iCK-vdIq-f!PcpyC19r&E~XGw~lD$!7ZP^YNCq#RXaTSQkDL z<HCJ5;haXorm7*jU!;*X z3chcjPcUOfJ%@YwuDqJ4{sq&6o}B9A;Z8;4o!A{c5aq9Mh2FPQFL4Qx*Eru@%%7rV zMeQO+yGrX1d9XWl?=bEr^#sNxIs}L&gK^->)U&XPmaFTr{I9dy!B2|h{fSIqF~*aSOr%qd`J66obbYX<5AsY`O+Me7mAGAgeE zw&eJQhkZ2Pjmh&F=0`=q10LfCC;%onPryW;?15LDHp1EI0dNrCj~2}`Hkqu3ZPnTP z-a>}B#nh{a$lDTp(nS4*(RH4*Y~DV^F;AhBLT4?zSAlML19Zb{@eA({g*ECLaIs9X zN4meMA5ay1oJxQmUWkT!IR+{YiPu1LONOd1Pq2tK$)WCkwSgv33gsMdcB}#W>l5m3 zgBE8xnCUez0cuaD1Sm~g%tWVWTC~}svvWz{dsyEq#pF|B-Yw=Pbvrq2fVo#I3_HR^ zZ5Ex>XJwOyD40dL`jIndjbo>@fW&eNYZ_23ZfMBO!eZYrb?$5)!c(V;&+7BkB3fh; zuA)LPU$bl&ffeS6FDsaKLkxJ{dSEr3fP&gaw3~U#;BH>M(n{ZO zs{-A;TJL6Q*$(t&v$w5qIXj9Va6I3Hl$EW^Rek}RPcOk_*jf&@0>@6zgLW^xiU%Jj zwBgLMzI=0&FJgvg4&QFGx;f;WXU(bYxD(p7-{aJmRLa@ANfDf@@#3v0?+aHclrRU| zp*Vtt8LgG52NgK=fVQnQ6BJ<0CSbwyuOp{3C80v>cu=+MtFOO~ROa&$c)wv{M|NGY4ZC#C{Yo9i+kWjC73DT1AH{KhcX zKX*uu_NLiz7flE>8Kwi0hmiW9%;TT*GubJDv}_rrY+CTM@LFDnKrl!=TIGuw|Bf(^ zyK?nyN+>ORo7lb*EX*xer*uLv9ci(bd!3>YWedJdq)xj#`l2fBgF)&&bxM{Rq%XlB zE!;xW&Cr@y9}H$vc4<<*rZ(ZDkE)W1MFp0wDZvtx%1OjLqblqiSl0w)I@k7e(2E!a z(q;7V{I(LI=1607KRN`QgJnUOxd<{bm-%*E0$XH^S-DLuZd2rz`=({!&Ig&kmzF(A zZNmICk6I3dsXr6ntGE(-XaZaIeUkz`L&h{I)Og#IXotHU^LM%WBz=L08*)@pz$gPj zW#=6Z4$M*?WmF7ouRcn+4i3yzAEhF3U(1HOYn{r~M;S)iF#8A!u7t22%mlUyQiF<> zt`~fVYe+4$sfxAS@hBBS{Fq-*RXSEDcHir?x&}8Z%vGE4 zjq(W*)f%17$X8>M)xLqcXg!PdnEI=<>>!a=Q?LC*Pu>b8*gtnUF(F9poWWAs|7T$T zPZr8k3diOg{E&A2s5=`MuZp)rpr;7}pzUT3tNm?`&7?8T{x`I{M4|i4D@CSVP0J%( z3mgj+W=D1iof5IIU$Y3knZ3pUBKQwUu(Uq5NP)isDrwn57EBDa(Rc_}3C{`KnNqYf zMY#}Oi0=De?TQDJcLnf2L_MGnY9%-{H?KLRPgbyBc7gOreZ{r7dU&<;W<@3p603c( z%s;7>ww{&t%4-R6+}T**k~k9ULd@b_kQ~w%jSBSrWL*sJ1$znap4z;c$mdOk`)CDh z0)G*Am7+MddPjlO9Rsr~s)Cbk&fus_T6JL<4a{sf5C?4+cO&-PsB zB%eso-Q6#6jL{TTiCPnyBI<8i6Xwc4fdJtvokABUM~nXX&&fX)q>7v+5qwa(qVi9|0{qgIpNUcyFW6F2#b-@)~gtc8qKE+%#t3dt>`8sV^!CnL(mQAjF9tPlhz5>B~k;!5m@id(QY!6iFZQ2H~z!dVH!{fc_qdkm-&o%s@IvDXL1vJyj_s)Qbn6xli|DFR6 zV#tkNMgJZ~|Dtp2DvDCo zaSVTle&lxjXJlv7QJ_+9)A}>CN#D=K^Rrf7mwFJL45HL~7Nfk%*0TzD6=;nPXFs(E zy06-JsucBq4upQ$G}QpXmgErV@{AVarIoh~?$rp0VNoD}+&&>EG;jsluHkWh^OW{R`ks| zD7`r)6C*At+pr5bn0Hu}ZSYi@GF{9#Vqirl+@F%SOmF!9MJ335 zBSa*5E%F7guj>m_@x>(i;bomXdL<_hZ9YH?xtsKrQ`6ksB=IX9MCR5>ixU@5>tC)DOPH%b0^s0G_r>`)=P0BW7Vv4qlz zQIxveDX$BZUh662h4pG$SksC+SU4r85mP6f(MiRt)j|j~3v=rWaL`7DuEj+OURP`9 z(9z?;MEpMAwD}vz2NVsz^81(`nL;PcCo z%pEM6Rsw(8=r78SVj-(=s^7WIUj!>t-MAm+bijRk6Mfw)#Km$wL_IzlABHG*C z5cZ|gFj|F#!2nT!qtL4PXe6?kdV4GVFk2Vm-jSOd8fEvghzM-p8kELXAod}mRdAB}JIl#XNI%FR zBTq49DeAZ2FymE@E(0%M8_}O8uIiMfT$vy2#3XzORwV!ajD_vqfB0b(C4gbzLS9k0s1T zduLy6VM!&>ocnXWhBKH-4^hV!*?>Dl z>w(<~c+9z#AH*~x_#Ez968g*t{*~$7<p1_+#S&%A& zK{E2gZQo_s`3V(l?7-UEO;4`75VIQWH^eYpdCll#@AuCh_)B>yc}8UW1Yn>slsZz^ z@7W_MtJ~SiX9QQCEiZpP25KN~Eri^-zQWNfb_+{eG95gg7Vd_2gfY8X`i6zBWO2m; z-EK<TO1)5bpljcEZo2Rv>ju=_URbH5g)IC{;oPY1$YOgqXFUcY zg(bLZ;-*@DVI`b0EDT1rJF;wQ<1EyMN()EZCQ8y^WpTWK$JP?llTtTfyGqO^r6|obTiQlf}_!2@d<_nN>`Z9(ptywDXrttIGvd^f?DRY2}|u` zP%(1Gv4ySfrNx*$Meci4BqZFAahvri&UeR%YNJ3#2gbYwBf9+(#Tn(7s{yNdw0YVN zr9Xsxg#@I*7A!}!)Pd=ik$_Nsek`jJvR@Se*x$1*_QE=RSaCR$!zxXf7b=hPV7Qo2Dn26v9EIhr2c?D;AMW-vRuN zRe^;9PV6CB;Ek(_+7Gg}luC+5acchmSD`0(?u7V|r4e+>gZz$@)?h?AS!+)?F5AC` z4;P7m(+W=AehZQRZ8jT5OFCSfY{)`bUmm``iIkT8q6cMhaHpVbGDWOUKl<09UwI`M zZ^Va>U;O-}U2n)RCzEwSi+4N|M;kc!64P<`y`Y~BF~s2Fn z5>wW|Z=-gl$9jr(>$CKXKPaj z(-fWEG(D1jl%%B|rr%9y@1Xe%Oou!Ba3bvfP~+CMr-q!h`@{CdpQEj3Job3%_h^V{ zZImX|r6W$hR9rIN(dr#)Ez!yxwWSPKoqcBgm~H9%iLB~ud_P3!$geSB1U<9sb6t`qAm%R1!iIGh_UBq-pe0WBI!%TR+hep2_8nstNHgc5#ZEMY(bFV@( zO+7&G&Y%gl!N+m*VN-MTVXqox#R>FbQ&$J;!#*Iu zCY3&H1~^aY!@TS96W_&p{MUoqY0z*_a5UCCsh!pOxQVVlZmLHg2hk+@xY9g*Tp~vw zcaqY_&3>FjNe1cT9w-1rRvHHBI@@`nZGOF0lSP)yGX;eSCdf`(x5B>f@G! zlm@W_1={5DmuGSt){|Rv1pSaTFdS7D_UPT2xkb(+oU(Ej>rPGW*J|L^4AyC4Rf6?5 zc2~?oZxI_V8CKN9l~(r9pE{!YwEqmldogE%=^N*$n9Yh&8vbG882iJzb{2}cFek0p z<6-X+bN^I#fvIZhO8@t{tPsG3@sFYD3CXey4J_+NlIV<(qfpB|WN=hyT1tWqj{>ir z`4|SS|5g25?)+pzWYb;%r9LBLP>yfnZW_+*M3~AfHt?Z9-?P2ofFL~n;zPBF(QlO^a@a7x%x`}N06LDm}4*NWQ6ZG7O zFWu7C_UBuRjwFg+=uFQEMK*D*&}qV#?7rr@XS(|3GkZwg?WRhnDVn*l=&e8g$F%*K z=F_pshcl1f=FGfsr#+#wd3Jk6?^#}Lbg7E!% z_--6di4h%kL0q(cVf3ry)Be$K88n@Sp*>)%FwyTje)QzvXb*2|e2X<%NvaHrR;y;r zf=k`(`o~!X3USwi^wj(@EIRCk#+k#1;yg7OFK3u%e$Hv4eM~+=)b~x``U&kKJ@k}C z3oI@r+UcxO$auIjeG$kgAA>EGbz_Qj>9Me;Av}M!L^I1v($Bt;Nrhoy5L-RHr%4D{ ztOz*6!g6@#@?y)L+-Xp6qBt;pl=5M40 zYO`IP>3vH+0%Wxv8w^Z>Bo9wJ8(jS<3od;}!_CGdlpBfCkiH;sW`mEzee;_!T z{aNe;v@NK%?ev-#_I1X@l9u+B^5BhRex21_f56AyQJ~Nk6(sDzkd20(ZoDJ=KDn5y z@MUk0;^QE;oo2%~Pq5|gt;5;EFM_kTaAINIwX@HWr)+)|pMA%+60VK8^?^oMbS{Q* z{uWxI?i3?Jggu!IV;raH0%HTKfl(`$ap6ju9DD--7LR@kkUd)9lME!8Ln z1O(@7smG%g+fs{LatiC2Xbl3@T$Kg@>-ogclaX`@liCyT)PScfyl#2#mzng2K^EqA zD|~3|Dn(HZEYa}7w+eK0kvGcT2cOO_t3vGEP@N`W(2GB9e`xO{Kc0!rL6|mqJMmdK z4?!$HOid35*JPpxf}=e>&e$WkAM;fnoqF?h>^BrBWqGLoV?B_eiUl*i)D0RaCX_tWX)I$oSA?#Qml2wr37^ns` zRFO@cm{yKHAmKUq0oAeY_EIidbQ=dz;GnqS-6I)oe0*W*9JZkTqn?^gQhqB_?_ra6 z`ilqLYPlx+g>s^I$iw=bXlTc>?%wm%q3q}N_Ozd;eVv_Wd@HmQ8Mx-2J15nFS5-C9OD>7()82JqZOVU|lsB&Q@R9=ebmLF2 zd}8INZ(q40xwLBqTt%o9aJQ0Lk*tYcd`UD1j=Xg6zt^VHN}>3dlfFBVtb4*EjETh)aC0;_@lI(ju@qN=WrC|X+^oiQVdM-sXV6tAwn;QaGHe11*zyeM72 zt?bM}$0`>c(Q~68t`UG!J9sZD>Mt2C^l^bs@2)@TJSi0T%x1Iu)SZDH2jWn=bC_`JG+# z9Qm1Lt_bkOx3BEJ$&DjQeeuFUZA&{k421*ZmvwY0X;C=8CYQf_pry^z`||QH?e1oh z0LC;0`tCmXycyfNQ@zW5$@5-)`5_2bz<1xWaYNwCp9j1zK8s&3q#me_pWc&DKl;+M z{v4^;*157rHAeX=^p|j={QmT9?eL5W{Nz^B(bWU*hfEt#o>x5k<8^7-Bmwz7QZ29i z_T|gkZ$Niao-_Tx=EI}XE8KfLWd>x_K|XkL>ubv|!k=DYE87Hkpk3MCw%l|dKR$Yv zVentItj*2fE6?Rm(}@bj=g`N~yh7;>1$^-tRV^59Vso`Q6Mh-=D0KSaLrb>q$KDX)CS8&Mt99?k#2uP(w@zK+ip zvFuY_NlXqg(Nd7f`zMydg`K)&Owv_y5YoW~Z@&7LtwHgg3FuOnQFRH&Pmk3;&AvEOqdnmv^Eu)w|iXRm5@5)DQHS)g~ zKVEJ8*H~V$xp+Z&Rk{S{xqlXiwj-diyp+x{>k(}+4X*bQQ26G|@GSXlC2*>`8NM-b zra1gu7WXMPtBuBaB{H*(8<`Q;2l%hKyn|Pa=6V~qwi{kw$9rg_G05e_O zinFk9K3M?9N$=+%_!#4G@n8$WyREpHzB~bMI$ZpwY95?;%Gvfz&(#=SXLC2M-~z26 zE{2Lqy5Y04s!2+30y;uf_+6*d$M77wf-qcPPTH|;a&|iIG09nb6XPQo)Uw#zt=xgxE|y`!5e%9Z!Wo%>8}Eb*T4lTFarz$d-LhzHR}2q-j{^3fqJmBK?Vw7_m%klbl z#c}WHi7n-0MJ4-CSb%R=@h{8%woR8O{Nd%X{-WYxm&GnCt4CVd!GrrB@nhW?^2Rp$ zqSgJa1;qHiVhnG8n}y`B=z4fMh2mxKewulU+uUm4akgKP0=>MkjQP&d!iZ{SMSGze zU%n?s?SSY95z5CATrkRWef zrPKaB(-y)tBts6ak$F0j_vyTBuc`-qO6VIeuWAwU3Our<1xdsoxZpzMH+)d1!=Esm zhZO&3}Mv z8~eWY1x?@Tt^`Ch$I<0Fy%|g4vi%AaH@|Ftc`4(!9w(mleM86p3eO(egIm$};9*f0Do-MoLH^ zv|M`lHRbh7%NrI*8;c)6G&-kOoCtoCy6lXLUy;9@OBDavZBCQO+`Dz!X9-`n?V$T= zH>F=rvTcWSKHY3J{_8L;8YC=qG7EOQfyk#y9VV7SIdv{~>zp4Tn-eCEDj|Dfl^I*;kF%NPJy z_4tW-%;qp$tjl=NR$h&FmwYl7)KVbgx+Iq`(8lbzi?)(2Tp>EItoS(}E66;N{eHbJ zFGw!1jd$yKZyUd-!%Q0~@Av93IrBl<6EMCV1r&hPZBa|vjXqFi&PDuGoq~V3-p&|B zd3w3d=a;9|h`Uk8jc5G2OQ#(q5QWz5_OgT^Wn196OWCv&h?k#t94-*tB5(npdoJ~VM^~x!HaaAGjy*lrec*a~U%41PDA!G1f z9p~*QPX~mJ`NBy1uqL+2%i=>bdzWMN5$nyNnMthXhGupwO)d@1{6ueWXlBn!zW5H& zP_OP08*Zxh-Xsp%_=_B{fo5=6Agc8g7*FbI(D&WuLBDJC=(mvc1Lo)S&U?M5(fgKt zW?Juc242XQ?=(NhNS65_{JdAGuD{z?u;~K^j&XHGr6 z*OGbat>09rBct9#c%F+N%R0>$9$laUqP}oboVhPVJoDH3(lzM(Cpx3!I-TE_J+w&Y z_lKKyoABj$pzQLu|2m!D50`=4d6Sh9qMU5U2Iy131EH!)NEM#+S_+Xp11*zgS&%;b!yF{@}G9{W}5KWW;P<8lKPz@!u~{WD;KFA8EWfy1U_$C9%&vx1B$ zuPN$$fvf^2H`PqEVF&-)eGD798Ww4ao{!vxchwf+=cho5)ekdB-`Co`9zSi&Xt{4;wu;wucB**v_tZ@4`HJr9Ak4!37kAl z;U-1wOCbl)wvT>Y;;~(kjh{!Uap%VA$6DcxV=NB);CRssKy~W;(Vu5+=x9AU+p0N8 zw@#l0$W2x88ti?Oq5T z&~t}Irlx0H)AROhelNWu8}C3t?}lbanBQ4gq548qf)rR-F){|fr#bx@@?=QM6PV({ z&C{(90aKO(S8J~e-`~ww`$g<)sjz0REY)WqiJ(fH-2!{cpCs%Z3A0hNXtxE^eMk7l zn%xAEZ~C=UVP$ScKjHo%IcQ+RZiVSP*TdB}j=TV}*AVqJPiz=aF;^dx12F!@lox9% zO>KWj#qF`q=8;a?kQ9OnyZNwnp|9=;rIvc3yaarTMX@KG|jAlmhLmzlo zIz!GKIbY+|p>8s7H*tNcC=pWHbeuL+$_tZ?MJSiUnkyI0FZ_|RloNu6#d zCjl()9{fg+vGpd9QcDezsYCr!{daXI>w+mu*vU-tJGAW?-uTa z-#-VgVxhRWk-&TT^D{bV4qU4f%J;CR0AF#iJ?Z?^(r$MO3^UT~rJmLQ3ueudh!53W zP_I&q|D3ut6dw9&kb478sVmdx1l>}>`C7S^fxqO~pgu!}(=Lp`!fhCFc~npX(x?9x zg6s8Exjv+Jg6PdFLro zHLs;d)~my#;@D_gA@k2x8%;3VNxGOdzH{Js}IUfb2}zhfQnFEa9$+j&h>H}^mJiI;)nZ2j!dPru;2{A01nXYPg8{mdEAX6;^;rg+CZ^F9|p zmQ~9a&-JXX|3q_^%aF&w;>jMO!|0&PpLQ`41bpNb^9F*d=Lu_k`Tg+!7qqoX%m4rY diff --git a/nostrdb/bindings/c/.dir b/nostrdb/src/bindings/c/.dir similarity index 100% rename from nostrdb/bindings/c/.dir rename to nostrdb/src/bindings/c/.dir diff --git a/nostrdb/bindings/c/flatbuffers_common_builder.h b/nostrdb/src/bindings/c/flatbuffers_common_builder.h similarity index 100% rename from nostrdb/bindings/c/flatbuffers_common_builder.h rename to nostrdb/src/bindings/c/flatbuffers_common_builder.h diff --git a/nostrdb/bindings/c/flatbuffers_common_reader.h b/nostrdb/src/bindings/c/flatbuffers_common_reader.h similarity index 100% rename from nostrdb/bindings/c/flatbuffers_common_reader.h rename to nostrdb/src/bindings/c/flatbuffers_common_reader.h diff --git a/nostrdb/bindings/c/meta_builder.h b/nostrdb/src/bindings/c/meta_builder.h similarity index 100% rename from nostrdb/bindings/c/meta_builder.h rename to nostrdb/src/bindings/c/meta_builder.h diff --git a/nostrdb/bindings/c/meta_json_parser.h b/nostrdb/src/bindings/c/meta_json_parser.h similarity index 100% rename from nostrdb/bindings/c/meta_json_parser.h rename to nostrdb/src/bindings/c/meta_json_parser.h diff --git a/nostrdb/bindings/c/meta_reader.h b/nostrdb/src/bindings/c/meta_reader.h similarity index 100% rename from nostrdb/bindings/c/meta_reader.h rename to nostrdb/src/bindings/c/meta_reader.h diff --git a/nostrdb/bindings/c/meta_verifier.h b/nostrdb/src/bindings/c/meta_verifier.h similarity index 100% rename from nostrdb/bindings/c/meta_verifier.h rename to nostrdb/src/bindings/c/meta_verifier.h diff --git a/nostrdb/bindings/c/profile_builder.h b/nostrdb/src/bindings/c/profile_builder.h similarity index 100% rename from nostrdb/bindings/c/profile_builder.h rename to nostrdb/src/bindings/c/profile_builder.h diff --git a/nostrdb/bindings/c/profile_json_parser.h b/nostrdb/src/bindings/c/profile_json_parser.h similarity index 100% rename from nostrdb/bindings/c/profile_json_parser.h rename to nostrdb/src/bindings/c/profile_json_parser.h diff --git a/nostrdb/bindings/c/profile_reader.h b/nostrdb/src/bindings/c/profile_reader.h similarity index 100% rename from nostrdb/bindings/c/profile_reader.h rename to nostrdb/src/bindings/c/profile_reader.h diff --git a/nostrdb/bindings/c/profile_verifier.h b/nostrdb/src/bindings/c/profile_verifier.h similarity index 100% rename from nostrdb/bindings/c/profile_verifier.h rename to nostrdb/src/bindings/c/profile_verifier.h diff --git a/nostrdb/bindings/rust/.dir b/nostrdb/src/bindings/rust/.dir similarity index 100% rename from nostrdb/bindings/rust/.dir rename to nostrdb/src/bindings/rust/.dir diff --git a/nostrdb/bindings/rust/ndb_meta.rs b/nostrdb/src/bindings/rust/ndb_meta.rs similarity index 100% rename from nostrdb/bindings/rust/ndb_meta.rs rename to nostrdb/src/bindings/rust/ndb_meta.rs diff --git a/nostrdb/bindings/rust/ndb_profile.rs b/nostrdb/src/bindings/rust/ndb_profile.rs similarity index 100% rename from nostrdb/bindings/rust/ndb_profile.rs rename to nostrdb/src/bindings/rust/ndb_profile.rs diff --git a/nostrdb/bindings/swift/NdbMeta.swift b/nostrdb/src/bindings/swift/NdbMeta.swift similarity index 100% rename from nostrdb/bindings/swift/NdbMeta.swift rename to nostrdb/src/bindings/swift/NdbMeta.swift diff --git a/nostrdb/bindings/swift/NdbProfile.swift b/nostrdb/src/bindings/swift/NdbProfile.swift similarity index 100% rename from nostrdb/bindings/swift/NdbProfile.swift rename to nostrdb/src/bindings/swift/NdbProfile.swift diff --git a/nostrdb/bolt11/alignof.h b/nostrdb/src/bolt11/alignof.h similarity index 100% rename from nostrdb/bolt11/alignof.h rename to nostrdb/src/bolt11/alignof.h diff --git a/nostrdb/bolt11/amount.c b/nostrdb/src/bolt11/amount.c similarity index 100% rename from nostrdb/bolt11/amount.c rename to nostrdb/src/bolt11/amount.c diff --git a/nostrdb/bolt11/amount.h b/nostrdb/src/bolt11/amount.h similarity index 100% rename from nostrdb/bolt11/amount.h rename to nostrdb/src/bolt11/amount.h diff --git a/nostrdb/bolt11/array_size.h b/nostrdb/src/bolt11/array_size.h similarity index 100% rename from nostrdb/bolt11/array_size.h rename to nostrdb/src/bolt11/array_size.h diff --git a/nostrdb/bolt11/bech32.c b/nostrdb/src/bolt11/bech32.c similarity index 100% rename from nostrdb/bolt11/bech32.c rename to nostrdb/src/bolt11/bech32.c diff --git a/nostrdb/bolt11/bech32.h b/nostrdb/src/bolt11/bech32.h similarity index 100% rename from nostrdb/bolt11/bech32.h rename to nostrdb/src/bolt11/bech32.h diff --git a/nostrdb/bolt11/bech32_util.c b/nostrdb/src/bolt11/bech32_util.c similarity index 100% rename from nostrdb/bolt11/bech32_util.c rename to nostrdb/src/bolt11/bech32_util.c diff --git a/nostrdb/bolt11/bech32_util.h b/nostrdb/src/bolt11/bech32_util.h similarity index 100% rename from nostrdb/bolt11/bech32_util.h rename to nostrdb/src/bolt11/bech32_util.h diff --git a/nostrdb/bolt11/bolt11.c b/nostrdb/src/bolt11/bolt11.c similarity index 100% rename from nostrdb/bolt11/bolt11.c rename to nostrdb/src/bolt11/bolt11.c diff --git a/nostrdb/bolt11/bolt11.h b/nostrdb/src/bolt11/bolt11.h similarity index 100% rename from nostrdb/bolt11/bolt11.h rename to nostrdb/src/bolt11/bolt11.h diff --git a/nostrdb/bolt11/build_assert.h b/nostrdb/src/bolt11/build_assert.h similarity index 100% rename from nostrdb/bolt11/build_assert.h rename to nostrdb/src/bolt11/build_assert.h diff --git a/nostrdb/bolt11/check_type.h b/nostrdb/src/bolt11/check_type.h similarity index 100% rename from nostrdb/bolt11/check_type.h rename to nostrdb/src/bolt11/check_type.h diff --git a/nostrdb/bolt11/container_of.h b/nostrdb/src/bolt11/container_of.h similarity index 100% rename from nostrdb/bolt11/container_of.h rename to nostrdb/src/bolt11/container_of.h diff --git a/nostrdb/bolt11/cppmagic.h b/nostrdb/src/bolt11/cppmagic.h similarity index 100% rename from nostrdb/bolt11/cppmagic.h rename to nostrdb/src/bolt11/cppmagic.h diff --git a/nostrdb/bolt11/debug.h b/nostrdb/src/bolt11/debug.h similarity index 100% rename from nostrdb/bolt11/debug.h rename to nostrdb/src/bolt11/debug.h diff --git a/nostrdb/bolt11/error.c b/nostrdb/src/bolt11/error.c similarity index 100% rename from nostrdb/bolt11/error.c rename to nostrdb/src/bolt11/error.c diff --git a/nostrdb/bolt11/error.h b/nostrdb/src/bolt11/error.h similarity index 100% rename from nostrdb/bolt11/error.h rename to nostrdb/src/bolt11/error.h diff --git a/nostrdb/bolt11/hash_u5.c b/nostrdb/src/bolt11/hash_u5.c similarity index 100% rename from nostrdb/bolt11/hash_u5.c rename to nostrdb/src/bolt11/hash_u5.c diff --git a/nostrdb/bolt11/hash_u5.h b/nostrdb/src/bolt11/hash_u5.h similarity index 100% rename from nostrdb/bolt11/hash_u5.h rename to nostrdb/src/bolt11/hash_u5.h diff --git a/nostrdb/bolt11/likely.h b/nostrdb/src/bolt11/likely.h similarity index 100% rename from nostrdb/bolt11/likely.h rename to nostrdb/src/bolt11/likely.h diff --git a/nostrdb/bolt11/list.c b/nostrdb/src/bolt11/list.c similarity index 100% rename from nostrdb/bolt11/list.c rename to nostrdb/src/bolt11/list.c diff --git a/nostrdb/bolt11/list.h b/nostrdb/src/bolt11/list.h similarity index 100% rename from nostrdb/bolt11/list.h rename to nostrdb/src/bolt11/list.h diff --git a/nostrdb/bolt11/mem.c b/nostrdb/src/bolt11/mem.c similarity index 100% rename from nostrdb/bolt11/mem.c rename to nostrdb/src/bolt11/mem.c diff --git a/nostrdb/bolt11/mem.h b/nostrdb/src/bolt11/mem.h similarity index 100% rename from nostrdb/bolt11/mem.h rename to nostrdb/src/bolt11/mem.h diff --git a/nostrdb/bolt11/node_id.c b/nostrdb/src/bolt11/node_id.c similarity index 100% rename from nostrdb/bolt11/node_id.c rename to nostrdb/src/bolt11/node_id.c diff --git a/nostrdb/bolt11/node_id.h b/nostrdb/src/bolt11/node_id.h similarity index 100% rename from nostrdb/bolt11/node_id.h rename to nostrdb/src/bolt11/node_id.h diff --git a/nostrdb/bolt11/overflows.h b/nostrdb/src/bolt11/overflows.h similarity index 100% rename from nostrdb/bolt11/overflows.h rename to nostrdb/src/bolt11/overflows.h diff --git a/nostrdb/bolt11/short_types.h b/nostrdb/src/bolt11/short_types.h similarity index 100% rename from nostrdb/bolt11/short_types.h rename to nostrdb/src/bolt11/short_types.h diff --git a/nostrdb/bolt11/str.h b/nostrdb/src/bolt11/str.h similarity index 100% rename from nostrdb/bolt11/str.h rename to nostrdb/src/bolt11/str.h diff --git a/nostrdb/bolt11/str_debug.h b/nostrdb/src/bolt11/str_debug.h similarity index 100% rename from nostrdb/bolt11/str_debug.h rename to nostrdb/src/bolt11/str_debug.h diff --git a/nostrdb/bolt11/structeq.h b/nostrdb/src/bolt11/structeq.h similarity index 100% rename from nostrdb/bolt11/structeq.h rename to nostrdb/src/bolt11/structeq.h diff --git a/nostrdb/bolt11/take.c b/nostrdb/src/bolt11/take.c similarity index 100% rename from nostrdb/bolt11/take.c rename to nostrdb/src/bolt11/take.c diff --git a/nostrdb/bolt11/take.h b/nostrdb/src/bolt11/take.h similarity index 100% rename from nostrdb/bolt11/take.h rename to nostrdb/src/bolt11/take.h diff --git a/nostrdb/bolt11/tal.c b/nostrdb/src/bolt11/tal.c similarity index 100% rename from nostrdb/bolt11/tal.c rename to nostrdb/src/bolt11/tal.c diff --git a/nostrdb/bolt11/tal.h b/nostrdb/src/bolt11/tal.h similarity index 100% rename from nostrdb/bolt11/tal.h rename to nostrdb/src/bolt11/tal.h diff --git a/nostrdb/bolt11/talstr.c b/nostrdb/src/bolt11/talstr.c similarity index 100% rename from nostrdb/bolt11/talstr.c rename to nostrdb/src/bolt11/talstr.c diff --git a/nostrdb/bolt11/talstr.h b/nostrdb/src/bolt11/talstr.h similarity index 100% rename from nostrdb/bolt11/talstr.h rename to nostrdb/src/bolt11/talstr.h diff --git a/nostrdb/bolt11/typesafe_cb.h b/nostrdb/src/bolt11/typesafe_cb.h similarity index 100% rename from nostrdb/bolt11/typesafe_cb.h rename to nostrdb/src/bolt11/typesafe_cb.h diff --git a/nostrdb/bolt11/utf8.c b/nostrdb/src/bolt11/utf8.c similarity index 100% rename from nostrdb/bolt11/utf8.c rename to nostrdb/src/bolt11/utf8.c diff --git a/nostrdb/bolt11/utf8.h b/nostrdb/src/bolt11/utf8.h similarity index 100% rename from nostrdb/bolt11/utf8.h rename to nostrdb/src/bolt11/utf8.h diff --git a/nostrdb/compiler.h b/nostrdb/src/compiler.h similarity index 98% rename from nostrdb/compiler.h rename to nostrdb/src/compiler.h index a9b5aa700..36d141e40 100644 --- a/nostrdb/compiler.h +++ b/nostrdb/src/compiler.h @@ -3,6 +3,12 @@ #define CCAN_COMPILER_H #include "config.h" +#if HAVE_UNALIGNED_ACCESS +#define alignment_ok(p, n) 1 +#else +#define alignment_ok(p, n) ((size_t)(p) % (n) == 0) +#endif + #ifndef COLD #if HAVE_ATTRIBUTE_COLD /** diff --git a/nostrdb/config.h b/nostrdb/src/config.h similarity index 100% rename from nostrdb/config.h rename to nostrdb/src/config.h diff --git a/nostrdb/configurator.c b/nostrdb/src/configurator.c similarity index 100% rename from nostrdb/configurator.c rename to nostrdb/src/configurator.c diff --git a/nostrdb/cpu.h b/nostrdb/src/cpu.h similarity index 100% rename from nostrdb/cpu.h rename to nostrdb/src/cpu.h diff --git a/nostrdb/cursor.h b/nostrdb/src/cursor.h similarity index 100% rename from nostrdb/cursor.h rename to nostrdb/src/cursor.h diff --git a/nostrdb/endian.h b/nostrdb/src/endian.h similarity index 100% rename from nostrdb/endian.h rename to nostrdb/src/endian.h diff --git a/nostrdb/hex.h b/nostrdb/src/hex.h similarity index 100% rename from nostrdb/hex.h rename to nostrdb/src/hex.h diff --git a/nostrdb/io.h b/nostrdb/src/io.h similarity index 100% rename from nostrdb/io.h rename to nostrdb/src/io.h diff --git a/nostrdb/jsmn.h b/nostrdb/src/jsmn.h similarity index 100% rename from nostrdb/jsmn.h rename to nostrdb/src/jsmn.h diff --git a/nostrdb/lmdb_util.h b/nostrdb/src/lmdb_util.h similarity index 100% rename from nostrdb/lmdb_util.h rename to nostrdb/src/lmdb_util.h diff --git a/nostrdb/memchr.h b/nostrdb/src/memchr.h similarity index 100% rename from nostrdb/memchr.h rename to nostrdb/src/memchr.h diff --git a/nostrdb/nostr_bech32.c b/nostrdb/src/nostr_bech32.c similarity index 100% rename from nostrdb/nostr_bech32.c rename to nostrdb/src/nostr_bech32.c diff --git a/nostrdb/nostr_bech32.h b/nostrdb/src/nostr_bech32.h similarity index 100% rename from nostrdb/nostr_bech32.h rename to nostrdb/src/nostr_bech32.h diff --git a/nostrdb/nostrdb.c b/nostrdb/src/nostrdb.c similarity index 100% rename from nostrdb/nostrdb.c rename to nostrdb/src/nostrdb.c diff --git a/nostrdb/nostrdb.h b/nostrdb/src/nostrdb.h similarity index 100% rename from nostrdb/nostrdb.h rename to nostrdb/src/nostrdb.h diff --git a/nostrdb/print_util.h b/nostrdb/src/print_util.h similarity index 100% rename from nostrdb/print_util.h rename to nostrdb/src/print_util.h diff --git a/nostrdb/protected_queue.h b/nostrdb/src/protected_queue.h similarity index 100% rename from nostrdb/protected_queue.h rename to nostrdb/src/protected_queue.h diff --git a/nostrdb/random.h b/nostrdb/src/random.h similarity index 100% rename from nostrdb/random.h rename to nostrdb/src/random.h diff --git a/nostrdb/sha256.c b/nostrdb/src/sha256.c similarity index 100% rename from nostrdb/sha256.c rename to nostrdb/src/sha256.c diff --git a/nostrdb/sha256.h b/nostrdb/src/sha256.h similarity index 100% rename from nostrdb/sha256.h rename to nostrdb/src/sha256.h diff --git a/nostrdb/threadpool.h b/nostrdb/src/threadpool.h similarity index 100% rename from nostrdb/threadpool.h rename to nostrdb/src/threadpool.h diff --git a/nostrdb/typedefs.h b/nostrdb/src/typedefs.h similarity index 100% rename from nostrdb/typedefs.h rename to nostrdb/src/typedefs.h diff --git a/nostrdb/util.h b/nostrdb/src/util.h similarity index 100% rename from nostrdb/util.h rename to nostrdb/src/util.h From e7ef63d9f99496d3afe622551d4afb0269bfd15a Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 22 Dec 2023 16:56:53 -0800 Subject: [PATCH 016/146] nostrdb/add initial content parser Signed-off-by: William Casarin --- nostrdb/src/content_parser.c | 388 +++++++++++++++++++++++++++++++++++ 1 file changed, 388 insertions(+) create mode 100644 nostrdb/src/content_parser.c diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c new file mode 100644 index 000000000..ecc46c3c1 --- /dev/null +++ b/nostrdb/src/content_parser.c @@ -0,0 +1,388 @@ +#include "damus.h" +#include "cursor.h" +#include "bolt11.h" +#include "bech32.h" +#include +#include + +#include "cursor.h" + +static int parse_digit(struct cursor *cur, int *digit) { + int c; + if ((c = peek_char(cur, 0)) == -1) + return 0; + + c -= '0'; + + if (c >= 0 && c <= 9) { + *digit = c; + cur->p++; + return 1; + } + return 0; +} + + +static int parse_mention_index(struct cursor *cur, struct note_block *block) { + int d1, d2, d3, ind; + u8 *start = cur->p; + + if (!parse_str(cur, "#[")) + return 0; + + if (!parse_digit(cur, &d1)) { + cur->p = start; + return 0; + } + + ind = d1; + + if (parse_digit(cur, &d2)) + ind = (d1 * 10) + d2; + + if (parse_digit(cur, &d3)) + ind = (d1 * 100) + (d2 * 10) + d3; + + if (!parse_char(cur, ']')) { + cur->p = start; + return 0; + } + + block->type = BLOCK_MENTION_INDEX; + block->block.mention_index = ind; + + return 1; +} + +static int parse_hashtag(struct cursor *cur, struct note_block *block) { + int c; + u8 *start = cur->p; + + if (!parse_char(cur, '#')) + return 0; + + c = peek_char(cur, 0); + if (c == -1 || is_whitespace(c) || c == '#') { + cur->p = start; + return 0; + } + + consume_until_boundary(cur); + + block->type = BLOCK_HASHTAG; + block->block.str.start = (const char*)(start + 1); + block->block.str.end = (const char*)cur->p; + + return 1; +} + +static int add_block(struct note_blocks *blocks, struct note_block block) +{ + if (blocks->num_blocks + 1 >= MAX_BLOCKS) + return 0; + + blocks->blocks[blocks->num_blocks++] = block; + return 1; +} + +static int add_text_block(struct note_blocks *blocks, const u8 *start, const u8 *end) +{ + struct note_block b; + + if (start == end) + return 1; + + b.type = BLOCK_TEXT; + b.block.str.start = (const char*)start; + b.block.str.end = (const char*)end; + + return add_block(blocks, b); +} + +static int consume_url_fragment(struct cursor *cur) +{ + int c; + + if ((c = peek_char(cur, 0)) < 0) + return 1; + + if (c != '#' && c != '?') { + return 1; + } + + cur->p++; + + return consume_until_whitespace(cur, 1); +} + +static int consume_url_path(struct cursor *cur) +{ + int c; + + if ((c = peek_char(cur, 0)) < 0) + return 1; + + if (c != '/') { + return 1; + } + + while (cur->p < cur->end) { + c = *cur->p; + + if (c == '?' || c == '#' || is_whitespace(c)) { + return 1; + } + + cur->p++; + } + + return 1; +} + +static int consume_url_host(struct cursor *cur) +{ + char c; + int count = 0; + + while (cur->p < cur->end) { + c = *cur->p; + // TODO: handle IDNs + if (is_alphanumeric(c) || c == '.' || c == '-') + { + count++; + cur->p++; + continue; + } + + return count != 0; + } + + + // this means the end of the URL hostname is the end of the buffer and we finished + return count != 0; +} + +static int parse_url(struct cursor *cur, struct note_block *block) { + u8 *start = cur->p; + u8 *host; + int host_len; + struct cursor path_cur; + + if (!parse_str(cur, "http")) + return 0; + + if (parse_char(cur, 's') || parse_char(cur, 'S')) { + if (!parse_str(cur, "://")) { + cur->p = start; + return 0; + } + } else { + if (!parse_str(cur, "://")) { + cur->p = start; + return 0; + } + } + + // make sure to save the hostname. We will use this to detect damus.io links + host = cur->p; + + if (!consume_url_host(cur)) { + cur->p = start; + return 0; + } + + // get the length of the host string + host_len = (int)(cur->p - host); + + // save the current parse state so that we can continue from here when + // parsing the bech32 in the damus.io link if we have it + copy_cursor(cur, &path_cur); + + // skip leading / + cursor_skip(&path_cur, 1); + + if (!consume_url_path(cur)) { + cur->p = start; + return 0; + } + + if (!consume_url_fragment(cur)) { + cur->p = start; + return 0; + } + + // smart parens + if (start - 1 >= 0 && + start < cur->end && + *(start - 1) == '(' && + (cur->p - 1) < cur->end && + *(cur->p - 1) == ')') + { + cur->p--; + } + + // save the bech32 string pos in case we hit a damus.io link + block->block.str.start = (const char *)path_cur.p; + + // if we have a damus link, make it a mention + if (host_len == 8 + && !strncmp((const char *)host, "damus.io", 8) + && parse_nostr_bech32(&path_cur, &block->block.mention_bech32.bech32)) + { + block->block.str.end = (const char *)path_cur.p; + block->type = BLOCK_MENTION_BECH32; + return 1; + } + + block->type = BLOCK_URL; + block->block.str.start = (const char *)start; + block->block.str.end = (const char *)cur->p; + + return 1; +} + +static int parse_invoice(struct cursor *cur, struct note_block *block) { + u8 *start, *end; + char *fail; + struct bolt11 *bolt11; + // optional + parse_str(cur, "lightning:"); + + start = cur->p; + + if (!parse_str(cur, "lnbc")) + return 0; + + if (!consume_until_whitespace(cur, 1)) { + cur->p = start; + return 0; + } + + end = cur->p; + + char str[end - start + 1]; + str[end - start] = 0; + memcpy(str, start, end - start); + + if (!(bolt11 = bolt11_decode(NULL, str, &fail))) { + cur->p = start; + return 0; + } + + block->type = BLOCK_INVOICE; + + block->block.invoice.invstr.start = (const char*)start; + block->block.invoice.invstr.end = (const char*)end; + block->block.invoice.bolt11 = bolt11; + + cur->p = end; + + return 1; +} + + +static int parse_mention_bech32(struct cursor *cur, struct note_block *block) { + u8 *start = cur->p; + + parse_char(cur, '@'); + parse_str(cur, "nostr:"); + + block->block.str.start = (const char *)cur->p; + + if (!parse_nostr_bech32(cur, &block->block.mention_bech32.bech32)) { + cur->p = start; + return 0; + } + + block->block.str.end = (const char *)cur->p; + + block->type = BLOCK_MENTION_BECH32; + + return 1; +} + +static int add_text_then_block(struct cursor *cur, struct note_blocks *blocks, struct note_block block, u8 **start, const u8 *pre_mention) +{ + if (!add_text_block(blocks, *start, pre_mention)) + return 0; + + *start = (u8*)cur->p; + + if (!add_block(blocks, block)) + return 0; + + return 1; +} + +int ndb_parse_content(struct note_blocks *blocks, const char *content) { + int cp, c; + struct cursor cur; + struct note_block block; + u8 *start, *pre_mention; + + blocks->words = 0; + blocks->num_blocks = 0; + make_cursor((u8*)content, (u8*)content + strlen(content), &cur); + + start = cur.p; + while (cur.p < cur.end && blocks->num_blocks < MAX_BLOCKS) { + cp = peek_char(&cur, -1); + c = peek_char(&cur, 0); + + // new word + if (is_whitespace(cp) && !is_whitespace(c)) { + blocks->words++; + } + + pre_mention = cur.p; + if (cp == -1 || is_left_boundary(cp) || c == '#') { + if (c == '#' && (parse_mention_index(&cur, &block) || parse_hashtag(&cur, &block))) { + if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) + return 0; + continue; + } else if ((c == 'h' || c == 'H') && parse_url(&cur, &block)) { + if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) + return 0; + continue; + } else if ((c == 'l' || c == 'L') && parse_invoice(&cur, &block)) { + if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) + return 0; + continue; + } else if ((c == 'n' || c == '@') && parse_mention_bech32(&cur, &block)) { + if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) + return 0; + continue; + } + } + + cur.p++; + } + + if (cur.p - start > 0) { + if (!add_text_block(blocks, start, cur.p)) + return 0; + } + + return 1; +} + +void blocks_init(struct note_blocks *blocks) { + blocks->blocks = malloc(sizeof(struct note_block) * MAX_BLOCKS); + blocks->num_blocks = 0; +} + +void blocks_free(struct note_blocks *blocks) { + if (!blocks->blocks) { + return; + } + + for (int i = 0; i < blocks->num_blocks; ++i) { + if (blocks->blocks[i].type == BLOCK_MENTION_BECH32) { + free(blocks->blocks[i].block.mention_bech32.bech32.buffer); + blocks->blocks[i].block.mention_bech32.bech32.buffer = NULL; + } + } + + free(blocks->blocks); + blocks->num_blocks = 0; +} From 40aeecc2d72611b56666e6912d7b9e2ddd59560b Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 22 Dec 2023 17:10:54 -0800 Subject: [PATCH 017/146] nostrdb/add libnostrdb.a Signed-off-by: William Casarin --- nostrdb/Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index ba4b1db5d..456b76cd1 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -20,7 +20,10 @@ BIN=ndb CHECKDATA=testdata/db/v0/data.mdb -all: lib ndb +all: lib ndb libnostrdb.a + +libnostrdb.a: $(OBJS) + ar rcs $@ $(OBJS) lib: benches test From f7ef2b2cf4201f3b0d8fd50df3e4aae5aa25d072 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 23 Dec 2023 13:11:23 -0800 Subject: [PATCH 018/146] nostrdb/cursor: re-apply infinite loop bug fix since I keep overwriting it by accident Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 65 ++++++++++++++++++++++---------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index aff0b55ff..9c3d9bbd5 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -614,39 +614,38 @@ static inline int is_alphanumeric(char c) { } static inline int consume_until_boundary(struct cursor *cur) { - unsigned int c; - unsigned int char_length = 1; - unsigned int *utf8_char_length = &char_length; - - while (cur->p < cur->end) { - c = *cur->p; - - *utf8_char_length = 1; - - if (is_whitespace(c)) - return 1; - - // Need to check for UTF-8 characters, which can be multiple bytes long - if (is_utf8_byte(c)) { - if (!parse_utf8_char(cur, &c, utf8_char_length)) { - if (!is_right_boundary(c)){ - // TODO: We should work towards handling all UTF-8 characters. - //printf("Invalid UTF-8 code point: %x\n", c); - } - } - } - - if (is_right_boundary(c)) - return 1; - - // Need to use a variable character byte length for UTF-8 (2-4 bytes) - if (cur->p + *utf8_char_length <= cur->end) - cur->p += *utf8_char_length; - else - cur->p++; - } - - return 1; + unsigned int c; + unsigned int char_length = 1; + unsigned int *utf8_char_length = &char_length; + + while (cur->p < cur->end) { + c = *cur->p; + + *utf8_char_length = 1; + + if (is_whitespace(c)) + return 1; + + // Need to check for UTF-8 characters, which can be multiple bytes long + if (is_utf8_byte(c)) { + if (!parse_utf8_char(cur, &c, utf8_char_length)) { + if (!is_right_boundary(c)){ + return 0; + } + } + } + + if (is_right_boundary(c)) + return 1; + + // Need to use a variable character byte length for UTF-8 (2-4 bytes) + if (cur->p + *utf8_char_length <= cur->end) + cur->p += *utf8_char_length; + else + cur->p++; + } + + return 1; } static inline int consume_until_whitespace(struct cursor *cur, int or_end) { From 4c0df098f2dd651be05016105a88cc72206fa278 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 23 Dec 2023 13:19:12 -0800 Subject: [PATCH 019/146] nostrdb/test: disable migrate for now Signed-off-by: William Casarin --- nostrdb/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index 456b76cd1..46c5a48a1 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -32,10 +32,10 @@ ndb: ndb.c $(DEPS) bindings: bindings-swift bindings-rust bindings-c -check: test $(CHECKDATA) +check: test + rm -rf testdata/db/*.mdb + ./test rm -rf testdata/db/*.mdb - ./test || rm -rf testdata/db/v0 - rm -rf testdata/db/v0 clean: rm -rf test bench bench-ingest bench-ingest-many From f4ffa0bbcb7de9aac5e0cb6e0638bba2b229817b Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 23 Dec 2023 13:20:52 -0800 Subject: [PATCH 020/146] nostrdb/varint: switch to 64 bit varints Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 113 +++++++++++++++++---------------------- nostrdb/src/nostrdb.c | 39 +++++++------- nostrdb/src/nostrdb.h | 2 +- nostrdb/src/print_util.h | 2 +- nostrdb/src/typedefs.h | 14 ----- 5 files changed, 69 insertions(+), 101 deletions(-) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index 9c3d9bbd5..028f39936 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -2,10 +2,10 @@ #ifndef JB55_CURSOR_H #define JB55_CURSOR_H -#include "typedefs.h" #include "bolt11/likely.h" #include +#include #include #include #include @@ -32,14 +32,14 @@ static inline void wipe_cursor(struct cursor *cursor) memset(cursor->start, 0, cursor->end - cursor->start); } -static inline void make_cursor(u8 *start, u8 *end, struct cursor *cursor) +static inline void make_cursor(unsigned char *start, unsigned char *end, struct cursor *cursor) { cursor->start = start; cursor->p = start; cursor->end = end; } -static inline void make_array(struct array *a, u8* start, u8 *end, unsigned int elem_size) +static inline void make_array(struct array *a, unsigned char* start, unsigned char *end, unsigned int elem_size) { make_cursor(start, end, &a->cur); a->elem_size = elem_size; @@ -77,7 +77,7 @@ static inline void *cursor_alloc(struct cursor *mem, unsigned long size) static inline int cursor_slice(struct cursor *mem, struct cursor *slice, size_t size) { - u8 *p; + unsigned char *p; if (!(p = cursor_alloc(mem, size))) { return 0; } @@ -103,7 +103,7 @@ static inline int cursor_skip(struct cursor *cursor, int n) return 1; } -static inline int pull_byte(struct cursor *cursor, u8 *c) +static inline int cursor_pull_byte(struct cursor *cursor, unsigned char *c) { if (unlikely(cursor->p >= cursor->end)) return 0; @@ -114,7 +114,7 @@ static inline int pull_byte(struct cursor *cursor, u8 *c) return 1; } -static inline int parse_byte(struct cursor *cursor, u8 *c) +static inline int parse_byte(struct cursor *cursor, unsigned char *c) { if (unlikely(cursor->p >= cursor->end)) return 0; @@ -159,7 +159,7 @@ static inline int cursor_pull_c_str(struct cursor *cursor, const char **str) } -static inline int cursor_push_byte(struct cursor *cursor, u8 c) +static inline int cursor_push_byte(struct cursor *cursor, unsigned char c) { if (unlikely(cursor->p + 1 > cursor->end)) { return 0; @@ -171,7 +171,7 @@ static inline int cursor_push_byte(struct cursor *cursor, u8 c) return 1; } -static inline int cursor_pull(struct cursor *cursor, u8 *data, int len) +static inline int cursor_pull(struct cursor *cursor, unsigned char *data, int len) { if (unlikely(cursor->p + len > cursor->end)) { return 0; @@ -241,7 +241,7 @@ static inline unsigned char *cursor_top(struct cursor *cur, int len) static inline int cursor_top_int(struct cursor *cur, int *i) { - u8 *p; + unsigned char *p; if (unlikely(!(p = cursor_top(cur, sizeof(*i))))) { return 0; } @@ -249,7 +249,7 @@ static inline int cursor_top_int(struct cursor *cur, int *i) return 1; } -static inline int cursor_pop(struct cursor *cur, u8 *data, int len) +static inline int cursor_pop(struct cursor *cur, unsigned char *data, int len) { if (unlikely(cur->p - len < cur->start)) { return 0; @@ -261,7 +261,7 @@ static inline int cursor_pop(struct cursor *cur, u8 *data, int len) return 1; } -static inline int cursor_push(struct cursor *cursor, u8 *data, int len) +static inline int cursor_push(struct cursor *cursor, unsigned char *data, int len) { if (unlikely(cursor->p + len >= cursor->end)) { return 0; @@ -277,7 +277,7 @@ static inline int cursor_push(struct cursor *cursor, u8 *data, int len) static inline int cursor_push_int(struct cursor *cursor, int i) { - return cursor_push(cursor, (u8*)&i, sizeof(i)); + return cursor_push(cursor, (unsigned char*)&i, sizeof(i)); } static inline size_t cursor_count(struct cursor *cursor, size_t elem_size) @@ -285,73 +285,61 @@ static inline size_t cursor_count(struct cursor *cursor, size_t elem_size) return (cursor->p - cursor->start)/elem_size; } -/* TODO: push_varint */ -static inline int push_varint(struct cursor *cursor, int n) +/* Encodes a 64-bit integer into a variable-length format and pushes it into a cursor. + * Returns the number of bytes used or -1 in case of an error. */ +static inline int cursor_push_varint(struct cursor *cursor, uint64_t n) { - int ok, len; - unsigned char b; - len = 0; - - while (1) { - b = (n & 0xFF) | 0x80; + int len = 0; + do { + unsigned char b = (n & 0x7F) | (n > 0x7F ? 0x80 : 0); n >>= 7; - if (n == 0) { - b &= 0x7F; - ok = cursor_push_byte(cursor, b); - len++; - if (!ok) return 0; - break; - } - - ok = cursor_push_byte(cursor, b); + if (!cursor_push_byte(cursor, b)) + return -1; // Error handling len++; - if (!ok) return 0; - } + } while (n != 0); return len; } -/* TODO: pull_varint */ -static inline int pull_varint(struct cursor *cursor, int *n) +static inline int cursor_pull_varint(struct cursor *cursor, uint64_t *n) { int ok, i; unsigned char b; + *n = 0; - for (i = 0;; i++) { - ok = pull_byte(cursor, &b); + for (i = 0; i < 10; i++) { // Loop up to 10 bytes for 64-bit + ok = cursor_pull_byte(cursor, &b); if (!ok) return 0; - *n |= ((int)b & 0x7F) << (i * 7); + *n |= ((int64_t)b & 0x7F) << (i * 7); - /* is_last */ if ((b & 0x80) == 0) { - return i+1; + return i + 1; // Successfully read i+1 bytes } - - if (i == 4) return 0; } - return 0; + return 10; // Successfully read 10 bytes for a full 64-bit integer } + static inline int cursor_pull_int(struct cursor *cursor, int *i) { - return cursor_pull(cursor, (u8*)i, sizeof(*i)); + return cursor_pull(cursor, (unsigned char*)i, sizeof(*i)); } static inline int cursor_push_u32(struct cursor *cursor, uint32_t i) { return cursor_push(cursor, (unsigned char*)&i, sizeof(i)); } -static inline int cursor_push_u16(struct cursor *cursor, u16 i) +static inline int cursor_push_u16(struct cursor *cursor, unsigned short i) { - return cursor_push(cursor, (u8*)&i, sizeof(i)); + return cursor_push(cursor, (unsigned char*)&i, sizeof(i)); } static inline void *index_cursor(struct cursor *cursor, unsigned int index, int elem_size) { - u8 *p; + unsigned char *p; p = &cursor->start[elem_size * index]; if (unlikely(p >= cursor->end)) @@ -363,7 +351,7 @@ static inline void *index_cursor(struct cursor *cursor, unsigned int index, int static inline int push_sized_str(struct cursor *cursor, const char *str, int len) { - return cursor_push(cursor, (u8*)str, len); + return cursor_push(cursor, (unsigned char*)str, len); } static inline int cursor_push_lowercase(struct cursor *cur, const char *str, int len) @@ -382,7 +370,7 @@ static inline int cursor_push_lowercase(struct cursor *cur, const char *str, int static inline int cursor_push_str(struct cursor *cursor, const char *str) { - return cursor_push(cursor, (u8*)str, (int)strlen(str)); + return cursor_push(cursor, (unsigned char*)str, (int)strlen(str)); } static inline int cursor_push_c_str(struct cursor *cursor, const char *str) @@ -393,30 +381,27 @@ static inline int cursor_push_c_str(struct cursor *cursor, const char *str) /* TODO: push varint size */ static inline int push_prefixed_str(struct cursor *cursor, const char *str) { - int ok, len; - len = (int)strlen(str); - ok = push_varint(cursor, len); - if (!ok) return 0; + uint64_t len; + len = strlen(str); + if (!cursor_push_varint(cursor, len)) + return 0; return push_sized_str(cursor, str, len); } static inline int pull_prefixed_str(struct cursor *cursor, struct cursor *dest_buf, const char **str) { - int len, ok; - - ok = pull_varint(cursor, &len); - if (!ok) return 0; + uint64_t len; - if (unlikely(dest_buf->p + len > dest_buf->end)) { + if (!cursor_pull_varint(cursor, &len)) return 0; - } - ok = pull_data_into_cursor(cursor, dest_buf, (unsigned char**)str, len); - if (!ok) return 0; + if (unlikely(dest_buf->p + len > dest_buf->end)) + return 0; - ok = cursor_push_byte(dest_buf, 0); + if (!pull_data_into_cursor(cursor, dest_buf, (unsigned char**)str, len)) + return 0; - return 1; + return cursor_push_byte(dest_buf, 0); } static inline int cursor_remaining_capacity(struct cursor *cursor) @@ -450,7 +435,7 @@ static inline void cursor_print_around(struct cursor *cur, int range) } #undef max -static inline int pull_bytes(struct cursor *cur, int count, const u8 **bytes) { +static inline int pull_bytes(struct cursor *cur, int count, const unsigned char **bytes) { if (cur->p + count > cur->end) return 0; @@ -489,13 +474,13 @@ static inline int is_underscore(char c) { return c == '_'; } -static inline int is_utf8_byte(u8 c) { +static inline int is_utf8_byte(unsigned char c) { return c & 0x80; } static inline int parse_utf8_char(struct cursor *cursor, unsigned int *code_point, unsigned int *utf8_length) { - u8 first_byte; + unsigned char first_byte; if (!parse_byte(cursor, &first_byte)) return 0; // Not enough data diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index f86e5d0d6..868284635 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -225,11 +225,11 @@ static int ndb_make_text_search_key(unsigned char *buf, int bufsize, // TODO: need update this to uint64_t // we push this first because our query function can pull this off // quicky to check matches - if (!push_varint(&cur, (int32_t)note_id)) + if (!cursor_push_varint(&cur, (int32_t)note_id)) return 0; // string length - if (!push_varint(&cur, word_len)) + if (!cursor_push_varint(&cur, word_len)) return 0; // non-null terminated, lowercase string @@ -237,12 +237,12 @@ static int ndb_make_text_search_key(unsigned char *buf, int bufsize, return 0; // TODO: need update this to uint64_t - if (!push_varint(&cur, (int)timestamp)) + if (!cursor_push_varint(&cur, (int)timestamp)) return 0; // the index of the word in the content so that we can do more accurate // phrase searches - if (!push_varint(&cur, word_index)) + if (!cursor_push_varint(&cur, word_index)) return 0; size = cur.p - cur.start; @@ -314,19 +314,18 @@ static int mdb_cmp_memn(const MDB_val *a, const MDB_val *b) { static int ndb_text_search_key_compare(const MDB_val *a, const MDB_val *b) { struct cursor ca, cb; - int sa, sb; - int nid_a, nid_b; + uint64_t sa, sb, nid_a, nid_b; MDB_val a2, b2; make_cursor(a->mv_data, a->mv_data + a->mv_size, &ca); make_cursor(b->mv_data, b->mv_data + b->mv_size, &cb); // note_id - if (unlikely(!pull_varint(&ca, &nid_a) || !pull_varint(&cb, &nid_b))) + if (unlikely(!cursor_pull_varint(&ca, &nid_a) || !cursor_pull_varint(&cb, &nid_b))) return 0; // string size - if (unlikely(!pull_varint(&ca, &sa) || !pull_varint(&cb, &sb))) + if (unlikely(!cursor_pull_varint(&ca, &sa) || !cursor_pull_varint(&cb, &sb))) return 0; a2.mv_data = ca.p; @@ -343,7 +342,7 @@ static int ndb_text_search_key_compare(const MDB_val *a, const MDB_val *b) cb.p += sb; // timestamp - if (unlikely(!pull_varint(&ca, &sa) || !pull_varint(&cb, &sb))) + if (unlikely(!cursor_pull_varint(&ca, &sa) || !cursor_pull_varint(&cb, &sb))) return 0; if (sa < sb) return -1; @@ -354,7 +353,7 @@ static int ndb_text_search_key_compare(const MDB_val *a, const MDB_val *b) else if (nid_a > nid_b) return 1; // word index - if (unlikely(!pull_varint(&ca, &sa) || !pull_varint(&cb, &sb))) + if (unlikely(!cursor_pull_varint(&ca, &sa) || !cursor_pull_varint(&cb, &sb))) return 0; if (sa < sb) return -1; @@ -366,11 +365,9 @@ static int ndb_text_search_key_compare(const MDB_val *a, const MDB_val *b) static inline int ndb_unpack_text_search_key_noteid( struct cursor *cur, uint64_t *note_id) { - int inote_id; - if (!pull_varint(cur, &inote_id)) + if (!cursor_pull_varint(cur, note_id)) return 0; - *note_id = inote_id; return 1; } @@ -381,9 +378,13 @@ static inline int ndb_unpack_text_search_key_string(struct cursor *cur, const char **str, int *str_len) { - if (!pull_varint(cur, str_len)) + uint64_t len; + + if (!cursor_pull_varint(cur, &len)) return 0; + *str_len = len; + *str = (const char *)cur->p; if (!cursor_skip(cur, *str_len)) @@ -398,16 +399,12 @@ static inline int ndb_unpack_remaining_text_search_key(struct cursor *cur, struct ndb_text_search_key *key) { - int timestamp; - - if (!pull_varint(cur, ×tamp)) + if (!cursor_pull_varint(cur, &key->timestamp)) return 0; - if (!pull_varint(cur, &key->word_index)) + if (!cursor_pull_varint(cur, &key->word_index)) return 0; - key->timestamp = timestamp; - return 1; } @@ -2331,7 +2328,7 @@ static int prefix_count(const char *str1, int len1, const char *str2, int len2) static void ndb_print_text_search_key(struct ndb_text_search_key *key) { - printf("K<'%.*s' %d %" PRIu64 " note_id:%" PRIu64 ">", key->str_len, key->str, + printf("K<'%.*s' %" PRIu64 " %" PRIu64 " note_id:%" PRIu64 ">", key->str_len, key->str, key->word_index, key->timestamp, key->note_id); diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 1a01c6f10..bf90e2bdc 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -266,7 +266,7 @@ struct ndb_text_search_key const char *str; uint64_t timestamp; uint64_t note_id; - int word_index; + uint64_t word_index; }; struct ndb_text_search_result { diff --git a/nostrdb/src/print_util.h b/nostrdb/src/print_util.h index 1f60b0744..93c85168a 100644 --- a/nostrdb/src/print_util.h +++ b/nostrdb/src/print_util.h @@ -1,7 +1,7 @@ static void ndb_print_text_search_key(struct ndb_text_search_key *key) { - printf("K<'%.*s' %d %" PRIu64 " note_id:%" PRIu64 ">", key->str_len, key->str, + printf("K<'%.*s' %" PRIu64 " %" PRIu64 " note_id:%" PRIu64 ">", key->str_len, key->str, key->word_index, key->timestamp, key->note_id); diff --git a/nostrdb/src/typedefs.h b/nostrdb/src/typedefs.h index d68388ddb..e69de29bb 100644 --- a/nostrdb/src/typedefs.h +++ b/nostrdb/src/typedefs.h @@ -1,14 +0,0 @@ - -#ifndef PROTOVERSE_TYPEDEFS_H -#define PROTOVERSE_TYPEDEFS_H - -#include - -typedef unsigned char u8; -typedef unsigned int u32; -typedef unsigned short u16; -typedef uint64_t u64; -typedef int64_t s64; - - -#endif /* PROTOVERSE_TYPEDEFS_H */ From b3822efbd2e67453bb63d87aba3383b81ebaea4d Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 23 Dec 2023 15:16:51 -0800 Subject: [PATCH 021/146] nostrdb/fix build Signed-off-by: William Casarin --- nostrdb/Makefile | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index 46c5a48a1..e6b5cee70 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -1,5 +1,5 @@ -CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g -Ideps/secp256k1/include -Ideps/lmdb -Ideps/flatcc/include -HEADERS = src/sha256.h src/nostrdb.h src/cursor.h src/hex.h src/jsmn.h src/config.h src/sha256.h src/random.h src/memchr.h src/cpu.h $(C_BINDINGS) +CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g -Isrc -Ideps/secp256k1/include -Ideps/lmdb -Ideps/flatcc/include +HEADERS = deps/lmdb/lmdb.h deps/secp256k1/include/secp256k1.h src/sha256.h src/nostrdb.h src/cursor.h src/hex.h src/jsmn.h src/config.h src/sha256.h src/random.h src/memchr.h src/cpu.h $(C_BINDINGS) FLATCC_SRCS=deps/flatcc/src/runtime/json_parser.c deps/flatcc/src/runtime/verifier.c deps/flatcc/src/runtime/builder.c deps/flatcc/src/runtime/emitter.c deps/flatcc/src/runtime/refmap.c BOLT11_SRCS = src/bolt11/bolt11.c src/bolt11/bech32.c src/bolt11/tal.c src/bolt11/talstr.c src/bolt11/take.c src/bolt11/list.c src/bolt11/utf8.c src/bolt11/amount.c src/bolt11/hash_u5.c SRCS = src/nostrdb.c src/sha256.c $(BOLT11_SRCS) $(FLATCC_SRCS) @@ -20,6 +20,9 @@ BIN=ndb CHECKDATA=testdata/db/v0/data.mdb +%.o: %.c $(HEADERS) + $(CC) $(CFLAGS) -c -o $@ $< + all: lib ndb libnostrdb.a libnostrdb.a: $(OBJS) @@ -28,7 +31,7 @@ libnostrdb.a: $(OBJS) lib: benches test ndb: ndb.c $(DEPS) - $(CC) -Isrc $(CFLAGS) ndb.c $(LDS) -o $@ + $(CC) $(CFLAGS) ndb.c $(LDS) -o $@ bindings: bindings-swift bindings-rust bindings-c @@ -156,13 +159,13 @@ testdata/many-events.json: testdata/many-events.json.zst zstd -d $< bench: bench-ingest-many.c $(DEPS) testdata/many-events.json - $(CC) -Isrc $(CFLAGS) $< $(LDS) -o $@ + $(CC) $(CFLAGS) $< $(LDS) -o $@ testdata/db/.dir: @mkdir -p testdata/db touch testdata/db/.dir test: test.c $(DEPS) testdata/db/.dir - $(CC) -Isrc $(CFLAGS) test.c $(LDS) -o $@ + $(CC) $(CFLAGS) test.c $(LDS) -o $@ .PHONY: tags clean From ad6bc7834cea0efb938e67617e458043ba7ba241 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 23 Dec 2023 15:23:57 -0800 Subject: [PATCH 022/146] nostrdb/fix github action Signed-off-by: William Casarin --- nostrdb/Makefile | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index e6b5cee70..50fda5585 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -20,11 +20,11 @@ BIN=ndb CHECKDATA=testdata/db/v0/data.mdb +all: lib ndb libnostrdb.a + %.o: %.c $(HEADERS) $(CC) $(CFLAGS) -c -o $@ $< -all: lib ndb libnostrdb.a - libnostrdb.a: $(OBJS) ar rcs $@ $(OBJS) @@ -108,11 +108,11 @@ deps/LMDB_$(LMDB_VER).tar.gz: deps/.dir deps/flatcc_$(FLATCC_VER).tar.gz: deps/.dir curl -L https://github.com/jb55/flatcc/archive/$(FLATCC_VER).tar.gz -o $@ -deps/flatcc/src/runtime/json_parser.c: deps/flatcc_$(FLATCC_VER).tar.gz deps/.dir - tar xf $< - rm -rf deps/flatcc - mv flatcc-$(FLATCC_VER) deps/flatcc - touch $@ +#deps/flatcc/src/runtime/json_parser.c: deps/flatcc_$(FLATCC_VER).tar.gz deps/.dir +# tar xf $< +# rm -rf deps/flatcc +# mv flatcc-$(FLATCC_VER) deps/flatcc +# touch $@ deps/lmdb/lmdb.h: deps/LMDB_$(LMDB_VER).tar.gz deps/.dir tar xf $< From 4bef3da1bc270d83cadd1ca890a12f715233b950 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 23 Dec 2023 15:36:44 -0800 Subject: [PATCH 023/146] nostrdb/make: cleanup a bit, separate bench running Signed-off-by: William Casarin --- nostrdb/Makefile | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index 50fda5585..9be5e7d9a 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -20,7 +20,7 @@ BIN=ndb CHECKDATA=testdata/db/v0/data.mdb -all: lib ndb libnostrdb.a +all: $(BIN) lib bench %.o: %.c $(HEADERS) $(CC) $(CFLAGS) -c -o $@ $< @@ -28,7 +28,7 @@ all: lib ndb libnostrdb.a libnostrdb.a: $(OBJS) ar rcs $@ $(OBJS) -lib: benches test +lib: libnostrdb.a ndb: ndb.c $(DEPS) $(CC) $(CFLAGS) ndb.c $(LDS) -o $@ @@ -43,8 +43,6 @@ check: test clean: rm -rf test bench bench-ingest bench-ingest-many -benches: bench - distclean: clean rm -rf deps @@ -158,9 +156,12 @@ testdata/many-events.json.zst: testdata/many-events.json: testdata/many-events.json.zst zstd -d $< -bench: bench-ingest-many.c $(DEPS) testdata/many-events.json +bench: bench-ingest-many.c $(DEPS) $(CC) $(CFLAGS) $< $(LDS) -o $@ +run-bench: testdata/many-events.json bench + ./bench + testdata/db/.dir: @mkdir -p testdata/db touch testdata/db/.dir From 742ebae7b14d89d266248676c508adb12a92e7af Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 23 Dec 2023 14:46:00 -0800 Subject: [PATCH 024/146] nostrdb/block: add bolt11 invoice encoding/decoding Signed-off-by: William Casarin --- nostrdb/Makefile | 2 +- nostrdb/src/bolt11/bolt11.h | 1 + nostrdb/src/invoice.c | 69 +++++++++++++++++++++++++++++++++++++ nostrdb/src/invoice.h | 20 +++++++++++ 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 nostrdb/src/invoice.c create mode 100644 nostrdb/src/invoice.h diff --git a/nostrdb/Makefile b/nostrdb/Makefile index 9be5e7d9a..edd403c5e 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -2,7 +2,7 @@ CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g - HEADERS = deps/lmdb/lmdb.h deps/secp256k1/include/secp256k1.h src/sha256.h src/nostrdb.h src/cursor.h src/hex.h src/jsmn.h src/config.h src/sha256.h src/random.h src/memchr.h src/cpu.h $(C_BINDINGS) FLATCC_SRCS=deps/flatcc/src/runtime/json_parser.c deps/flatcc/src/runtime/verifier.c deps/flatcc/src/runtime/builder.c deps/flatcc/src/runtime/emitter.c deps/flatcc/src/runtime/refmap.c BOLT11_SRCS = src/bolt11/bolt11.c src/bolt11/bech32.c src/bolt11/tal.c src/bolt11/talstr.c src/bolt11/take.c src/bolt11/list.c src/bolt11/utf8.c src/bolt11/amount.c src/bolt11/hash_u5.c -SRCS = src/nostrdb.c src/sha256.c $(BOLT11_SRCS) $(FLATCC_SRCS) +SRCS = src/nostrdb.c src/sha256.c src/invoice.c $(BOLT11_SRCS) $(FLATCC_SRCS) LDS = $(OBJS) $(ARS) OBJS = $(SRCS:.c=.o) DEPS = $(OBJS) $(HEADERS) $(ARS) diff --git a/nostrdb/src/bolt11/bolt11.h b/nostrdb/src/bolt11/bolt11.h index 2831eb94a..9d368c5e1 100644 --- a/nostrdb/src/bolt11/bolt11.h +++ b/nostrdb/src/bolt11/bolt11.h @@ -4,6 +4,7 @@ #include "short_types.h" #include "hash_u5.h" #include "list.h" +#include "amount.h" #include "node_id.h" //#include diff --git a/nostrdb/src/invoice.c b/nostrdb/src/invoice.c new file mode 100644 index 000000000..8bfca0ddd --- /dev/null +++ b/nostrdb/src/invoice.c @@ -0,0 +1,69 @@ + +#include "cursor.h" +#include "invoice.h" +#include "bolt11/bolt11.h" +#include "bolt11/amount.h" + +int ndb_encode_invoice(struct cursor *cur, struct bolt11 *invoice) { + if (!invoice->description && !invoice->description_hash) + return 0; + + if (!cursor_push_byte(cur, 1)) + return 0; + + // TODO: make cursor_cursor_push_varint uint64_t + if (!cursor_push_varint(cur, invoice->msat->millisatoshis)) + return 0; + + if (!cursor_push_varint(cur, invoice->timestamp)) + return 0; + + if (!cursor_push_varint(cur, invoice->expiry)) + return 0; + + if (invoice->description) { + if (!cursor_push_byte(cur, 1)) + return 0; + if (!cursor_push_c_str(cur, invoice->description)) + return 0; + } else { + if (!cursor_push_byte(cur, 2)) + return 0; + if (!cursor_push(cur, invoice->description_hash->u.u8, 32)) + return 0; + } + + return 1; +} + +int ndb_decode_invoice(struct cursor *cur, struct ndb_invoice *invoice) +{ + unsigned char desc_type; + if (!cursor_pull_byte(cur, &invoice->version)) + return 0; + + if (!cursor_pull_varint(cur, &invoice->amount)) + return 0; + + if (!cursor_pull_varint(cur, &invoice->timestamp)) + return 0; + + if (!cursor_pull_varint(cur, &invoice->expiry)) + return 0; + + if (!cursor_pull_byte(cur, &desc_type)) + return 0; + + if (desc_type == 1) { + if (!cursor_pull_c_str(cur, (const char**)&invoice->description)) + return 0; + } else if (desc_type == 2) { + invoice->description_hash = cur->p; + if (!cursor_skip(cur, 32)) + return 0; + } else { + return 0; + } + + return 1; +} diff --git a/nostrdb/src/invoice.h b/nostrdb/src/invoice.h new file mode 100644 index 000000000..acbb22163 --- /dev/null +++ b/nostrdb/src/invoice.h @@ -0,0 +1,20 @@ + +#ifndef NDB_INVOICE_H +#define NDB_INVOICE_H + +struct bolt11; + +struct ndb_invoice { + unsigned char version; + uint64_t amount; + uint64_t timestamp; + uint64_t expiry; + char *description; + unsigned char *description_hash; +}; + +// ENCODING +int ndb_encode_invoice(struct cursor *cur, struct bolt11 *invoice); +int ndb_decode_invoice(struct cursor *cur, struct ndb_invoice *invoice); + +#endif /* NDB_INVOICE_H */ From 3d15de574e4edf958466d58fdc890ab1ee859f3b Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 23 Dec 2023 15:42:36 -0800 Subject: [PATCH 025/146] nostrdb/bech32: retab Signed-off-by: William Casarin --- nostrdb/src/nostr_bech32.c | 486 ++++++++++++++++++------------------- nostrdb/src/nostr_bech32.h | 74 +++--- 2 files changed, 280 insertions(+), 280 deletions(-) diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index 9710fbe24..a9c800c26 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -1,8 +1,8 @@ // -// nostr_bech32.c -// damus +// nostr_bech32.c +// damus // -// Created by William Casarin on 2023-04-09. +// Created by William Casarin on 2023-04-09. // #include "nostr_bech32.h" @@ -19,288 +19,288 @@ #define TLV_KNOWN_TLVS 4 struct nostr_tlv { - u8 type; - u8 len; - const u8 *value; + u8 type; + u8 len; + const u8 *value; }; struct nostr_tlvs { - struct nostr_tlv tlvs[MAX_TLVS]; - int num_tlvs; + struct nostr_tlv tlvs[MAX_TLVS]; + int num_tlvs; }; static int parse_nostr_tlv(struct cursor *cur, struct nostr_tlv *tlv) { - // get the tlv tag - if (!pull_byte(cur, &tlv->type)) - return 0; - - // unknown, fail! - if (tlv->type >= TLV_KNOWN_TLVS) - return 0; - - // get the length - if (!pull_byte(cur, &tlv->len)) - return 0; - - // is the reported length greater then our buffer? if so fail - if (cur->p + tlv->len > cur->end) - return 0; - - tlv->value = cur->p; - cur->p += tlv->len; - - return 1; + // get the tlv tag + if (!cursor_pull_byte(cur, &tlv->type)) + return 0; + + // unknown, fail! + if (tlv->type >= TLV_KNOWN_TLVS) + return 0; + + // get the length + if (!cursor_pull_byte(cur, &tlv->len)) + return 0; + + // is the reported length greater then our buffer? if so fail + if (cur->p + tlv->len > cur->end) + return 0; + + tlv->value = cur->p; + cur->p += tlv->len; + + return 1; } static int parse_nostr_tlvs(struct cursor *cur, struct nostr_tlvs *tlvs) { - int i; - tlvs->num_tlvs = 0; - - for (i = 0; i < MAX_TLVS; i++) { - if (parse_nostr_tlv(cur, &tlvs->tlvs[i])) { - tlvs->num_tlvs++; - } else { - break; - } - } - - if (tlvs->num_tlvs == 0) - return 0; - - return 1; + int i; + tlvs->num_tlvs = 0; + + for (i = 0; i < MAX_TLVS; i++) { + if (parse_nostr_tlv(cur, &tlvs->tlvs[i])) { + tlvs->num_tlvs++; + } else { + break; + } + } + + if (tlvs->num_tlvs == 0) + return 0; + + return 1; } static int find_tlv(struct nostr_tlvs *tlvs, u8 type, struct nostr_tlv **tlv) { - *tlv = NULL; - - for (int i = 0; i < tlvs->num_tlvs; i++) { - if (tlvs->tlvs[i].type == type) { - *tlv = &tlvs->tlvs[i]; - return 1; - } - } - - return 0; + *tlv = NULL; + + for (int i = 0; i < tlvs->num_tlvs; i++) { + if (tlvs->tlvs[i].type == type) { + *tlv = &tlvs->tlvs[i]; + return 1; + } + } + + return 0; } static int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type) { - // Parse type - if (strcmp(prefix, "note") == 0) { - *type = NOSTR_BECH32_NOTE; - return 1; - } else if (strcmp(prefix, "npub") == 0) { - *type = NOSTR_BECH32_NPUB; - return 1; - } else if (strcmp(prefix, "nsec") == 0) { - *type = NOSTR_BECH32_NSEC; - return 1; - } else if (strcmp(prefix, "nprofile") == 0) { - *type = NOSTR_BECH32_NPROFILE; - return 1; - } else if (strcmp(prefix, "nevent") == 0) { - *type = NOSTR_BECH32_NEVENT; - return 1; - } else if (strcmp(prefix, "nrelay") == 0) { - *type = NOSTR_BECH32_NRELAY; - return 1; - } else if (strcmp(prefix, "naddr") == 0) { - *type = NOSTR_BECH32_NADDR; - return 1; - } - - return 0; + // Parse type + if (strcmp(prefix, "note") == 0) { + *type = NOSTR_BECH32_NOTE; + return 1; + } else if (strcmp(prefix, "npub") == 0) { + *type = NOSTR_BECH32_NPUB; + return 1; + } else if (strcmp(prefix, "nsec") == 0) { + *type = NOSTR_BECH32_NSEC; + return 1; + } else if (strcmp(prefix, "nprofile") == 0) { + *type = NOSTR_BECH32_NPROFILE; + return 1; + } else if (strcmp(prefix, "nevent") == 0) { + *type = NOSTR_BECH32_NEVENT; + return 1; + } else if (strcmp(prefix, "nrelay") == 0) { + *type = NOSTR_BECH32_NRELAY; + return 1; + } else if (strcmp(prefix, "naddr") == 0) { + *type = NOSTR_BECH32_NADDR; + return 1; + } + + return 0; } static int parse_nostr_bech32_note(struct cursor *cur, struct bech32_note *note) { - return pull_bytes(cur, 32, ¬e->event_id); + return pull_bytes(cur, 32, ¬e->event_id); } static int parse_nostr_bech32_npub(struct cursor *cur, struct bech32_npub *npub) { - return pull_bytes(cur, 32, &npub->pubkey); + return pull_bytes(cur, 32, &npub->pubkey); } static int parse_nostr_bech32_nsec(struct cursor *cur, struct bech32_nsec *nsec) { - return pull_bytes(cur, 32, &nsec->nsec); + return pull_bytes(cur, 32, &nsec->nsec); } static int tlvs_to_relays(struct nostr_tlvs *tlvs, struct relays *relays) { - struct nostr_tlv *tlv; - struct str_block *str; - - relays->num_relays = 0; - - for (int i = 0; i < tlvs->num_tlvs; i++) { - tlv = &tlvs->tlvs[i]; - if (tlv->type != TLV_RELAY) - continue; - - if (relays->num_relays + 1 > MAX_RELAYS) - break; - - str = &relays->relays[relays->num_relays++]; - str->start = (const char*)tlv->value; - str->end = (const char*)(tlv->value + tlv->len); - } - - return 1; + struct nostr_tlv *tlv; + struct str_block *str; + + relays->num_relays = 0; + + for (int i = 0; i < tlvs->num_tlvs; i++) { + tlv = &tlvs->tlvs[i]; + if (tlv->type != TLV_RELAY) + continue; + + if (relays->num_relays + 1 > MAX_RELAYS) + break; + + str = &relays->relays[relays->num_relays++]; + str->start = (const char*)tlv->value; + str->end = (const char*)(tlv->value + tlv->len); + } + + return 1; } static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *nevent) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - if (tlv->len != 32) - return 0; - - nevent->event_id = tlv->value; - - if (find_tlv(&tlvs, TLV_AUTHOR, &tlv)) { - nevent->pubkey = tlv->value; - } else { - nevent->pubkey = NULL; - } - - return tlvs_to_relays(&tlvs, &nevent->relays); + struct nostr_tlvs tlvs; + struct nostr_tlv *tlv; + + if (!parse_nostr_tlvs(cur, &tlvs)) + return 0; + + if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) + return 0; + + if (tlv->len != 32) + return 0; + + nevent->event_id = tlv->value; + + if (find_tlv(&tlvs, TLV_AUTHOR, &tlv)) { + nevent->pubkey = tlv->value; + } else { + nevent->pubkey = NULL; + } + + return tlvs_to_relays(&tlvs, &nevent->relays); } static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *naddr) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - naddr->identifier.start = (const char*)tlv->value; - naddr->identifier.end = (const char*)tlv->value + tlv->len; - - if (!find_tlv(&tlvs, TLV_AUTHOR, &tlv)) - return 0; - - naddr->pubkey = tlv->value; - - return tlvs_to_relays(&tlvs, &naddr->relays); + struct nostr_tlvs tlvs; + struct nostr_tlv *tlv; + + if (!parse_nostr_tlvs(cur, &tlvs)) + return 0; + + if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) + return 0; + + naddr->identifier.start = (const char*)tlv->value; + naddr->identifier.end = (const char*)tlv->value + tlv->len; + + if (!find_tlv(&tlvs, TLV_AUTHOR, &tlv)) + return 0; + + naddr->pubkey = tlv->value; + + return tlvs_to_relays(&tlvs, &naddr->relays); } static int parse_nostr_bech32_nprofile(struct cursor *cur, struct bech32_nprofile *nprofile) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - if (tlv->len != 32) - return 0; - - nprofile->pubkey = tlv->value; - - return tlvs_to_relays(&tlvs, &nprofile->relays); + struct nostr_tlvs tlvs; + struct nostr_tlv *tlv; + + if (!parse_nostr_tlvs(cur, &tlvs)) + return 0; + + if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) + return 0; + + if (tlv->len != 32) + return 0; + + nprofile->pubkey = tlv->value; + + return tlvs_to_relays(&tlvs, &nprofile->relays); } static int parse_nostr_bech32_nrelay(struct cursor *cur, struct bech32_nrelay *nrelay) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - nrelay->relay.start = (const char*)tlv->value; - nrelay->relay.end = (const char*)tlv->value + tlv->len; - - return 1; + struct nostr_tlvs tlvs; + struct nostr_tlv *tlv; + + if (!parse_nostr_tlvs(cur, &tlvs)) + return 0; + + if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) + return 0; + + nrelay->relay.start = (const char*)tlv->value; + nrelay->relay.end = (const char*)tlv->value + tlv->len; + + return 1; } int parse_nostr_bech32(struct cursor *cur, struct nostr_bech32 *obj) { - u8 *start, *end; - - start = cur->p; - - if (!consume_until_non_alphanumeric(cur, 1)) { - cur->p = start; - return 0; - } - - end = cur->p; - - size_t data_len; - size_t input_len = end - start; - if (input_len < 10 || input_len > 10000) { - return 0; - } - - obj->buffer = malloc(input_len * 2); - if (!obj->buffer) - return 0; - - u8 data[input_len]; - char prefix[input_len]; - - if (bech32_decode_len(prefix, data, &data_len, (const char*)start, input_len) == BECH32_ENCODING_NONE) { - cur->p = start; - return 0; - } - - obj->buflen = 0; - if (!bech32_convert_bits(obj->buffer, &obj->buflen, 8, data, data_len, 5, 0)) { - goto fail; - } - - if (!parse_nostr_bech32_type(prefix, &obj->type)) { - goto fail; - } - - struct cursor bcur; - make_cursor(obj->buffer, obj->buffer + obj->buflen, &bcur); - - switch (obj->type) { - case NOSTR_BECH32_NOTE: - if (!parse_nostr_bech32_note(&bcur, &obj->data.note)) - goto fail; - break; - case NOSTR_BECH32_NPUB: - if (!parse_nostr_bech32_npub(&bcur, &obj->data.npub)) - goto fail; - break; - case NOSTR_BECH32_NSEC: - if (!parse_nostr_bech32_nsec(&bcur, &obj->data.nsec)) - goto fail; - break; - case NOSTR_BECH32_NEVENT: - if (!parse_nostr_bech32_nevent(&bcur, &obj->data.nevent)) - goto fail; - break; - case NOSTR_BECH32_NADDR: - if (!parse_nostr_bech32_naddr(&bcur, &obj->data.naddr)) - goto fail; - break; - case NOSTR_BECH32_NPROFILE: - if (!parse_nostr_bech32_nprofile(&bcur, &obj->data.nprofile)) - goto fail; - break; - case NOSTR_BECH32_NRELAY: - if (!parse_nostr_bech32_nrelay(&bcur, &obj->data.nrelay)) - goto fail; - break; - } - - return 1; + u8 *start, *end; + + start = cur->p; + + if (!consume_until_non_alphanumeric(cur, 1)) { + cur->p = start; + return 0; + } + + end = cur->p; + + size_t data_len; + size_t input_len = end - start; + if (input_len < 10 || input_len > 10000) { + return 0; + } + + obj->buffer = malloc(input_len * 2); + if (!obj->buffer) + return 0; + + u8 data[input_len]; + char prefix[input_len]; + + if (bech32_decode_len(prefix, data, &data_len, (const char*)start, input_len) == BECH32_ENCODING_NONE) { + cur->p = start; + return 0; + } + + obj->buflen = 0; + if (!bech32_convert_bits(obj->buffer, &obj->buflen, 8, data, data_len, 5, 0)) { + goto fail; + } + + if (!parse_nostr_bech32_type(prefix, &obj->type)) { + goto fail; + } + + struct cursor bcur; + make_cursor(obj->buffer, obj->buffer + obj->buflen, &bcur); + + switch (obj->type) { + case NOSTR_BECH32_NOTE: + if (!parse_nostr_bech32_note(&bcur, &obj->data.note)) + goto fail; + break; + case NOSTR_BECH32_NPUB: + if (!parse_nostr_bech32_npub(&bcur, &obj->data.npub)) + goto fail; + break; + case NOSTR_BECH32_NSEC: + if (!parse_nostr_bech32_nsec(&bcur, &obj->data.nsec)) + goto fail; + break; + case NOSTR_BECH32_NEVENT: + if (!parse_nostr_bech32_nevent(&bcur, &obj->data.nevent)) + goto fail; + break; + case NOSTR_BECH32_NADDR: + if (!parse_nostr_bech32_naddr(&bcur, &obj->data.naddr)) + goto fail; + break; + case NOSTR_BECH32_NPROFILE: + if (!parse_nostr_bech32_nprofile(&bcur, &obj->data.nprofile)) + goto fail; + break; + case NOSTR_BECH32_NRELAY: + if (!parse_nostr_bech32_nrelay(&bcur, &obj->data.nrelay)) + goto fail; + break; + } + + return 1; fail: - free(obj->buffer); - cur->p = start; - return 0; + free(obj->buffer); + cur->p = start; + return 0; } diff --git a/nostrdb/src/nostr_bech32.h b/nostrdb/src/nostr_bech32.h index 23a381d98..751a9caad 100644 --- a/nostrdb/src/nostr_bech32.h +++ b/nostrdb/src/nostr_bech32.h @@ -1,8 +1,8 @@ // -// nostr_bech32.h -// damus +// nostr_bech32.h +// damus // -// Created by William Casarin on 2023-04-09. +// Created by William Casarin on 2023-04-09. // #ifndef nostr_bech32_h @@ -15,67 +15,67 @@ typedef unsigned char u8; #define MAX_RELAYS 10 struct relays { - struct str_block relays[MAX_RELAYS]; - int num_relays; + struct str_block relays[MAX_RELAYS]; + int num_relays; }; enum nostr_bech32_type { - NOSTR_BECH32_NOTE = 1, - NOSTR_BECH32_NPUB = 2, - NOSTR_BECH32_NPROFILE = 3, - NOSTR_BECH32_NEVENT = 4, - NOSTR_BECH32_NRELAY = 5, - NOSTR_BECH32_NADDR = 6, - NOSTR_BECH32_NSEC = 7, + NOSTR_BECH32_NOTE = 1, + NOSTR_BECH32_NPUB = 2, + NOSTR_BECH32_NPROFILE = 3, + NOSTR_BECH32_NEVENT = 4, + NOSTR_BECH32_NRELAY = 5, + NOSTR_BECH32_NADDR = 6, + NOSTR_BECH32_NSEC = 7, }; struct bech32_note { - const u8 *event_id; + const u8 *event_id; }; struct bech32_npub { - const u8 *pubkey; + const u8 *pubkey; }; struct bech32_nsec { - const u8 *nsec; + const u8 *nsec; }; struct bech32_nevent { - struct relays relays; - const u8 *event_id; - const u8 *pubkey; // optional + struct relays relays; + const u8 *event_id; + const u8 *pubkey; // optional }; struct bech32_nprofile { - struct relays relays; - const u8 *pubkey; + struct relays relays; + const u8 *pubkey; }; struct bech32_naddr { - struct relays relays; - struct str_block identifier; - const u8 *pubkey; + struct relays relays; + struct str_block identifier; + const u8 *pubkey; }; struct bech32_nrelay { - struct str_block relay; + struct str_block relay; }; typedef struct nostr_bech32 { - enum nostr_bech32_type type; - u8 *buffer; // holds strings and tlv stuff - size_t buflen; - - union { - struct bech32_note note; - struct bech32_npub npub; - struct bech32_nsec nsec; - struct bech32_nevent nevent; - struct bech32_nprofile nprofile; - struct bech32_naddr naddr; - struct bech32_nrelay nrelay; - } data; + enum nostr_bech32_type type; + u8 *buffer; // holds strings and tlv stuff + size_t buflen; + + union { + struct bech32_note note; + struct bech32_npub npub; + struct bech32_nsec nsec; + struct bech32_nevent nevent; + struct bech32_nprofile nprofile; + struct bech32_naddr naddr; + struct bech32_nrelay nrelay; + } data; } nostr_bech32_t; From d3089db9f38a3bcf23297539f567150078d861a7 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 12:35:54 -0800 Subject: [PATCH 026/146] nostrdb/nostr_bech32: only parse up to raw bech32 buffers We will be storing raw nostr bech32 buffers directly into nostrdb, so adapt our bech32 code to reflect this. When doing our content parsing pass, we will only look for strings and we won't allocate any intermediate buffers. Only when we write this string block to nostrdb will we actually allocate in our nostrdb output buffer (no mallocs!) Signed-off-by: William Casarin --- nostrdb/src/block.h | 58 ++++++++++++++ nostrdb/src/nostr_bech32.c | 153 ++++++++++++++++++------------------- nostrdb/src/nostr_bech32.h | 36 +++++---- nostrdb/src/str_block.h | 12 +++ 4 files changed, 166 insertions(+), 93 deletions(-) create mode 100644 nostrdb/src/block.h create mode 100644 nostrdb/src/str_block.h diff --git a/nostrdb/src/block.h b/nostrdb/src/block.h new file mode 100644 index 000000000..c3eb8ad5e --- /dev/null +++ b/nostrdb/src/block.h @@ -0,0 +1,58 @@ + +#ifndef NDB_BLOCK_H +#define NDB_BLOCK_H + +#include "invoice.h" +#include "str_block.h" +#include "nostr_bech32.h" +#include + +#pragma pack(push, 1) + +struct ndb_note_blocks { + unsigned char version; + unsigned char padding[3]; + + uint32_t words; + uint32_t num_blocks; + uint32_t blocks_size; + // future expansion + uint32_t reserved[4]; + unsigned char blocks[0]; // see ndb_block definition +}; + +#pragma pack(pop) + +enum block_type { + BLOCK_HASHTAG = 1, + BLOCK_TEXT = 2, + BLOCK_MENTION_INDEX = 3, + BLOCK_MENTION_BECH32 = 4, + BLOCK_URL = 5, + BLOCK_INVOICE = 6, +}; + + +struct ndb_mention_bech32_block { + struct str_block str; + struct nostr_bech32 bech32; +}; + +struct invoice_block { + struct str_block invstr; + struct ndb_invoice invoice; + struct bolt11 *bolt11; +}; + +struct note_block { + enum block_type type; + union { + struct str_block str; + struct invoice_block invoice; + struct ndb_mention_bech32_block mention_bech32; + int mention_index; + } block; +}; + + +#endif // NDB_BLOCK_H diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index a9c800c26..58c4565cd 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -8,9 +8,9 @@ #include "nostr_bech32.h" #include #include "cursor.h" -#include "bech32.h" +#include "bolt11/bech32.h" -#define MAX_TLVS 16 +#define MAX_TLVS 32 #define TLV_SPECIAL 0 #define TLV_RELAY 1 @@ -19,9 +19,9 @@ #define TLV_KNOWN_TLVS 4 struct nostr_tlv { - u8 type; - u8 len; - const u8 *value; + unsigned char type; + unsigned char len; + const unsigned char *value; }; struct nostr_tlvs { @@ -70,7 +70,7 @@ static int parse_nostr_tlvs(struct cursor *cur, struct nostr_tlvs *tlvs) { return 1; } -static int find_tlv(struct nostr_tlvs *tlvs, u8 type, struct nostr_tlv **tlv) { +static int find_tlv(struct nostr_tlvs *tlvs, unsigned char type, struct nostr_tlv **tlv) { *tlv = NULL; for (int i = 0; i < tlvs->num_tlvs; i++) { @@ -83,27 +83,27 @@ static int find_tlv(struct nostr_tlvs *tlvs, u8 type, struct nostr_tlv **tlv) { return 0; } -static int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type) { +int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type) { // Parse type - if (strcmp(prefix, "note") == 0) { + if (strncmp(prefix, "note", 4) == 0) { *type = NOSTR_BECH32_NOTE; return 1; - } else if (strcmp(prefix, "npub") == 0) { + } else if (strncmp(prefix, "npub", 4) == 0) { *type = NOSTR_BECH32_NPUB; return 1; - } else if (strcmp(prefix, "nsec") == 0) { + } else if (strncmp(prefix, "nsec", 4) == 0) { *type = NOSTR_BECH32_NSEC; return 1; - } else if (strcmp(prefix, "nprofile") == 0) { + } else if (strncmp(prefix, "nprofile", 8) == 0) { *type = NOSTR_BECH32_NPROFILE; return 1; - } else if (strcmp(prefix, "nevent") == 0) { + } else if (strncmp(prefix, "nevent", 6) == 0) { *type = NOSTR_BECH32_NEVENT; return 1; - } else if (strcmp(prefix, "nrelay") == 0) { + } else if (strncmp(prefix, "nrelay", 6) == 0) { *type = NOSTR_BECH32_NRELAY; return 1; - } else if (strcmp(prefix, "naddr") == 0) { + } else if (strncmp(prefix, "naddr", 5) == 0) { *type = NOSTR_BECH32_NADDR; return 1; } @@ -138,8 +138,8 @@ static int tlvs_to_relays(struct nostr_tlvs *tlvs, struct relays *relays) { break; str = &relays->relays[relays->num_relays++]; - str->start = (const char*)tlv->value; - str->end = (const char*)(tlv->value + tlv->len); + str->str = (const char*)tlv->value; + str->len = tlv->len; } return 1; @@ -179,8 +179,8 @@ static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *nad if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) return 0; - naddr->identifier.start = (const char*)tlv->value; - naddr->identifier.end = (const char*)tlv->value + tlv->len; + naddr->identifier.str = (const char*)tlv->value; + naddr->identifier.len = tlv->len; if (!find_tlv(&tlvs, TLV_AUTHOR, &tlv)) return 0; @@ -218,89 +218,84 @@ static int parse_nostr_bech32_nrelay(struct cursor *cur, struct bech32_nrelay *n if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) return 0; - nrelay->relay.start = (const char*)tlv->value; - nrelay->relay.end = (const char*)tlv->value + tlv->len; + nrelay->relay.str = (const char*)tlv->value; + nrelay->relay.len = tlv->len; return 1; } -int parse_nostr_bech32(struct cursor *cur, struct nostr_bech32 *obj) { - u8 *start, *end; - - start = cur->p; - - if (!consume_until_non_alphanumeric(cur, 1)) { - cur->p = start; - return 0; - } - - end = cur->p; - - size_t data_len; - size_t input_len = end - start; - if (input_len < 10 || input_len > 10000) { - return 0; - } - - obj->buffer = malloc(input_len * 2); - if (!obj->buffer) - return 0; - - u8 data[input_len]; - char prefix[input_len]; - - if (bech32_decode_len(prefix, data, &data_len, (const char*)start, input_len) == BECH32_ENCODING_NONE) { - cur->p = start; - return 0; - } - - obj->buflen = 0; - if (!bech32_convert_bits(obj->buffer, &obj->buflen, 8, data, data_len, 5, 0)) { - goto fail; - } - - if (!parse_nostr_bech32_type(prefix, &obj->type)) { - goto fail; - } - - struct cursor bcur; - make_cursor(obj->buffer, obj->buffer + obj->buflen, &bcur); +/* +int parse_nostr_bech32_buffer(unsigned char *cur, int buflen, + enum nostr_bech32_type type, + struct nostr_bech32 *obj) +{ + obj->type = type; switch (obj->type) { case NOSTR_BECH32_NOTE: - if (!parse_nostr_bech32_note(&bcur, &obj->data.note)) - goto fail; + if (!parse_nostr_bech32_note(cur, &obj->data.note)) + return 0; break; case NOSTR_BECH32_NPUB: - if (!parse_nostr_bech32_npub(&bcur, &obj->data.npub)) - goto fail; + if (!parse_nostr_bech32_npub(cur, &obj->data.npub)) + return 0; break; case NOSTR_BECH32_NSEC: - if (!parse_nostr_bech32_nsec(&bcur, &obj->data.nsec)) - goto fail; + if (!parse_nostr_bech32_nsec(cur, &obj->data.nsec)) + return 0; break; case NOSTR_BECH32_NEVENT: - if (!parse_nostr_bech32_nevent(&bcur, &obj->data.nevent)) - goto fail; + if (!parse_nostr_bech32_nevent(cur, &obj->data.nevent)) + return 0; break; case NOSTR_BECH32_NADDR: - if (!parse_nostr_bech32_naddr(&bcur, &obj->data.naddr)) - goto fail; + if (!parse_nostr_bech32_naddr(cur, &obj->data.naddr)) + return 0; break; case NOSTR_BECH32_NPROFILE: - if (!parse_nostr_bech32_nprofile(&bcur, &obj->data.nprofile)) - goto fail; + if (!parse_nostr_bech32_nprofile(cur, &obj->data.nprofile)) + return 0; break; case NOSTR_BECH32_NRELAY: - if (!parse_nostr_bech32_nrelay(&bcur, &obj->data.nrelay)) - goto fail; + if (!parse_nostr_bech32_nrelay(cur, &obj->data.nrelay)) + return 0; break; } + + return 1; +} +*/ + +int parse_nostr_bech32_str(struct cursor *bech32) { + enum nostr_bech32_type type; + + if (!parse_nostr_bech32_type((const char *)bech32->p, &type)) + return 0; + if (!consume_until_non_alphanumeric(bech32, 1)) + return 0; + return 1; -fail: - free(obj->buffer); - cur->p = start; - return 0; + /* + *parsed_len = bech32->p - start; + + // some random sanity checking + if (*parsed_len < 10 || *parsed_len > 10000) + return 0; + + const char u5[*parsed_len]; + + if (bech32_decode_len(prefix, u5, &u5_out_len, (const char*)start, + *parsed_len, MAX_PREFIX) == BECH32_ENCODING_NONE) + { + return 0; + } + + if (!parse_nostr_bech32_type(prefix, type)) + return 0; + */ + + return 1; } + diff --git a/nostrdb/src/nostr_bech32.h b/nostrdb/src/nostr_bech32.h index 751a9caad..4fd875118 100644 --- a/nostrdb/src/nostr_bech32.h +++ b/nostrdb/src/nostr_bech32.h @@ -11,8 +11,7 @@ #include #include "str_block.h" #include "cursor.h" -typedef unsigned char u8; -#define MAX_RELAYS 10 +#define MAX_RELAYS 24 struct relays { struct str_block relays[MAX_RELAYS]; @@ -30,42 +29,40 @@ enum nostr_bech32_type { }; struct bech32_note { - const u8 *event_id; + const unsigned char *event_id; }; struct bech32_npub { - const u8 *pubkey; + const unsigned char *pubkey; }; struct bech32_nsec { - const u8 *nsec; + const unsigned char *nsec; }; struct bech32_nevent { struct relays relays; - const u8 *event_id; - const u8 *pubkey; // optional + const unsigned char *event_id; + const unsigned char *pubkey; // optional }; struct bech32_nprofile { struct relays relays; - const u8 *pubkey; + const unsigned char *pubkey; }; struct bech32_naddr { struct relays relays; struct str_block identifier; - const u8 *pubkey; + const unsigned char *pubkey; }; struct bech32_nrelay { struct str_block relay; }; -typedef struct nostr_bech32 { +struct nostr_bech32 { enum nostr_bech32_type type; - u8 *buffer; // holds strings and tlv stuff - size_t buflen; union { struct bech32_note note; @@ -76,9 +73,20 @@ typedef struct nostr_bech32 { struct bech32_naddr naddr; struct bech32_nrelay nrelay; } data; -} nostr_bech32_t; +}; + + +int parse_nostr_bech32_str(struct cursor *bech32); +int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type); +/* +int parse_nostr_bech32_buffer(unsigned char *buf, int buflen, + enum nostr_bech32_type type, + struct nostr_bech32 *obj); -int parse_nostr_bech32(struct cursor *cur, struct nostr_bech32 *obj); +int parse_nostr_bech32(const char *bech32, size_t input_len, + unsigned char *outbuf, size_t outlen, + enum nostr_bech32_type *type); + */ #endif /* nostr_bech32_h */ diff --git a/nostrdb/src/str_block.h b/nostrdb/src/str_block.h new file mode 100644 index 000000000..a7a8aec7d --- /dev/null +++ b/nostrdb/src/str_block.h @@ -0,0 +1,12 @@ + +#ifndef NDB_STR_BLOCK_H +#define NDB_STR_BLOCK_H + +#include + +struct str_block { + const char *str; + uint32_t len; +}; + +#endif From d77f47a524c57480870ee989b51280b21adcaac3 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 12:40:26 -0800 Subject: [PATCH 027/146] nostrdb/cursor: add malloc_slice This is the same as cursor_slice except we don't memset afterwards Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index 028f39936..927817434 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -85,6 +85,16 @@ static inline int cursor_slice(struct cursor *mem, struct cursor *slice, size_t return 1; } +static inline int cursor_malloc_slice(struct cursor *mem, struct cursor *slice, size_t size) +{ + unsigned char *p; + if (!(p = cursor_malloc(mem, size))) { + return 0; + } + make_cursor(p, mem->p, slice); + return 1; +} + static inline void copy_cursor(struct cursor *src, struct cursor *dest) { From 7d69de32aef8de8c81944865f7a6d3e6fe35d30f Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 12:40:50 -0800 Subject: [PATCH 028/146] nostrdb/cursor: add pull_varint_u32 This is a varint helper that doesn't pull larger than uint32 Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index 927817434..c38a8daf6 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -332,6 +332,19 @@ static inline int cursor_pull_varint(struct cursor *cursor, uint64_t *n) return 10; // Successfully read 10 bytes for a full 64-bit integer } +static int cursor_pull_varint_u32(struct cursor *cursor, uint32_t *v) +{ + uint64_t bigval; + + if (!cursor_pull_varint(cursor, &bigval)) + return 0; + + if (bigval > UINT32_MAX) + return 0; + + *v = (uint32_t) bigval; + return 1; +} static inline int cursor_pull_int(struct cursor *cursor, int *i) { From 28e63330f39855b14639bd765380805bfeebdc85 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 12:41:19 -0800 Subject: [PATCH 029/146] nostrdb/cursor: fix empty string pushing in push_c_str Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index c38a8daf6..7cc449b34 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -398,6 +398,8 @@ static inline int cursor_push_str(struct cursor *cursor, const char *str) static inline int cursor_push_c_str(struct cursor *cursor, const char *str) { + if (str == NULL) + return cursor_push_byte(cursor, 0); return cursor_push_str(cursor, str) && cursor_push_byte(cursor, 0); } From f7fb942fcae81ea86b71945731b80dde8044abb6 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 12:41:52 -0800 Subject: [PATCH 030/146] nostrdb/cursor: fix some warnings Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index 7cc449b34..91cb3071f 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -470,8 +470,9 @@ static inline int pull_bytes(struct cursor *cur, int count, const unsigned char } static inline int parse_str(struct cursor *cur, const char *str) { + int i; char c, cs; - unsigned long i, len; + unsigned long len; len = strlen(str); From 2276683b05c3f8efc0780317e10c6b982dd4cfd9 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 12:41:59 -0800 Subject: [PATCH 031/146] nostrdb/cursor: add align function handy function for padding buffers to some byte alignment Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index 91cb3071f..fc4277531 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -714,4 +714,19 @@ static void consume_whitespace_or_punctuation(struct cursor *cur) } } +// pad cursor buffer to n-byte alignment +static inline int cursor_align(struct cursor *cur, int bytes) { + size_t size = cur->p - cur->start; + int pad; + + // pad to n-byte alignment + pad = ((size + (bytes-1)) & ~(bytes-1)) - size; + + if (pad > 0 && !cursor_memset(cur, 0, pad)) + return 0; + + return 1; +} + + #endif From 663b6cb5094474957a7543315f02551b0fa91fa4 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 12:42:40 -0800 Subject: [PATCH 032/146] nostrdb/search: switch to cursor_align function Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 868284635..4be4ee977 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -219,7 +219,6 @@ static int ndb_make_text_search_key(unsigned char *buf, int bufsize, int *keysize) { struct cursor cur; - int size, pad; make_cursor(buf, buf + bufsize, &cur); // TODO: need update this to uint64_t @@ -245,15 +244,9 @@ static int ndb_make_text_search_key(unsigned char *buf, int bufsize, if (!cursor_push_varint(&cur, word_index)) return 0; - size = cur.p - cur.start; - // pad to 8-byte alignment - pad = ((size + 7) & ~7) - size; - if (pad > 0) { - if (!cursor_memset(&cur, 0, pad)) { - return 0; - } - } + if (!cursor_align(&cur, 8)) + return 0; *keysize = cur.p - cur.start; assert((*keysize % 8) == 0); From e94bdcded83ef9dccfbd54a578579bef01bba441 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 12:43:20 -0800 Subject: [PATCH 033/146] nostrdb/Inital embedded content parser This adds some initial code for nostrdb content parsing. We still need to write tests for encoding and decoding, so this is likely not working yet. Signed-off-by: William Casarin --- nostrdb/Makefile | 4 +- nostrdb/src/bolt11/bech32.c | 7 +- nostrdb/src/bolt11/bech32.h | 3 +- nostrdb/src/bolt11/bolt11.h | 1 + nostrdb/src/content_parser.c | 328 +++++++++++++++++++++++++---------- nostrdb/src/invoice.h | 3 + nostrdb/src/nostrdb.c | 2 +- nostrdb/src/nostrdb.h | 7 + 8 files changed, 253 insertions(+), 102 deletions(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index edd403c5e..9be718c71 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -2,7 +2,7 @@ CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g - HEADERS = deps/lmdb/lmdb.h deps/secp256k1/include/secp256k1.h src/sha256.h src/nostrdb.h src/cursor.h src/hex.h src/jsmn.h src/config.h src/sha256.h src/random.h src/memchr.h src/cpu.h $(C_BINDINGS) FLATCC_SRCS=deps/flatcc/src/runtime/json_parser.c deps/flatcc/src/runtime/verifier.c deps/flatcc/src/runtime/builder.c deps/flatcc/src/runtime/emitter.c deps/flatcc/src/runtime/refmap.c BOLT11_SRCS = src/bolt11/bolt11.c src/bolt11/bech32.c src/bolt11/tal.c src/bolt11/talstr.c src/bolt11/take.c src/bolt11/list.c src/bolt11/utf8.c src/bolt11/amount.c src/bolt11/hash_u5.c -SRCS = src/nostrdb.c src/sha256.c src/invoice.c $(BOLT11_SRCS) $(FLATCC_SRCS) +SRCS = src/nostrdb.c src/sha256.c src/invoice.c src/nostr_bech32.c src/content_parser.c $(BOLT11_SRCS) $(FLATCC_SRCS) LDS = $(OBJS) $(ARS) OBJS = $(SRCS:.c=.o) DEPS = $(OBJS) $(HEADERS) $(ARS) @@ -41,7 +41,7 @@ check: test rm -rf testdata/db/*.mdb clean: - rm -rf test bench bench-ingest bench-ingest-many + rm -rf test bench bench-ingest bench-ingest-many $(OBJS) distclean: clean rm -rf deps diff --git a/nostrdb/src/bolt11/bech32.c b/nostrdb/src/bolt11/bech32.c index 321ca53b3..e1c9e1838 100644 --- a/nostrdb/src/bolt11/bech32.c +++ b/nostrdb/src/bolt11/bech32.c @@ -91,7 +91,7 @@ int bech32_encode(char *output, const char *hrp, const uint8_t *data, size_t dat return 1; } -bech32_encoding bech32_decode_len(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t input_len) { +bech32_encoding bech32_decode_len(char* hrp, uint8_t *data, size_t *data_len, const char *input, size_t input_len, int max_hrp_len) { uint32_t chk = 1; size_t i; size_t hrp_len; @@ -104,6 +104,8 @@ bech32_encoding bech32_decode_len(char* hrp, uint8_t *data, size_t *data_len, co ++(*data_len); } hrp_len = input_len - (1 + *data_len); + if (hrp_len > max_hrp_len) + return BECH32_ENCODING_NONE; if (1 + *data_len >= input_len || *data_len < 6) { return BECH32_ENCODING_NONE; } @@ -158,13 +160,14 @@ bech32_encoding bech32_decode(char* hrp, uint8_t *data, size_t *data_len, const if (len > max_input_len) { return BECH32_ENCODING_NONE; } - return bech32_decode_len(hrp, data, data_len, input, len); + return bech32_decode_len(hrp, data, data_len, input, len, 8); } int bech32_convert_bits(uint8_t* out, size_t* outlen, int outbits, const uint8_t* in, size_t inlen, int inbits, int pad) { uint32_t val = 0; int bits = 0; uint32_t maxv = (((uint32_t)1) << outbits) - 1; + *outlen = 0; while (inlen--) { val = (val << inbits) | *(in++); bits += inbits; diff --git a/nostrdb/src/bolt11/bech32.h b/nostrdb/src/bolt11/bech32.h index 065013161..f69eb4a94 100644 --- a/nostrdb/src/bolt11/bech32.h +++ b/nostrdb/src/bolt11/bech32.h @@ -123,7 +123,8 @@ bech32_encoding bech32_decode_len( uint8_t *data, size_t *data_len, const char *input, - size_t input_len + size_t input_len, + int max_prefix_len ); /* Helper from bech32: translates inbits-bit bytes to outbits-bit bytes. diff --git a/nostrdb/src/bolt11/bolt11.h b/nostrdb/src/bolt11/bolt11.h index 9d368c5e1..aabbb8a5b 100644 --- a/nostrdb/src/bolt11/bolt11.h +++ b/nostrdb/src/bolt11/bolt11.h @@ -3,6 +3,7 @@ #include "short_types.h" #include "hash_u5.h" +#include "amount.h" #include "list.h" #include "amount.h" #include "node_id.h" diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index ecc46c3c1..741e73aac 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -1,11 +1,22 @@ -#include "damus.h" #include "cursor.h" -#include "bolt11.h" -#include "bech32.h" +#include "nostr_bech32.h" +#include "block.h" +#include "invoice.h" +#include "bolt11/bolt11.h" +#include "bolt11/bech32.h" #include #include #include "cursor.h" +#include "block.h" + +struct ndb_content_parser { + int bech32_strs; + struct cursor buffer; + struct cursor content; + struct ndb_note_blocks *blocks; +}; + static int parse_digit(struct cursor *cur, int *digit) { int c; @@ -25,7 +36,7 @@ static int parse_digit(struct cursor *cur, int *digit) { static int parse_mention_index(struct cursor *cur, struct note_block *block) { int d1, d2, d3, ind; - u8 *start = cur->p; + unsigned char *start = cur->p; if (!parse_str(cur, "#[")) return 0; @@ -56,7 +67,7 @@ static int parse_mention_index(struct cursor *cur, struct note_block *block) { static int parse_hashtag(struct cursor *cur, struct note_block *block) { int c; - u8 *start = cur->p; + unsigned char *start = cur->p; if (!parse_char(cur, '#')) return 0; @@ -70,22 +81,158 @@ static int parse_hashtag(struct cursor *cur, struct note_block *block) { consume_until_boundary(cur); block->type = BLOCK_HASHTAG; - block->block.str.start = (const char*)(start + 1); - block->block.str.end = (const char*)cur->p; + block->block.str.str = (const char*)(start + 1); + block->block.str.len = cur->p - (start + 1); return 1; } -static int add_block(struct note_blocks *blocks, struct note_block block) -{ - if (blocks->num_blocks + 1 >= MAX_BLOCKS) +static int push_str_block(struct cursor *buf, const char *content, struct str_block *block) { + return cursor_push_varint(buf, block->str - content) && + cursor_push_varint(buf, block->len); +} + +static int pull_str_block(struct cursor *buf, const char *content, struct str_block *block) { + uint32_t start; + if (!cursor_pull_varint_u32(buf, &start)) return 0; + + block->str = content + start; + + return cursor_pull_varint_u32(buf, &block->len); +} + +// +// decode and push a bech32 string into our blocks output buffer. +// +// bech32 blocks are stored as: +// +// nostr_bech32_type : varint +// bech32_buffer_size : u16 +// bech32_data : [u8] +// +// The TLV form is compact already, so we just use it directly +// +// This allows us to not duplicate all of the TLV encoding and decoding code +// for our on-disk nostrdb format. +// +static int push_bech32_str(struct ndb_content_parser *p, struct str_block *bech32) +{ + // we decode the raw bech32 directly into the output buffer + struct cursor u8, u5; + unsigned char *start; + uint16_t *u8_size; + enum nostr_bech32_type type; + size_t u5_out_len, u8_out_len; + static const int MAX_PREFIX = 8; + char prefix[9] = {0}; + + start = p->buffer.p; + + if (!parse_nostr_bech32_type(bech32->str, &type)) + goto fail; + + if (!cursor_push_varint(&p->buffer, type)) + goto fail; + + // save a spot for the raw bech32 buffer size + u8_size = (uint16_t*)p->buffer.p; + if (!cursor_skip(&p->buffer, 2)) + goto fail; + + if (!cursor_malloc_slice(&p->buffer, &u8, bech32->len)) + goto fail; + + if (!cursor_malloc_slice(&p->buffer, &u5, bech32->len)) + goto fail; - blocks->blocks[blocks->num_blocks++] = block; + if (bech32_decode_len(prefix, u5.p, &u5_out_len, bech32->str, + bech32->len, MAX_PREFIX) == BECH32_ENCODING_NONE) { + goto fail; + } + + u5.p += u5_out_len; + + if (!bech32_convert_bits(u8.p, &u8_out_len, 8, u5.start, u5.p - u5.start, 5, 0)) + goto fail; + + u8.p += u8_out_len; + + // move the out cursor to the end of the 8-bit buffer + p->buffer.p = u8.p; + + if (u8_out_len > UINT16_MAX) + goto fail; + + // mark the size of the bech32 buffer + *u8_size = (uint16_t)u8_out_len; + + return 1; + +fail: + p->buffer.p = start; + return 0; +} + +static int push_invoice_str(struct cursor *buf, struct str_block *str) +{ + unsigned char *start; + struct bolt11 *bolt11; + char *fail; + + if (!(bolt11 = bolt11_decode(NULL, str->str, &fail))) + return 0; + + start = buf->p; + if (!ndb_encode_invoice(buf, bolt11)) { + buf->p = start; + tal_free(bolt11); + return 0; + } + + tal_free(bolt11); + return 1; +} + +static int push_block(struct ndb_content_parser *p, struct note_block *block) +{ + // push the tag + if (!cursor_push_varint(&p->buffer, block->type)) + return 0; + + switch (block->type) { + case BLOCK_HASHTAG: + case BLOCK_TEXT: + case BLOCK_URL: + if (!push_str_block(&p->buffer, (const char*)p->content.start, + &block->block.str)) + return 0; + break; + + case BLOCK_MENTION_INDEX: + if (!cursor_push_varint(&p->buffer, block->block.mention_index)) + return 0; + break; + case BLOCK_MENTION_BECH32: + // we only push bech32 strs here + if (!push_bech32_str(p, &block->block.str)) + return 0; + break; + + case BLOCK_INVOICE: + // we only push invoice strs here + if (!push_invoice_str(&p->buffer, &block->block.str)) + return 0; + break; + } + + p->blocks->num_blocks++; + return 1; } -static int add_text_block(struct note_blocks *blocks, const u8 *start, const u8 *end) +static int add_text_block(struct ndb_content_parser *p, + const unsigned char *start, const unsigned char *end) { struct note_block b; @@ -93,10 +240,10 @@ static int add_text_block(struct note_blocks *blocks, const u8 *start, const u8 return 1; b.type = BLOCK_TEXT; - b.block.str.start = (const char*)start; - b.block.str.end = (const char*)end; + b.block.str.str = (const char*)start; + b.block.str.len = end - start; - return add_block(blocks, b); + return push_block(p, &b); } static int consume_url_fragment(struct cursor *cur) @@ -163,10 +310,12 @@ static int consume_url_host(struct cursor *cur) } static int parse_url(struct cursor *cur, struct note_block *block) { - u8 *start = cur->p; - u8 *host; + unsigned char *start = cur->p; + unsigned char *host; + unsigned char tmp[4096]; int host_len; - struct cursor path_cur; + struct cursor path_cur, tmp_cur; + make_cursor(tmp, tmp + sizeof(tmp), &tmp_cur); if (!parse_str(cur, "http")) return 0; @@ -222,29 +371,28 @@ static int parse_url(struct cursor *cur, struct note_block *block) { } // save the bech32 string pos in case we hit a damus.io link - block->block.str.start = (const char *)path_cur.p; + block->block.str.str = (const char *)path_cur.p; // if we have a damus link, make it a mention if (host_len == 8 && !strncmp((const char *)host, "damus.io", 8) - && parse_nostr_bech32(&path_cur, &block->block.mention_bech32.bech32)) + && parse_nostr_bech32_str(&path_cur)) { - block->block.str.end = (const char *)path_cur.p; + block->block.str.len = path_cur.p - path_cur.start; block->type = BLOCK_MENTION_BECH32; return 1; } block->type = BLOCK_URL; - block->block.str.start = (const char *)start; - block->block.str.end = (const char *)cur->p; + block->block.str.str = (const char *)start; + block->block.str.len = cur->p - start; return 1; } static int parse_invoice(struct cursor *cur, struct note_block *block) { - u8 *start, *end; - char *fail; - struct bolt11 *bolt11; + unsigned char *start, *end; + // optional parse_str(cur, "lightning:"); @@ -260,20 +408,10 @@ static int parse_invoice(struct cursor *cur, struct note_block *block) { end = cur->p; - char str[end - start + 1]; - str[end - start] = 0; - memcpy(str, start, end - start); - - if (!(bolt11 = bolt11_decode(NULL, str, &fail))) { - cur->p = start; - return 0; - } - block->type = BLOCK_INVOICE; - block->block.invoice.invstr.start = (const char*)start; - block->block.invoice.invstr.end = (const char*)end; - block->block.invoice.bolt11 = bolt11; + block->block.str.str = (const char*)start; + block->block.str.len = end - start; cur->p = end; @@ -282,107 +420,105 @@ static int parse_invoice(struct cursor *cur, struct note_block *block) { static int parse_mention_bech32(struct cursor *cur, struct note_block *block) { - u8 *start = cur->p; + unsigned char *start = cur->p; parse_char(cur, '@'); parse_str(cur, "nostr:"); - block->block.str.start = (const char *)cur->p; + block->block.str.str = (const char *)cur->p; - if (!parse_nostr_bech32(cur, &block->block.mention_bech32.bech32)) { + if (!parse_nostr_bech32_str(cur)) { cur->p = start; return 0; } - block->block.str.end = (const char *)cur->p; - + block->block.str.len = cur->p - start; block->type = BLOCK_MENTION_BECH32; return 1; } -static int add_text_then_block(struct cursor *cur, struct note_blocks *blocks, struct note_block block, u8 **start, const u8 *pre_mention) +static int add_text_then_block(struct ndb_content_parser *p, + struct note_block *block, + unsigned char **start, + const unsigned char *pre_mention) { - if (!add_text_block(blocks, *start, pre_mention)) + if (!add_text_block(p, *start, pre_mention)) return 0; - *start = (u8*)cur->p; - - if (!add_block(blocks, block)) - return 0; + *start = (unsigned char*)p->content.p; - return 1; + return push_block(p, block); } -int ndb_parse_content(struct note_blocks *blocks, const char *content) { +int ndb_parse_content(unsigned char *buf, int buf_size, + const char *content, int content_len, + struct ndb_note_blocks **blocks_p) +{ int cp, c; - struct cursor cur; + struct ndb_content_parser parser; + struct note_block block; - u8 *start, *pre_mention; - - blocks->words = 0; - blocks->num_blocks = 0; - make_cursor((u8*)content, (u8*)content + strlen(content), &cur); + unsigned char *start, *pre_mention; - start = cur.p; - while (cur.p < cur.end && blocks->num_blocks < MAX_BLOCKS) { - cp = peek_char(&cur, -1); - c = peek_char(&cur, 0); + make_cursor(buf, buf + buf_size, &parser.buffer); + + // allocate some space for the blocks header + *blocks_p = parser.blocks = (struct ndb_note_blocks *)buf; + parser.buffer.p += sizeof(struct ndb_note_blocks); + + make_cursor((unsigned char *)content, + (unsigned char*)content + content_len, &parser.content); + + parser.blocks->words = 0; + parser.blocks->num_blocks = 0; + parser.blocks->blocks_size = 0; + + start = parser.content.p; + while (parser.content.p < parser.content.end) { + cp = peek_char(&parser.content, -1); + c = peek_char(&parser.content, 0); // new word - if (is_whitespace(cp) && !is_whitespace(c)) { - blocks->words++; - } + if (is_whitespace(cp) && !is_whitespace(c)) + parser.blocks->words++; - pre_mention = cur.p; + pre_mention = parser.content.p; if (cp == -1 || is_left_boundary(cp) || c == '#') { - if (c == '#' && (parse_mention_index(&cur, &block) || parse_hashtag(&cur, &block))) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) + if (c == '#' && (parse_mention_index(&parser.content, &block) || parse_hashtag(&parser.content, &block))) { + if (!add_text_then_block(&parser, &block, &start, pre_mention)) return 0; continue; - } else if ((c == 'h' || c == 'H') && parse_url(&cur, &block)) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) + } else if ((c == 'h' || c == 'H') && parse_url(&parser.content, &block)) { + if (!add_text_then_block(&parser, &block, &start, pre_mention)) return 0; continue; - } else if ((c == 'l' || c == 'L') && parse_invoice(&cur, &block)) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) + } else if ((c == 'l' || c == 'L') && parse_invoice(&parser.content, &block)) { + if (!add_text_then_block(&parser, &block, &start, pre_mention)) return 0; continue; - } else if ((c == 'n' || c == '@') && parse_mention_bech32(&cur, &block)) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) + } else if ((c == 'n' || c == '@') && parse_mention_bech32(&parser.content, &block)) { + if (!add_text_then_block(&parser, &block, &start, pre_mention)) return 0; continue; } } - cur.p++; + parser.content.p++; } - if (cur.p - start > 0) { - if (!add_text_block(blocks, start, cur.p)) + if (parser.content.p - start > 0) { + if (!add_text_block(&parser, start, parser.content.p)) return 0; } - - return 1; -} -void blocks_init(struct note_blocks *blocks) { - blocks->blocks = malloc(sizeof(struct note_block) * MAX_BLOCKS); - blocks->num_blocks = 0; -} + // pad to 8-byte alignment + if (!cursor_align(&parser.buffer, 8)) + return 0; + assert((parser.buffer.p - parser.buffer.start) % 8 == 0); -void blocks_free(struct note_blocks *blocks) { - if (!blocks->blocks) { - return; - } + parser.blocks->blocks_size = parser.buffer.p - parser.buffer.start; - for (int i = 0; i < blocks->num_blocks; ++i) { - if (blocks->blocks[i].type == BLOCK_MENTION_BECH32) { - free(blocks->blocks[i].block.mention_bech32.bech32.buffer); - blocks->blocks[i].block.mention_bech32.bech32.buffer = NULL; - } - } - - free(blocks->blocks); - blocks->num_blocks = 0; + return 1; } + diff --git a/nostrdb/src/invoice.h b/nostrdb/src/invoice.h index acbb22163..32c8adf2d 100644 --- a/nostrdb/src/invoice.h +++ b/nostrdb/src/invoice.h @@ -2,6 +2,9 @@ #ifndef NDB_INVOICE_H #define NDB_INVOICE_H +#include +#include "cursor.h" + struct bolt11; struct ndb_invoice { diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 4be4ee977..c50b73957 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -57,7 +57,6 @@ typedef int (*ndb_word_parser_fn)(void *, const char *word, int word_len, // representation #pragma pack(push, 1) - union ndb_packed_str { struct { char str[3]; @@ -99,6 +98,7 @@ struct ndb_note { #pragma pack(pop) + struct ndb_migration { ndb_migrate_fn fn; }; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index bf90e2bdc..b66191f82 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -20,11 +20,13 @@ struct ndb_json_parser; struct ndb; +struct ndb_note_blocks; struct ndb_note; struct ndb_tag; struct ndb_tags; struct ndb_lmdb; union ndb_packed_str; +struct bolt11; // sorry, swift needs help with forward declared pointers like this struct ndb_t { @@ -383,4 +385,9 @@ const char *ndb_db_name(enum ndb_dbs db); const char *ndb_kind_name(enum ndb_common_kind ck); enum ndb_common_kind ndb_kind_to_common_kind(int kind); +// CONTENT PARSER +int ndb_parse_content(unsigned char *buf, int buf_size, + const char *content, int content_len, + struct ndb_note_blocks **blocks_p); + #endif From 4f55723fc611984603cf86db166f6002726bf2db Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 14:28:20 -0800 Subject: [PATCH 034/146] nostrdb/nostr_bech32: parse in one pass since we will be decoding these in realtime, let's make sure we can decode them in O(1) Signed-off-by: William Casarin --- nostrdb/src/nostr_bech32.c | 226 +++++++++++++++++-------------------- nostrdb/src/nostr_bech32.h | 6 +- 2 files changed, 107 insertions(+), 125 deletions(-) diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index 58c4565cd..c637d84f0 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -24,17 +24,11 @@ struct nostr_tlv { const unsigned char *value; }; -struct nostr_tlvs { - struct nostr_tlv tlvs[MAX_TLVS]; - int num_tlvs; -}; - static int parse_nostr_tlv(struct cursor *cur, struct nostr_tlv *tlv) { // get the tlv tag if (!cursor_pull_byte(cur, &tlv->type)) return 0; - - // unknown, fail! + if (tlv->type >= TLV_KNOWN_TLVS) return 0; @@ -52,37 +46,6 @@ static int parse_nostr_tlv(struct cursor *cur, struct nostr_tlv *tlv) { return 1; } -static int parse_nostr_tlvs(struct cursor *cur, struct nostr_tlvs *tlvs) { - int i; - tlvs->num_tlvs = 0; - - for (i = 0; i < MAX_TLVS; i++) { - if (parse_nostr_tlv(cur, &tlvs->tlvs[i])) { - tlvs->num_tlvs++; - } else { - break; - } - } - - if (tlvs->num_tlvs == 0) - return 0; - - return 1; -} - -static int find_tlv(struct nostr_tlvs *tlvs, unsigned char type, struct nostr_tlv **tlv) { - *tlv = NULL; - - for (int i = 0; i < tlvs->num_tlvs; i++) { - if (tlvs->tlvs[i].type == type) { - *tlv = &tlvs->tlvs[i]; - return 1; - } - } - - return 0; -} - int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type) { // Parse type if (strncmp(prefix, "note", 4) == 0) { @@ -123,109 +86,129 @@ static int parse_nostr_bech32_nsec(struct cursor *cur, struct bech32_nsec *nsec) return pull_bytes(cur, 32, &nsec->nsec); } -static int tlvs_to_relays(struct nostr_tlvs *tlvs, struct relays *relays) { - struct nostr_tlv *tlv; +static int add_relay(struct relays *relays, struct nostr_tlv *tlv) +{ struct str_block *str; + + if (relays->num_relays + 1 > MAX_RELAYS) + return 0; - relays->num_relays = 0; - - for (int i = 0; i < tlvs->num_tlvs; i++) { - tlv = &tlvs->tlvs[i]; - if (tlv->type != TLV_RELAY) - continue; - - if (relays->num_relays + 1 > MAX_RELAYS) - break; - - str = &relays->relays[relays->num_relays++]; - str->str = (const char*)tlv->value; - str->len = tlv->len; - } + str = &relays->relays[relays->num_relays++]; + str->str = (const char*)tlv->value; + str->len = tlv->len; return 1; } static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *nevent) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - if (tlv->len != 32) - return 0; - - nevent->event_id = tlv->value; - - if (find_tlv(&tlvs, TLV_AUTHOR, &tlv)) { - nevent->pubkey = tlv->value; - } else { - nevent->pubkey = NULL; + struct nostr_tlv tlv; + int i; + + nevent->event_id = NULL; + nevent->pubkey = NULL; + nevent->relays.num_relays = 0; + + for (i = 0; i < MAX_TLVS; i++) { + if (!parse_nostr_tlv(cur, &tlv)) + break; + + switch (tlv.type) { + case TLV_SPECIAL: + if (tlv.len != 32) return 0; + nevent->event_id = tlv.value; + break; + case TLV_AUTHOR: + if (tlv.len != 32) return 0; + nevent->pubkey = tlv.value; + break; + case TLV_RELAY: + add_relay(&nevent->relays, &tlv); + break; + } } - - return tlvs_to_relays(&tlvs, &nevent->relays); + + return nevent->event_id != NULL; } static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *naddr) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - naddr->identifier.str = (const char*)tlv->value; - naddr->identifier.len = tlv->len; - - if (!find_tlv(&tlvs, TLV_AUTHOR, &tlv)) - return 0; - - naddr->pubkey = tlv->value; - - return tlvs_to_relays(&tlvs, &naddr->relays); + struct nostr_tlv tlv; + int i; + + naddr->identifier.str = NULL; + naddr->identifier.len = 0; + naddr->pubkey = NULL; + naddr->relays.num_relays = 0; + + for (i = 0; i < MAX_TLVS; i++) { + if (!parse_nostr_tlv(cur, &tlv)) + break; + + switch (tlv.type) { + case TLV_SPECIAL: + naddr->identifier.str = (const char*)tlv.value; + naddr->identifier.len = tlv.len; + break; + case TLV_AUTHOR: + if (tlv.len != 32) return 0; + naddr->pubkey = tlv.value; + break; + case TLV_RELAY: + add_relay(&naddr->relays, &tlv); + break; + } + } + + return naddr->identifier.str != NULL; } static int parse_nostr_bech32_nprofile(struct cursor *cur, struct bech32_nprofile *nprofile) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - if (tlv->len != 32) - return 0; - - nprofile->pubkey = tlv->value; - - return tlvs_to_relays(&tlvs, &nprofile->relays); + struct nostr_tlv tlv; + int i; + + nprofile->pubkey = NULL; + nprofile->relays.num_relays = 0; + + for (i = 0; i < MAX_TLVS; i++) { + if (!parse_nostr_tlv(cur, &tlv)) + break; + + switch (tlv.type) { + case TLV_SPECIAL: + if (tlv.len != 32) return 0; + nprofile->pubkey = tlv.value; + break; + case TLV_RELAY: + add_relay(&nprofile->relays, &tlv); + break; + } + } + + return nprofile->pubkey != NULL; } static int parse_nostr_bech32_nrelay(struct cursor *cur, struct bech32_nrelay *nrelay) { - struct nostr_tlvs tlvs; - struct nostr_tlv *tlv; - - if (!parse_nostr_tlvs(cur, &tlvs)) - return 0; - - if (!find_tlv(&tlvs, TLV_SPECIAL, &tlv)) - return 0; - - nrelay->relay.str = (const char*)tlv->value; - nrelay->relay.len = tlv->len; + struct nostr_tlv tlv; + int i; + + nrelay->relay.str = NULL; + nrelay->relay.len = 0; + + for (i = 0; i < MAX_TLVS; i++) { + if (!parse_nostr_tlv(cur, &tlv)) + break; + + switch (tlv.type) { + case TLV_SPECIAL: + nrelay->relay.str = (const char*)tlv.value; + nrelay->relay.len = tlv.len; + break; + } + } - return 1; + return nrelay->relay.str != NULL; } -/* -int parse_nostr_bech32_buffer(unsigned char *cur, int buflen, +int parse_nostr_bech32_buffer(struct cursor *cur, enum nostr_bech32_type type, struct nostr_bech32 *obj) { @@ -264,7 +247,6 @@ int parse_nostr_bech32_buffer(unsigned char *cur, int buflen, return 1; } -*/ int parse_nostr_bech32_str(struct cursor *bech32) { enum nostr_bech32_type type; diff --git a/nostrdb/src/nostr_bech32.h b/nostrdb/src/nostr_bech32.h index 4fd875118..a19505722 100644 --- a/nostrdb/src/nostr_bech32.h +++ b/nostrdb/src/nostr_bech32.h @@ -27,6 +27,7 @@ enum nostr_bech32_type { NOSTR_BECH32_NADDR = 6, NOSTR_BECH32_NSEC = 7, }; +#define NOSTR_BECH32_KNOWN_TYPES 7 struct bech32_note { const unsigned char *event_id; @@ -79,11 +80,10 @@ struct nostr_bech32 { int parse_nostr_bech32_str(struct cursor *bech32); int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type); -/* -int parse_nostr_bech32_buffer(unsigned char *buf, int buflen, - enum nostr_bech32_type type, +int parse_nostr_bech32_buffer(struct cursor *cur, enum nostr_bech32_type type, struct nostr_bech32 *obj); +/* int parse_nostr_bech32(const char *bech32, size_t input_len, unsigned char *outbuf, size_t outlen, enum nostr_bech32_type *type); From 150b0acc2bc0455fd018f377e713d5ffbcf29c7d Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 14:54:43 -0800 Subject: [PATCH 035/146] nostrdb/bech32: add some initial tests since we modified this recently, let's add some tests to make sure we didn't break anything Signed-off-by: William Casarin --- nostrdb/src/nostr_bech32.c | 54 ++++++++++++++++++++++++-------------- nostrdb/src/nostr_bech32.h | 8 ++++-- 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index c637d84f0..013d22fba 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -216,31 +216,31 @@ int parse_nostr_bech32_buffer(struct cursor *cur, switch (obj->type) { case NOSTR_BECH32_NOTE: - if (!parse_nostr_bech32_note(cur, &obj->data.note)) + if (!parse_nostr_bech32_note(cur, &obj->note)) return 0; break; case NOSTR_BECH32_NPUB: - if (!parse_nostr_bech32_npub(cur, &obj->data.npub)) + if (!parse_nostr_bech32_npub(cur, &obj->npub)) return 0; break; case NOSTR_BECH32_NSEC: - if (!parse_nostr_bech32_nsec(cur, &obj->data.nsec)) + if (!parse_nostr_bech32_nsec(cur, &obj->nsec)) return 0; break; case NOSTR_BECH32_NEVENT: - if (!parse_nostr_bech32_nevent(cur, &obj->data.nevent)) + if (!parse_nostr_bech32_nevent(cur, &obj->nevent)) return 0; break; case NOSTR_BECH32_NADDR: - if (!parse_nostr_bech32_naddr(cur, &obj->data.naddr)) + if (!parse_nostr_bech32_naddr(cur, &obj->naddr)) return 0; break; case NOSTR_BECH32_NPROFILE: - if (!parse_nostr_bech32_nprofile(cur, &obj->data.nprofile)) + if (!parse_nostr_bech32_nprofile(cur, &obj->nprofile)) return 0; break; case NOSTR_BECH32_NRELAY: - if (!parse_nostr_bech32_nrelay(cur, &obj->data.nrelay)) + if (!parse_nostr_bech32_nrelay(cur, &obj->nrelay)) return 0; break; } @@ -248,36 +248,52 @@ int parse_nostr_bech32_buffer(struct cursor *cur, return 1; } -int parse_nostr_bech32_str(struct cursor *bech32) { - enum nostr_bech32_type type; - - if (!parse_nostr_bech32_type((const char *)bech32->p, &type)) + +int parse_nostr_bech32_str(struct cursor *bech32, enum nostr_bech32_type *type) { + if (!parse_nostr_bech32_type((const char *)bech32->p, type)) return 0; if (!consume_until_non_alphanumeric(bech32, 1)) return 0; return 1; +} + - /* - *parsed_len = bech32->p - start; +int parse_nostr_bech32(unsigned char *buf, int buflen, + const char *bech32_str, size_t bech32_len, + struct nostr_bech32 *obj) { + unsigned char *start; + size_t parsed_len, u5_out_len, u8_out_len; + enum nostr_bech32_type type; + static const int MAX_PREFIX = 8; + struct cursor cur, bech32; + + make_cursor(buf, buf + buflen, &cur); + make_cursor((unsigned char*)bech32_str, (unsigned char*)bech32_str + bech32_len, &bech32); + + start = bech32.p; + if (!parse_nostr_bech32_str(&bech32, &type)) + return 0; + + parsed_len = bech32.p - start; // some random sanity checking - if (*parsed_len < 10 || *parsed_len > 10000) + if (parsed_len < 10 || parsed_len > 10000) return 0; - const char u5[*parsed_len]; + unsigned char u5[parsed_len]; + char prefix[MAX_PREFIX]; if (bech32_decode_len(prefix, u5, &u5_out_len, (const char*)start, - *parsed_len, MAX_PREFIX) == BECH32_ENCODING_NONE) + parsed_len, MAX_PREFIX) == BECH32_ENCODING_NONE) { return 0; } - if (!parse_nostr_bech32_type(prefix, type)) + if (!bech32_convert_bits(cur.p, &u8_out_len, 8, u5, u5_out_len, 5, 0)) return 0; - */ - return 1; + return parse_nostr_bech32_buffer(&cur, type, obj); } diff --git a/nostrdb/src/nostr_bech32.h b/nostrdb/src/nostr_bech32.h index a19505722..db70dc710 100644 --- a/nostrdb/src/nostr_bech32.h +++ b/nostrdb/src/nostr_bech32.h @@ -73,16 +73,20 @@ struct nostr_bech32 { struct bech32_nprofile nprofile; struct bech32_naddr naddr; struct bech32_nrelay nrelay; - } data; + }; }; -int parse_nostr_bech32_str(struct cursor *bech32); +int parse_nostr_bech32_str(struct cursor *bech32, enum nostr_bech32_type *type); int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type); int parse_nostr_bech32_buffer(struct cursor *cur, enum nostr_bech32_type type, struct nostr_bech32 *obj); +int parse_nostr_bech32(unsigned char *buf, int buflen, + const char *bech32_str, size_t bech32_len, + struct nostr_bech32 *obj); + /* int parse_nostr_bech32(const char *bech32, size_t input_len, unsigned char *outbuf, size_t outlen, From 527993158b3e5f3668636cf312639e476cf6c82b Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 27 Dec 2023 14:55:17 -0800 Subject: [PATCH 036/146] nostrdb/content_parser: add initial db decoders We need to pull the data out as well! Let's add some initial decoders. We still need tests to make sure it's working. Signed-off-by: William Casarin --- nostrdb/Makefile | 2 +- nostrdb/src/block.h | 7 +- nostrdb/src/content_parser.c | 179 +++++++++++++++++++++++++++++------ nostrdb/src/cursor.h | 5 + nostrdb/src/nostrdb.h | 8 ++ 5 files changed, 166 insertions(+), 35 deletions(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index 9be718c71..a4836970f 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -1,5 +1,5 @@ CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g -Isrc -Ideps/secp256k1/include -Ideps/lmdb -Ideps/flatcc/include -HEADERS = deps/lmdb/lmdb.h deps/secp256k1/include/secp256k1.h src/sha256.h src/nostrdb.h src/cursor.h src/hex.h src/jsmn.h src/config.h src/sha256.h src/random.h src/memchr.h src/cpu.h $(C_BINDINGS) +HEADERS = deps/lmdb/lmdb.h deps/secp256k1/include/secp256k1.h src/sha256.h src/nostrdb.h src/cursor.h src/hex.h src/jsmn.h src/config.h src/sha256.h src/random.h src/memchr.h src/cpu.h src/nostr_bech32.h src/block.h src/str_block.h $(C_BINDINGS) FLATCC_SRCS=deps/flatcc/src/runtime/json_parser.c deps/flatcc/src/runtime/verifier.c deps/flatcc/src/runtime/builder.c deps/flatcc/src/runtime/emitter.c deps/flatcc/src/runtime/refmap.c BOLT11_SRCS = src/bolt11/bolt11.c src/bolt11/bech32.c src/bolt11/tal.c src/bolt11/talstr.c src/bolt11/take.c src/bolt11/list.c src/bolt11/utf8.c src/bolt11/amount.c src/bolt11/hash_u5.c SRCS = src/nostrdb.c src/sha256.c src/invoice.c src/nostr_bech32.c src/content_parser.c $(BOLT11_SRCS) $(FLATCC_SRCS) diff --git a/nostrdb/src/block.h b/nostrdb/src/block.h index c3eb8ad5e..c9266d383 100644 --- a/nostrdb/src/block.h +++ b/nostrdb/src/block.h @@ -38,19 +38,18 @@ struct ndb_mention_bech32_block { struct nostr_bech32 bech32; }; -struct invoice_block { +struct ndb_invoice_block { struct str_block invstr; struct ndb_invoice invoice; - struct bolt11 *bolt11; }; struct note_block { enum block_type type; union { struct str_block str; - struct invoice_block invoice; + struct ndb_invoice_block invoice; struct ndb_mention_bech32_block mention_bech32; - int mention_index; + uint32_t mention_index; } block; }; diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index 741e73aac..9accf77f6 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -103,7 +103,7 @@ static int pull_str_block(struct cursor *buf, const char *content, struct str_bl } // -// decode and push a bech32 string into our blocks output buffer. +// decode and push a bech32 mention into our blocks output buffer. // // bech32 blocks are stored as: // @@ -116,7 +116,7 @@ static int pull_str_block(struct cursor *buf, const char *content, struct str_bl // This allows us to not duplicate all of the TLV encoding and decoding code // for our on-disk nostrdb format. // -static int push_bech32_str(struct ndb_content_parser *p, struct str_block *bech32) +static int push_bech32_mention(struct ndb_content_parser *p, struct str_block *bech32) { // we decode the raw bech32 directly into the output buffer struct cursor u8, u5; @@ -132,6 +132,10 @@ static int push_bech32_str(struct ndb_content_parser *p, struct str_block *bech3 if (!parse_nostr_bech32_type(bech32->str, &type)) goto fail; + // make sure to push the str block! + if (!push_str_block(&p->buffer, (const char*)p->content.start, bech32)) + goto fail; + if (!cursor_push_varint(&p->buffer, type)) goto fail; @@ -174,7 +178,7 @@ static int push_bech32_str(struct ndb_content_parser *p, struct str_block *bech3 return 0; } -static int push_invoice_str(struct cursor *buf, struct str_block *str) +static int push_invoice_str(struct ndb_content_parser *p, struct str_block *str) { unsigned char *start; struct bolt11 *bolt11; @@ -183,9 +187,15 @@ static int push_invoice_str(struct cursor *buf, struct str_block *str) if (!(bolt11 = bolt11_decode(NULL, str->str, &fail))) return 0; - start = buf->p; - if (!ndb_encode_invoice(buf, bolt11)) { - buf->p = start; + start = p->buffer.p; + + // push the text block just incase we don't care for the invoice + if (!push_str_block(&p->buffer, (const char*)p->content.start, str)) + return 0; + + // push decoded invoice data for quick access + if (!ndb_encode_invoice(&p->buffer, bolt11)) { + p->buffer.p = start; tal_free(bolt11); return 0; } @@ -194,45 +204,95 @@ static int push_invoice_str(struct cursor *buf, struct str_block *str) return 1; } -static int push_block(struct ndb_content_parser *p, struct note_block *block) +static int pull_nostr_bech32_type(struct cursor *cur, enum nostr_bech32_type *type) { - // push the tag - if (!cursor_push_varint(&p->buffer, block->type)) + uint64_t inttype; + if (!cursor_pull_varint(cur, &inttype)) + return 0; + + if (inttype > NOSTR_BECH32_KNOWN_TYPES) + return 0; + + *type = inttype; + return 1; +} + +static int pull_bech32_mention(const char *content, struct cursor *cur, + struct ndb_mention_bech32_block *block) { + uint16_t size; + unsigned char *start; + enum nostr_bech32_type type; + + start = cur->p; + + if (!pull_str_block(cur, content, &block->str)) + return 0; + + if (!cursor_pull_u16(cur, &size)) + return 0; + + if (!pull_nostr_bech32_type(cur, &type)) + return 0; + + if (!parse_nostr_bech32_buffer(cur, type, &block->bech32)) + return 0; + + cur->p = start + size; + return 1; +} + +static int pull_invoice(const char *content, struct cursor *cur, + struct ndb_invoice_block *block) +{ + if (!pull_str_block(cur, content, &block->invstr)) return 0; + return ndb_decode_invoice(cur, &block->invoice); +} + +static int pull_block(const char *content, struct cursor *cur, struct note_block *block) +{ + unsigned char *start = cur->p; + uint32_t type; + + if (!cursor_pull_varint_u32(cur, &type)) + return 0; + + block->type = type; + switch (block->type) { case BLOCK_HASHTAG: case BLOCK_TEXT: case BLOCK_URL: - if (!push_str_block(&p->buffer, (const char*)p->content.start, - &block->block.str)) - return 0; + if (!pull_str_block(cur, content, &block->block.str)) + goto fail; break; case BLOCK_MENTION_INDEX: - if (!cursor_push_varint(&p->buffer, block->block.mention_index)) - return 0; + if (!cursor_pull_varint_u32(cur, &block->block.mention_index)) + goto fail; break; + case BLOCK_MENTION_BECH32: - // we only push bech32 strs here - if (!push_bech32_str(p, &block->block.str)) - return 0; + if (!pull_bech32_mention(content, cur, &block->block.mention_bech32)) + goto fail; break; - + case BLOCK_INVOICE: // we only push invoice strs here - if (!push_invoice_str(&p->buffer, &block->block.str)) - return 0; + if (!pull_invoice(content, cur, &block->block.invoice)) + goto fail; break; } - p->blocks->num_blocks++; - return 1; +fail: + cur->p = start; + return 0; } -static int add_text_block(struct ndb_content_parser *p, - const unsigned char *start, const unsigned char *end) +int push_block(struct ndb_content_parser *p, struct note_block *block); +static int add_text_block(struct ndb_content_parser *p, const char *start, const char *end) { struct note_block b; @@ -240,12 +300,69 @@ static int add_text_block(struct ndb_content_parser *p, return 1; b.type = BLOCK_TEXT; - b.block.str.str = (const char*)start; + b.block.str.str = start; b.block.str.len = end - start; return push_block(p, &b); } + +int push_block(struct ndb_content_parser *p, struct note_block *block) +{ + unsigned char *start = p->buffer.p; + + // push the tag + if (!cursor_push_varint(&p->buffer, block->type)) + return 0; + + switch (block->type) { + case BLOCK_HASHTAG: + case BLOCK_TEXT: + case BLOCK_URL: + if (!push_str_block(&p->buffer, (const char*)p->content.start, + &block->block.str)) + goto fail; + break; + + case BLOCK_MENTION_INDEX: + if (!cursor_push_varint(&p->buffer, block->block.mention_index)) + goto fail; + break; + case BLOCK_MENTION_BECH32: + // we only push bech32 strs here + if (!push_bech32_mention(p, &block->block.str)) { + // if we fail for some reason, try pushing just a text block + p->buffer.p = start; + if (!add_text_block(p, block->block.str.str, + block->block.str.str + + block->block.str.len)) { + goto fail; + } + } + break; + + case BLOCK_INVOICE: + // we only push invoice strs here + if (!push_invoice_str(p, &block->block.str)) { + // if we fail for some reason, try pushing just a text block + p->buffer.p = start; + if (!add_text_block(p, block->block.str.str, + block->block.str.str + block->block.str.len)) { + goto fail; + } + } + break; + } + + p->blocks->num_blocks++; + + return 1; + +fail: + p->buffer.p = start; + return 0; +} + static int consume_url_fragment(struct cursor *cur) { int c; @@ -315,6 +432,7 @@ static int parse_url(struct cursor *cur, struct note_block *block) { unsigned char tmp[4096]; int host_len; struct cursor path_cur, tmp_cur; + enum nostr_bech32_type type; make_cursor(tmp, tmp + sizeof(tmp), &tmp_cur); if (!parse_str(cur, "http")) @@ -376,7 +494,7 @@ static int parse_url(struct cursor *cur, struct note_block *block) { // if we have a damus link, make it a mention if (host_len == 8 && !strncmp((const char *)host, "damus.io", 8) - && parse_nostr_bech32_str(&path_cur)) + && parse_nostr_bech32_str(&path_cur, &type)) { block->block.str.len = path_cur.p - path_cur.start; block->type = BLOCK_MENTION_BECH32; @@ -421,13 +539,14 @@ static int parse_invoice(struct cursor *cur, struct note_block *block) { static int parse_mention_bech32(struct cursor *cur, struct note_block *block) { unsigned char *start = cur->p; + enum nostr_bech32_type type; parse_char(cur, '@'); parse_str(cur, "nostr:"); block->block.str.str = (const char *)cur->p; - if (!parse_nostr_bech32_str(cur)) { + if (!parse_nostr_bech32_str(cur, &type)) { cur->p = start; return 0; } @@ -443,7 +562,7 @@ static int add_text_then_block(struct ndb_content_parser *p, unsigned char **start, const unsigned char *pre_mention) { - if (!add_text_block(p, *start, pre_mention)) + if (!add_text_block(p, (const char *)*start, (const char*)pre_mention)) return 0; *start = (unsigned char*)p->content.p; @@ -457,8 +576,8 @@ int ndb_parse_content(unsigned char *buf, int buf_size, { int cp, c; struct ndb_content_parser parser; - struct note_block block; + unsigned char *start, *pre_mention; make_cursor(buf, buf + buf_size, &parser.buffer); @@ -508,7 +627,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, } if (parser.content.p - start > 0) { - if (!add_text_block(&parser, start, parser.content.p)) + if (!add_text_block(&parser, (const char*)start, (const char *)parser.content.p)) return 0; } diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index fc4277531..cd5cd3115 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -360,6 +360,11 @@ static inline int cursor_push_u16(struct cursor *cursor, unsigned short i) return cursor_push(cursor, (unsigned char*)&i, sizeof(i)); } +static inline int cursor_pull_u16(struct cursor *cursor, uint16_t *i) +{ + return cursor_pull(cursor, (unsigned char*)i, sizeof(*i)); +} + static inline void *index_cursor(struct cursor *cursor, unsigned int index, int elem_size) { unsigned char *p; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index b66191f82..d53711346 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -198,6 +198,12 @@ struct ndb_builder { struct ndb_tag *current_tag; }; +/* +struct ndb_block_iterator { + struct note_block block; +}; +*/ + struct ndb_iterator { struct ndb_note *note; struct ndb_tag *tag; @@ -390,4 +396,6 @@ int ndb_parse_content(unsigned char *buf, int buf_size, const char *content, int content_len, struct ndb_note_blocks **blocks_p); +//int ndb_blocks_iterate_next(struct ndb_block_iterator *iter); + #endif From deb56ea46f16a3d3e8534cb75d0d189541454c37 Mon Sep 17 00:00:00 2001 From: kernelkind Date: Thu, 28 Dec 2023 13:52:24 -0800 Subject: [PATCH 037/146] nostrdb/parser: handle period at end of url Fix parsing URL when encountering a period at the end of the url by setting it as disallowed from being present at the end of a URL. Some characters are disallowed to be present at the end of URLs. Presently, the period character is the only disallowed character. A character is the last character in the URL if it is followed by is_whitespace() or if it's the last character in the string. Signed-off-by: kernelkind Tested-by: William Casarin Signed-off-by: William Casarin Signed-off-by: William Casarin --- nostrdb/src/content_parser.c | 53 ++++++++++++++++++++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index 9accf77f6..b6b38774c 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -363,6 +363,53 @@ int push_block(struct ndb_content_parser *p, struct note_block *block) return 0; } + + +static inline int next_char_is_whitespace(unsigned char *cur, unsigned char *end) { + unsigned char *next = cur + 1; + + if (next > end) + return 0; + + if (next == end) + return 1; + + return is_whitespace(*next); +} + +static inline int char_disallowed_at_end_url(char c) +{ + return c == '.' || c == ','; + +} + +static int is_final_url_char(unsigned char *cur, unsigned char *end) +{ + if (is_whitespace(*cur)) + return 1; + + if (next_char_is_whitespace(cur, end)) { + // next char is whitespace so this char could be the final char in the url + return char_disallowed_at_end_url(*cur); + } + + // next char isn't whitespace so it can't be a final char + return 0; +} + +static int consume_until_end_url(struct cursor *cur, int or_end) { + unsigned char *start = cur->p; + + while (cur->p < cur->end) { + if (is_final_url_char(cur->p, cur->end)) + return cur->p != start; + + cur->p++; + } + + return or_end; +} + static int consume_url_fragment(struct cursor *cur) { int c; @@ -376,7 +423,7 @@ static int consume_url_fragment(struct cursor *cur) cur->p++; - return consume_until_whitespace(cur, 1); + return consume_until_end_url(cur, 1); } static int consume_url_path(struct cursor *cur) @@ -393,7 +440,7 @@ static int consume_url_path(struct cursor *cur) while (cur->p < cur->end) { c = *cur->p; - if (c == '?' || c == '#' || is_whitespace(c)) { + if (c == '?' || c == '#' || is_final_url_char(cur->p, cur->end)) { return 1; } @@ -411,7 +458,7 @@ static int consume_url_host(struct cursor *cur) while (cur->p < cur->end) { c = *cur->p; // TODO: handle IDNs - if (is_alphanumeric(c) || c == '.' || c == '-') + if ((is_alphanumeric(c) || c == '.' || c == '-') && !is_final_url_char(cur->p, cur->end)) { count++; cur->p++; From bb599e4852594149e67be6a7aed1f29bdbce1f5e Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 28 Dec 2023 13:54:22 -0800 Subject: [PATCH 038/146] nostrdb/blocks: add note block iterator This adds an api that walks along and pulls compact note block data out of nostrdb. Signed-off-by: William Casarin --- nostrdb/Makefile | 2 +- nostrdb/src/block.c | 184 +++++++++++++++++++++++++++++++++++ nostrdb/src/block.h | 29 +++--- nostrdb/src/content_parser.c | 137 ++++---------------------- nostrdb/src/nostr_bech32.c | 4 +- nostrdb/src/nostr_bech32.h | 6 +- nostrdb/src/nostrdb.h | 37 +++++-- nostrdb/src/str_block.h | 2 +- 8 files changed, 248 insertions(+), 153 deletions(-) create mode 100644 nostrdb/src/block.c diff --git a/nostrdb/Makefile b/nostrdb/Makefile index a4836970f..037b8c97b 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -2,7 +2,7 @@ CFLAGS = -Wall -Wno-misleading-indentation -Wno-unused-function -Werror -O2 -g - HEADERS = deps/lmdb/lmdb.h deps/secp256k1/include/secp256k1.h src/sha256.h src/nostrdb.h src/cursor.h src/hex.h src/jsmn.h src/config.h src/sha256.h src/random.h src/memchr.h src/cpu.h src/nostr_bech32.h src/block.h src/str_block.h $(C_BINDINGS) FLATCC_SRCS=deps/flatcc/src/runtime/json_parser.c deps/flatcc/src/runtime/verifier.c deps/flatcc/src/runtime/builder.c deps/flatcc/src/runtime/emitter.c deps/flatcc/src/runtime/refmap.c BOLT11_SRCS = src/bolt11/bolt11.c src/bolt11/bech32.c src/bolt11/tal.c src/bolt11/talstr.c src/bolt11/take.c src/bolt11/list.c src/bolt11/utf8.c src/bolt11/amount.c src/bolt11/hash_u5.c -SRCS = src/nostrdb.c src/sha256.c src/invoice.c src/nostr_bech32.c src/content_parser.c $(BOLT11_SRCS) $(FLATCC_SRCS) +SRCS = src/nostrdb.c src/sha256.c src/invoice.c src/nostr_bech32.c src/content_parser.c src/block.c $(BOLT11_SRCS) $(FLATCC_SRCS) LDS = $(OBJS) $(ARS) OBJS = $(SRCS:.c=.o) DEPS = $(OBJS) $(HEADERS) $(ARS) diff --git a/nostrdb/src/block.c b/nostrdb/src/block.c new file mode 100644 index 000000000..35a9d4edb --- /dev/null +++ b/nostrdb/src/block.c @@ -0,0 +1,184 @@ + + +#include "nostrdb.h" +#include "block.h" +#include + +struct ndb_block_iterator { + const char *content; + struct ndb_blocks *blocks; + struct ndb_block block; + struct cursor cur; +}; + +int push_str_block(struct cursor *buf, const char *content, struct ndb_str_block *block) { + return cursor_push_varint(buf, block->str - content) && + cursor_push_varint(buf, block->len); +} + +int pull_str_block(struct cursor *buf, const char *content, struct ndb_str_block *block) { + uint32_t start; + if (!cursor_pull_varint_u32(buf, &start)) + return 0; + + block->str = content + start; + + return cursor_pull_varint_u32(buf, &block->len); +} + +static int pull_nostr_bech32_type(struct cursor *cur, enum nostr_bech32_type *type) +{ + uint64_t inttype; + if (!cursor_pull_varint(cur, &inttype)) + return 0; + + if (inttype > NOSTR_BECH32_KNOWN_TYPES) + return 0; + + *type = inttype; + return 1; +} + + +static int pull_bech32_mention(const char *content, struct cursor *cur, struct ndb_mention_bech32_block *block) { + uint16_t size; + unsigned char *start; + enum nostr_bech32_type type; + + start = cur->p; + + if (!pull_str_block(cur, content, &block->str)) + return 0; + + if (!cursor_pull_u16(cur, &size)) + return 0; + + if (!pull_nostr_bech32_type(cur, &type)) + return 0; + + if (!parse_nostr_bech32_buffer(cur, type, &block->bech32)) + return 0; + + cur->p = start + size; + return 1; +} + +static int pull_invoice(const char *content, struct cursor *cur, + struct ndb_invoice_block *block) +{ + if (!pull_str_block(cur, content, &block->invstr)) + return 0; + + return ndb_decode_invoice(cur, &block->invoice); +} + +static int pull_block_type(struct cursor *cur, enum ndb_block_type *type) +{ + uint32_t itype; + *type = 0; + if (!cursor_pull_varint_u32(cur, &itype)) + return 0; + + if (itype <= 0 || itype > NDB_NUM_BLOCK_TYPES) + return 0; + + *type = itype; + return 1; +} + +static int pull_block(const char *content, struct cursor *cur, struct ndb_block *block) +{ + unsigned char *start = cur->p; + + if (!pull_block_type(cur, &block->type)) + return 0; + + switch (block->type) { + case BLOCK_HASHTAG: + case BLOCK_TEXT: + case BLOCK_URL: + if (!pull_str_block(cur, content, &block->block.str)) + goto fail; + break; + + case BLOCK_MENTION_INDEX: + if (!cursor_pull_varint_u32(cur, &block->block.mention_index)) + goto fail; + break; + + case BLOCK_MENTION_BECH32: + if (!pull_bech32_mention(content, cur, &block->block.mention_bech32)) + goto fail; + break; + + case BLOCK_INVOICE: + // we only push invoice strs here + if (!pull_invoice(content, cur, &block->block.invoice)) + goto fail; + break; + } + + return 1; +fail: + cur->p = start; + return 0; +} + + +enum ndb_block_type ndb_get_block_type(struct ndb_block *block) { + return block->type; +} + +// BLOCK ITERATORS +struct ndb_block_iterator *ndb_blocks_iterate_start(const char *content, struct ndb_blocks *blocks) { + struct ndb_block_iterator *iter = malloc(sizeof(*iter)); + if (!iter) + return NULL; + + iter->blocks = blocks; + iter->content = content; + + make_cursor((unsigned char *)blocks->blocks, + blocks->blocks + blocks->blocks_size, &iter->cur); + + return iter; +} + +void ndb_blocks_iterate_free(struct ndb_block_iterator *iter) +{ + if (iter) + free(iter); +} + +struct ndb_block *ndb_blocks_iterate_next(struct ndb_block_iterator *iter) +{ + while (iter->cur.p < iter->cur.end) { + if (!pull_block(iter->content, &iter->cur, &iter->block)) + return NULL; + else + return &iter->block; + } + + return NULL; +} + +// STR BLOCKS +struct ndb_str_block *ndb_block_str(struct ndb_block *block) +{ + switch (block->type) { + case BLOCK_HASHTAG: + case BLOCK_TEXT: + case BLOCK_URL: + return &block->block.str; + case BLOCK_MENTION_INDEX: + return NULL; + case BLOCK_MENTION_BECH32: + return &block->block.mention_bech32.str; + case BLOCK_INVOICE: + return &block->block.invoice.invstr; + } + + return NULL; +} +//const char *ndb_str_block_ptr(struct ndb_str_block *); +//uint32_t ndb_str_block_len(struct ndb_str_block *); diff --git a/nostrdb/src/block.h b/nostrdb/src/block.h index c9266d383..bdd733076 100644 --- a/nostrdb/src/block.h +++ b/nostrdb/src/block.h @@ -4,12 +4,14 @@ #include "invoice.h" #include "str_block.h" +#include "cursor.h" #include "nostr_bech32.h" +#include "nostrdb.h" #include #pragma pack(push, 1) -struct ndb_note_blocks { +struct ndb_blocks { unsigned char version; unsigned char padding[3]; @@ -17,41 +19,34 @@ struct ndb_note_blocks { uint32_t num_blocks; uint32_t blocks_size; // future expansion - uint32_t reserved[4]; + uint32_t reserved[2]; unsigned char blocks[0]; // see ndb_block definition }; #pragma pack(pop) -enum block_type { - BLOCK_HASHTAG = 1, - BLOCK_TEXT = 2, - BLOCK_MENTION_INDEX = 3, - BLOCK_MENTION_BECH32 = 4, - BLOCK_URL = 5, - BLOCK_INVOICE = 6, -}; - - struct ndb_mention_bech32_block { - struct str_block str; + struct ndb_str_block str; struct nostr_bech32 bech32; }; struct ndb_invoice_block { - struct str_block invstr; + struct ndb_str_block invstr; struct ndb_invoice invoice; }; -struct note_block { - enum block_type type; +struct ndb_block { + enum ndb_block_type type; union { - struct str_block str; + struct ndb_str_block str; struct ndb_invoice_block invoice; struct ndb_mention_bech32_block mention_bech32; uint32_t mention_index; } block; }; +int push_str_block(struct cursor *buf, const char *content, struct ndb_str_block *block); +int pull_str_block(struct cursor *buf, const char *content, struct ndb_str_block *block); + #endif // NDB_BLOCK_H diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index b6b38774c..758926c9d 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -1,6 +1,7 @@ #include "cursor.h" #include "nostr_bech32.h" #include "block.h" +#include "nostrdb.h" #include "invoice.h" #include "bolt11/bolt11.h" #include "bolt11/bech32.h" @@ -8,16 +9,14 @@ #include #include "cursor.h" -#include "block.h" struct ndb_content_parser { int bech32_strs; struct cursor buffer; struct cursor content; - struct ndb_note_blocks *blocks; + struct ndb_blocks *blocks; }; - static int parse_digit(struct cursor *cur, int *digit) { int c; if ((c = peek_char(cur, 0)) == -1) @@ -34,7 +33,7 @@ static int parse_digit(struct cursor *cur, int *digit) { } -static int parse_mention_index(struct cursor *cur, struct note_block *block) { +static int parse_mention_index(struct cursor *cur, struct ndb_block *block) { int d1, d2, d3, ind; unsigned char *start = cur->p; @@ -65,7 +64,7 @@ static int parse_mention_index(struct cursor *cur, struct note_block *block) { return 1; } -static int parse_hashtag(struct cursor *cur, struct note_block *block) { +static int parse_hashtag(struct cursor *cur, struct ndb_block *block) { int c; unsigned char *start = cur->p; @@ -87,21 +86,6 @@ static int parse_hashtag(struct cursor *cur, struct note_block *block) { return 1; } -static int push_str_block(struct cursor *buf, const char *content, struct str_block *block) { - return cursor_push_varint(buf, block->str - content) && - cursor_push_varint(buf, block->len); -} - -static int pull_str_block(struct cursor *buf, const char *content, struct str_block *block) { - uint32_t start; - if (!cursor_pull_varint_u32(buf, &start)) - return 0; - - block->str = content + start; - - return cursor_pull_varint_u32(buf, &block->len); -} - // // decode and push a bech32 mention into our blocks output buffer. // @@ -116,7 +100,7 @@ static int pull_str_block(struct cursor *buf, const char *content, struct str_bl // This allows us to not duplicate all of the TLV encoding and decoding code // for our on-disk nostrdb format. // -static int push_bech32_mention(struct ndb_content_parser *p, struct str_block *bech32) +static int push_bech32_mention(struct ndb_content_parser *p, struct ndb_str_block *bech32) { // we decode the raw bech32 directly into the output buffer struct cursor u8, u5; @@ -178,7 +162,7 @@ static int push_bech32_mention(struct ndb_content_parser *p, struct str_block *b return 0; } -static int push_invoice_str(struct ndb_content_parser *p, struct str_block *str) +static int push_invoice_str(struct ndb_content_parser *p, struct ndb_str_block *str) { unsigned char *start; struct bolt11 *bolt11; @@ -204,97 +188,10 @@ static int push_invoice_str(struct ndb_content_parser *p, struct str_block *str) return 1; } -static int pull_nostr_bech32_type(struct cursor *cur, enum nostr_bech32_type *type) -{ - uint64_t inttype; - if (!cursor_pull_varint(cur, &inttype)) - return 0; - - if (inttype > NOSTR_BECH32_KNOWN_TYPES) - return 0; - - *type = inttype; - return 1; -} - -static int pull_bech32_mention(const char *content, struct cursor *cur, - struct ndb_mention_bech32_block *block) { - uint16_t size; - unsigned char *start; - enum nostr_bech32_type type; - - start = cur->p; - - if (!pull_str_block(cur, content, &block->str)) - return 0; - - if (!cursor_pull_u16(cur, &size)) - return 0; - - if (!pull_nostr_bech32_type(cur, &type)) - return 0; - - if (!parse_nostr_bech32_buffer(cur, type, &block->bech32)) - return 0; - - cur->p = start + size; - return 1; -} - -static int pull_invoice(const char *content, struct cursor *cur, - struct ndb_invoice_block *block) -{ - if (!pull_str_block(cur, content, &block->invstr)) - return 0; - - return ndb_decode_invoice(cur, &block->invoice); -} - -static int pull_block(const char *content, struct cursor *cur, struct note_block *block) -{ - unsigned char *start = cur->p; - uint32_t type; - - if (!cursor_pull_varint_u32(cur, &type)) - return 0; - - block->type = type; - - switch (block->type) { - case BLOCK_HASHTAG: - case BLOCK_TEXT: - case BLOCK_URL: - if (!pull_str_block(cur, content, &block->block.str)) - goto fail; - break; - - case BLOCK_MENTION_INDEX: - if (!cursor_pull_varint_u32(cur, &block->block.mention_index)) - goto fail; - break; - - case BLOCK_MENTION_BECH32: - if (!pull_bech32_mention(content, cur, &block->block.mention_bech32)) - goto fail; - break; - - case BLOCK_INVOICE: - // we only push invoice strs here - if (!pull_invoice(content, cur, &block->block.invoice)) - goto fail; - break; - } - - return 1; -fail: - cur->p = start; - return 0; -} - -int push_block(struct ndb_content_parser *p, struct note_block *block); +int push_block(struct ndb_content_parser *p, struct ndb_block *block); static int add_text_block(struct ndb_content_parser *p, const char *start, const char *end) { - struct note_block b; + struct ndb_block b; if (start == end) return 1; @@ -307,7 +204,7 @@ static int add_text_block(struct ndb_content_parser *p, const char *start, const } -int push_block(struct ndb_content_parser *p, struct note_block *block) +int push_block(struct ndb_content_parser *p, struct ndb_block *block) { unsigned char *start = p->buffer.p; @@ -473,7 +370,7 @@ static int consume_url_host(struct cursor *cur) return count != 0; } -static int parse_url(struct cursor *cur, struct note_block *block) { +static int parse_url(struct cursor *cur, struct ndb_block *block) { unsigned char *start = cur->p; unsigned char *host; unsigned char tmp[4096]; @@ -555,7 +452,7 @@ static int parse_url(struct cursor *cur, struct note_block *block) { return 1; } -static int parse_invoice(struct cursor *cur, struct note_block *block) { +static int parse_invoice(struct cursor *cur, struct ndb_block *block) { unsigned char *start, *end; // optional @@ -584,7 +481,7 @@ static int parse_invoice(struct cursor *cur, struct note_block *block) { } -static int parse_mention_bech32(struct cursor *cur, struct note_block *block) { +static int parse_mention_bech32(struct cursor *cur, struct ndb_block *block) { unsigned char *start = cur->p; enum nostr_bech32_type type; @@ -605,7 +502,7 @@ static int parse_mention_bech32(struct cursor *cur, struct note_block *block) { } static int add_text_then_block(struct ndb_content_parser *p, - struct note_block *block, + struct ndb_block *block, unsigned char **start, const unsigned char *pre_mention) { @@ -619,19 +516,19 @@ static int add_text_then_block(struct ndb_content_parser *p, int ndb_parse_content(unsigned char *buf, int buf_size, const char *content, int content_len, - struct ndb_note_blocks **blocks_p) + struct ndb_blocks **blocks_p) { int cp, c; struct ndb_content_parser parser; - struct note_block block; + struct ndb_block block; unsigned char *start, *pre_mention; make_cursor(buf, buf + buf_size, &parser.buffer); // allocate some space for the blocks header - *blocks_p = parser.blocks = (struct ndb_note_blocks *)buf; - parser.buffer.p += sizeof(struct ndb_note_blocks); + *blocks_p = parser.blocks = (struct ndb_blocks *)buf; + parser.buffer.p += sizeof(struct ndb_blocks); make_cursor((unsigned char *)content, (unsigned char*)content + content_len, &parser.content); diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index 013d22fba..c7ae6b4dd 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -8,6 +8,8 @@ #include "nostr_bech32.h" #include #include "cursor.h" +#include "str_block.h" +#include "nostrdb.h" #include "bolt11/bech32.h" #define MAX_TLVS 32 @@ -88,7 +90,7 @@ static int parse_nostr_bech32_nsec(struct cursor *cur, struct bech32_nsec *nsec) static int add_relay(struct relays *relays, struct nostr_tlv *tlv) { - struct str_block *str; + struct ndb_str_block *str; if (relays->num_relays + 1 > MAX_RELAYS) return 0; diff --git a/nostrdb/src/nostr_bech32.h b/nostrdb/src/nostr_bech32.h index db70dc710..2190d4c3f 100644 --- a/nostrdb/src/nostr_bech32.h +++ b/nostrdb/src/nostr_bech32.h @@ -14,7 +14,7 @@ #define MAX_RELAYS 24 struct relays { - struct str_block relays[MAX_RELAYS]; + struct ndb_str_block relays[MAX_RELAYS]; int num_relays; }; @@ -54,12 +54,12 @@ struct bech32_nprofile { struct bech32_naddr { struct relays relays; - struct str_block identifier; + struct ndb_str_block identifier; const unsigned char *pubkey; }; struct bech32_nrelay { - struct str_block relay; + struct ndb_str_block relay; }; struct nostr_bech32 { diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index d53711346..2def2a82f 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -20,7 +20,8 @@ struct ndb_json_parser; struct ndb; -struct ndb_note_blocks; +struct ndb_blocks; +struct ndb_block; struct ndb_note; struct ndb_tag; struct ndb_tags; @@ -198,12 +199,6 @@ struct ndb_builder { struct ndb_tag *current_tag; }; -/* -struct ndb_block_iterator { - struct note_block block; -}; -*/ - struct ndb_iterator { struct ndb_note *note; struct ndb_tag *tag; @@ -394,8 +389,30 @@ enum ndb_common_kind ndb_kind_to_common_kind(int kind); // CONTENT PARSER int ndb_parse_content(unsigned char *buf, int buf_size, const char *content, int content_len, - struct ndb_note_blocks **blocks_p); - -//int ndb_blocks_iterate_next(struct ndb_block_iterator *iter); + struct ndb_blocks **blocks_p); + +// BLOCKS +enum ndb_block_type { + BLOCK_HASHTAG = 1, + BLOCK_TEXT = 2, + BLOCK_MENTION_INDEX = 3, + BLOCK_MENTION_BECH32 = 4, + BLOCK_URL = 5, + BLOCK_INVOICE = 6, +}; +#define NDB_NUM_BLOCK_TYPES 6 + +enum ndb_block_type ndb_block_type(struct ndb_blocks *blocks); + +// BLOCK ITERATORS +struct ndb_block_iterator *ndb_blocks_iterate_start(const char *, struct ndb_blocks *); +void ndb_blocks_iterate_free(struct ndb_block_iterator *); +struct ndb_block *ndb_blocks_iterate_next(struct ndb_block_iterator *); + +// STR BLOCKS +enum ndb_block_type ndb_get_block_type(struct ndb_block *block); +struct ndb_str_block *ndb_block_str(struct ndb_block *); +const char *ndb_str_block_ptr(struct ndb_str_block *); +uint32_t ndb_str_block_len(struct ndb_str_block *); #endif diff --git a/nostrdb/src/str_block.h b/nostrdb/src/str_block.h index a7a8aec7d..16c6de014 100644 --- a/nostrdb/src/str_block.h +++ b/nostrdb/src/str_block.h @@ -4,7 +4,7 @@ #include -struct str_block { +struct ndb_str_block { const char *str; uint32_t len; }; From 94d504d00728e2f76a1b5189de18979b18e38f06 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 28 Dec 2023 14:46:17 -0800 Subject: [PATCH 039/146] nostrdb/bech32: fix big in bech32 size parsing Signed-off-by: William Casarin --- nostrdb/src/content_parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index 758926c9d..c4898df81 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -495,7 +495,7 @@ static int parse_mention_bech32(struct cursor *cur, struct ndb_block *block) { return 0; } - block->block.str.len = cur->p - start; + block->block.str.len = cur->p - (unsigned char*)block->block.str.str; block->type = BLOCK_MENTION_BECH32; return 1; From 47ca60aaa21afc12e4112ffd00b3dcefc2088ddd Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 28 Dec 2023 16:11:29 -0800 Subject: [PATCH 040/146] nostrdb/parser: fix bech32 block decoding Signed-off-by: William Casarin --- nostrdb/src/block.c | 34 ++++++++++++----- nostrdb/src/content_parser.c | 8 ++-- nostrdb/src/nostr_bech32.c | 16 +++++--- nostrdb/src/nostr_bech32.h | 66 +-------------------------------- nostrdb/src/nostrdb.h | 71 ++++++++++++++++++++++++++++++++++++ 5 files changed, 110 insertions(+), 85 deletions(-) diff --git a/nostrdb/src/block.c b/nostrdb/src/block.c index 35a9d4edb..80862d145 100644 --- a/nostrdb/src/block.c +++ b/nostrdb/src/block.c @@ -32,7 +32,7 @@ static int pull_nostr_bech32_type(struct cursor *cur, enum nostr_bech32_type *ty if (!cursor_pull_varint(cur, &inttype)) return 0; - if (inttype > NOSTR_BECH32_KNOWN_TYPES) + if (inttype <= 0 || inttype > NOSTR_BECH32_KNOWN_TYPES) return 0; *type = inttype; @@ -43,9 +43,7 @@ static int pull_nostr_bech32_type(struct cursor *cur, enum nostr_bech32_type *ty static int pull_bech32_mention(const char *content, struct cursor *cur, struct ndb_mention_bech32_block *block) { uint16_t size; unsigned char *start; - enum nostr_bech32_type type; - - start = cur->p; + struct cursor bech32; if (!pull_str_block(cur, content, &block->str)) return 0; @@ -53,12 +51,17 @@ static int pull_bech32_mention(const char *content, struct cursor *cur, struct n if (!cursor_pull_u16(cur, &size)) return 0; - if (!pull_nostr_bech32_type(cur, &type)) + if (!pull_nostr_bech32_type(cur, &block->bech32.type)) return 0; - if (!parse_nostr_bech32_buffer(cur, type, &block->bech32)) + make_cursor(cur->p, cur->p + size, &bech32); + + start = cur->p; + + if (!parse_nostr_bech32_buffer(&bech32, block->bech32.type, &block->bech32)) return 0; + //assert(bech32.p == start + size); cur->p = start + size; return 1; } @@ -153,10 +156,11 @@ void ndb_blocks_iterate_free(struct ndb_block_iterator *iter) struct ndb_block *ndb_blocks_iterate_next(struct ndb_block_iterator *iter) { while (iter->cur.p < iter->cur.end) { - if (!pull_block(iter->content, &iter->cur, &iter->block)) + if (!pull_block(iter->content, &iter->cur, &iter->block)) { return NULL; - else + } else { return &iter->block; + } } return NULL; @@ -180,5 +184,15 @@ struct ndb_str_block *ndb_block_str(struct ndb_block *block) return NULL; } -//const char *ndb_str_block_ptr(struct ndb_str_block *); -//uint32_t ndb_str_block_len(struct ndb_str_block *); + +const char *ndb_str_block_ptr(struct ndb_str_block *str_block) { + return str_block->str; +} + +uint32_t ndb_str_block_len(struct ndb_str_block *str_block) { + return str_block->len; +} + +struct nostr_bech32 *ndb_bech32_block(struct ndb_block *block) { + return &block->block.mention_bech32.bech32; +} diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index c4898df81..d7f9ecbe7 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -119,15 +119,15 @@ static int push_bech32_mention(struct ndb_content_parser *p, struct ndb_str_bloc // make sure to push the str block! if (!push_str_block(&p->buffer, (const char*)p->content.start, bech32)) goto fail; - - if (!cursor_push_varint(&p->buffer, type)) - goto fail; - + // // save a spot for the raw bech32 buffer size u8_size = (uint16_t*)p->buffer.p; if (!cursor_skip(&p->buffer, 2)) goto fail; + if (!cursor_push_varint(&p->buffer, type)) + goto fail; + if (!cursor_malloc_slice(&p->buffer, &u8, bech32->len)) goto fail; diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index c7ae6b4dd..2f32f9e13 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -88,11 +88,11 @@ static int parse_nostr_bech32_nsec(struct cursor *cur, struct bech32_nsec *nsec) return pull_bytes(cur, 32, &nsec->nsec); } -static int add_relay(struct relays *relays, struct nostr_tlv *tlv) +static int add_relay(struct ndb_relays *relays, struct nostr_tlv *tlv) { struct ndb_str_block *str; - if (relays->num_relays + 1 > MAX_RELAYS) + if (relays->num_relays + 1 > NDB_MAX_RELAYS) return 0; str = &relays->relays[relays->num_relays++]; @@ -116,11 +116,13 @@ static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *n switch (tlv.type) { case TLV_SPECIAL: - if (tlv.len != 32) return 0; + if (tlv.len != 32) + return 0; nevent->event_id = tlv.value; break; case TLV_AUTHOR: - if (tlv.len != 32) return 0; + if (tlv.len != 32) + return 0; nevent->pubkey = tlv.value; break; case TLV_RELAY: @@ -269,7 +271,7 @@ int parse_nostr_bech32(unsigned char *buf, int buflen, size_t parsed_len, u5_out_len, u8_out_len; enum nostr_bech32_type type; static const int MAX_PREFIX = 8; - struct cursor cur, bech32; + struct cursor cur, bech32, u8; make_cursor(buf, buf + buflen, &cur); make_cursor((unsigned char*)bech32_str, (unsigned char*)bech32_str + bech32_len, &bech32); @@ -296,6 +298,8 @@ int parse_nostr_bech32(unsigned char *buf, int buflen, if (!bech32_convert_bits(cur.p, &u8_out_len, 8, u5, u5_out_len, 5, 0)) return 0; - return parse_nostr_bech32_buffer(&cur, type, obj); + make_cursor(cur.p, cur.p + u8_out_len, &u8); + + return parse_nostr_bech32_buffer(&u8, type, obj); } diff --git a/nostrdb/src/nostr_bech32.h b/nostrdb/src/nostr_bech32.h index 2190d4c3f..6b1956b92 100644 --- a/nostrdb/src/nostr_bech32.h +++ b/nostrdb/src/nostr_bech32.h @@ -10,72 +10,8 @@ #include #include "str_block.h" +#include "nostrdb.h" #include "cursor.h" -#define MAX_RELAYS 24 - -struct relays { - struct ndb_str_block relays[MAX_RELAYS]; - int num_relays; -}; - -enum nostr_bech32_type { - NOSTR_BECH32_NOTE = 1, - NOSTR_BECH32_NPUB = 2, - NOSTR_BECH32_NPROFILE = 3, - NOSTR_BECH32_NEVENT = 4, - NOSTR_BECH32_NRELAY = 5, - NOSTR_BECH32_NADDR = 6, - NOSTR_BECH32_NSEC = 7, -}; -#define NOSTR_BECH32_KNOWN_TYPES 7 - -struct bech32_note { - const unsigned char *event_id; -}; - -struct bech32_npub { - const unsigned char *pubkey; -}; - -struct bech32_nsec { - const unsigned char *nsec; -}; - -struct bech32_nevent { - struct relays relays; - const unsigned char *event_id; - const unsigned char *pubkey; // optional -}; - -struct bech32_nprofile { - struct relays relays; - const unsigned char *pubkey; -}; - -struct bech32_naddr { - struct relays relays; - struct ndb_str_block identifier; - const unsigned char *pubkey; -}; - -struct bech32_nrelay { - struct ndb_str_block relay; -}; - -struct nostr_bech32 { - enum nostr_bech32_type type; - - union { - struct bech32_note note; - struct bech32_npub npub; - struct bech32_nsec nsec; - struct bech32_nevent nevent; - struct bech32_nprofile nprofile; - struct bech32_naddr naddr; - struct bech32_nrelay nrelay; - }; -}; - int parse_nostr_bech32_str(struct cursor *bech32, enum nostr_bech32_type *type); int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type); diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 2def2a82f..af5fa5040 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -18,6 +18,8 @@ #define ndb_debug(...) (void)0 #endif +#include "str_block.h" + struct ndb_json_parser; struct ndb; struct ndb_blocks; @@ -402,6 +404,72 @@ enum ndb_block_type { }; #define NDB_NUM_BLOCK_TYPES 6 +#define NDB_MAX_RELAYS 24 + +struct ndb_relays { + struct ndb_str_block relays[NDB_MAX_RELAYS]; + int num_relays; +}; + +enum nostr_bech32_type { + NOSTR_BECH32_NOTE = 1, + NOSTR_BECH32_NPUB = 2, + NOSTR_BECH32_NPROFILE = 3, + NOSTR_BECH32_NEVENT = 4, + NOSTR_BECH32_NRELAY = 5, + NOSTR_BECH32_NADDR = 6, + NOSTR_BECH32_NSEC = 7, +}; +#define NOSTR_BECH32_KNOWN_TYPES 7 + +struct bech32_note { + const unsigned char *event_id; +}; + +struct bech32_npub { + const unsigned char *pubkey; +}; + +struct bech32_nsec { + const unsigned char *nsec; +}; + +struct bech32_nevent { + struct ndb_relays relays; + const unsigned char *event_id; + const unsigned char *pubkey; // optional +}; + +struct bech32_nprofile { + struct ndb_relays relays; + const unsigned char *pubkey; +}; + +struct bech32_naddr { + struct ndb_relays relays; + struct ndb_str_block identifier; + const unsigned char *pubkey; +}; + +struct bech32_nrelay { + struct ndb_str_block relay; +}; + +struct nostr_bech32 { + enum nostr_bech32_type type; + + union { + struct bech32_note note; + struct bech32_npub npub; + struct bech32_nsec nsec; + struct bech32_nevent nevent; + struct bech32_nprofile nprofile; + struct bech32_naddr naddr; + struct bech32_nrelay nrelay; + }; +}; + + enum ndb_block_type ndb_block_type(struct ndb_blocks *blocks); // BLOCK ITERATORS @@ -414,5 +482,8 @@ enum ndb_block_type ndb_get_block_type(struct ndb_block *block); struct ndb_str_block *ndb_block_str(struct ndb_block *); const char *ndb_str_block_ptr(struct ndb_str_block *); uint32_t ndb_str_block_len(struct ndb_str_block *); +struct nostr_bech32 *ndb_bech32_block(struct ndb_block *block); + +// BECH32 BLOCKS #endif From ed2dba0f7a645ac2889578c63879dcd16d8b00ce Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 29 Dec 2023 09:38:34 -0800 Subject: [PATCH 041/146] nostrdb/invoice: fix crash in any-amount invoice parsing Signed-off-by: William Casarin --- nostrdb/src/invoice.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nostrdb/src/invoice.c b/nostrdb/src/invoice.c index 8bfca0ddd..622a290d6 100644 --- a/nostrdb/src/invoice.c +++ b/nostrdb/src/invoice.c @@ -11,8 +11,7 @@ int ndb_encode_invoice(struct cursor *cur, struct bolt11 *invoice) { if (!cursor_push_byte(cur, 1)) return 0; - // TODO: make cursor_cursor_push_varint uint64_t - if (!cursor_push_varint(cur, invoice->msat->millisatoshis)) + if (!cursor_push_varint(cur, invoice->msat == NULL ? 0 : invoice->msat->millisatoshis)) return 0; if (!cursor_push_varint(cur, invoice->timestamp)) From fe99e98690d4b6a3ebaf0ead10d25d74f69ff421 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 30 Dec 2023 06:27:05 -0800 Subject: [PATCH 042/146] nostrdb/header: move bech32 around Signed-off-by: William Casarin --- nostrdb/src/nostrdb.h | 152 +++++++++++++++++++++--------------------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index af5fa5040..7053a1b6d 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -284,6 +284,80 @@ struct ndb_text_search_results { int num_results; }; +enum ndb_block_type { + BLOCK_HASHTAG = 1, + BLOCK_TEXT = 2, + BLOCK_MENTION_INDEX = 3, + BLOCK_MENTION_BECH32 = 4, + BLOCK_URL = 5, + BLOCK_INVOICE = 6, +}; +#define NDB_NUM_BLOCK_TYPES 6 +#define NDB_MAX_RELAYS 24 + +struct ndb_relays { + struct ndb_str_block relays[NDB_MAX_RELAYS]; + int num_relays; +}; + +enum nostr_bech32_type { + NOSTR_BECH32_NOTE = 1, + NOSTR_BECH32_NPUB = 2, + NOSTR_BECH32_NPROFILE = 3, + NOSTR_BECH32_NEVENT = 4, + NOSTR_BECH32_NRELAY = 5, + NOSTR_BECH32_NADDR = 6, + NOSTR_BECH32_NSEC = 7, +}; +#define NOSTR_BECH32_KNOWN_TYPES 7 + +struct bech32_note { + const unsigned char *event_id; +}; + +struct bech32_npub { + const unsigned char *pubkey; +}; + +struct bech32_nsec { + const unsigned char *nsec; +}; + +struct bech32_nevent { + struct ndb_relays relays; + const unsigned char *event_id; + const unsigned char *pubkey; // optional +}; + +struct bech32_nprofile { + struct ndb_relays relays; + const unsigned char *pubkey; +}; + +struct bech32_naddr { + struct ndb_relays relays; + struct ndb_str_block identifier; + const unsigned char *pubkey; +}; + +struct bech32_nrelay { + struct ndb_str_block relay; +}; + +struct nostr_bech32 { + enum nostr_bech32_type type; + + union { + struct bech32_note note; + struct bech32_npub npub; + struct bech32_nsec nsec; + struct bech32_nevent nevent; + struct bech32_nprofile nprofile; + struct bech32_naddr naddr; + struct bech32_nrelay nrelay; + }; +}; + // CONFIG void ndb_default_config(struct ndb_config *); @@ -394,83 +468,9 @@ int ndb_parse_content(unsigned char *buf, int buf_size, struct ndb_blocks **blocks_p); // BLOCKS -enum ndb_block_type { - BLOCK_HASHTAG = 1, - BLOCK_TEXT = 2, - BLOCK_MENTION_INDEX = 3, - BLOCK_MENTION_BECH32 = 4, - BLOCK_URL = 5, - BLOCK_INVOICE = 6, -}; -#define NDB_NUM_BLOCK_TYPES 6 - -#define NDB_MAX_RELAYS 24 - -struct ndb_relays { - struct ndb_str_block relays[NDB_MAX_RELAYS]; - int num_relays; -}; - -enum nostr_bech32_type { - NOSTR_BECH32_NOTE = 1, - NOSTR_BECH32_NPUB = 2, - NOSTR_BECH32_NPROFILE = 3, - NOSTR_BECH32_NEVENT = 4, - NOSTR_BECH32_NRELAY = 5, - NOSTR_BECH32_NADDR = 6, - NOSTR_BECH32_NSEC = 7, -}; -#define NOSTR_BECH32_KNOWN_TYPES 7 - -struct bech32_note { - const unsigned char *event_id; -}; - -struct bech32_npub { - const unsigned char *pubkey; -}; - -struct bech32_nsec { - const unsigned char *nsec; -}; - -struct bech32_nevent { - struct ndb_relays relays; - const unsigned char *event_id; - const unsigned char *pubkey; // optional -}; - -struct bech32_nprofile { - struct ndb_relays relays; - const unsigned char *pubkey; -}; - -struct bech32_naddr { - struct ndb_relays relays; - struct ndb_str_block identifier; - const unsigned char *pubkey; -}; - -struct bech32_nrelay { - struct ndb_str_block relay; -}; - -struct nostr_bech32 { - enum nostr_bech32_type type; - - union { - struct bech32_note note; - struct bech32_npub npub; - struct bech32_nsec nsec; - struct bech32_nevent nevent; - struct bech32_nprofile nprofile; - struct bech32_naddr naddr; - struct bech32_nrelay nrelay; - }; -}; +enum ndb_block_type ndb_block_type(struct ndb_blocks *blocks); -enum ndb_block_type ndb_block_type(struct ndb_blocks *blocks); // BLOCK ITERATORS struct ndb_block_iterator *ndb_blocks_iterate_start(const char *, struct ndb_blocks *); @@ -482,8 +482,8 @@ enum ndb_block_type ndb_get_block_type(struct ndb_block *block); struct ndb_str_block *ndb_block_str(struct ndb_block *); const char *ndb_str_block_ptr(struct ndb_str_block *); uint32_t ndb_str_block_len(struct ndb_str_block *); -struct nostr_bech32 *ndb_bech32_block(struct ndb_block *block); // BECH32 BLOCKS +struct nostr_bech32 *ndb_bech32_block(struct ndb_block *block); #endif From 1e644c805bbae27a3c268f1d6ee834b173f49cae Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 30 Dec 2023 06:29:24 -0800 Subject: [PATCH 043/146] nostrdb/blocks: add total_size Fix this mistake that we have with ndb_notes where we don't know the total size of the object Signed-off-by: William Casarin --- nostrdb/src/block.c | 5 +++++ nostrdb/src/block.h | 3 ++- nostrdb/src/content_parser.c | 11 +++++++---- nostrdb/src/nostrdb.h | 1 + 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/nostrdb/src/block.c b/nostrdb/src/block.c index 80862d145..c2ef49d2c 100644 --- a/nostrdb/src/block.c +++ b/nostrdb/src/block.c @@ -196,3 +196,8 @@ uint32_t ndb_str_block_len(struct ndb_str_block *str_block) { struct nostr_bech32 *ndb_bech32_block(struct ndb_block *block) { return &block->block.mention_bech32.bech32; } + +// total size including padding +size_t ndb_blocks_total_size(struct ndb_blocks *blocks) { + return blocks->total_size; +} diff --git a/nostrdb/src/block.h b/nostrdb/src/block.h index bdd733076..93c98821b 100644 --- a/nostrdb/src/block.h +++ b/nostrdb/src/block.h @@ -19,7 +19,8 @@ struct ndb_blocks { uint32_t num_blocks; uint32_t blocks_size; // future expansion - uint32_t reserved[2]; + uint32_t total_size; + uint32_t reserved; unsigned char blocks[0]; // see ndb_block definition }; diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index d7f9ecbe7..6c961bb80 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -522,7 +522,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, struct ndb_content_parser parser; struct ndb_block block; - unsigned char *start, *pre_mention; + unsigned char *start, *pre_mention, *blocks_start; make_cursor(buf, buf + buf_size, &parser.buffer); @@ -537,7 +537,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, parser.blocks->num_blocks = 0; parser.blocks->blocks_size = 0; - start = parser.content.p; + blocks_start = start = parser.content.p; while (parser.content.p < parser.content.end) { cp = peek_char(&parser.content, -1); c = peek_char(&parser.content, 0); @@ -575,13 +575,16 @@ int ndb_parse_content(unsigned char *buf, int buf_size, return 0; } + parser.blocks->blocks_size = parser.buffer.p - blocks_start; + + // // pad to 8-byte alignment + // if (!cursor_align(&parser.buffer, 8)) return 0; assert((parser.buffer.p - parser.buffer.start) % 8 == 0); + parser.blocks->total_size = parser.buffer.p - parser.buffer.start; - parser.blocks->blocks_size = parser.buffer.p - parser.buffer.start; - return 1; } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 7053a1b6d..6eae9fee1 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -469,6 +469,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, // BLOCKS enum ndb_block_type ndb_block_type(struct ndb_blocks *blocks); +size_t ndb_blocks_total_size(struct ndb_blocks *blocks); From 6f3958a11b8535ae5fdb20f2effffbf9e14b7506 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 30 Dec 2023 06:30:32 -0800 Subject: [PATCH 044/146] nostrdb/blocks: add ndb_blocks_free In some situations we will need to have owned note blocks. For example, when we try to fetch note blocks from the database and it's not there yet. We will need to parse the content on the spot and return an owned copy, since it will not be immediately available in the database. Add a new flag field to note blocks that lets us know if it's owned by malloc or nostrdb. We the add a free function that checks this flag and frees the object if its set. If it is not set then it doesn nothing because it likely came from the database. Signed-off-by: William Casarin --- nostrdb/src/block.c | 7 +++++++ nostrdb/src/block.h | 5 ++++- nostrdb/src/content_parser.c | 1 + nostrdb/src/nostrdb.h | 2 ++ 4 files changed, 14 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/block.c b/nostrdb/src/block.c index c2ef49d2c..ec06b8106 100644 --- a/nostrdb/src/block.c +++ b/nostrdb/src/block.c @@ -201,3 +201,10 @@ struct nostr_bech32 *ndb_bech32_block(struct ndb_block *block) { size_t ndb_blocks_total_size(struct ndb_blocks *blocks) { return blocks->total_size; } + +void ndb_blocks_free(struct ndb_blocks *blocks) { + if ((blocks->flags & NDB_BLOCK_FLAG_OWNED) != NDB_BLOCK_FLAG_OWNED) + return; + + free(blocks); +} diff --git a/nostrdb/src/block.h b/nostrdb/src/block.h index 93c98821b..0af32d0b2 100644 --- a/nostrdb/src/block.h +++ b/nostrdb/src/block.h @@ -9,11 +9,14 @@ #include "nostrdb.h" #include +#define NDB_BLOCK_FLAG_OWNED 1 + #pragma pack(push, 1) struct ndb_blocks { unsigned char version; - unsigned char padding[3]; + unsigned char flags; + unsigned char padding[2]; uint32_t words; uint32_t num_blocks; diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index 6c961bb80..a83ba9332 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -536,6 +536,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, parser.blocks->words = 0; parser.blocks->num_blocks = 0; parser.blocks->blocks_size = 0; + parser.blocks->flags = 0; blocks_start = start = parser.content.p; while (parser.content.p < parser.content.end) { diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 6eae9fee1..05039a6d2 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -471,6 +471,8 @@ int ndb_parse_content(unsigned char *buf, int buf_size, enum ndb_block_type ndb_block_type(struct ndb_blocks *blocks); size_t ndb_blocks_total_size(struct ndb_blocks *blocks); +/// Free blocks if they are owned, safe to call on unowned blocks as well. +void ndb_blocks_free(struct ndb_blocks *blocks); // BLOCK ITERATORS From beaed9c6f815e37bd81c2c2444996d296ceeb56c Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 30 Dec 2023 06:33:12 -0800 Subject: [PATCH 045/146] nostrdb/blocks: actually set the note block version Version 1 to start Signed-off-by: William Casarin --- nostrdb/src/content_parser.c | 1 + 1 file changed, 1 insertion(+) diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index a83ba9332..7767a7271 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -537,6 +537,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, parser.blocks->num_blocks = 0; parser.blocks->blocks_size = 0; parser.blocks->flags = 0; + parser.blocks->version = 1; blocks_start = start = parser.content.p; while (parser.content.p < parser.content.end) { From f90a3638bbf229abe22990ae4c4185414aeecf1b Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 29 Dec 2023 09:40:02 -0800 Subject: [PATCH 046/146] nostrdb/blocks: write note blocks on ingest When ingesting notes, parse text/longform contents and store them in nostrdb. Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 166 +++++++++++++++++++++++++++++++++++++++--- nostrdb/src/nostrdb.h | 3 + 2 files changed, 160 insertions(+), 9 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index c50b73957..df3058387 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -10,6 +10,7 @@ #include "lmdb.h" #include "util.h" #include "cpu.h" +#include "block.h" #include "threadpool.h" #include "protected_queue.h" #include "memchr.h" @@ -127,6 +128,7 @@ enum ndb_writer_msgtype { NDB_WRITER_PROFILE, // write a profile to the db NDB_WRITER_DBMETA, // write ndb metadata NDB_WRITER_PROFILE_LAST_FETCH, // when profiles were last fetched + NDB_WRITER_BLOCKS, // write parsed note blocks }; // keys used for storing data in the NDB metadata database (NDB_DB_NDB_META) @@ -1141,6 +1143,12 @@ struct ndb_writer_last_fetch { uint64_t fetched_at; }; +// write note blocks +struct ndb_writer_blocks { + struct ndb_blocks *blocks; + uint64_t note_key; +}; + // The different types of messages that the writer thread can write to the // database struct ndb_writer_msg { @@ -1150,6 +1158,7 @@ struct ndb_writer_msg { struct ndb_writer_profile profile; struct ndb_writer_ndb_meta ndb_meta; struct ndb_writer_last_fetch last_fetch; + struct ndb_writer_blocks blocks; }; }; @@ -2650,8 +2659,48 @@ int ndb_text_search(struct ndb_txn *txn, const char *query, return 1; } +static void ndb_write_blocks(struct ndb_txn *txn, uint64_t note_key, + struct ndb_blocks *blocks) +{ + int rc; + MDB_val key, val; + + key.mv_data = ¬e_key; + key.mv_size = sizeof(note_key); + val.mv_data = blocks; + val.mv_size = ndb_blocks_total_size(blocks); + assert((val.mv_size % 8) == 0); + + if ((rc = mdb_put(txn->mdb_txn, txn->lmdb->dbs[NDB_DB_NOTE_BLOCKS], &key, &val, 0))) { + ndb_debug("write version to note_blocks failed: %s\n", + mdb_strerror(rc)); + return; + } +} + +static int ndb_write_new_blocks(struct ndb_txn *txn, struct ndb_note *note, + uint64_t note_key, unsigned char *scratch, + size_t scratch_size) +{ + size_t content_len; + const char *content; + struct ndb_blocks *blocks; + + content_len = ndb_note_content_length(note); + content = ndb_note_content(note); + + if (!ndb_parse_content(scratch, scratch_size, content, content_len, &blocks)) { + ndb_debug("failed to parse content '%.*s'\n", content_len, content); + return 0; + } + + ndb_write_blocks(txn, note_key, blocks); + return 1; +} + static uint64_t ndb_write_note(struct ndb_txn *txn, - struct ndb_writer_note *note) + struct ndb_writer_note *note, + unsigned char *scratch, size_t scratch_size) { int rc; uint64_t note_key; @@ -2687,10 +2736,14 @@ static uint64_t ndb_write_note(struct ndb_txn *txn, if (!ndb_write_note_kind_index(txn, note->note, note_key)) return 0; - // only do fulltext index on text and longform notes + // only parse content and do fulltext index on text and longform notes if (note->note->kind == 1 || note->note->kind == 30023) { if (!ndb_write_note_fulltext_index(txn, note->note, note_key)) return 0; + + // write note blocks + ndb_write_new_blocks(txn, note->note, note_key, scratch, + scratch_size); } if (note->note->kind == 7) { @@ -2727,6 +2780,9 @@ static void *ndb_writer_thread(void *data) { struct ndb_writer *writer = data; struct ndb_writer_msg msgs[THREAD_QUEUE_BATCH], *msg; + // 8mb scratch buffer for parsing note content + size_t scratch_size = 8 * 1024 * 1024; + unsigned char *scratch = malloc(scratch_size); int i, popped, done, any_note; uint64_t note_nkey; MDB_txn *mdb_txn = NULL; @@ -2747,6 +2803,7 @@ static void *ndb_writer_thread(void *data) case NDB_WRITER_PROFILE: any_note = 1; break; case NDB_WRITER_DBMETA: any_note = 1; break; case NDB_WRITER_PROFILE_LAST_FETCH: any_note = 1; break; + case NDB_WRITER_BLOCKS: any_note = 1; break; case NDB_WRITER_QUIT: break; } } @@ -2769,7 +2826,8 @@ static void *ndb_writer_thread(void *data) continue; case NDB_WRITER_PROFILE: note_nkey = - ndb_write_note(&txn, &msg->note); + ndb_write_note(&txn, &msg->note, + scratch, scratch_size); if (msg->profile.record.builder) { // only write if parsing didn't fail ndb_write_profile(&txn, &msg->profile, @@ -2777,7 +2835,8 @@ static void *ndb_writer_thread(void *data) } break; case NDB_WRITER_NOTE: - ndb_write_note(&txn, &msg->note); + ndb_write_note(&txn, &msg->note, scratch, + scratch_size); //printf("wrote note "); //print_hex(msg->note.note->id, 32); //printf("\n"); @@ -2785,6 +2844,10 @@ static void *ndb_writer_thread(void *data) case NDB_WRITER_DBMETA: ndb_write_version(&txn, msg->ndb_meta.version); break; + case NDB_WRITER_BLOCKS: + ndb_write_blocks(&txn, msg->blocks.note_key, + msg->blocks.blocks); + break; case NDB_WRITER_PROFILE_LAST_FETCH: ndb_writer_last_profile_fetch(&txn, msg->last_fetch.pubkey, @@ -2803,15 +2866,18 @@ static void *ndb_writer_thread(void *data) // free notes for (i = 0; i < popped; i++) { msg = &msgs[i]; - if (msg->type == NDB_WRITER_NOTE) + if (msg->type == NDB_WRITER_NOTE) { free(msg->note.note); - else if (msg->type == NDB_WRITER_PROFILE) { + } else if (msg->type == NDB_WRITER_PROFILE) { free(msg->profile.note.note); ndb_profile_record_builder_free(&msg->profile.record); + } else if (msg->type == NDB_WRITER_BLOCKS) { + ndb_blocks_free(msg->blocks.blocks); } } } + free(scratch); ndb_debug("quitting writer thread\n"); return NULL; } @@ -3059,24 +3125,30 @@ static int ndb_init_lmdb(const char *filename, struct ndb_lmdb *lmdb, size_t map mdb_set_compare(txn, lmdb->dbs[NDB_DB_NOTE_ID], ndb_tsid_compare); if ((rc = mdb_dbi_open(txn, "profile_pk", tsid_flags, &lmdb->dbs[NDB_DB_PROFILE_PK]))) { - fprintf(stderr, "mdb_dbi_open id failed: %s\n", mdb_strerror(rc)); + fprintf(stderr, "mdb_dbi_open profile_pk failed: %s\n", mdb_strerror(rc)); return 0; } mdb_set_compare(txn, lmdb->dbs[NDB_DB_PROFILE_PK], ndb_tsid_compare); if ((rc = mdb_dbi_open(txn, "note_kind", tsid_flags, &lmdb->dbs[NDB_DB_NOTE_KIND]))) { - fprintf(stderr, "mdb_dbi_open id failed: %s\n", mdb_strerror(rc)); + fprintf(stderr, "mdb_dbi_open note_kind failed: %s\n", mdb_strerror(rc)); return 0; } mdb_set_compare(txn, lmdb->dbs[NDB_DB_NOTE_KIND], ndb_u64_tsid_compare); if ((rc = mdb_dbi_open(txn, "note_text", MDB_CREATE | MDB_DUPSORT, &lmdb->dbs[NDB_DB_NOTE_TEXT]))) { - fprintf(stderr, "mdb_dbi_open id failed: %s\n", mdb_strerror(rc)); + fprintf(stderr, "mdb_dbi_open note_text failed: %s\n", mdb_strerror(rc)); return 0; } mdb_set_compare(txn, lmdb->dbs[NDB_DB_NOTE_TEXT], ndb_text_search_key_compare); + if ((rc = mdb_dbi_open(txn, "note_blocks", MDB_CREATE | MDB_INTEGERKEY, + &lmdb->dbs[NDB_DB_NOTE_BLOCKS]))) { + fprintf(stderr, "mdb_dbi_open note_blocks failed: %s\n", mdb_strerror(rc)); + return 0; + } + // Commit the transaction if ((rc = mdb_txn_commit(txn))) { fprintf(stderr, "mdb_txn_commit failed, error %d\n", rc); @@ -4590,9 +4662,85 @@ const char *ndb_db_name(enum ndb_dbs db) return "note_kind_index"; case NDB_DB_NOTE_TEXT: return "note_fulltext"; + case NDB_DB_NOTE_BLOCKS: + return "note_blocks"; case NDB_DBS: return "count"; } return "unknown"; } + +static struct ndb_blocks *ndb_note_to_blocks(struct ndb_note *note) +{ + const char *content; + size_t content_len; + struct ndb_blocks *blocks; + + content = ndb_note_content(note); + content_len = ndb_note_content_length(note); + + // something weird is going on + if (content_len >= INT32_MAX) + return NULL; + + unsigned char *buffer = malloc(content_len); + if (!buffer) + return NULL; + + if (!ndb_parse_content(buffer, content_len, content, content_len, &blocks)) { + free(buffer); + return NULL; + } + + blocks = realloc(blocks, ndb_blocks_total_size(blocks)); + if (blocks == NULL) + return NULL; + + blocks->flags |= NDB_BLOCK_FLAG_OWNED; + + return blocks; +} + +struct ndb_blocks *ndb_get_blocks_by_key(struct ndb *ndb, struct ndb_txn *txn, uint64_t note_key) +{ + struct ndb_blocks *blocks, *blocks_to_writer; + size_t blocks_size; + struct ndb_note *note; + size_t note_len; + + if ((blocks = ndb_lookup_by_key(txn, note_key, NDB_DB_NOTE_BLOCKS, ¬e_len))) { + return blocks; + } + + // If we don't have note blocks, let's lazily generate them. This is + // migration-friendly instead of doing them all at once + if (!(note = ndb_get_note_by_key(txn, note_key, ¬e_len))) { + // no note found, can't return note blocks + return NULL; + } + + if (!(blocks = ndb_note_to_blocks(note))) + return NULL; + + // send a copy to the writer + blocks_size = ndb_blocks_total_size(blocks); + blocks_to_writer = malloc(blocks_size); + memcpy(blocks_to_writer, blocks, blocks_size); + assert(blocks->flags & NDB_BLOCK_FLAG_OWNED); + + // we generated new blocks, let's store them in the DB + struct ndb_writer_blocks write_blocks = { + .blocks = blocks_to_writer, + .note_key = note_key + }; + + assert(write_blocks.blocks != blocks); + + struct ndb_writer_msg msg = { .type = NDB_WRITER_BLOCKS }; + msg.blocks = write_blocks; + + ndb_writer_queue_msg(&ndb->writer, &msg); + + return blocks; +} diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 05039a6d2..dcbc9b645 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -168,6 +168,7 @@ enum ndb_dbs { NDB_DB_PROFILE_LAST_FETCH, NDB_DB_NOTE_KIND, // note kind index NDB_DB_NOTE_TEXT, // note fulltext index + NDB_DB_NOTE_BLOCKS, // parsed note blocks for rendering NDB_DBS, }; @@ -474,6 +475,8 @@ size_t ndb_blocks_total_size(struct ndb_blocks *blocks); /// Free blocks if they are owned, safe to call on unowned blocks as well. void ndb_blocks_free(struct ndb_blocks *blocks); +// BLOCK DB +struct ndb_blocks *ndb_get_blocks_by_key(struct ndb *ndb, struct ndb_txn *txn, uint64_t note_key); // BLOCK ITERATORS struct ndb_block_iterator *ndb_blocks_iterate_start(const char *, struct ndb_blocks *); From 34d1a8c5056fc9a450e93f1c38b03ec801545f9c Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 30 Dec 2023 19:19:15 -0800 Subject: [PATCH 047/146] nostrdb/blocks: expose block iterator internals so we don't need heap allocation. we will be calling this a lot in tight render loops, we don't want to be allocating on each frame. Signed-off-by: William Casarin --- nostrdb/src/block.c | 36 +++++++++++------------------------- nostrdb/src/block.h | 20 -------------------- nostrdb/src/invoice.c | 1 + nostrdb/src/invoice.h | 10 +--------- nostrdb/src/nostrdb.h | 39 +++++++++++++++++++++++++++++++++++++-- 5 files changed, 50 insertions(+), 56 deletions(-) diff --git a/nostrdb/src/block.c b/nostrdb/src/block.c index ec06b8106..4f2c62e39 100644 --- a/nostrdb/src/block.c +++ b/nostrdb/src/block.c @@ -4,13 +4,6 @@ #include "block.h" #include -struct ndb_block_iterator { - const char *content; - struct ndb_blocks *blocks; - struct ndb_block block; - struct cursor cur; -}; - int push_str_block(struct cursor *buf, const char *content, struct ndb_str_block *block) { return cursor_push_varint(buf, block->str - content) && cursor_push_varint(buf, block->len); @@ -133,32 +126,25 @@ enum ndb_block_type ndb_get_block_type(struct ndb_block *block) { } // BLOCK ITERATORS -struct ndb_block_iterator *ndb_blocks_iterate_start(const char *content, struct ndb_blocks *blocks) { - struct ndb_block_iterator *iter = malloc(sizeof(*iter)); - if (!iter) - return NULL; - +void ndb_blocks_iterate_start(const char *content, struct ndb_blocks *blocks, struct ndb_block_iterator *iter) { iter->blocks = blocks; iter->content = content; - - make_cursor((unsigned char *)blocks->blocks, - blocks->blocks + blocks->blocks_size, &iter->cur); - - return iter; -} - -void ndb_blocks_iterate_free(struct ndb_block_iterator *iter) -{ - if (iter) - free(iter); + iter->p = blocks->blocks; } struct ndb_block *ndb_blocks_iterate_next(struct ndb_block_iterator *iter) { - while (iter->cur.p < iter->cur.end) { - if (!pull_block(iter->content, &iter->cur, &iter->block)) { + struct cursor cur; + cur.start = iter->blocks->blocks; + cur.p = iter->p; + cur.end = iter->blocks->blocks + iter->blocks->blocks_size; + + while (cur.p < cur.end) { + if (!pull_block(iter->content, &cur, &iter->block)) { + iter->p = cur.p; return NULL; } else { + iter->p = cur.p; return &iter->block; } } diff --git a/nostrdb/src/block.h b/nostrdb/src/block.h index 0af32d0b2..ed4b358b5 100644 --- a/nostrdb/src/block.h +++ b/nostrdb/src/block.h @@ -29,26 +29,6 @@ struct ndb_blocks { #pragma pack(pop) -struct ndb_mention_bech32_block { - struct ndb_str_block str; - struct nostr_bech32 bech32; -}; - -struct ndb_invoice_block { - struct ndb_str_block invstr; - struct ndb_invoice invoice; -}; - -struct ndb_block { - enum ndb_block_type type; - union { - struct ndb_str_block str; - struct ndb_invoice_block invoice; - struct ndb_mention_bech32_block mention_bech32; - uint32_t mention_index; - } block; -}; - int push_str_block(struct cursor *buf, const char *content, struct ndb_str_block *block); int pull_str_block(struct cursor *buf, const char *content, struct ndb_str_block *block); diff --git a/nostrdb/src/invoice.c b/nostrdb/src/invoice.c index 622a290d6..a5a6f3438 100644 --- a/nostrdb/src/invoice.c +++ b/nostrdb/src/invoice.c @@ -1,6 +1,7 @@ #include "cursor.h" #include "invoice.h" +#include "nostrdb.h" #include "bolt11/bolt11.h" #include "bolt11/amount.h" diff --git a/nostrdb/src/invoice.h b/nostrdb/src/invoice.h index 32c8adf2d..3e3e0c524 100644 --- a/nostrdb/src/invoice.h +++ b/nostrdb/src/invoice.h @@ -4,18 +4,10 @@ #include #include "cursor.h" +#include "nostrdb.h" struct bolt11; -struct ndb_invoice { - unsigned char version; - uint64_t amount; - uint64_t timestamp; - uint64_t expiry; - char *description; - unsigned char *description_hash; -}; - // ENCODING int ndb_encode_invoice(struct cursor *cur, struct bolt11 *invoice); int ndb_decode_invoice(struct cursor *cur, struct ndb_invoice *invoice); diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index dcbc9b645..1920bfd33 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -360,6 +360,42 @@ struct nostr_bech32 { }; +struct ndb_mention_bech32_block { + struct ndb_str_block str; + struct nostr_bech32 bech32; +}; + +struct ndb_invoice { + unsigned char version; + uint64_t amount; + uint64_t timestamp; + uint64_t expiry; + char *description; + unsigned char *description_hash; +}; + +struct ndb_invoice_block { + struct ndb_str_block invstr; + struct ndb_invoice invoice; +}; + +struct ndb_block { + enum ndb_block_type type; + union { + struct ndb_str_block str; + struct ndb_invoice_block invoice; + struct ndb_mention_bech32_block mention_bech32; + uint32_t mention_index; + } block; +}; + +struct ndb_block_iterator { + const char *content; + struct ndb_blocks *blocks; + struct ndb_block block; + unsigned char *p; +}; + // CONFIG void ndb_default_config(struct ndb_config *); void ndb_config_set_ingest_threads(struct ndb_config *config, int threads); @@ -479,8 +515,7 @@ void ndb_blocks_free(struct ndb_blocks *blocks); struct ndb_blocks *ndb_get_blocks_by_key(struct ndb *ndb, struct ndb_txn *txn, uint64_t note_key); // BLOCK ITERATORS -struct ndb_block_iterator *ndb_blocks_iterate_start(const char *, struct ndb_blocks *); -void ndb_blocks_iterate_free(struct ndb_block_iterator *); +void ndb_blocks_iterate_start(const char *, struct ndb_blocks *, struct ndb_block_iterator *); struct ndb_block *ndb_blocks_iterate_next(struct ndb_block_iterator *); // STR BLOCKS From 20ff40478118c5e5ff5c45df758c90ac6dbffa05 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 30 Dec 2023 19:20:38 -0800 Subject: [PATCH 048/146] nostrdb/fix clang compile issue Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index cd5cd3115..f1a528732 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -475,7 +475,7 @@ static inline int pull_bytes(struct cursor *cur, int count, const unsigned char } static inline int parse_str(struct cursor *cur, const char *str) { - int i; + unsigned int i; char c, cs; unsigned long len; From 00b36ea5af231b5d2d063d929f6c249ee1d84628 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 1 Jan 2024 09:40:22 -0800 Subject: [PATCH 049/146] nostrdb/fix: don't write the owned flag to the DB Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index df3058387..36e691e2a 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2665,6 +2665,9 @@ static void ndb_write_blocks(struct ndb_txn *txn, uint64_t note_key, int rc; MDB_val key, val; + // make sure we're not writing the owned flag to the db + blocks->flags &= ~NDB_BLOCK_FLAG_OWNED; + key.mv_data = ¬e_key; key.mv_size = sizeof(note_key); val.mv_data = blocks; From 6e60bb763c02219c94f75efed737f771888dd5b2 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 30 Dec 2023 21:20:40 -0800 Subject: [PATCH 050/146] nostrdb/blocks: add ndb_blocks_flags function Signed-off-by: William Casarin --- nostrdb/src/block.c | 4 ++++ nostrdb/src/nostrdb.h | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/block.c b/nostrdb/src/block.c index 4f2c62e39..e30c68939 100644 --- a/nostrdb/src/block.c +++ b/nostrdb/src/block.c @@ -194,3 +194,7 @@ void ndb_blocks_free(struct ndb_blocks *blocks) { free(blocks); } + +int ndb_blocks_flags(struct ndb_blocks *blocks) { + return blocks->flags; +} diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 1920bfd33..1e8b2dd97 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -505,7 +505,8 @@ int ndb_parse_content(unsigned char *buf, int buf_size, struct ndb_blocks **blocks_p); // BLOCKS -enum ndb_block_type ndb_block_type(struct ndb_blocks *blocks); +enum ndb_block_type ndb_get_block_type(struct ndb_block *block); +int ndb_blocks_flags(struct ndb_blocks *block); size_t ndb_blocks_total_size(struct ndb_blocks *blocks); /// Free blocks if they are owned, safe to call on unowned blocks as well. @@ -519,7 +520,6 @@ void ndb_blocks_iterate_start(const char *, struct ndb_blocks *, struct ndb_bloc struct ndb_block *ndb_blocks_iterate_next(struct ndb_block_iterator *); // STR BLOCKS -enum ndb_block_type ndb_get_block_type(struct ndb_block *block); struct ndb_str_block *ndb_block_str(struct ndb_block *); const char *ndb_str_block_ptr(struct ndb_str_block *); uint32_t ndb_str_block_len(struct ndb_str_block *); From 46b61e127cef5415ff5c25926ce92b4203ced2be Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 1 Jan 2024 14:39:17 -0800 Subject: [PATCH 051/146] nostrdb/disable lmdb download since we have this committed now Signed-off-by: William Casarin --- nostrdb/Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index 037b8c97b..9f96376d5 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -112,12 +112,12 @@ deps/flatcc_$(FLATCC_VER).tar.gz: deps/.dir # mv flatcc-$(FLATCC_VER) deps/flatcc # touch $@ -deps/lmdb/lmdb.h: deps/LMDB_$(LMDB_VER).tar.gz deps/.dir - tar xf $< - rm -rf deps/lmdb - mv lmdb-LMDB_$(LMDB_VER)/libraries/liblmdb deps/lmdb - rm -rf lmdb-LMDB_$(LMDB_VER) - touch $@ +#deps/lmdb/lmdb.h: deps/LMDB_$(LMDB_VER).tar.gz deps/.dir +# tar xf $< +# rm -rf deps/lmdb +# mv lmdb-LMDB_$(LMDB_VER)/libraries/liblmdb deps/lmdb +# rm -rf lmdb-LMDB_$(LMDB_VER) +# touch $@ deps/secp256k1/.git: deps/.dir @devtools/refresh-submodules.sh $(SUBMODULES) From 07cca84a3e7b68a4eeb65b64db1433bb2a21cac8 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sun, 26 Nov 2023 20:04:30 -0800 Subject: [PATCH 052/146] nostrdb/Initial nostrdb relay subscriptions This adds some initial code for the nostrdb relay subscription monitor. When new notes are written to the database, they are checked against active subscriptions. If any of the subscriptions are matched, the note primary key is written to the inbox queue for that subscription. We also add an ndb_wait_for_notes() method that simply waits for notes to be written by the subscription monitor. Changelog-Added: Added filter subscriptions Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 243 +++++++++++++++++++++++++++++++--- nostrdb/src/nostrdb.h | 19 +++ nostrdb/src/protected_queue.h | 4 +- 3 files changed, 245 insertions(+), 21 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 36e691e2a..75e49131f 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -33,9 +33,13 @@ // the maximum number of things threads pop and push in bulk static const int THREAD_QUEUE_BATCH = 4096; +// maximum number of active subscriptions +#define MAX_SUBSCRIPTIONS 32 + // the maximum size of inbox queues static const int DEFAULT_QUEUE_SIZE = 1000000; + // increase if we need bigger filters #define NDB_FILTER_PAGES 64 @@ -154,6 +158,7 @@ struct ndb_lmdb { struct ndb_writer { struct ndb_lmdb *lmdb; + struct ndb_monitor *monitor; void *queue_buf; int queue_buflen; @@ -170,16 +175,47 @@ struct ndb_ingester { ndb_ingest_filter_fn filter; }; +struct ndb_subscription { + uint64_t subid; + struct ndb_filter_group filter; + struct prot_queue inbox; +}; + +struct ndb_monitor { + struct ndb_subscription subscriptions[MAX_SUBSCRIPTIONS]; + int num_subscriptions; +}; struct ndb { struct ndb_lmdb lmdb; struct ndb_ingester ingester; + struct ndb_monitor monitor; struct ndb_writer writer; int version; uint32_t flags; // setting flags // lmdb environ handles, etc }; +// We get the KeyMatchResult function from the scan_cursor_type +// This function is used to match the key for the corresponding cursor type. +// For example, KIND scanners will look for a kind +enum ndb_scan_cursor_type { + NDB_SCAN_KIND, + NDB_SCAN_PK_KIND, + NDB_SCAN_ID, +}; + +// same idea as DBScan::ScanCursor in strfry +struct ndb_scan_cursor { + enum ndb_scan_cursor_type type; + int outstanding; +}; + +// same idea as DBScan in strfry +struct ndb_dbscan { + struct ndb_scan_cursor cursors[12]; + int num_cursors; +}; // A clustered key with an id and a timestamp struct ndb_tsid { @@ -828,6 +864,38 @@ void ndb_filter_end_field(struct ndb_filter *filter) filter->current = NULL; } +static void ndb_filter_group_init(struct ndb_filter_group *group) +{ + group->num_filters = 0; +} + +static int ndb_filter_group_add(struct ndb_filter_group *group, + struct ndb_filter *filter) +{ + if (group->num_filters + 1 >= NDB_MAX_FILTERS) + return 0; + group->filters[group->num_filters++] = filter; +} + +static int ndb_filter_group_matches(struct ndb_filter_group *group, + struct ndb_note *note) +{ + int i; + struct ndb_filter *filter; + + if (group->num_filters == 0) + return 1; + + for (i = 0; i < group->num_filters; i++) { + filter = group->filters[i]; + + if (ndb_filter_matches(filter, note)) + return 1; + } + + return 0; +} + static void ndb_make_search_key(struct ndb_search_key *key, unsigned char *id, uint64_t timestamp, const char *search) { @@ -2136,6 +2204,23 @@ static int ndb_write_note_id_index(struct ndb_txn *txn, struct ndb_note *note, return 1; } +/* +static int ndb_filter_query(struct ndb *ndb, struct ndb_filter *filter) +{ +} + +static int ndb_filter_cursors(struct ndb_filter *filter, struct ndb_cursor) +{ +} + +int ndb_query(struct ndb *ndb, struct ndb_filter **filters, int num_filters) +{ + struct ndb_filter_group group; + ndb_filter_group_init(&group); + +} +*/ + static int ndb_write_note_kind_index(struct ndb_txn *txn, struct ndb_note *note, uint64_t note_key) { @@ -2519,7 +2604,6 @@ int ndb_text_search(struct ndb_txn *txn, const char *query, MDB_val k, v; int i, j, keysize, saved_size, limit; MDB_cursor_op op, order_op; - //int num_note_ids; saved = NULL; ndb_text_search_results_init(results); @@ -2693,7 +2777,7 @@ static int ndb_write_new_blocks(struct ndb_txn *txn, struct ndb_note *note, content = ndb_note_content(note); if (!ndb_parse_content(scratch, scratch_size, content, content_len, &blocks)) { - ndb_debug("failed to parse content '%.*s'\n", content_len, content); + //ndb_debug("failed to parse content '%.*s'\n", content_len, content); return 0; } @@ -2779,22 +2863,64 @@ static void ndb_write_version(struct ndb_txn *txn, uint64_t version) //fprintf(stderr, "writing version %" PRIu64 "\n", version); } +struct written_note { + uint64_t note_id; + struct ndb_writer_note *note; +}; + +// When the data has been committed to the database, take all of the written +// notes, check them against subscriptions, and then write to the subscription +// inbox for all matching notes +static void ndb_notify_subscriptions(struct ndb_monitor *monitor, + struct written_note *wrote, int num_notes) +{ + int i, k; + struct written_note *written; + struct ndb_note *note; + struct ndb_subscription *sub; + + for (i = 0; i < monitor->num_subscriptions; i++) { + sub = &monitor->subscriptions[i]; + ndb_debug("checking subscription %d, %d notes\n", i, num_notes); + + for (k = 0; k < num_notes; k++) { + written = &wrote[k]; + note = written->note->note; + + if (ndb_filter_group_matches(&sub->filter, note)) { + ndb_debug("pushing note\n"); + if (!prot_queue_push(&sub->inbox, &written->note_id)) { + ndb_debug("couldn't push note to subscriber"); + } + } else { + ndb_debug("not pushing note\n"); + } + } + + } +} + static void *ndb_writer_thread(void *data) { struct ndb_writer *writer = data; struct ndb_writer_msg msgs[THREAD_QUEUE_BATCH], *msg; - // 8mb scratch buffer for parsing note content - size_t scratch_size = 8 * 1024 * 1024; - unsigned char *scratch = malloc(scratch_size); - int i, popped, done, any_note; + struct written_note written_notes[THREAD_QUEUE_BATCH]; + size_t scratch_size; + int i, popped, done, any_note, num_notes; uint64_t note_nkey; - MDB_txn *mdb_txn = NULL; struct ndb_txn txn; + unsigned char *scratch; + + // 8mb scratch buffer for parsing note content + scratch_size = 8 * 1024 * 1024; + scratch = malloc(scratch_size); + MDB_txn *mdb_txn = NULL; ndb_txn_from_mdb(&txn, writer->lmdb, mdb_txn); done = 0; while (!done) { txn.mdb_txn = NULL; + num_notes = 0; popped = prot_queue_pop_all(&writer->inbox, msgs, THREAD_QUEUE_BATCH); //ndb_debug("writer popped %d items\n", popped); @@ -2816,7 +2942,7 @@ static void *ndb_writer_thread(void *data) fprintf(stderr, "writer thread txn_begin failed"); // should definitely not happen unless DB is full // or something ? - assert(false); + continue; } for (i = 0; i < popped; i++) { @@ -2838,11 +2964,17 @@ static void *ndb_writer_thread(void *data) } break; case NDB_WRITER_NOTE: - ndb_write_note(&txn, &msg->note, scratch, - scratch_size); - //printf("wrote note "); - //print_hex(msg->note.note->id, 32); - //printf("\n"); + note_nkey = ndb_write_note(&txn, &msg->note, + scratch, + scratch_size); + + ndb_debug("note_nkey %" PRIu64 "\n", note_nkey); + if (note_nkey > 0) { + written_notes[num_notes++] = (struct written_note){ + .note_id = note_nkey, + .note = &msg->note, + }; + } break; case NDB_WRITER_DBMETA: ndb_write_version(&txn, msg->ndb_meta.version); @@ -2861,9 +2993,16 @@ static void *ndb_writer_thread(void *data) } // commit writes - if (any_note && !ndb_end_query(&txn)) { - fprintf(stderr, "writer thread txn commit failed"); - assert(false); + if (any_note) { + if (!ndb_end_query(&txn)) { + ndb_debug("writer thread txn commit failed\n"); + } else { + ndb_debug("notifying subscriptions\n"); + ndb_notify_subscriptions(writer->monitor, + written_notes, + num_notes); + // update subscriptions + } } // free notes @@ -2957,9 +3096,11 @@ static void *ndb_ingester_thread(void *data) } -static int ndb_writer_init(struct ndb_writer *writer, struct ndb_lmdb *lmdb) +static int ndb_writer_init(struct ndb_writer *writer, struct ndb_lmdb *lmdb, + struct ndb_monitor *monitor) { writer->lmdb = lmdb; + writer->monitor = monitor; writer->queue_buflen = sizeof(struct ndb_writer_msg) * DEFAULT_QUEUE_SIZE; writer->queue_buf = malloc(writer->queue_buflen); if (writer->queue_buf == NULL) { @@ -3213,6 +3354,11 @@ static int ndb_run_migrations(struct ndb *ndb) return 1; } +static void ndb_monitor_init(struct ndb_monitor *monitor) +{ + monitor->num_subscriptions = 0; +} + int ndb_init(struct ndb **pndb, const char *filename, const struct ndb_config *config) { struct ndb *ndb; @@ -3229,7 +3375,9 @@ int ndb_init(struct ndb **pndb, const char *filename, const struct ndb_config *c if (!ndb_init_lmdb(filename, &ndb->lmdb, config->mapsize)) return 0; - if (!ndb_writer_init(&ndb->writer, &ndb->lmdb)) { + ndb_monitor_init(&ndb->monitor); + + if (!ndb_writer_init(&ndb->writer, &ndb->lmdb, &ndb->monitor)) { fprintf(stderr, "ndb_writer_init failed\n"); return 0; } @@ -4747,3 +4895,62 @@ struct ndb_blocks *ndb_get_blocks_by_key(struct ndb *ndb, struct ndb_txn *txn, u return blocks; } + +struct ndb_subscription *ndb_find_subscription(struct ndb *ndb, uint64_t subid) +{ + struct ndb_subscription *sub, *tsub; + int i; + + for (i = 0, sub = NULL; i < ndb->monitor.num_subscriptions; i++) { + tsub = &ndb->monitor.subscriptions[i]; + if (tsub->subid == subid) { + sub = tsub; + break; + } + } + + return sub; +} + +int ndb_wait_for_notes(struct ndb *ndb, uint64_t subid, uint64_t *note_ids, + int note_id_capacity) +{ + struct ndb_subscription *sub; + if (!(sub = ndb_find_subscription(ndb, subid))) + return 0; + + return prot_queue_pop_all(&sub->inbox, note_ids, note_id_capacity); +} + +uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter_group *group) +{ + static uint64_t subids = 0; + struct ndb_subscription *sub; + int index; + size_t buflen; + uint64_t subid; + char *buf; + + if (ndb->monitor.num_subscriptions + 1 >= MAX_SUBSCRIPTIONS) { + fprintf(stderr, "too many subscriptions\n"); + return 0; + } + + index = ndb->monitor.num_subscriptions++; + sub = &ndb->monitor.subscriptions[index]; + subid = ++subids; + sub->subid = subid; + + memcpy(&sub->filter, group, sizeof(*group)); + + // 500k ought to be enough for anyone + buflen = sizeof(uint64_t) * 65536; + buf = malloc(buflen); + + if (!prot_queue_init(&sub->inbox, buf, buflen, sizeof(uint64_t))) { + fprintf(stderr, "failed to push prot queue\n"); + return 0; + } + + return subid; +} diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 1e8b2dd97..871c58cc5 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -4,6 +4,10 @@ #include #include "cursor.h" +// how many filters are allowed in a filter group +#define NDB_MAX_FILTERS 16 + +// maximum number of filters allowed in a filter group #define NDB_PACKED_STR 0x1 #define NDB_PACKED_ID 0x2 @@ -26,6 +30,7 @@ struct ndb_blocks; struct ndb_block; struct ndb_note; struct ndb_tag; +struct ndb_filter_group; struct ndb_tags; struct ndb_lmdb; union ndb_packed_str; @@ -236,6 +241,11 @@ struct ndb_filter { struct ndb_filter_elements *elements[NDB_NUM_FILTERS]; }; +struct ndb_filter_group { + struct ndb_filter *filters[NDB_MAX_FILTERS]; + int num_filters; +}; + struct ndb_config { int flags; int ingester_threads; @@ -462,12 +472,21 @@ void ndb_filter_reset(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); void ndb_filter_free(struct ndb_filter *); +// SUBSCRIPTIONS +uint64_t ndb_subscribe(struct ndb *, struct ndb_filter_group *); +int ndb_wait_for_notes(struct ndb *, uint64_t subid, uint64_t *note_ids, + int note_id_capacity); +int ndb_unsubscribe(int subid); + // FULLTEXT SEARCH int ndb_text_search(struct ndb_txn *txn, const char *query, struct ndb_text_search_results *, struct ndb_text_search_config *); void ndb_default_text_search_config(struct ndb_text_search_config *); void ndb_text_search_config_set_order(struct ndb_text_search_config *, enum ndb_search_order); void ndb_text_search_config_set_limit(struct ndb_text_search_config *, int limit); +// QUERY +void ndb_query(struct ndb_filter **, int num_filters); + // STATS int ndb_stat(struct ndb *ndb, struct ndb_stat *stat); void ndb_stat_counts_init(struct ndb_stat_counts *counts); diff --git a/nostrdb/src/protected_queue.h b/nostrdb/src/protected_queue.h index c2212b699..91335fac1 100644 --- a/nostrdb/src/protected_queue.h +++ b/nostrdb/src/protected_queue.h @@ -19,8 +19,6 @@ #include "cursor.h" #include "util.h" -#define BUFFER_SIZE 100 - /* * The prot_queue structure represents a thread-safe queue that can hold * generic data elements. @@ -53,7 +51,7 @@ static inline int prot_queue_init(struct prot_queue* q, void* buf, { // buffer elements must fit nicely in the buffer if (buflen == 0 || buflen % elem_size != 0) - return 0; + assert(!"queue elements don't fit nicely"); q->head = 0; q->tail = 0; From 2b32b39249e85ff1374a2046980afe06e526c5b2 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 12:27:45 -0800 Subject: [PATCH 053/146] nostrdb/test: switch reaction test to use subscriptions Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 6 ++++-- nostrdb/src/nostrdb.h | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 75e49131f..9a393d392 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -869,12 +869,14 @@ static void ndb_filter_group_init(struct ndb_filter_group *group) group->num_filters = 0; } -static int ndb_filter_group_add(struct ndb_filter_group *group, +int ndb_filter_group_add(struct ndb_filter_group *group, struct ndb_filter *filter) { - if (group->num_filters + 1 >= NDB_MAX_FILTERS) + if (group->num_filters + 1 > NDB_MAX_FILTERS) return 0; + group->filters[group->num_filters++] = filter; + return 1; } static int ndb_filter_group_matches(struct ndb_filter_group *group, diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 871c58cc5..6b883fc11 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -470,6 +470,7 @@ int ndb_filter_start_generic_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); void ndb_filter_reset(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); +int ndb_filter_group_add(struct ndb_filter_group *group, struct ndb_filter *f); void ndb_filter_free(struct ndb_filter *); // SUBSCRIPTIONS From 7dc287704826f1cad7d1f654efed1742b4c49c64 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 18:09:06 -0800 Subject: [PATCH 054/146] nostrdb/search: don't enforce sequential tokens This makes it a bit more flexible, but maybe we can add quoting in the future that re-enables this. Or maybe a search option Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 9a393d392..b263485dc 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2552,16 +2552,16 @@ static int ndb_text_search_next_word(MDB_cursor *cursor, MDB_cursor_op op, return 0; } + /* if (last_result) { if (result->key.word_index < last_result->key.word_index) { - /* fprintf(stderr, "skipping '%.*s' because it is before last result '%.*s'\n", result->key.str_len, result->key.str, last_result->key.str_len, last_result->key.str); - */ return 0; } } + */ return 1; } From c4c67427b4843b8359255523c75fa920baf17170 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 14:04:23 -0800 Subject: [PATCH 055/146] nostrdb/subs: subs and monitor cleanup We need to free these resources when we're done with them. Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 34 ++++++++++++++++++++++++++++++---- nostrdb/src/nostrdb.h | 2 +- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index b263485dc..af4b4a651 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -177,7 +177,7 @@ struct ndb_ingester { struct ndb_subscription { uint64_t subid; - struct ndb_filter_group filter; + struct ndb_filter_group group; struct prot_queue inbox; }; @@ -520,7 +520,7 @@ void ndb_filter_reset(struct ndb_filter *filter) filter->current = NULL; } -void ndb_filter_free(struct ndb_filter *filter) +void ndb_filter_destroy(struct ndb_filter *filter) { if (filter->elem_buf.start) free(filter->elem_buf.start); @@ -2889,7 +2889,7 @@ static void ndb_notify_subscriptions(struct ndb_monitor *monitor, written = &wrote[k]; note = written->note->note; - if (ndb_filter_group_matches(&sub->filter, note)) { + if (ndb_filter_group_matches(&sub->group, note)) { ndb_debug("pushing note\n"); if (!prot_queue_push(&sub->inbox, &written->note_id)) { ndb_debug("couldn't push note to subscriber"); @@ -3361,6 +3361,31 @@ static void ndb_monitor_init(struct ndb_monitor *monitor) monitor->num_subscriptions = 0; } +void ndb_filter_group_destroy(struct ndb_filter_group *group) +{ + struct ndb_filter *filter; + int i; + for (i = 0; i < group->num_filters; i++) { + filter = group->filters[i]; + ndb_filter_destroy(filter); + } +} + +static void ndb_monitor_destroy(struct ndb_monitor *monitor) +{ + int i; + struct ndb_subscription *sub; + struct ndb_filter_group *group; + + for (i = 0; i < monitor->num_subscriptions; i++) { + sub = &monitor->subscriptions[i]; + group = &sub->group; + + ndb_filter_group_destroy(group); + prot_queue_destroy(&sub->inbox); + } +} + int ndb_init(struct ndb **pndb, const char *filename, const struct ndb_config *config) { struct ndb *ndb; @@ -3408,6 +3433,7 @@ void ndb_destroy(struct ndb *ndb) // ingester depends on writer and must be destroyed first ndb_ingester_destroy(&ndb->ingester); ndb_writer_destroy(&ndb->writer); + ndb_monitor_destroy(&ndb->monitor); mdb_env_close(ndb->lmdb.env); @@ -4943,7 +4969,7 @@ uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter_group *group) subid = ++subids; sub->subid = subid; - memcpy(&sub->filter, group, sizeof(*group)); + memcpy(&sub->group, group, sizeof(*group)); // 500k ought to be enough for anyone buflen = sizeof(uint64_t) * 65536; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 6b883fc11..ce12c71da 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -471,7 +471,7 @@ int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); void ndb_filter_reset(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); int ndb_filter_group_add(struct ndb_filter_group *group, struct ndb_filter *f); -void ndb_filter_free(struct ndb_filter *); +void ndb_filter_destroy(struct ndb_filter *); // SUBSCRIPTIONS uint64_t ndb_subscribe(struct ndb *, struct ndb_filter_group *); From c923dc52be22e70a70c2771c43eca11e08adcd1c Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 14:43:35 -0800 Subject: [PATCH 056/146] nostrdb/filters: add ndb_filter_group_init function Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 2 +- nostrdb/src/nostrdb.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index af4b4a651..7328fa4f6 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -864,7 +864,7 @@ void ndb_filter_end_field(struct ndb_filter *filter) filter->current = NULL; } -static void ndb_filter_group_init(struct ndb_filter_group *group) +void ndb_filter_group_init(struct ndb_filter_group *group) { group->num_filters = 0; } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index ce12c71da..ffffd7560 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -470,6 +470,7 @@ int ndb_filter_start_generic_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); void ndb_filter_reset(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); +void ndb_filter_group_init(struct ndb_filter_group *group); int ndb_filter_group_add(struct ndb_filter_group *group, struct ndb_filter *f); void ndb_filter_destroy(struct ndb_filter *); From 8e47e6d7b987fbf7df71a84a7a56c436daed6425 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 14:44:06 -0800 Subject: [PATCH 057/146] nostrdb/debug: add a few more debug statement Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 7328fa4f6..767644f08 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -1790,7 +1790,7 @@ static int ndb_ingester_process_event(secp256k1_context *ctx, if ((int)note_size == -42) { // we already have this! - //ndb_debug("already have id??\n"); + ndb_debug("already have id??\n"); goto cleanup; } else if (note_size == 0) { ndb_debug("failed to parse '%.*s'\n", ev->len, ev->json); @@ -1810,6 +1810,7 @@ static int ndb_ingester_process_event(secp256k1_context *ctx, if (!ndb_ingester_process_note(ctx, note, note_size, out, ingester)) { + ndb_debug("failed to process note\n"); goto cleanup; } else { // we're done with the original json, free it @@ -1831,6 +1832,7 @@ static int ndb_ingester_process_event(secp256k1_context *ctx, if (!ndb_ingester_process_note(ctx, note, note_size, out, ingester)) { + ndb_debug("failed to process note\n"); goto cleanup; } else { // we're done with the original json, free it @@ -2924,7 +2926,7 @@ static void *ndb_writer_thread(void *data) txn.mdb_txn = NULL; num_notes = 0; popped = prot_queue_pop_all(&writer->inbox, msgs, THREAD_QUEUE_BATCH); - //ndb_debug("writer popped %d items\n", popped); + ndb_debug("writer popped %d items\n", popped); any_note = 0; for (i = 0 ; i < popped; i++) { @@ -2970,7 +2972,6 @@ static void *ndb_writer_thread(void *data) scratch, scratch_size); - ndb_debug("note_nkey %" PRIu64 "\n", note_nkey); if (note_nkey > 0) { written_notes[num_notes++] = (struct written_note){ .note_id = note_nkey, @@ -2999,7 +3000,7 @@ static void *ndb_writer_thread(void *data) if (!ndb_end_query(&txn)) { ndb_debug("writer thread txn commit failed\n"); } else { - ndb_debug("notifying subscriptions\n"); + ndb_debug("notifying subscriptions, %d notes\n", num_notes); ndb_notify_subscriptions(writer->monitor, written_notes, num_notes); @@ -3047,7 +3048,7 @@ static void *ndb_ingester_thread(void *data) any_event = 0; popped = prot_queue_pop_all(&thread->inbox, msgs, THREAD_QUEUE_BATCH); - //ndb_debug("ingester popped %d items\n", popped); + ndb_debug("ingester popped %d items\n", popped); for (i = 0; i < popped; i++) { msg = &msgs[i]; @@ -3085,7 +3086,7 @@ static void *ndb_ingester_thread(void *data) mdb_txn_abort(read_txn); if (to_write > 0) { - //ndb_debug("pushing %d events to write queue\n", to_write); + ndb_debug("pushing %d events to write queue\n", to_write); if (!ndb_writer_queue_msgs(ingester->writer, outs, to_write)) { ndb_debug("failed pushing %d events to write queue\n", to_write); } From 4aded468e4ebd23658015ad0b1c83b751b0073cf Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 14:44:19 -0800 Subject: [PATCH 058/146] nostrdb/subs: notify on profile notes as well We missed this in the original subscription code Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 767644f08..b589f2d3c 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2961,6 +2961,15 @@ static void *ndb_writer_thread(void *data) note_nkey = ndb_write_note(&txn, &msg->note, scratch, scratch_size); + if (note_nkey > 0) { + written_notes[num_notes++] = + (struct written_note){ + .note_id = note_nkey, + .note = &msg->note, + }; + } else { + ndb_debug("failed to write note\n"); + } if (msg->profile.record.builder) { // only write if parsing didn't fail ndb_write_profile(&txn, &msg->profile, From 831c9ffb6302e17ba44cac3ea8b807c1a7826730 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 14:44:54 -0800 Subject: [PATCH 059/146] nostrdb/subs: always fail when calling wait_for_notes on a subid of 0 this is an invalid subscription id Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index b589f2d3c..e441ef408 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -4954,6 +4954,11 @@ int ndb_wait_for_notes(struct ndb *ndb, uint64_t subid, uint64_t *note_ids, int note_id_capacity) { struct ndb_subscription *sub; + + // this is not a valid subscription id + if (subid == 0) + return 0; + if (!(sub = ndb_find_subscription(ndb, subid))) return 0; From 0a85a81e60d5f761a08d4b4fdf408de6058e40d7 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 16:34:04 -0800 Subject: [PATCH 060/146] nostrdb/filter: sort filter elements If they are sorted we can do binary search when matching filters like how strfry does it. Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 53 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index e441ef408..9c0bcbe66 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -804,6 +804,31 @@ static int ndb_generic_filter_matches(struct ndb_filter_elements *els, return 0; } +static int compare_ids(const void *pa, const void *pb) +{ + const unsigned char *a = *(const unsigned char **)pa; + const unsigned char *b = *(const unsigned char **)pb; + + return memcmp(a, b, 32); +} + +static int compare_kinds(const void *pa, const void *pb) +{ + + // NOTE: this should match type in `union ndb_filter_element` + uint64_t a = *(uint64_t *)pa; + uint64_t b = *(uint64_t *)pb; + + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } else { + return 0; + } +} + + // returns 1 if a filter matches a note int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) { @@ -860,8 +885,34 @@ int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) void ndb_filter_end_field(struct ndb_filter *filter) { - filter->elements[filter->num_elements++] = filter->current; + struct ndb_filter_elements *cur; + + cur = filter->current; + filter->elements[filter->num_elements++] = cur; + + // sort elements for binary search + switch (cur->field.type) { + case NDB_FILTER_IDS: + case NDB_FILTER_AUTHORS: + qsort(&cur->elements[0], cur->count, + sizeof(cur->elements[0].id), compare_ids); + break; + case NDB_FILTER_KINDS: + qsort(&cur->elements[0], cur->count, + sizeof(cur->elements[0].integer), compare_kinds); + break; + case NDB_FILTER_GENERIC: + // TODO: generic tag search sorting + break; + case NDB_FILTER_SINCE: + case NDB_FILTER_UNTIL: + case NDB_FILTER_LIMIT: + // don't need to sort these + break; + } + filter->current = NULL; + } void ndb_filter_group_init(struct ndb_filter_group *group) From f1a1a13a1c7f6974bf94e2316d4444499e8479ae Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 17:02:42 -0800 Subject: [PATCH 061/146] nostrdb/filter: use binary search for large contact list filters This is much more efficient than linear scans Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 9c0bcbe66..19956f317 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -845,17 +845,18 @@ int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) goto cont; } break; - // TODO: add filter hashtable for large id lists case NDB_FILTER_IDS: - for (j = 0; j < els->count; j++) { - if (!memcmp(els->elements[j].id, note->id, 32)) - goto cont; + unsigned char *id = note->id; + if (bsearch(&id, &els->elements[0], els->count, + sizeof(els->elements[0].id), compare_ids)) { + goto cont; } break; case NDB_FILTER_AUTHORS: - for (j = 0; j < els->count; j++) { - if (!memcmp(els->elements[j].id, note->pubkey, 32)) - goto cont; + unsigned char *pubkey = note->pubkey; + if (bsearch(&pubkey, &els->elements[0], els->count, + sizeof(els->elements[0].id), compare_ids)) { + goto cont; } break; case NDB_FILTER_GENERIC: From aad669a1046373a1853aa18d752b4de96778ddd8 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Jan 2024 17:57:37 -0800 Subject: [PATCH 062/146] nostrdb/filters: remove ndb_filter_group from public API We can just use a list of filters instead when subscribing Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 25 ++++++++++++++++++------- nostrdb/src/nostrdb.h | 13 +------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 19956f317..a42e854a5 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -35,6 +35,8 @@ static const int THREAD_QUEUE_BATCH = 4096; // maximum number of active subscriptions #define MAX_SUBSCRIPTIONS 32 +#define MAX_SCAN_CURSORS 12 +#define MAX_FILTERS 16 // the maximum size of inbox queues static const int DEFAULT_QUEUE_SIZE = 1000000; @@ -175,6 +177,11 @@ struct ndb_ingester { ndb_ingest_filter_fn filter; }; +struct ndb_filter_group { + struct ndb_filter *filters[MAX_FILTERS]; + int num_filters; +}; + struct ndb_subscription { uint64_t subid; struct ndb_filter_group group; @@ -213,7 +220,7 @@ struct ndb_scan_cursor { // same idea as DBScan in strfry struct ndb_dbscan { - struct ndb_scan_cursor cursors[12]; + struct ndb_scan_cursor cursors[MAX_SCAN_CURSORS]; int num_cursors; }; @@ -916,15 +923,15 @@ void ndb_filter_end_field(struct ndb_filter *filter) } -void ndb_filter_group_init(struct ndb_filter_group *group) +static void ndb_filter_group_init(struct ndb_filter_group *group) { group->num_filters = 0; } -int ndb_filter_group_add(struct ndb_filter_group *group, +static int ndb_filter_group_add(struct ndb_filter_group *group, struct ndb_filter *filter) { - if (group->num_filters + 1 > NDB_MAX_FILTERS) + if (group->num_filters + 1 > MAX_FILTERS) return 0; group->filters[group->num_filters++] = filter; @@ -5017,7 +5024,7 @@ int ndb_wait_for_notes(struct ndb *ndb, uint64_t subid, uint64_t *note_ids, return prot_queue_pop_all(&sub->inbox, note_ids, note_id_capacity); } -uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter_group *group) +uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter *filters, int num_filters) { static uint64_t subids = 0; struct ndb_subscription *sub; @@ -5036,8 +5043,12 @@ uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter_group *group) subid = ++subids; sub->subid = subid; - memcpy(&sub->group, group, sizeof(*group)); - + ndb_filter_group_init(&sub->group); + for (index = 0; index < num_filters; index++) { + if (!ndb_filter_group_add(&sub->group, &filters[index])) + return 0; + } + // 500k ought to be enough for anyone buflen = sizeof(uint64_t) * 65536; buf = malloc(buflen); diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index ffffd7560..6b0f2db97 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -4,9 +4,6 @@ #include #include "cursor.h" -// how many filters are allowed in a filter group -#define NDB_MAX_FILTERS 16 - // maximum number of filters allowed in a filter group #define NDB_PACKED_STR 0x1 #define NDB_PACKED_ID 0x2 @@ -30,7 +27,6 @@ struct ndb_blocks; struct ndb_block; struct ndb_note; struct ndb_tag; -struct ndb_filter_group; struct ndb_tags; struct ndb_lmdb; union ndb_packed_str; @@ -241,11 +237,6 @@ struct ndb_filter { struct ndb_filter_elements *elements[NDB_NUM_FILTERS]; }; -struct ndb_filter_group { - struct ndb_filter *filters[NDB_MAX_FILTERS]; - int num_filters; -}; - struct ndb_config { int flags; int ingester_threads; @@ -470,12 +461,10 @@ int ndb_filter_start_generic_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); void ndb_filter_reset(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); -void ndb_filter_group_init(struct ndb_filter_group *group); -int ndb_filter_group_add(struct ndb_filter_group *group, struct ndb_filter *f); void ndb_filter_destroy(struct ndb_filter *); // SUBSCRIPTIONS -uint64_t ndb_subscribe(struct ndb *, struct ndb_filter_group *); +uint64_t ndb_subscribe(struct ndb *, struct ndb_filter *, int num_filters); int ndb_wait_for_notes(struct ndb *, uint64_t subid, uint64_t *note_ids, int note_id_capacity); int ndb_unsubscribe(int subid); From c221ca5238058e223a6939edb926380d17657fa0 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Jan 2024 08:28:02 -0800 Subject: [PATCH 063/146] nostrdb/ocd: small cleanup Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index a42e854a5..819a406d2 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -741,7 +741,6 @@ int ndb_filter_add_id_element(struct ndb_filter *filter, const unsigned char *id return ndb_filter_add_element(filter, el); } -// TODO: build a hashtable so this is O(1) static int ndb_generic_filter_matches(struct ndb_filter_elements *els, struct ndb_note *note) { @@ -840,6 +839,7 @@ static int compare_kinds(const void *pa, const void *pb) int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) { int i, j; + unsigned char *id; struct ndb_filter_elements *els; for (i = 0; i < filter->num_elements; i++) { @@ -853,17 +853,17 @@ int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) } break; case NDB_FILTER_IDS: - unsigned char *id = note->id; + id = note->id; if (bsearch(&id, &els->elements[0], els->count, sizeof(els->elements[0].id), compare_ids)) { - goto cont; + continue; } break; case NDB_FILTER_AUTHORS: - unsigned char *pubkey = note->pubkey; - if (bsearch(&pubkey, &els->elements[0], els->count, + id = note->pubkey; + if (bsearch(&id, &els->elements[0], els->count, sizeof(els->elements[0].id), compare_ids)) { - goto cont; + continue; } break; case NDB_FILTER_GENERIC: From 008db55871bf0a08dff5124ad4a9ed95a24bed56 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Jan 2024 13:43:51 -0800 Subject: [PATCH 064/146] nostrdb/filter: don't allow adding id elements on kinds Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 819a406d2..ca79054c1 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -724,10 +724,10 @@ int ndb_filter_add_id_element(struct ndb_filter *filter, const unsigned char *id case NDB_FILTER_SINCE: case NDB_FILTER_UNTIL: case NDB_FILTER_LIMIT: + case NDB_FILTER_KINDS: return 0; case NDB_FILTER_IDS: case NDB_FILTER_AUTHORS: - case NDB_FILTER_KINDS: case NDB_FILTER_GENERIC: break; } From 328078d9e99f3641da17e649bcc8eede3eff5551 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Jan 2024 13:44:15 -0800 Subject: [PATCH 065/146] nostrdb/cursor: remove old array code Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index f1a528732..6d4bbf973 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -16,11 +16,6 @@ struct cursor { unsigned char *end; }; -struct array { - struct cursor cur; - unsigned int elem_size; -}; - static inline void reset_cursor(struct cursor *cursor) { cursor->p = cursor->start; @@ -39,12 +34,6 @@ static inline void make_cursor(unsigned char *start, unsigned char *end, struct cursor->end = end; } -static inline void make_array(struct array *a, unsigned char* start, unsigned char *end, unsigned int elem_size) -{ - make_cursor(start, end, &a->cur); - a->elem_size = elem_size; -} - static inline int cursor_eof(struct cursor *c) { return c->p == c->end; From 503eede962d76ef88927a827d9f57b6d3b1122b2 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Jan 2024 13:44:57 -0800 Subject: [PATCH 066/146] nostrdb/query: extract ndb_cursor_start This is useful for positioning LMDB cursors at the start of a query. We will be re-using this in the upcoming query code Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index ca79054c1..b3896a970 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -1493,6 +1493,27 @@ int ndb_write_last_profile_fetch(struct ndb *ndb, const unsigned char *pubkey, return ndb_writer_queue_msg(&ndb->writer, &msg); } + +// When doing cursor scans from greatest to lowest, this function positions the +// cursor at the first element before descending. MDB_SET_RANGE puts us right +// after the first element, so we have to go back one. +static int ndb_cursor_start(MDB_cursor *cur, MDB_val *k, MDB_val *v) +{ + // Position cursor at the next key greater than or equal to the specified key + if (mdb_cursor_get(cur, k, v, MDB_SET_RANGE)) { + // Failed :(. It could be the last element? + if (mdb_cursor_get(cur, k, v, MDB_LAST)) + return 0; + } else { + // if set range worked and our key exists, it should be + // the one right before this one + if (mdb_cursor_get(cur, k, v, MDB_PREV)) + return 0; + } + + return 1; +} + // get some value based on a clustered id key int ndb_get_tsid(struct ndb_txn *txn, enum ndb_dbs db, const unsigned char *id, MDB_val *val) @@ -1513,17 +1534,8 @@ int ndb_get_tsid(struct ndb_txn *txn, enum ndb_dbs db, const unsigned char *id, return 0; } - // Position cursor at the next key greater than or equal to the specified key - if (mdb_cursor_get(cur, &k, &v, MDB_SET_RANGE)) { - // Failed :(. It could be the last element? - if (mdb_cursor_get(cur, &k, &v, MDB_LAST)) - goto cleanup; - } else { - // if set range worked and our key exists, it should be - // the one right before this one - if (mdb_cursor_get(cur, &k, &v, MDB_PREV)) - goto cleanup; - } + if (!ndb_cursor_start(cur, &k, &v)) + goto cleanup; if (memcmp(k.mv_data, id, 32) == 0) { *val = v; From 4cf035d51cdf1028bdbab82bf5314165928ccf3c Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Jan 2024 14:38:21 -0800 Subject: [PATCH 067/146] nostrdb/cursor: fix bug when pushing last element Signed-off-by: William Casarin --- nostrdb/src/cursor.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index 6d4bbf973..21301c734 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -262,7 +262,7 @@ static inline int cursor_pop(struct cursor *cur, unsigned char *data, int len) static inline int cursor_push(struct cursor *cursor, unsigned char *data, int len) { - if (unlikely(cursor->p + len >= cursor->end)) { + if (unlikely(cursor->p + len > cursor->end)) { return 0; } From 4eea236025260eb567f4dff8b1f2f080b22cbc1d Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Jan 2024 14:39:34 -0800 Subject: [PATCH 068/146] nostrdb/Initial nostrdb queries Still a lot more work to do, but this is at least a proof of concept for querying nostrdb using filters. Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 237 ++++++++++++++++++++++++++++++++++++++++-- nostrdb/src/nostrdb.h | 6 +- 2 files changed, 234 insertions(+), 9 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index b3896a970..d34149d53 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -836,7 +836,8 @@ static int compare_kinds(const void *pa, const void *pb) // returns 1 if a filter matches a note -int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) +static int ndb_filter_matches_with(struct ndb_filter *filter, + struct ndb_note *note, int already_matched) { int i, j; unsigned char *id; @@ -845,6 +846,11 @@ int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) for (i = 0; i < filter->num_elements; i++) { els = filter->elements[i]; + // if we know we already match from a query scan result, + // we can skip this check + if ((1 << els->field.type) & already_matched) + continue; + switch (els->field.type) { case NDB_FILTER_KINDS: for (j = 0; j < els->count; j++) { @@ -891,6 +897,11 @@ int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) return 1; } +int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) +{ + return ndb_filter_matches_with(filter, note, 0); +} + void ndb_filter_end_field(struct ndb_filter *filter) { struct ndb_filter_elements *cur; @@ -2279,22 +2290,232 @@ static int ndb_write_note_id_index(struct ndb_txn *txn, struct ndb_note *note, return 1; } -/* -static int ndb_filter_query(struct ndb *ndb, struct ndb_filter *filter) +static int ndb_filter_group_add_filters(struct ndb_filter_group *group, + struct ndb_filter *filters, + int num_filters) +{ + int i; + + for (i = 0; i < num_filters; i++) { + if (!ndb_filter_group_add(group, &filters[i])) + return 0; + } + + return 1; +} + +static int ndb_filter_int(struct ndb_filter *filter, + enum ndb_filter_fieldtype typ, uint64_t *lim) { + int i; + struct ndb_filter_elements *els; + + for (i = 0; i < filter->num_elements; i++) { + els = filter->elements[i]; + if (els->field.type == typ) { + *lim = els->elements[0].integer; + return 1; + } + } + + return 0; } -static int ndb_filter_cursors(struct ndb_filter *filter, struct ndb_cursor) +static int ndb_filter_get_limit(struct ndb_filter *filter, uint64_t *lim) { + return ndb_filter_int(filter, NDB_FILTER_LIMIT, lim); } -int ndb_query(struct ndb *ndb, struct ndb_filter **filters, int num_filters) +static int ndb_filter_get_until(struct ndb_filter *filter, uint64_t *lim) { - struct ndb_filter_group group; - ndb_filter_group_init(&group); + return ndb_filter_int(filter, NDB_FILTER_UNTIL, lim); +} +static int ndb_filter_get_since(struct ndb_filter *filter, uint64_t *lim) +{ + return ndb_filter_int(filter, NDB_FILTER_SINCE, lim); +} + +static int ndb_query_filter_id(struct ndb_txn *txn, struct ndb_filter *filter, + MDB_cursor *cur, const unsigned char *id, + uint64_t since, int *matched, + struct ndb_query_result *res) +{ + MDB_val k, v; + uint64_t note_id; + struct ndb_tsid tsid, *ptsid; + + res->note = NULL; + + ndb_tsid_init(&tsid, (unsigned char *)id, since); + + k.mv_data = &tsid; + k.mv_size = sizeof(tsid); + + if (!ndb_cursor_start(cur, &k, &v)) + return 0; + + ptsid = (struct ndb_tsid *)k.mv_data; + note_id = *(uint64_t*)v.mv_data; + + if (memcmp(id, ptsid->id, 32) == 0) + *matched |= 1 << NDB_FILTER_AUTHORS; + else + return 1; + + // get the note because we need it to match against the filter + if (!(res->note = ndb_get_note_by_key(txn, note_id, NULL))) + return 1; + + // Sure this particular lookup matched the index query, but does it + // match the entire filter? Check! We also pass in things we've already + // matched via the filter so we don't have to check again. This can be + // pretty important for filters with a large number of entries. + if (!ndb_filter_matches_with(filter, res->note, *matched)) + return 1; + + return 2; +} + +static inline int push_query_result(struct cursor *res, + struct ndb_query_result *result) +{ + return cursor_push(res, (unsigned char*)result, sizeof(*result)); +} + +static int compare_query_results(const void *pa, const void *pb) +{ + struct ndb_query_result *a, *b; + + a = (struct ndb_query_result *)pa; + b = (struct ndb_query_result *)pb; + + if (a->note->created_at == b->note->created_at) { + return memcmp(a->note->id, b->note->id, 32); + } else if (a->note->created_at > b->note->created_at) { + return -1; + } else { + return 1; + } +} + +static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, + struct ndb_query_result *results, int capacity, + int *results_out) +{ + struct ndb_filter_elements *els; + struct ndb_query_result res; + struct cursor results_arr; + uint64_t limit, since, until; + const unsigned char *id; + int i, k, rc; + MDB_cursor *cur; + MDB_dbi db; + + since = UINT64_MAX; + until = UINT64_MAX; + limit = capacity; + + ndb_filter_get_limit(filter, &limit); + ndb_filter_get_since(filter, &since); + ndb_filter_get_until(filter, &until); + + limit = min(capacity, limit); + make_cursor((unsigned char *)results, + ((unsigned char *)results) + limit * sizeof(*results), + &results_arr); + + for (i = 0; i < filter->num_elements; i++) { + if (results_arr.p >= results_arr.end) + goto done; + + els = filter->elements[i]; + switch (els->field.type) { + case NDB_FILTER_IDS: + int matched = 0; + db = txn->lmdb->dbs[NDB_DB_NOTE_ID]; + if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) + return 0; + + // for each id in our ids filter, find in the db + for (k = 0; k < els->count; k++) { + if (results_arr.p >= results_arr.end) { + mdb_cursor_close(cur); + goto done; + } + + id = els->elements[k].id; + if (!(rc = ndb_query_filter_id(txn, filter, cur, + id, since, + &matched, + &res))) { + // there was a fatal error + mdb_cursor_close(cur); + return 0; + } + + // no match, just try next id + if (rc == 1) + continue; + + // rc > 1, matched! + if (!push_query_result(&results_arr, &res)) { + // this should never happen, but if + // it fails to push that means there + // are no more result to push, + // so just return + mdb_cursor_close(cur); + goto done; + } + + // look for more ids... continue! + } + + mdb_cursor_close(cur); + break; + case NDB_FILTER_AUTHORS: + break; + case NDB_FILTER_KINDS: + break; + case NDB_FILTER_GENERIC: + break; + case NDB_FILTER_SINCE: + case NDB_FILTER_UNTIL: + case NDB_FILTER_LIMIT: + break; + } + } + +done: + *results_out = cursor_count(&results_arr, sizeof(*results)); + return 1; +} + +int ndb_query(struct ndb_txn *txn, struct ndb_filter *filters, int num_filters, + struct ndb_query_result *results, int result_capacity, int *count) +{ + int i, out; + struct ndb_query_result *p = results; + + *count = 0; + + for (i = 0; i < num_filters; i++) { + if (!ndb_query_filter(txn, &filters[i], p, + result_capacity, &out)) { + return 0; + } + + *count += out; + p += out; + result_capacity -= out; + if (result_capacity <= 0) + break; + } + + // sort results + qsort(results, *count, sizeof(*results), compare_query_results); + return 1; } -*/ static int ndb_write_note_kind_index(struct ndb_txn *txn, struct ndb_note *note, uint64_t note_key) diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 6b0f2db97..4886a9c42 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -397,6 +397,10 @@ struct ndb_block_iterator { unsigned char *p; }; +struct ndb_query_result { + struct ndb_note *note; +}; + // CONFIG void ndb_default_config(struct ndb_config *); void ndb_config_set_ingest_threads(struct ndb_config *config, int threads); @@ -476,7 +480,7 @@ void ndb_text_search_config_set_order(struct ndb_text_search_config *, enum ndb_ void ndb_text_search_config_set_limit(struct ndb_text_search_config *, int limit); // QUERY -void ndb_query(struct ndb_filter **, int num_filters); +int ndb_query(struct ndb_txn *txn, struct ndb_filter *filters, int num_filters, struct ndb_query_result *results, int result_capacity, int *count); // STATS int ndb_stat(struct ndb *ndb, struct ndb_stat *stat); From 15ac0dca113903563c2deac30bfb5ca396147cd9 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Jan 2024 15:24:40 -0800 Subject: [PATCH 069/146] nostrdb/query: implement kind queries Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 88 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 83 insertions(+), 5 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index d34149d53..69ff8e375 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2336,6 +2336,46 @@ static int ndb_filter_get_since(struct ndb_filter *filter, uint64_t *lim) return ndb_filter_int(filter, NDB_FILTER_SINCE, lim); } +static int ndb_query_filter_kind(struct ndb_txn *txn, struct ndb_filter *filter, + MDB_cursor *cur, uint64_t kind, uint64_t since, + int *matched, struct ndb_query_result *res) +{ + MDB_val k, v; + uint64_t note_id; + struct ndb_u64_tsid tsid, *ptsid; + + res->note = NULL; + + ndb_u64_tsid_init(&tsid, kind, since); + + k.mv_data = &tsid; + k.mv_size = sizeof(tsid); + + if (!ndb_cursor_start(cur, &k, &v)) + return 0; + + ptsid = (struct ndb_u64_tsid *)k.mv_data; + note_id = *(uint64_t*)v.mv_data; + + if (kind == ptsid->u64) + *matched |= 1 << NDB_FILTER_KINDS; + else + return 1; + + // get the note because we need it to match against the filter + if (!(res->note = ndb_get_note_by_key(txn, note_id, NULL))) + return 1; + + // Sure this particular lookup matched the index query, but does it + // match the entire filter? Check! We also pass in things we've already + // matched via the filter so we don't have to check again. This can be + // pretty important for filters with a large number of entries. + if (!ndb_filter_matches_with(filter, res->note, *matched)) + return 1; + + return 2; +} + static int ndb_query_filter_id(struct ndb_txn *txn, struct ndb_filter *filter, MDB_cursor *cur, const unsigned char *id, uint64_t since, int *matched, @@ -2399,6 +2439,14 @@ static int compare_query_results(const void *pa, const void *pb) } } +static int query_is_full(struct cursor *results, int limit) +{ + if (results->p >= results->end) + return 1; + + return cursor_count(results, sizeof(struct ndb_query_result)) >= limit; +} + static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, struct ndb_query_result *results, int capacity, int *results_out) @@ -2406,9 +2454,9 @@ static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, struct ndb_filter_elements *els; struct ndb_query_result res; struct cursor results_arr; - uint64_t limit, since, until; + uint64_t limit, since, until, kind; const unsigned char *id; - int i, k, rc; + int i, k, rc, matched; MDB_cursor *cur; MDB_dbi db; @@ -2426,20 +2474,20 @@ static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, &results_arr); for (i = 0; i < filter->num_elements; i++) { - if (results_arr.p >= results_arr.end) + matched = 0; + if (query_is_full(&results_arr, limit)) goto done; els = filter->elements[i]; switch (els->field.type) { case NDB_FILTER_IDS: - int matched = 0; db = txn->lmdb->dbs[NDB_DB_NOTE_ID]; if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) return 0; // for each id in our ids filter, find in the db for (k = 0; k < els->count; k++) { - if (results_arr.p >= results_arr.end) { + if (query_is_full(&results_arr, limit)) { mdb_cursor_close(cur); goto done; } @@ -2476,6 +2524,36 @@ static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, case NDB_FILTER_AUTHORS: break; case NDB_FILTER_KINDS: + db = txn->lmdb->dbs[NDB_DB_NOTE_KIND]; + if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) + return 0; + + // for each id in our ids filter, find in the db + for (k = 0; k < els->count; k++) { + if (query_is_full(&results_arr, limit)) { + mdb_cursor_close(cur); + goto done; + } + + kind = els->elements[k].integer; + if (!(rc = ndb_query_filter_kind(txn, filter, + cur, kind, + since, + &matched, + &res))) { + // there was a fatal error + mdb_cursor_close(cur); + return 0; + } + + // rc > 1, matched! + if (!push_query_result(&results_arr, &res)) { + mdb_cursor_close(cur); + goto done; + } + } + + mdb_cursor_close(cur); break; case NDB_FILTER_GENERIC: break; From 9afd8f98392a1db41e4cd97405197972aa8d4452 Mon Sep 17 00:00:00 2001 From: shuoer86 <129674997+shuoer86@users.noreply.github.com> Date: Fri, 5 Jan 2024 23:26:30 +0800 Subject: [PATCH 070/146] nostrdb/Fix typos Closes: https://github.com/damus-io/nostrdb/pull/25 Signed-off-by: William Casarin --- nostrdb/src/bolt11/tal.h | 4 ++-- nostrdb/src/nostrdb.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nostrdb/src/bolt11/tal.h b/nostrdb/src/bolt11/tal.h index 8cd7670f6..8daafa3d8 100644 --- a/nostrdb/src/bolt11/tal.h +++ b/nostrdb/src/bolt11/tal.h @@ -387,7 +387,7 @@ tal_t *tal_parent(const tal_t *ctx); * @type: the type (should match type of @p!) * @p: the tal array to copy (or resized & reparented if take()) * - * The comon case of duplicating an entire tal array. + * The common case of duplicating an entire tal array. */ #define tal_dup_talarr(ctx, type, p) \ ((type *)tal_dup_talarr_((ctx), tal_typechk_(p, type *), \ @@ -418,7 +418,7 @@ tal_t *tal_parent(const tal_t *ctx); * @error_fn: called on errors or NULL (default is abort) * * The defaults are set up so tal functions never return NULL, but you - * can override erorr_fn to change that. error_fn can return, and is + * can override error_fn to change that. error_fn can return, and is * called if alloc_fn or resize_fn fail. * * If any parameter is NULL, that function is unchanged. diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 69ff8e375..875d81c1d 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -268,7 +268,7 @@ static int ndb_make_text_search_key(unsigned char *buf, int bufsize, // TODO: need update this to uint64_t // we push this first because our query function can pull this off - // quicky to check matches + // quickly to check matches if (!cursor_push_varint(&cur, (int32_t)note_id)) return 0; From 6458900a7e26c21cc174d801570e834948c1b5ce Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 5 Jan 2024 20:40:14 -0800 Subject: [PATCH 071/146] nostrdb/debug: add print_kind_keys helper I needed this for debugging kind queries Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 875d81c1d..b74812d7b 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -5010,6 +5010,28 @@ void ndb_config_set_ingest_filter(struct ndb_config *config, config->filter_context = filter_ctx; } +int ndb_print_kind_keys(struct ndb_txn *txn) +{ + MDB_cursor *cur; + MDB_val k, v; + int i; + struct ndb_u64_tsid *tsid; + + if (mdb_cursor_open(txn->mdb_txn, txn->lmdb->dbs[NDB_DB_NOTE_KIND], &cur)) + return 0; + + i = 1; + while (mdb_cursor_get(cur, &k, &v, MDB_NEXT) == 0) { + tsid = k.mv_data; + printf("%d note_kind %" PRIu64 " %" PRIu64 "\n", + i, tsid->u64, tsid->timestamp); + + i++; + } + + return 1; +} + // used by ndb.c int ndb_print_search_keys(struct ndb_txn *txn) { From a5a1e63c54fc75d4e5e93b2329eb5f53d73a73d7 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 5 Jan 2024 20:40:39 -0800 Subject: [PATCH 072/146] nostrdb/cleanup: remove old dbscan stuff Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index b74812d7b..d58a588d7 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -212,18 +212,6 @@ enum ndb_scan_cursor_type { NDB_SCAN_ID, }; -// same idea as DBScan::ScanCursor in strfry -struct ndb_scan_cursor { - enum ndb_scan_cursor_type type; - int outstanding; -}; - -// same idea as DBScan in strfry -struct ndb_dbscan { - struct ndb_scan_cursor cursors[MAX_SCAN_CURSORS]; - int num_cursors; -}; - // A clustered key with an id and a timestamp struct ndb_tsid { unsigned char id[32]; From 200a5b97185029d7b07b4105362319e6c614d770 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 5 Jan 2024 20:45:02 -0800 Subject: [PATCH 073/146] nostrdb/filter: rename FILTER_GENERIC to FILTER_TAG it's a bit more intuitive Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 32 ++++++++++++++++---------------- nostrdb/src/nostrdb.h | 6 +++--- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index d58a588d7..6278520c6 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -529,7 +529,7 @@ static const char *ndb_filter_field_name(enum ndb_filter_fieldtype field) case NDB_FILTER_IDS: return "ids"; case NDB_FILTER_AUTHORS: return "authors"; case NDB_FILTER_KINDS: return "kinds"; - case NDB_FILTER_GENERIC: return "generic"; + case NDB_FILTER_TAGS: return "tags"; case NDB_FILTER_SINCE: return "since"; case NDB_FILTER_UNTIL: return "until"; case NDB_FILTER_LIMIT: return "limit"; @@ -538,7 +538,7 @@ static const char *ndb_filter_field_name(enum ndb_filter_fieldtype field) return "unknown"; } -static int ndb_filter_start_field_impl(struct ndb_filter *filter, enum ndb_filter_fieldtype field, char generic) +static int ndb_filter_start_field_impl(struct ndb_filter *filter, enum ndb_filter_fieldtype field, char tag) { int i; struct ndb_filter_elements *els, *el; @@ -569,7 +569,7 @@ static int ndb_filter_start_field_impl(struct ndb_filter *filter, enum ndb_filte } els->field.type = field; - els->field.generic = generic; + els->field.tag = tag; els->field.elem_type = 0; els->count = 0; @@ -581,9 +581,9 @@ int ndb_filter_start_field(struct ndb_filter *filter, enum ndb_filter_fieldtype return ndb_filter_start_field_impl(filter, field, 0); } -int ndb_filter_start_generic_field(struct ndb_filter *filter, char tag) +int ndb_filter_start_tag_field(struct ndb_filter *filter, char tag) { - return ndb_filter_start_field_impl(filter, NDB_FILTER_GENERIC, tag); + return ndb_filter_start_field_impl(filter, NDB_FILTER_TAGS, tag); } static int ndb_filter_add_element(struct ndb_filter *filter, union ndb_filter_element el) @@ -612,7 +612,7 @@ static int ndb_filter_add_element(struct ndb_filter *filter, union ndb_filter_el if (filter->current->count != 0) return 0; break; - case NDB_FILTER_GENERIC: + case NDB_FILTER_TAGS: str = (const char *)filter->data_buf.p; if (!cursor_push_c_str(&filter->data_buf, el.string)) return 0; @@ -666,7 +666,7 @@ int ndb_filter_add_str_element(struct ndb_filter *filter, const char *str) case NDB_FILTER_AUTHORS: case NDB_FILTER_KINDS: return 0; - case NDB_FILTER_GENERIC: + case NDB_FILTER_TAGS: break; } @@ -686,7 +686,7 @@ int ndb_filter_add_int_element(struct ndb_filter *filter, uint64_t integer) switch (filter->current->field.type) { case NDB_FILTER_IDS: case NDB_FILTER_AUTHORS: - case NDB_FILTER_GENERIC: + case NDB_FILTER_TAGS: return 0; case NDB_FILTER_KINDS: case NDB_FILTER_SINCE: @@ -716,7 +716,7 @@ int ndb_filter_add_id_element(struct ndb_filter *filter, const unsigned char *id return 0; case NDB_FILTER_IDS: case NDB_FILTER_AUTHORS: - case NDB_FILTER_GENERIC: + case NDB_FILTER_TAGS: break; } @@ -729,8 +729,8 @@ int ndb_filter_add_id_element(struct ndb_filter *filter, const unsigned char *id return ndb_filter_add_element(filter, el); } -static int ndb_generic_filter_matches(struct ndb_filter_elements *els, - struct ndb_note *note) +static int ndb_tag_filter_matches(struct ndb_filter_elements *els, + struct ndb_note *note) { int i; union ndb_filter_element el; @@ -751,7 +751,7 @@ static int ndb_generic_filter_matches(struct ndb_filter_elements *els, continue; // do we have #e matching e (or p, etc) - if (str.str[0] != els->field.generic || str.str[1] != 0) + if (str.str[0] != els->field.tag || str.str[1] != 0) continue; str = ndb_tag_str(note, it->tag, 1); @@ -774,7 +774,7 @@ static int ndb_generic_filter_matches(struct ndb_filter_elements *els, // For some reason the element type is not set. It's // possible nothing was added to the generic filter? // Let's just fail here and log a note for debugging - fprintf(stderr, "UNUSUAL ndb_generic_filter_matches: have unknown element type %d\n", els->field.elem_type); + fprintf(stderr, "UNUSUAL ndb_tag_filter_matches: have unknown element type %d\n", els->field.elem_type); return 0; } @@ -860,8 +860,8 @@ static int ndb_filter_matches_with(struct ndb_filter *filter, continue; } break; - case NDB_FILTER_GENERIC: - if (ndb_generic_filter_matches(els, note)) + case NDB_FILTER_TAGS: + if (ndb_tag_filter_matches(els, note)) continue; break; case NDB_FILTER_SINCE: @@ -908,7 +908,7 @@ void ndb_filter_end_field(struct ndb_filter *filter) qsort(&cur->elements[0], cur->count, sizeof(cur->elements[0].integer), compare_kinds); break; - case NDB_FILTER_GENERIC: + case NDB_FILTER_TAGS: // TODO: generic tag search sorting break; case NDB_FILTER_SINCE: diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 4886a9c42..7923ba322 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -138,7 +138,7 @@ enum ndb_filter_fieldtype { NDB_FILTER_IDS = 1, NDB_FILTER_AUTHORS = 2, NDB_FILTER_KINDS = 3, - NDB_FILTER_GENERIC = 4, + NDB_FILTER_TAGS = 4, NDB_FILTER_SINCE = 5, NDB_FILTER_UNTIL = 6, NDB_FILTER_LIMIT = 7, @@ -220,7 +220,7 @@ union ndb_filter_element { struct ndb_filter_field { enum ndb_filter_fieldtype type; enum ndb_generic_element_type elem_type; - char generic; // for generic queries like #t + char tag; // for generic queries like #t }; struct ndb_filter_elements { @@ -461,7 +461,7 @@ int ndb_filter_add_id_element(struct ndb_filter *, const unsigned char *id); int ndb_filter_add_int_element(struct ndb_filter *, uint64_t integer); int ndb_filter_add_str_element(struct ndb_filter *, const char *str); int ndb_filter_start_field(struct ndb_filter *, enum ndb_filter_fieldtype); -int ndb_filter_start_generic_field(struct ndb_filter *, char tag); +int ndb_filter_start_tag_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); void ndb_filter_reset(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); From 108ec68690a5a43a51e7de07b173568c4c0dd7bc Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 5 Jan 2024 20:46:02 -0800 Subject: [PATCH 074/146] nostrdb/index: make sure kind index is DUPSORT + INTEGERDUP We will probably need a migration for this? Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 6278520c6..fef0c374b 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -3644,7 +3644,9 @@ static int ndb_init_lmdb(const char *filename, struct ndb_lmdb *lmdb, size_t map } mdb_set_compare(txn, lmdb->dbs[NDB_DB_PROFILE_PK], ndb_tsid_compare); - if ((rc = mdb_dbi_open(txn, "note_kind", tsid_flags, &lmdb->dbs[NDB_DB_NOTE_KIND]))) { + if ((rc = mdb_dbi_open(txn, "note_kind", + MDB_CREATE | MDB_DUPSORT | MDB_INTEGERDUP | MDB_DUPFIXED, + &lmdb->dbs[NDB_DB_NOTE_KIND]))) { fprintf(stderr, "mdb_dbi_open note_kind failed: %s\n", mdb_strerror(rc)); return 0; } From ea08f352e8f16591b7187d62962b021b690c3cce Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 5 Jan 2024 20:45:45 -0800 Subject: [PATCH 075/146] nostrdb/Query Plans Instead of running queries off filters directly, we do some simple heuristics and determine a reasonable query plan for the given filter. To test this, also add a kind index query plan and add a test for it. We still need tag, author, and created_at index scans. This is up next! Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 413 ++++++++++++++++++++++-------------------- nostrdb/src/nostrdb.h | 5 + 2 files changed, 220 insertions(+), 198 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index fef0c374b..0772c37ad 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -203,13 +203,22 @@ struct ndb { // lmdb environ handles, etc }; -// We get the KeyMatchResult function from the scan_cursor_type -// This function is used to match the key for the corresponding cursor type. -// For example, KIND scanners will look for a kind -enum ndb_scan_cursor_type { - NDB_SCAN_KIND, - NDB_SCAN_PK_KIND, - NDB_SCAN_ID, +/// +/// Query Plans +/// +/// There are general strategies for performing certain types of query +/// depending on the filter. For example, for large contact list queries +/// with many authors, we simply do a descending scan on created_at +/// instead of doing 1000s of pubkey scans. +/// +/// Query plans are calculated from filters via `ndb_filter_plan` +/// +enum ndb_query_plan { + NDB_PLAN_KINDS, + NDB_PLAN_IDS, + NDB_PLAN_AUTHORS, + NDB_PLAN_CREATED, + NDB_PLAN_TAGS, }; // A clustered key with an id and a timestamp @@ -1498,7 +1507,8 @@ int ndb_write_last_profile_fetch(struct ndb *ndb, const unsigned char *pubkey, // after the first element, so we have to go back one. static int ndb_cursor_start(MDB_cursor *cur, MDB_val *k, MDB_val *v) { - // Position cursor at the next key greater than or equal to the specified key + // Position cursor at the next key greater than or equal to the + // specified key if (mdb_cursor_get(cur, k, v, MDB_SET_RANGE)) { // Failed :(. It could be the last element? if (mdb_cursor_get(cur, k, v, MDB_LAST)) @@ -2292,8 +2302,9 @@ static int ndb_filter_group_add_filters(struct ndb_filter_group *group, return 1; } -static int ndb_filter_int(struct ndb_filter *filter, - enum ndb_filter_fieldtype typ, uint64_t *lim) + +static struct ndb_filter_elements * +ndb_filter_get_elems(struct ndb_filter *filter, enum ndb_filter_fieldtype typ) { int i; struct ndb_filter_elements *els; @@ -2301,259 +2312,265 @@ static int ndb_filter_int(struct ndb_filter *filter, for (i = 0; i < filter->num_elements; i++) { els = filter->elements[i]; if (els->field.type == typ) { - *lim = els->elements[0].integer; - return 1; + return els; } } - return 0; + return NULL; } -static int ndb_filter_get_limit(struct ndb_filter *filter, uint64_t *lim) +static union ndb_filter_element * +ndb_filter_get_elem(struct ndb_filter *filter, enum ndb_filter_fieldtype typ) { - return ndb_filter_int(filter, NDB_FILTER_LIMIT, lim); + struct ndb_filter_elements *els; + if ((els = ndb_filter_get_elems(filter, typ))) + return &els->elements[0]; + return NULL; } -static int ndb_filter_get_until(struct ndb_filter *filter, uint64_t *lim) +static uint64_t *ndb_filter_get_int(struct ndb_filter *filter, + enum ndb_filter_fieldtype typ) { - return ndb_filter_int(filter, NDB_FILTER_UNTIL, lim); + union ndb_filter_element *el = NULL; + if (!(el = ndb_filter_get_elem(filter, typ))) + return 0; + return &el->integer; } -static int ndb_filter_get_since(struct ndb_filter *filter, uint64_t *lim) +static inline int push_query_result(struct ndb_query_results *results, + struct ndb_query_result *result) { - return ndb_filter_int(filter, NDB_FILTER_SINCE, lim); + return cursor_push(&results->cur, (unsigned char*)result, sizeof(*result)); } -static int ndb_query_filter_kind(struct ndb_txn *txn, struct ndb_filter *filter, - MDB_cursor *cur, uint64_t kind, uint64_t since, - int *matched, struct ndb_query_result *res) +static int compare_query_results(const void *pa, const void *pb) { - MDB_val k, v; - uint64_t note_id; - struct ndb_u64_tsid tsid, *ptsid; - - res->note = NULL; - - ndb_u64_tsid_init(&tsid, kind, since); - - k.mv_data = &tsid; - k.mv_size = sizeof(tsid); - - if (!ndb_cursor_start(cur, &k, &v)) - return 0; + struct ndb_query_result *a, *b; - ptsid = (struct ndb_u64_tsid *)k.mv_data; - note_id = *(uint64_t*)v.mv_data; + a = (struct ndb_query_result *)pa; + b = (struct ndb_query_result *)pb; - if (kind == ptsid->u64) - *matched |= 1 << NDB_FILTER_KINDS; - else + if (a->note->created_at == b->note->created_at) { + return memcmp(a->note->id, b->note->id, 32); + } else if (a->note->created_at > b->note->created_at) { + return -1; + } else { return 1; + } +} - // get the note because we need it to match against the filter - if (!(res->note = ndb_get_note_by_key(txn, note_id, NULL))) - return 1; +static void ndb_query_result_init(struct ndb_query_result *res, + struct ndb_note *note, + uint64_t note_id) +{ + *res = (struct ndb_query_result){ + .note_id = note_id, + .note = note, + }; +} - // Sure this particular lookup matched the index query, but does it - // match the entire filter? Check! We also pass in things we've already - // matched via the filter so we don't have to check again. This can be - // pretty important for filters with a large number of entries. - if (!ndb_filter_matches_with(filter, res->note, *matched)) +static int query_is_full(struct ndb_query_results *results, int limit) +{ + if (results->cur.p >= results->cur.end) return 1; - return 2; + return cursor_count(&results->cur, sizeof(struct ndb_query_result)) >= limit; } -static int ndb_query_filter_id(struct ndb_txn *txn, struct ndb_filter *filter, - MDB_cursor *cur, const unsigned char *id, - uint64_t since, int *matched, - struct ndb_query_result *res) +static int ndb_query_plan_execute_ids(struct ndb_txn *txn, + struct ndb_filter *filter, + struct ndb_query_results *results, + int limit + ) { + MDB_cursor *cur; + MDB_dbi db; MDB_val k, v; - uint64_t note_id; + int matched, rc, i; + struct ndb_filter_elements *ids; + struct ndb_note *note; + struct ndb_query_result res; struct ndb_tsid tsid, *ptsid; + uint64_t note_id, until, *pint; + unsigned char *id; - res->note = NULL; + matched = 0; + until = UINT64_MAX; - ndb_tsid_init(&tsid, (unsigned char *)id, since); + if (!(ids = ndb_filter_get_elems(filter, NDB_FILTER_IDS))) + return 0; - k.mv_data = &tsid; - k.mv_size = sizeof(tsid); + if ((pint = ndb_filter_get_int(filter, NDB_FILTER_UNTIL))) + until = *pint; - if (!ndb_cursor_start(cur, &k, &v)) + db = txn->lmdb->dbs[NDB_DB_NOTE_ID]; + if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) return 0; - ptsid = (struct ndb_tsid *)k.mv_data; - note_id = *(uint64_t*)v.mv_data; + // for each id in our ids filter, find in the db + for (i = 0; i < ids->count; i++) { + if (query_is_full(results, limit)) + break; - if (memcmp(id, ptsid->id, 32) == 0) - *matched |= 1 << NDB_FILTER_AUTHORS; - else - return 1; + id = (unsigned char*)ids->elements[i].id; + ndb_tsid_init(&tsid, (unsigned char *)id, until); - // get the note because we need it to match against the filter - if (!(res->note = ndb_get_note_by_key(txn, note_id, NULL))) - return 1; + k.mv_data = &tsid; + k.mv_size = sizeof(tsid); - // Sure this particular lookup matched the index query, but does it - // match the entire filter? Check! We also pass in things we've already - // matched via the filter so we don't have to check again. This can be - // pretty important for filters with a large number of entries. - if (!ndb_filter_matches_with(filter, res->note, *matched)) - return 1; + if (!ndb_cursor_start(cur, &k, &v)) + continue; - return 2; -} + ptsid = (struct ndb_tsid *)k.mv_data; + note_id = *(uint64_t*)v.mv_data; -static inline int push_query_result(struct cursor *res, - struct ndb_query_result *result) -{ - return cursor_push(res, (unsigned char*)result, sizeof(*result)); -} + if (memcmp(id, ptsid->id, 32) == 0) + matched |= 1 << NDB_FILTER_AUTHORS; + else + continue; -static int compare_query_results(const void *pa, const void *pb) -{ - struct ndb_query_result *a, *b; + // get the note because we need it to match against the filter + if (!(note = ndb_get_note_by_key(txn, note_id, NULL))) + continue; - a = (struct ndb_query_result *)pa; - b = (struct ndb_query_result *)pb; + // Sure this particular lookup matched the index query, but + // does it match the entire filter? Check! We also pass in + // things we've already matched via the filter so we don't have + // to check again. This can be pretty important for filters + // with a large number of entries. + if (!ndb_filter_matches_with(filter, note, matched)) + continue; - if (a->note->created_at == b->note->created_at) { - return memcmp(a->note->id, b->note->id, 32); - } else if (a->note->created_at > b->note->created_at) { - return -1; - } else { - return 1; + ndb_query_result_init(&res, note, note_id); + if (!push_query_result(results, &res)) + break; } -} -static int query_is_full(struct cursor *results, int limit) -{ - if (results->p >= results->end) - return 1; - - return cursor_count(results, sizeof(struct ndb_query_result)) >= limit; + mdb_cursor_close(cur); + return 1; } -static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, - struct ndb_query_result *results, int capacity, - int *results_out) +static int ndb_query_plan_execute_kinds(struct ndb_txn *txn, + struct ndb_filter *filter, + struct ndb_query_results *results, + int limit) { - struct ndb_filter_elements *els; - struct ndb_query_result res; - struct cursor results_arr; - uint64_t limit, since, until, kind; - const unsigned char *id; - int i, k, rc, matched; MDB_cursor *cur; MDB_dbi db; + MDB_val k, v; + struct ndb_note *note; + struct ndb_u64_tsid tsid, *ptsid; + struct ndb_filter_elements *kinds; + struct ndb_query_result res; + uint64_t kind, note_id; + int i, rc; - since = UINT64_MAX; - until = UINT64_MAX; - limit = capacity; - - ndb_filter_get_limit(filter, &limit); - ndb_filter_get_since(filter, &since); - ndb_filter_get_until(filter, &until); + // we should have kinds in a kinds filter! + if (!(kinds = ndb_filter_get_elems(filter, NDB_FILTER_KINDS))) + return 0; - limit = min(capacity, limit); - make_cursor((unsigned char *)results, - ((unsigned char *)results) + limit * sizeof(*results), - &results_arr); + db = txn->lmdb->dbs[NDB_DB_NOTE_KIND]; - for (i = 0; i < filter->num_elements; i++) { - matched = 0; - if (query_is_full(&results_arr, limit)) - goto done; + if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) + return 0; - els = filter->elements[i]; - switch (els->field.type) { - case NDB_FILTER_IDS: - db = txn->lmdb->dbs[NDB_DB_NOTE_ID]; - if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) - return 0; + for (i = 0; i < kinds->count; i++) { + if (query_is_full(results, limit)) + break; - // for each id in our ids filter, find in the db - for (k = 0; k < els->count; k++) { - if (query_is_full(&results_arr, limit)) { - mdb_cursor_close(cur); - goto done; - } + kind = kinds->elements[i].integer; + ndb_debug("kind %" PRIu64 "\n", kind); + ndb_u64_tsid_init(&tsid, kind, UINT64_MAX); - id = els->elements[k].id; - if (!(rc = ndb_query_filter_id(txn, filter, cur, - id, since, - &matched, - &res))) { - // there was a fatal error - mdb_cursor_close(cur); - return 0; - } + k.mv_data = &tsid; + k.mv_size = sizeof(tsid); - // no match, just try next id - if (rc == 1) - continue; + if (!ndb_cursor_start(cur, &k, &v)) + continue; - // rc > 1, matched! - if (!push_query_result(&results_arr, &res)) { - // this should never happen, but if - // it fails to push that means there - // are no more result to push, - // so just return - mdb_cursor_close(cur); - goto done; - } + // for each id in our ids filter, find in the db + while (!query_is_full(results, limit)) { + ptsid = (struct ndb_u64_tsid *)k.mv_data; + if (ptsid->u64 != kind) + break; - // look for more ids... continue! + note_id = *(uint64_t*)v.mv_data; + if ((note = ndb_get_note_by_key(txn, note_id, NULL))) { + ndb_query_result_init(&res, note, note_id); + if (!push_query_result(results, &res)) + break; } - mdb_cursor_close(cur); - break; - case NDB_FILTER_AUTHORS: - break; - case NDB_FILTER_KINDS: - db = txn->lmdb->dbs[NDB_DB_NOTE_KIND]; - if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) - return 0; + if (mdb_cursor_get(cur, &k, &v, MDB_PREV)) + break; + } + } - // for each id in our ids filter, find in the db - for (k = 0; k < els->count; k++) { - if (query_is_full(&results_arr, limit)) { - mdb_cursor_close(cur); - goto done; - } + mdb_cursor_close(cur); + return 1; +} - kind = els->elements[k].integer; - if (!(rc = ndb_query_filter_kind(txn, filter, - cur, kind, - since, - &matched, - &res))) { - // there was a fatal error - mdb_cursor_close(cur); - return 0; - } +static enum ndb_query_plan ndb_filter_plan(struct ndb_filter *filter) +{ + struct ndb_filter_elements *ids, *kinds, *authors, *tags; - // rc > 1, matched! - if (!push_query_result(&results_arr, &res)) { - mdb_cursor_close(cur); - goto done; - } - } + ids = ndb_filter_get_elems(filter, NDB_FILTER_IDS); + kinds = ndb_filter_get_elems(filter, NDB_FILTER_KINDS); + authors = ndb_filter_get_elems(filter, NDB_FILTER_AUTHORS); + tags = ndb_filter_get_elems(filter, NDB_FILTER_TAGS); - mdb_cursor_close(cur); - break; - case NDB_FILTER_GENERIC: - break; - case NDB_FILTER_SINCE: - case NDB_FILTER_UNTIL: - case NDB_FILTER_LIMIT: - break; - } + // this is rougly similar to the heuristic in strfry's dbscan + if (ids) { + return NDB_PLAN_IDS; + } else if (tags) { + return NDB_PLAN_TAGS; + } else if (authors) { + return NDB_PLAN_AUTHORS; + } else if (kinds) { + return NDB_PLAN_KINDS; + } + + return NDB_PLAN_CREATED; +} + + +static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, + struct ndb_query_result *res, int capacity, + int *results_out) +{ + struct ndb_query_results results; + uint64_t limit, *pint; + limit = capacity; + + if ((pint = ndb_filter_get_int(filter, NDB_FILTER_LIMIT))) + limit = *pint; + + limit = min(capacity, limit); + make_cursor((unsigned char *)res, + ((unsigned char *)res) + limit * sizeof(*res), + &results.cur); + + switch (ndb_filter_plan(filter)) { + // We have a list of ids, just open a cursor and jump to each once + case NDB_PLAN_IDS: + if (!ndb_query_plan_execute_ids(txn, filter, &results, limit)) + return 0; + break; + + // We have just kinds, just scan the kind index + case NDB_PLAN_KINDS: + if (!ndb_query_plan_execute_kinds(txn, filter, &results, limit)) + return 0; + break; + + // TODO: finish query execution plans! + case NDB_PLAN_CREATED: + case NDB_PLAN_AUTHORS: + case NDB_PLAN_TAGS: + return 0; } -done: - *results_out = cursor_count(&results_arr, sizeof(*results)); + *results_out = cursor_count(&results.cur, sizeof(*res)); return 1; } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 7923ba322..9aceb4014 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -399,6 +399,11 @@ struct ndb_block_iterator { struct ndb_query_result { struct ndb_note *note; + uint64_t note_id; +}; + +struct ndb_query_results { + struct cursor cur; }; // CONFIG From be4d7036adbb810bc94a26d09d25f262ce941046 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 5 Jan 2024 21:37:34 -0800 Subject: [PATCH 076/146] nostrdb/ndb: add inital query command still very early, but works for kinds! Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 0772c37ad..08de71df0 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -1870,7 +1870,7 @@ static int ndb_ingester_process_event(secp256k1_context *ctx, if ((int)note_size == -42) { // we already have this! - ndb_debug("already have id??\n"); + //ndb_debug("already have id??\n"); goto cleanup; } else if (note_size == 0) { ndb_debug("failed to parse '%.*s'\n", ev->len, ev->json); @@ -2186,7 +2186,7 @@ void *ndb_get_note_meta(struct ndb_txn *txn, const unsigned char *id, size_t *le k.mv_size = 32; if (mdb_get(txn->mdb_txn, txn->lmdb->dbs[NDB_DB_META], &k, &v)) { - ndb_debug("ndb_get_note_meta: mdb_get note failed\n"); + //ndb_debug("ndb_get_note_meta: mdb_get note failed\n"); return NULL; } From 504e6f1c3d4bcb8d30c03ab7c400a2969107a387 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 5 Jan 2024 21:45:59 -0800 Subject: [PATCH 077/146] nostrdb/query: support until for kind query plans Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 08de71df0..8ebb9e8af 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2462,13 +2462,17 @@ static int ndb_query_plan_execute_kinds(struct ndb_txn *txn, struct ndb_u64_tsid tsid, *ptsid; struct ndb_filter_elements *kinds; struct ndb_query_result res; - uint64_t kind, note_id; + uint64_t kind, note_id, until, *pint; int i, rc; // we should have kinds in a kinds filter! if (!(kinds = ndb_filter_get_elems(filter, NDB_FILTER_KINDS))) return 0; + until = UINT64_MAX; + if ((pint = ndb_filter_get_int(filter, NDB_FILTER_UNTIL))) + until = *pint; + db = txn->lmdb->dbs[NDB_DB_NOTE_KIND]; if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) @@ -2480,7 +2484,7 @@ static int ndb_query_plan_execute_kinds(struct ndb_txn *txn, kind = kinds->elements[i].integer; ndb_debug("kind %" PRIu64 "\n", kind); - ndb_u64_tsid_init(&tsid, kind, UINT64_MAX); + ndb_u64_tsid_init(&tsid, kind, until); k.mv_data = &tsid; k.mv_size = sizeof(tsid); From fe9e83e96953f6b023b3547b1171d9b60f2cb587 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 5 Jan 2024 22:54:46 -0800 Subject: [PATCH 078/146] nostrdb/ndb: measure query performance Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 8ebb9e8af..593e4b2a9 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2351,7 +2351,7 @@ static int compare_query_results(const void *pa, const void *pb) b = (struct ndb_query_result *)pb; if (a->note->created_at == b->note->created_at) { - return memcmp(a->note->id, b->note->id, 32); + return 0; } else if (a->note->created_at > b->note->created_at) { return -1; } else { From 8c9a330f1298e9a7149b1c3383b7dd7901288ea0 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 6 Jan 2024 11:50:28 -0800 Subject: [PATCH 079/146] nostrdb/fix macos build Signed-off-by: William Casarin --- nostrdb/Makefile | 4 ++-- nostrdb/src/config.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index 9f96376d5..88689b58d 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -49,10 +49,10 @@ distclean: clean tags: find . -name '*.c' -or -name '*.h' | xargs ctags -configurator: configurator.c +configurator: src/configurator.c $(CC) $< -o $@ -config.h: configurator +src/config.h: configurator ./configurator > $@ bindings-c: $(C_BINDINGS) diff --git a/nostrdb/src/config.h b/nostrdb/src/config.h index d16dda9bc..ed2f8e5cc 100644 --- a/nostrdb/src/config.h +++ b/nostrdb/src/config.h @@ -12,7 +12,7 @@ #define HAVE_UNALIGNED_ACCESS 1 #define HAVE_TYPEOF 1 #define HAVE_BIG_ENDIAN 0 -#define HAVE_BYTESWAP_H 1 -#define HAVE_BSWAP_64 1 +#define HAVE_BYTESWAP_H 0 +#define HAVE_BSWAP_64 0 #define HAVE_LITTLE_ENDIAN 1 #endif /* CCAN_CONFIG_H */ From 1eaef36108283b384be354adb6f77c7ae33bd8b4 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 8 Jan 2024 12:09:20 -0800 Subject: [PATCH 080/146] nostrdb/perf: add some flamegraph helpers to makefile Signed-off-by: William Casarin --- nostrdb/Makefile | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/nostrdb/Makefile b/nostrdb/Makefile index 88689b58d..593fd8d97 100644 --- a/nostrdb/Makefile +++ b/nostrdb/Makefile @@ -159,6 +159,18 @@ testdata/many-events.json: testdata/many-events.json.zst bench: bench-ingest-many.c $(DEPS) $(CC) $(CFLAGS) $< $(LDS) -o $@ +perf.out: fake + perf script > $@ + +perf.folded: perf.out + stackcollapse-perf.pl $< > $@ + +ndb.svg: perf.folded + flamegraph.pl $< > $@ + +flamegraph: ndb.svg + browser $< + run-bench: testdata/many-events.json bench ./bench @@ -169,4 +181,4 @@ testdata/db/.dir: test: test.c $(DEPS) testdata/db/.dir $(CC) $(CFLAGS) test.c $(LDS) -o $@ -.PHONY: tags clean +.PHONY: tags clean fake From 608a31155137d475e3ec00cd99f26dbb0c0dae62 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 8 Jan 2024 14:29:44 -0800 Subject: [PATCH 081/146] nostrdb/filter: don't end field if we don't have one active Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 593e4b2a9..5d21b6317 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -904,6 +904,10 @@ void ndb_filter_end_field(struct ndb_filter *filter) struct ndb_filter_elements *cur; cur = filter->current; + + if (cur == NULL) + return; + filter->elements[filter->num_elements++] = cur; // sort elements for binary search From b35a7d6b41d01df701ac5773a6c8d8da41cf66e2 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 8 Jan 2024 16:18:30 -0800 Subject: [PATCH 082/146] nostrdb/query: add tag index and tag queries Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 281 +++++++++++++++++++++++++++++++++++++++--- nostrdb/src/nostrdb.h | 2 + 2 files changed, 265 insertions(+), 18 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 5d21b6317..c2f63dc5b 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -346,6 +346,32 @@ static int mdb_cmp_memn(const MDB_val *a, const MDB_val *b) { return diff ? diff : len_diff<0 ? -1 : len_diff; } +static int ndb_tag_key_compare(const MDB_val *a, const MDB_val *b) +{ + MDB_val va, vb; + uint64_t ts_a, ts_b; + int cmp; + + va.mv_data = a->mv_data; + va.mv_size = a->mv_size - 8; + + vb.mv_data = b->mv_data; + vb.mv_size = b->mv_size - 8; + + if ((cmp = mdb_cmp_memn(&va, &vb))) + return cmp; + + ts_a = *(uint64_t*)(va.mv_data + va.mv_size); + ts_b = *(uint64_t*)(vb.mv_data + vb.mv_size); + + if (ts_a < ts_b) + return -1; + else if (ts_a > ts_b) + return 1; + + return 0; +} + static int ndb_text_search_key_compare(const MDB_val *a, const MDB_val *b) { struct cursor ca, cb; @@ -777,6 +803,7 @@ static int ndb_tag_filter_matches(struct ndb_filter_elements *els, // we should not expect an id if (str.flag == NDB_PACKED_ID) continue; + break; case NDB_ELEMENT_UNKNOWN: default: @@ -2454,6 +2481,123 @@ static int ndb_query_plan_execute_ids(struct ndb_txn *txn, return 1; } +// +// encode a tag index key +// +// consists of: +// +// u8 tag +// u8 tag_val_len +// [u8] tag_val_bytes +// u64 created_at +// +static int ndb_encode_tag_key(unsigned char *buf, int buf_size, + char tag, const unsigned char *val, + unsigned char val_len, + uint64_t timestamp) +{ + struct cursor writer; + int ok; + + // quick exit for obvious case where it will be too big. There can be + // values of val_len that still fail, but we just let the writer handle + // those failure cases + if (val_len >= buf_size) + return 0; + + make_cursor(buf, buf + buf_size, &writer); + + ok = + cursor_push_byte(&writer, tag) && + cursor_push(&writer, (unsigned char*)val, val_len) && + cursor_push(&writer, (unsigned char*)×tamp, sizeof(timestamp)); + + if (!ok) + return 0; + + return writer.p - writer.start; +} + +static int ndb_query_plan_execute_tags(struct ndb_txn *txn, + struct ndb_filter *filter, + struct ndb_query_results *results, + int limit) +{ + MDB_cursor *cur; + MDB_dbi db; + MDB_val k, v; + int len, taglen, rc, i; + uint64_t *pint, until, note_id; + unsigned char key_buffer[255]; + struct ndb_note *note; + struct ndb_filter_elements *tags; + union ndb_filter_element *tag; + struct ndb_query_result res; + + db = txn->lmdb->dbs[NDB_DB_NOTE_TAGS]; + + if (!(tags = ndb_filter_get_elems(filter, NDB_FILTER_TAGS))) + return 0; + + until = UINT64_MAX; + if ((pint = ndb_filter_get_int(filter, NDB_FILTER_UNTIL))) + until = *pint; + + if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) + return 0; + + for (i = 0; i < tags->count; i++) { + tag = &tags->elements[i]; + + taglen = tags->field.elem_type == NDB_ELEMENT_ID + ? 32 : strlen(tag->string); + + if (!(len = ndb_encode_tag_key(key_buffer, sizeof(key_buffer), + tags->field.tag, tag->id, taglen, + until))) + return 0; + + k.mv_data = key_buffer; + k.mv_size = len; + + if (!ndb_cursor_start(cur, &k, &v)) + continue; + + // for each id in our ids filter, find in the db + while (!query_is_full(results, limit)) { + // check if tag value matches, bail if not + if (((unsigned char *)k.mv_data)[0] != tags->field.tag) + break; + + // check if tag value matches, bail if not + if (taglen != k.mv_size - 9) + break; + + if (memcmp(k.mv_data+1, tag->id, k.mv_size-9)) + break; + + note_id = *(uint64_t*)v.mv_data; + + if (!(note = ndb_get_note_by_key(txn, note_id, NULL))) + continue; + + if (!ndb_filter_matches_with(filter, note, 1 << NDB_FILTER_TAGS)) + goto next; + + ndb_query_result_init(&res, note, note_id); + if (!push_query_result(results, &res)) + break; + +next: + if (mdb_cursor_get(cur, &k, &v, MDB_PREV)) + break; + } + } + + mdb_cursor_close(cur); + return 1; +} + static int ndb_query_plan_execute_kinds(struct ndb_txn *txn, struct ndb_filter *filter, struct ndb_query_results *results, @@ -2503,12 +2647,17 @@ static int ndb_query_plan_execute_kinds(struct ndb_txn *txn, break; note_id = *(uint64_t*)v.mv_data; - if ((note = ndb_get_note_by_key(txn, note_id, NULL))) { - ndb_query_result_init(&res, note, note_id); - if (!push_query_result(results, &res)) - break; - } + if (!(note = ndb_get_note_by_key(txn, note_id, NULL))) + goto next; + + if (!ndb_filter_matches_with(filter, note, 1 << NDB_FILTER_KINDS)) + goto next; + ndb_query_result_init(&res, note, note_id); + if (!push_query_result(results, &res)) + break; + +next: if (mdb_cursor_get(cur, &k, &v, MDB_PREV)) break; } @@ -2530,10 +2679,10 @@ static enum ndb_query_plan ndb_filter_plan(struct ndb_filter *filter) // this is rougly similar to the heuristic in strfry's dbscan if (ids) { return NDB_PLAN_IDS; - } else if (tags) { - return NDB_PLAN_TAGS; - } else if (authors) { + } else if (authors && authors->count <= 5) { return NDB_PLAN_AUTHORS; + } else if (tags && tags->count <= 5) { + return NDB_PLAN_TAGS; } else if (kinds) { return NDB_PLAN_KINDS; } @@ -2548,6 +2697,7 @@ static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, { struct ndb_query_results results; uint64_t limit, *pint; + enum ndb_query_plan plan; limit = capacity; if ((pint = ndb_filter_get_int(filter, NDB_FILTER_LIMIT))) @@ -2558,7 +2708,9 @@ static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, ((unsigned char *)res) + limit * sizeof(*res), &results.cur); - switch (ndb_filter_plan(filter)) { + plan = ndb_filter_plan(filter); + ndb_debug("using query plan %d\n", plan); + switch (plan) { // We have a list of ids, just open a cursor and jump to each once case NDB_PLAN_IDS: if (!ndb_query_plan_execute_ids(txn, filter, &results, limit)) @@ -2571,10 +2723,13 @@ static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, return 0; break; + case NDB_PLAN_TAGS: + if (!ndb_query_plan_execute_tags(txn, filter, &results, limit)) + return 0; + break; // TODO: finish query execution plans! case NDB_PLAN_CREATED: case NDB_PLAN_AUTHORS: - case NDB_PLAN_TAGS: return 0; } @@ -2608,6 +2763,61 @@ int ndb_query(struct ndb_txn *txn, struct ndb_filter *filters, int num_filters, return 1; } +static int ndb_write_note_tag_index(struct ndb_txn *txn, struct ndb_note *note, + uint64_t note_key) +{ + unsigned char key_buffer[255]; + struct ndb_iterator iter; + struct ndb_str tkey, tval; + char tchar; + int len, rc; + MDB_val key, val; + MDB_dbi tags_db; + + tags_db = txn->lmdb->dbs[NDB_DB_NOTE_TAGS]; + + ndb_tags_iterate_start(note, &iter); + + while (ndb_tags_iterate_next(&iter)) { + if (iter.tag->count < 2) + continue; + + tkey = ndb_tag_str(note, iter.tag, 0); + + // we only write indices for 1-char tags. + tchar = tkey.str[0]; + if (tchar == 0 || tkey.str[1] != 0) + continue; + + tval = ndb_tag_str(note, iter.tag, 1); + len = ndb_str_len(&tval); + + if (!(len = ndb_encode_tag_key(key_buffer, sizeof(key_buffer), + tchar, tval.id, (unsigned char)len, + ndb_note_created_at(note)))) { + // this will fail when we try to encode a key that is + // too big + continue; + } + + //ndb_debug("writing tag '%c':'data:%d' to index\n", tchar, len); + + key.mv_data = key_buffer; + key.mv_size = len; + + val.mv_data = ¬e_key; + val.mv_size = sizeof(note_key); + + if ((rc = mdb_put(txn->mdb_txn, tags_db, &key, &val, 0))) { + ndb_debug("write note tag index to db failed: %s\n", + mdb_strerror(rc)); + return 0; + } + } + + return 1; +} + static int ndb_write_note_kind_index(struct ndb_txn *txn, struct ndb_note *note, uint64_t note_key) { @@ -3202,13 +3412,9 @@ static uint64_t ndb_write_note(struct ndb_txn *txn, return 0; } - // write id index key clustered with created_at - if (!ndb_write_note_id_index(txn, note->note, note_key)) - return 0; - - // write note kind index - if (!ndb_write_note_kind_index(txn, note->note, note_key)) - return 0; + ndb_write_note_id_index(txn, note->note, note_key); + ndb_write_note_kind_index(txn, note->note, note_key); + ndb_write_note_tag_index(txn, note->note, note_key); // only parse content and do fulltext index on text and longform notes if (note->note->kind == 1 || note->note->kind == 30023) { @@ -3690,6 +3896,13 @@ static int ndb_init_lmdb(const char *filename, struct ndb_lmdb *lmdb, size_t map return 0; } + if ((rc = mdb_dbi_open(txn, "note_tags", MDB_CREATE | MDB_DUPSORT | MDB_DUPFIXED, + &lmdb->dbs[NDB_DB_NOTE_TAGS]))) { + fprintf(stderr, "mdb_dbi_open note_tags failed: %s\n", mdb_strerror(rc)); + return 0; + } + mdb_set_compare(txn, lmdb->dbs[NDB_DB_NOTE_TAGS], ndb_tag_key_compare); + // Commit the transaction if ((rc = mdb_txn_commit(txn))) { fprintf(stderr, "mdb_txn_commit failed, error %d\n", rc); @@ -5025,6 +5238,27 @@ void ndb_config_set_ingest_filter(struct ndb_config *config, config->filter_context = filter_ctx; } +int ndb_print_tag_keys(struct ndb_txn *txn) +{ + MDB_cursor *cur; + MDB_val k, v; + int i; + + if (mdb_cursor_open(txn->mdb_txn, txn->lmdb->dbs[NDB_DB_NOTE_TAGS], &cur)) + return 0; + + i = 1; + while (mdb_cursor_get(cur, &k, &v, MDB_NEXT) == 0) { + printf("%d note_tags '%.*s' %" PRIu64 "\n", + i, (int)k.mv_size-8, (const char *)k.mv_data, + *(uint64_t*)(k.mv_data+(k.mv_size-8))); + + i++; + } + + return 1; +} + int ndb_print_kind_keys(struct ndb_txn *txn) { MDB_cursor *cur; @@ -5098,6 +5332,13 @@ struct ndb_str ndb_tag_str(struct ndb_note *note, struct ndb_tag *tag, int ind) return ndb_note_str(note, &tag->strs[ind]); } +int ndb_str_len(struct ndb_str *str) +{ + if (str->flag == NDB_PACKED_ID) + return 32; + return strlen(str->str); +} + struct ndb_str ndb_iter_tag_str(struct ndb_iterator *iter, int ind) { return ndb_tag_str(iter->note, iter->tag, ind); @@ -5160,13 +5401,15 @@ void ndb_tags_iterate_start(struct ndb_note *note, struct ndb_iterator *iter) int ndb_tags_iterate_next(struct ndb_iterator *iter) { + struct ndb_tags *tags; + if (iter->tag == NULL || iter->index == -1) { iter->tag = iter->note->tags.tag; iter->index = 0; return iter->note->tags.count != 0; } - struct ndb_tags *tags = &iter->note->tags; + tags = &iter->note->tags; if (++iter->index < tags->count) { uint32_t tag_data_size = iter->tag->count * sizeof(iter->tag->strs[0]); @@ -5260,6 +5503,8 @@ const char *ndb_db_name(enum ndb_dbs db) return "note_fulltext"; case NDB_DB_NOTE_BLOCKS: return "note_blocks"; + case NDB_DB_NOTE_TAGS: + return "note_tags"; case NDB_DBS: return "count"; } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 9aceb4014..dacf1e658 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -170,6 +170,7 @@ enum ndb_dbs { NDB_DB_NOTE_KIND, // note kind index NDB_DB_NOTE_TEXT, // note fulltext index NDB_DB_NOTE_BLOCKS, // parsed note blocks for rendering + NDB_DB_NOTE_TAGS, // note tags index NDB_DBS, }; @@ -502,6 +503,7 @@ unsigned char *ndb_note_pubkey(struct ndb_note *note); unsigned char *ndb_note_sig(struct ndb_note *note); void _ndb_note_set_kind(struct ndb_note *note, uint32_t kind); struct ndb_tags *ndb_note_tags(struct ndb_note *note); +int ndb_str_len(struct ndb_str *str); // TAGS void ndb_tags_iterate_start(struct ndb_note *note, struct ndb_iterator *iter); From 340cb982e8e6095ada928af7be12aadde5c8f151 Mon Sep 17 00:00:00 2001 From: Charlie Fish Date: Sun, 24 Dec 2023 14:22:25 -0700 Subject: [PATCH 083/146] nostrdb/tce: add AUTH to-client-event This was committed to damus, but this should be in nostrdb or else we will lose it when we update. Damus: 84cfeb16048c ("nip42: add initial relay auth support") Link: https://groups.google.com/a/damus.io/g/patches/c/Zx3dk01e0yg/m/t59TsVkXAQAJ Signed-off-by: Charlie Fish Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 11 +++++++++++ nostrdb/src/nostrdb.h | 1 + 2 files changed, 12 insertions(+) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index c2f63dc5b..539215e56 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -4951,6 +4951,17 @@ int ndb_ws_event_from_json(const char *json, int len, struct ndb_tce *tce, tce->command_result.msg = json + tok->start; tce->command_result.msglen = toksize(tok); + return 1; + } else if (tok_len == 4 && !memcmp("AUTH", json + tok->start, 4)) { + tce->evtype = NDB_TCE_AUTH; + + tok = &parser.toks[parser.i++]; + if (tok->type != JSMN_STRING) + return 0; + + tce->subid = json + tok->start; + tce->subid_len = toksize(tok); + return 1; } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index dacf1e658..4bf58ad07 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -91,6 +91,7 @@ enum tce_type { NDB_TCE_OK = 0x2, NDB_TCE_NOTICE = 0x3, NDB_TCE_EOSE = 0x4, + NDB_TCE_AUTH = 0x5, }; enum ndb_ingest_filter_action { From 84f7f9f5d8bba1acfc346c62eb2f03e377284d0d Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 15:30:34 -0800 Subject: [PATCH 084/146] nostrdb: strblock: add typedef I don't technically need this but it helps a lot on the swift side of things since I already have code that uses this identifier of a similar structure Signed-off-by: William Casarin --- nostrdb/src/str_block.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/str_block.h b/nostrdb/src/str_block.h index 16c6de014..1eb4e2a97 100644 --- a/nostrdb/src/str_block.h +++ b/nostrdb/src/str_block.h @@ -4,9 +4,9 @@ #include -struct ndb_str_block { +typedef struct ndb_str_block { const char *str; uint32_t len; -}; +} str_block_t; #endif From 78b477702a1cf8444fded7f939a382d13a3ee2f8 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 15:31:17 -0800 Subject: [PATCH 085/146] nostrdb: header: add ptr helpers for swift swift is kind of dumb when it comes to opaque pointers Signed-off-by: William Casarin --- nostrdb/src/nostrdb.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 4bf58ad07..7a46fb1f8 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -32,7 +32,13 @@ struct ndb_lmdb; union ndb_packed_str; struct bolt11; -// sorry, swift needs help with forward declared pointers like this +// some bindings like swift needs help with forward declared pointers +struct ndb_tag_ptr { struct ndb_tag *ptr; }; +struct ndb_tags_ptr { struct ndb_tags *ptr; }; +struct ndb_block_ptr { struct ndb_block *ptr; }; +struct ndb_blocks_ptr { struct ndb_blocks *ptr; }; +struct ndb_note_ptr { struct ndb_note *ptr; }; + struct ndb_t { struct ndb *ndb; }; From 83b5bd3f2e4247de90a18c33fcd5635117c98d44 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 17:52:13 -0800 Subject: [PATCH 086/146] nostrdb: blocks: add word count interface Signed-off-by: William Casarin --- nostrdb/src/block.c | 4 ++++ nostrdb/src/nostrdb.h | 1 + 2 files changed, 5 insertions(+) diff --git a/nostrdb/src/block.c b/nostrdb/src/block.c index e30c68939..65f25e3eb 100644 --- a/nostrdb/src/block.c +++ b/nostrdb/src/block.c @@ -198,3 +198,7 @@ void ndb_blocks_free(struct ndb_blocks *blocks) { int ndb_blocks_flags(struct ndb_blocks *blocks) { return blocks->flags; } + +int ndb_blocks_word_count(struct ndb_blocks *blocks) { + return blocks->words; +} diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 7a46fb1f8..d13fecdd7 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -536,6 +536,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, enum ndb_block_type ndb_get_block_type(struct ndb_block *block); int ndb_blocks_flags(struct ndb_blocks *block); size_t ndb_blocks_total_size(struct ndb_blocks *blocks); +int ndb_blocks_word_count(struct ndb_blocks *blocks); /// Free blocks if they are owned, safe to call on unowned blocks as well. void ndb_blocks_free(struct ndb_blocks *blocks); From 454eb84570837a4dd8c654b9cad7e374227f4760 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 17:52:26 -0800 Subject: [PATCH 087/146] nostrdb: tce: fix build for previous TCE change Fixes: 34093cd1 ("tce: add AUTH to-client-event") Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 1 + 1 file changed, 1 insertion(+) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 539215e56..9f3200ebc 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -1931,6 +1931,7 @@ static int ndb_ingester_process_event(secp256k1_context *ctx, } } else { switch (tce.evtype) { + case NDB_TCE_AUTH: goto cleanup; case NDB_TCE_NOTICE: goto cleanup; case NDB_TCE_EOSE: goto cleanup; case NDB_TCE_OK: goto cleanup; From 8a018a3614a2fb3948f8243777bc30e7dc400cdc Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 1 Feb 2024 14:36:59 -0800 Subject: [PATCH 088/146] nostrdb: port kernelkind's to the new bech32 parser Signed-off-by: William Casarin --- nostrdb/src/nostr_bech32.c | 18 ++++++++++++++++++ nostrdb/src/nostrdb.h | 8 ++++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index 2f32f9e13..e4ba25205 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -102,6 +102,11 @@ static int add_relay(struct ndb_relays *relays, struct nostr_tlv *tlv) return 1; } +static uint32_t decode_tlv_u32(const uint8_t *bytes) { + beint32_t *be32_bytes = (beint32_t*)bytes; + return be32_to_cpu(*be32_bytes); +} + static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *nevent) { struct nostr_tlv tlv; int i; @@ -109,6 +114,7 @@ static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *n nevent->event_id = NULL; nevent->pubkey = NULL; nevent->relays.num_relays = 0; + nevent->has_kind = 0; for (i = 0; i < MAX_TLVS; i++) { if (!parse_nostr_tlv(cur, &tlv)) @@ -120,6 +126,12 @@ static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *n return 0; nevent->event_id = tlv.value; break; + case TLV_KIND: + if (tlv.len != 4) + return 0; + nevent->kind = decode_tlv-U32(tlv.value); + nevent->has_kind = 1; + break; case TLV_AUTHOR: if (tlv.len != 32) return 0; @@ -141,6 +153,7 @@ static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *nad naddr->identifier.str = NULL; naddr->identifier.len = 0; naddr->pubkey = NULL; + naddr->has_kind = 0; naddr->relays.num_relays = 0; for (i = 0; i < MAX_TLVS; i++) { @@ -156,6 +169,11 @@ static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *nad if (tlv.len != 32) return 0; naddr->pubkey = tlv.value; break; + case TLV_KIND: + if (tlv.len != 4) return 0; + naddr->kind = decode_tlv_u32(tlv.value); + naddr->has_kind = 1; + break; case TLV_RELAY: add_relay(&naddr->relays, &tlv); break; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index d13fecdd7..709d08995 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -337,6 +337,8 @@ struct bech32_nevent { struct ndb_relays relays; const unsigned char *event_id; const unsigned char *pubkey; // optional + uint32_t kind; + int has_kind; }; struct bech32_nprofile { @@ -348,13 +350,15 @@ struct bech32_naddr { struct ndb_relays relays; struct ndb_str_block identifier; const unsigned char *pubkey; + uint32_t kind; + int has_kind; }; struct bech32_nrelay { struct ndb_str_block relay; }; -struct nostr_bech32 { +typedef struct nostr_bech32 { enum nostr_bech32_type type; union { @@ -366,7 +370,7 @@ struct nostr_bech32 { struct bech32_naddr naddr; struct bech32_nrelay nrelay; }; -}; +} nostr_bech32_t; struct ndb_mention_bech32_block { From 96265ab58bb597c074df550ef21dee1d81c242a0 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 5 Feb 2024 16:47:10 -0800 Subject: [PATCH 089/146] nostrdb: queue: switch to prot_queue_try_pop_all This allows you to `try pop` multiple items instead of 1 Signed-off-by: William Casarin --- nostrdb/src/protected_queue.h | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/nostrdb/src/protected_queue.h b/nostrdb/src/protected_queue.h index 91335fac1..1a0106e70 100644 --- a/nostrdb/src/protected_queue.h +++ b/nostrdb/src/protected_queue.h @@ -154,7 +154,9 @@ static int prot_queue_push_all(struct prot_queue* q, void *data, int count) * data - Pointer to where the popped data will be stored. * Returns 1 if successful, 0 if the queue is empty. */ -static inline int prot_queue_try_pop(struct prot_queue *q, void *data) { +static inline int prot_queue_try_pop_all(struct prot_queue *q, void *data, int max_items) { + int items_to_pop, items_until_end; + pthread_mutex_lock(&q->mutex); if (q->count == 0) { @@ -162,9 +164,13 @@ static inline int prot_queue_try_pop(struct prot_queue *q, void *data) { return 0; } - memcpy(data, &q->buf[q->head * q->elem_size], q->elem_size); - q->head = (q->head + 1) % prot_queue_capacity(q); - q->count--; + items_until_end = (q->buflen - q->head * q->elem_size) / q->elem_size; + items_to_pop = min(q->count, max_items); + items_to_pop = min(items_to_pop, items_until_end); + + memcpy(data, &q->buf[q->head * q->elem_size], items_to_pop * q->elem_size); + q->head = (q->head + items_to_pop) % prot_queue_capacity(q); + q->count -= items_to_pop; pthread_mutex_unlock(&q->mutex); return 1; From edd6467a6683fe7525e3b9884ffe710d066b6ca9 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 5 Feb 2024 16:48:36 -0800 Subject: [PATCH 090/146] nostrdb: ndb: add ndb_poll_for_notes The polling variant of ndb_wait_for_notes. This makes more sense for realtime apps like notedeck Changelog-Added: Add ndb_poll_for_notes Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 14 ++++++++++++++ nostrdb/src/nostrdb.h | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 9f3200ebc..1e70592b8 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -5614,6 +5614,20 @@ struct ndb_subscription *ndb_find_subscription(struct ndb *ndb, uint64_t subid) return sub; } +int ndb_poll_for_notes(struct ndb *ndb, uint64_t subid, uint64_t *note_ids, + int note_id_capacity) +{ + struct ndb_subscription *sub; + + if (subid == 0) + return 0; + + if (!(sub = ndb_find_subscription(ndb, subid))) + return 0; + + return prot_queue_try_pop_all(&sub->inbox, note_ids, note_id_capacity); +} + int ndb_wait_for_notes(struct ndb *ndb, uint64_t subid, uint64_t *note_ids, int note_id_capacity) { diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 709d08995..0d03aa4fb 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -486,8 +486,8 @@ void ndb_filter_destroy(struct ndb_filter *); // SUBSCRIPTIONS uint64_t ndb_subscribe(struct ndb *, struct ndb_filter *, int num_filters); -int ndb_wait_for_notes(struct ndb *, uint64_t subid, uint64_t *note_ids, - int note_id_capacity); +int ndb_wait_for_notes(struct ndb *, uint64_t subid, uint64_t *note_ids, int note_id_capacity); +int ndb_poll_for_notes(struct ndb *, uint64_t subid, uint64_t *note_ids, int note_id_capacity); int ndb_unsubscribe(int subid); // FULLTEXT SEARCH From 97a44d476c6d9f629e71ce90931392ce07a79ae0 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 7 Feb 2024 13:55:57 -0800 Subject: [PATCH 091/146] nostrdb: filters: copy filter metadata into subscription This fixes a few ownership issues Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 1e70592b8..e777c29d0 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -178,7 +178,7 @@ struct ndb_ingester { }; struct ndb_filter_group { - struct ndb_filter *filters[MAX_FILTERS]; + struct ndb_filter filters[MAX_FILTERS]; int num_filters; }; @@ -973,7 +973,7 @@ static int ndb_filter_group_add(struct ndb_filter_group *group, if (group->num_filters + 1 > MAX_FILTERS) return 0; - group->filters[group->num_filters++] = filter; + memcpy(&group->filters[group->num_filters++], filter, sizeof(*filter)); return 1; } @@ -987,7 +987,7 @@ static int ndb_filter_group_matches(struct ndb_filter_group *group, return 1; for (i = 0; i < group->num_filters; i++) { - filter = group->filters[i]; + filter = &group->filters[i]; if (ndb_filter_matches(filter, note)) return 1; @@ -3975,7 +3975,7 @@ void ndb_filter_group_destroy(struct ndb_filter_group *group) struct ndb_filter *filter; int i; for (i = 0; i < group->num_filters; i++) { - filter = group->filters[i]; + filter = &group->filters[i]; ndb_filter_destroy(filter); } } @@ -5663,10 +5663,8 @@ uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter *filters, int num_filt sub->subid = subid; ndb_filter_group_init(&sub->group); - for (index = 0; index < num_filters; index++) { - if (!ndb_filter_group_add(&sub->group, &filters[index])) - return 0; - } + if (!ndb_filter_group_add_filters(&sub->group, filters, num_filters)) + return 0; // 500k ought to be enough for anyone buflen = sizeof(uint64_t) * 65536; From 5814e6114a6f1ab965d3610648537c2f10cb7a47 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 7 Feb 2024 15:05:57 -0800 Subject: [PATCH 092/146] nostrdb: silence annoying debug Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index e777c29d0..833fa589c 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -3482,7 +3482,7 @@ static void ndb_notify_subscriptions(struct ndb_monitor *monitor, note = written->note->note; if (ndb_filter_group_matches(&sub->group, note)) { - ndb_debug("pushing note\n"); + //ndb_debug("pushing note\n"); if (!prot_queue_push(&sub->inbox, &written->note_id)) { ndb_debug("couldn't push note to subscriber"); } From a1a8a5225138102caef101698a60621c96208179 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 7 Feb 2024 15:14:54 -0800 Subject: [PATCH 093/146] nostrdb: return number of items popped when polling Signed-off-by: William Casarin --- nostrdb/src/protected_queue.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/protected_queue.h b/nostrdb/src/protected_queue.h index 1a0106e70..fa317e1a8 100644 --- a/nostrdb/src/protected_queue.h +++ b/nostrdb/src/protected_queue.h @@ -173,7 +173,7 @@ static inline int prot_queue_try_pop_all(struct prot_queue *q, void *data, int m q->count -= items_to_pop; pthread_mutex_unlock(&q->mutex); - return 1; + return items_to_pop; } /* From b033f87f2fb8cde4d58c7f8d75fca3ba2c5daa3d Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 7 Feb 2024 16:18:33 -0800 Subject: [PATCH 094/146] nostrdb: query: include note size in query results Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 19 +++++++++++-------- nostrdb/src/nostrdb.h | 1 + 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 833fa589c..a5d33aa7b 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2393,10 +2393,12 @@ static int compare_query_results(const void *pa, const void *pb) static void ndb_query_result_init(struct ndb_query_result *res, struct ndb_note *note, + uint64_t note_size, uint64_t note_id) { *res = (struct ndb_query_result){ .note_id = note_id, + .note_size = note_size, .note = note, }; } @@ -2424,6 +2426,7 @@ static int ndb_query_plan_execute_ids(struct ndb_txn *txn, struct ndb_query_result res; struct ndb_tsid tsid, *ptsid; uint64_t note_id, until, *pint; + uint64_t note_size; unsigned char *id; matched = 0; @@ -2462,7 +2465,7 @@ static int ndb_query_plan_execute_ids(struct ndb_txn *txn, continue; // get the note because we need it to match against the filter - if (!(note = ndb_get_note_by_key(txn, note_id, NULL))) + if (!(note = ndb_get_note_by_key(txn, note_id, ¬e_size))) continue; // Sure this particular lookup matched the index query, but @@ -2473,7 +2476,7 @@ static int ndb_query_plan_execute_ids(struct ndb_txn *txn, if (!ndb_filter_matches_with(filter, note, matched)) continue; - ndb_query_result_init(&res, note, note_id); + ndb_query_result_init(&res, note, note_size, note_id); if (!push_query_result(results, &res)) break; } @@ -2528,7 +2531,7 @@ static int ndb_query_plan_execute_tags(struct ndb_txn *txn, MDB_dbi db; MDB_val k, v; int len, taglen, rc, i; - uint64_t *pint, until, note_id; + uint64_t *pint, until, note_id, note_size; unsigned char key_buffer[255]; struct ndb_note *note; struct ndb_filter_elements *tags; @@ -2579,13 +2582,13 @@ static int ndb_query_plan_execute_tags(struct ndb_txn *txn, note_id = *(uint64_t*)v.mv_data; - if (!(note = ndb_get_note_by_key(txn, note_id, NULL))) + if (!(note = ndb_get_note_by_key(txn, note_id, ¬e_size))) continue; if (!ndb_filter_matches_with(filter, note, 1 << NDB_FILTER_TAGS)) goto next; - ndb_query_result_init(&res, note, note_id); + ndb_query_result_init(&res, note, note_size, note_id); if (!push_query_result(results, &res)) break; @@ -2611,7 +2614,7 @@ static int ndb_query_plan_execute_kinds(struct ndb_txn *txn, struct ndb_u64_tsid tsid, *ptsid; struct ndb_filter_elements *kinds; struct ndb_query_result res; - uint64_t kind, note_id, until, *pint; + uint64_t kind, note_id, note_size, until, *pint; int i, rc; // we should have kinds in a kinds filter! @@ -2648,13 +2651,13 @@ static int ndb_query_plan_execute_kinds(struct ndb_txn *txn, break; note_id = *(uint64_t*)v.mv_data; - if (!(note = ndb_get_note_by_key(txn, note_id, NULL))) + if (!(note = ndb_get_note_by_key(txn, note_id, ¬e_size))) goto next; if (!ndb_filter_matches_with(filter, note, 1 << NDB_FILTER_KINDS)) goto next; - ndb_query_result_init(&res, note, note_id); + ndb_query_result_init(&res, note, note_size, note_id); if (!push_query_result(results, &res)) break; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 0d03aa4fb..305b42461 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -411,6 +411,7 @@ struct ndb_block_iterator { struct ndb_query_result { struct ndb_note *note; + uint64_t note_size; uint64_t note_id; }; From 76bdaf559a086acdc1346001454f5ff45f97f0d4 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 8 Feb 2024 15:07:06 -0800 Subject: [PATCH 095/146] nostrdb: filter: add ndb_filter_end This is a pretty scary looking function that realloc our large variable filter buffer into a compact one. This saves up a bunch of memory when we are done building the filter. Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 95 +++++++++++++++++++++++++++++++++++++++---- nostrdb/src/nostrdb.h | 3 +- 2 files changed, 89 insertions(+), 9 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index a5d33aa7b..53c22a5f8 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -509,6 +509,92 @@ static void lowercase_strncpy(char *dst, const char *src, int n) { } } +static inline int ndb_filter_elem_is_ptr(struct ndb_filter_field *field) { + return field->elem_type == NDB_ELEMENT_STRING || field->elem_type == NDB_ELEMENT_ID; +} + +// "Finalize" the filter. This resizes the allocated heap buffers so that they +// are as small as possible. This also prevents new fields from being added +int ndb_filter_end(struct ndb_filter *filter) +{ + int i, k; +#ifdef DEBUG + size_t orig_size; +#endif + size_t data_len, elem_len; + struct ndb_filter_elements *els; + if (filter->finalized == 1) + return 0; + + // move the data buffer to the end of the element buffer and update + // all of the element pointers accordingly + data_len = filter->data_buf.p - filter->data_buf.start; + elem_len = filter->elem_buf.p - filter->elem_buf.start; +#ifdef DEBUG + orig_size = filter->data_buf.end - filter->elem_buf.start; +#endif + + // first we delta-ize the element pointers so that they are relative to + // the start of the delta buf. we will re-add these after we move the + // memory + for (i = 0; i < filter->num_elements; i++) { + els = filter->elements[i]; + + // realloc could move this whole thing, so subtract + // the element pointers as well + filter->elements[i] = (struct ndb_filter_elements *) + ((unsigned char *)filter->elements[i] - + filter->elem_buf.start); + + if (!ndb_filter_elem_is_ptr(&els->field)) + continue; + + for (k = 0; k < els->count; k++) { + els->elements[k].id = (unsigned char *) + ((unsigned char *)els->elements[k].id - + filter->data_buf.start); + } + } + + // cap the elem buff + filter->elem_buf.end = filter->elem_buf.p; + + // move the data buffer to the end of the element buffer + memmove(filter->elem_buf.p, filter->data_buf.start, data_len); + + // realloc the whole thing + filter->elem_buf.start = realloc(filter->elem_buf.start, elem_len + data_len); + filter->elem_buf.end = filter->elem_buf.start + elem_len; + filter->elem_buf.p = filter->elem_buf.end; + + filter->data_buf.start = filter->elem_buf.end; + filter->data_buf.end = filter->data_buf.start + data_len; + filter->data_buf.p = filter->data_buf.end; + + // un-deltaize the pointers + for (i = 0; i < filter->num_elements; i++) { + filter->elements[i] = (struct ndb_filter_elements *) + ((unsigned char *)filter->elem_buf.start + + (size_t)filter->elements[i]); + els = filter->elements[i]; + + if (!ndb_filter_elem_is_ptr(&els->field)) + continue; + + for (k = 0; k < els->count; k++) { + els->elements[k].id = + (size_t)els->elements[k].id + + filter->data_buf.start; + } + } + + filter->finalized = 1; + + ndb_debug("ndb_filter_end: %ld -> %ld\n", orig_size, elem_len + data_len); + + return 1; +} + int ndb_filter_init(struct ndb_filter *filter) { struct cursor cur; @@ -538,18 +624,11 @@ int ndb_filter_init(struct ndb_filter *filter) filter->num_elements = 0; filter->elements[0] = (struct ndb_filter_elements*) buf; filter->current = NULL; + filter->finalized = 0; return 1; } -void ndb_filter_reset(struct ndb_filter *filter) -{ - filter->num_elements = 0; - filter->elem_buf.p = filter->elem_buf.start; - filter->data_buf.p = filter->data_buf.start; - filter->current = NULL; -} - void ndb_filter_destroy(struct ndb_filter *filter) { if (filter->elem_buf.start) diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 305b42461..76dd43ce5 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -241,6 +241,7 @@ struct ndb_filter { struct cursor elem_buf; struct cursor data_buf; int num_elements; + int finalized; struct ndb_filter_elements *current; struct ndb_filter_elements *elements[NDB_NUM_FILTERS]; }; @@ -481,7 +482,7 @@ int ndb_filter_add_str_element(struct ndb_filter *, const char *str); int ndb_filter_start_field(struct ndb_filter *, enum ndb_filter_fieldtype); int ndb_filter_start_tag_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); -void ndb_filter_reset(struct ndb_filter *); +int ndb_filter_end(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); void ndb_filter_destroy(struct ndb_filter *); From b30be3baa6e0f5221448a8d37397ca905ee36050 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 9 Feb 2024 13:58:41 -0800 Subject: [PATCH 096/146] nostrdb: filter: use relative data offsets for easy cloning Instead of storing exact pointers inside of our filter elements, just store offsets. This will allow us to clone filters very easily without having to mess around with fixing up the pointers afterwards. Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 302 ++++++++++++++++++++++++++---------------- nostrdb/src/nostrdb.h | 12 +- 2 files changed, 194 insertions(+), 120 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 53c22a5f8..8adec07a7 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -14,6 +14,7 @@ #include "threadpool.h" #include "protected_queue.h" #include "memchr.h" +#include "print_util.h" #include #include #include @@ -517,12 +518,10 @@ static inline int ndb_filter_elem_is_ptr(struct ndb_filter_field *field) { // are as small as possible. This also prevents new fields from being added int ndb_filter_end(struct ndb_filter *filter) { - int i, k; #ifdef DEBUG size_t orig_size; #endif size_t data_len, elem_len; - struct ndb_filter_elements *els; if (filter->finalized == 1) return 0; @@ -534,28 +533,6 @@ int ndb_filter_end(struct ndb_filter *filter) orig_size = filter->data_buf.end - filter->elem_buf.start; #endif - // first we delta-ize the element pointers so that they are relative to - // the start of the delta buf. we will re-add these after we move the - // memory - for (i = 0; i < filter->num_elements; i++) { - els = filter->elements[i]; - - // realloc could move this whole thing, so subtract - // the element pointers as well - filter->elements[i] = (struct ndb_filter_elements *) - ((unsigned char *)filter->elements[i] - - filter->elem_buf.start); - - if (!ndb_filter_elem_is_ptr(&els->field)) - continue; - - for (k = 0; k < els->count; k++) { - els->elements[k].id = (unsigned char *) - ((unsigned char *)els->elements[k].id - - filter->data_buf.start); - } - } - // cap the elem buff filter->elem_buf.end = filter->elem_buf.p; @@ -571,23 +548,6 @@ int ndb_filter_end(struct ndb_filter *filter) filter->data_buf.end = filter->data_buf.start + data_len; filter->data_buf.p = filter->data_buf.end; - // un-deltaize the pointers - for (i = 0; i < filter->num_elements; i++) { - filter->elements[i] = (struct ndb_filter_elements *) - ((unsigned char *)filter->elem_buf.start + - (size_t)filter->elements[i]); - els = filter->elements[i]; - - if (!ndb_filter_elem_is_ptr(&els->field)) - continue; - - for (k = 0; k < els->count; k++) { - els->elements[k].id = - (size_t)els->elements[k].id + - filter->data_buf.start; - } - } - filter->finalized = 1; ndb_debug("ndb_filter_end: %ld -> %ld\n", orig_size, elem_len + data_len); @@ -595,6 +555,67 @@ int ndb_filter_end(struct ndb_filter *filter) return 1; } +static inline struct ndb_filter_elements * +ndb_filter_get_elements_by_offset(struct ndb_filter *filter, int offset) +{ + struct ndb_filter_elements *els; + + if (offset < 0) + return NULL; + + els = (struct ndb_filter_elements *)(filter->elem_buf.start + offset); + + if ((unsigned char *)els > filter->elem_buf.p) + return NULL; + + return els; +} + +struct ndb_filter_elements * +ndb_filter_current_element(struct ndb_filter *filter) +{ + return ndb_filter_get_elements_by_offset(filter, filter->current); +} + +static inline struct ndb_filter_elements * +ndb_filter_get_elements(struct ndb_filter *filter, int index) +{ + if (filter->num_elements <= 0) + return NULL; + + if (index > filter->num_elements-1) + return NULL; + + return ndb_filter_get_elements_by_offset(filter, filter->elements[index]); +} + +static inline unsigned char * +ndb_filter_elements_data(struct ndb_filter *filter, int offset) +{ + unsigned char *data; + + if (offset < 0) + return NULL; + + data = filter->data_buf.start + offset; + if (data > filter->data_buf.p) + return NULL; + + return data; +} + +static inline unsigned char * +ndb_filter_get_id_element(struct ndb_filter *filter, struct ndb_filter_elements *els, int index) +{ + return ndb_filter_elements_data(filter, els->elements[index]); +} + +static inline const char * +ndb_filter_get_string_element(struct ndb_filter *filter, struct ndb_filter_elements *els, int index) +{ + return (const char *)ndb_filter_elements_data(filter, els->elements[index]); +} + int ndb_filter_init(struct ndb_filter *filter) { struct cursor cur; @@ -622,8 +643,8 @@ int ndb_filter_init(struct ndb_filter *filter) assert(filter->elem_buf.start == cur.start); filter->num_elements = 0; - filter->elements[0] = (struct ndb_filter_elements*) buf; - filter->current = NULL; + filter->elements[0] = 0; + filter->current = -1; filter->finalized = 0; return 1; @@ -657,14 +678,15 @@ static int ndb_filter_start_field_impl(struct ndb_filter *filter, enum ndb_filte int i; struct ndb_filter_elements *els, *el; - if (filter->current) { + if (ndb_filter_current_element(filter)) { fprintf(stderr, "ndb_filter_start_field: filter field already in progress, did you forget to call ndb_filter_end_field?\n"); return 0; } // you can only start and end fields once for (i = 0; i < filter->num_elements; i++) { - el = filter->elements[i]; + el = ndb_filter_get_elements(filter, i); + assert(el); if (el->field.type == field) { fprintf(stderr, "ndb_filter_start_field: field '%s' already exists\n", ndb_filter_field_name(field)); @@ -672,8 +694,9 @@ static int ndb_filter_start_field_impl(struct ndb_filter *filter, enum ndb_filte } } - els = (struct ndb_filter_elements *) filter->elem_buf.p ; - filter->current = els; + filter->current = filter->elem_buf.p - filter->elem_buf.start; + els = ndb_filter_current_element(filter); + assert(els); // advance elem buffer to the variable data section if (!cursor_skip(&filter->elem_buf, sizeof(struct ndb_filter_elements))) { @@ -702,43 +725,44 @@ int ndb_filter_start_tag_field(struct ndb_filter *filter, char tag) static int ndb_filter_add_element(struct ndb_filter *filter, union ndb_filter_element el) { - unsigned char *data; - const char *str; + struct ndb_filter_elements *current; + uint64_t offset; - if (!filter->current) + if (!(current = ndb_filter_current_element(filter))) return 0; - data = filter->data_buf.p; + offset = filter->data_buf.p - filter->data_buf.start; - switch (filter->current->field.type) { + switch (current->field.type) { case NDB_FILTER_IDS: case NDB_FILTER_AUTHORS: if (!cursor_push(&filter->data_buf, (unsigned char *)el.id, 32)) return 0; - el.id = data; break; case NDB_FILTER_KINDS: + offset = el.integer; break; case NDB_FILTER_SINCE: case NDB_FILTER_UNTIL: case NDB_FILTER_LIMIT: // only one allowed for since/until - if (filter->current->count != 0) + if (current->count != 0) return 0; + offset = el.integer; break; case NDB_FILTER_TAGS: - str = (const char *)filter->data_buf.p; if (!cursor_push_c_str(&filter->data_buf, el.string)) return 0; // push a pointer of the string in the databuf as an element - el.string = str; break; } - if (!cursor_push(&filter->elem_buf, (unsigned char*)&el, sizeof(el))) + if (!cursor_push(&filter->elem_buf, (unsigned char *)&offset, + sizeof(offset))) { return 0; + } - filter->current->count++; + current->count++; return 1; } @@ -747,11 +771,12 @@ static int ndb_filter_set_elem_type(struct ndb_filter *filter, enum ndb_generic_element_type elem_type) { enum ndb_generic_element_type current_elem_type; + struct ndb_filter_elements *current; - if (!filter->current) + if (!(current = ndb_filter_current_element(filter))) return 0; - current_elem_type = filter->current->field.elem_type; + current_elem_type = current->field.elem_type; // element types must be uniform if (current_elem_type != elem_type && current_elem_type != NDB_ELEMENT_UNKNOWN) { @@ -759,7 +784,7 @@ static int ndb_filter_set_elem_type(struct ndb_filter *filter, return 0; } - filter->current->field.elem_type = elem_type; + current->field.elem_type = elem_type; return 1; } @@ -767,12 +792,13 @@ static int ndb_filter_set_elem_type(struct ndb_filter *filter, int ndb_filter_add_str_element(struct ndb_filter *filter, const char *str) { union ndb_filter_element el; + struct ndb_filter_elements *current; - if (!filter->current) + if (!(current = ndb_filter_current_element(filter))) return 0; // only generic queries are allowed to have strings - switch (filter->current->field.type) { + switch (current->field.type) { case NDB_FILTER_SINCE: case NDB_FILTER_UNTIL: case NDB_FILTER_LIMIT: @@ -794,10 +820,11 @@ int ndb_filter_add_str_element(struct ndb_filter *filter, const char *str) int ndb_filter_add_int_element(struct ndb_filter *filter, uint64_t integer) { union ndb_filter_element el; - if (!filter->current) + struct ndb_filter_elements *current; + if (!(current = ndb_filter_current_element(filter))) return 0; - switch (filter->current->field.type) { + switch (current->field.type) { case NDB_FILTER_IDS: case NDB_FILTER_AUTHORS: case NDB_FILTER_TAGS: @@ -817,12 +844,13 @@ int ndb_filter_add_int_element(struct ndb_filter *filter, uint64_t integer) int ndb_filter_add_id_element(struct ndb_filter *filter, const unsigned char *id) { union ndb_filter_element el; + struct ndb_filter_elements *current; - if (!filter->current) + if (!(current = ndb_filter_current_element(filter))) return 0; // only certain filter types allow pushing id elements - switch (filter->current->field.type) { + switch (current->field.type) { case NDB_FILTER_SINCE: case NDB_FILTER_UNTIL: case NDB_FILTER_LIMIT: @@ -843,11 +871,13 @@ int ndb_filter_add_id_element(struct ndb_filter *filter, const unsigned char *id return ndb_filter_add_element(filter, el); } -static int ndb_tag_filter_matches(struct ndb_filter_elements *els, +static int ndb_tag_filter_matches(struct ndb_filter *filter, + struct ndb_filter_elements *els, struct ndb_note *note) { int i; - union ndb_filter_element el; + const unsigned char *id; + const char *el_str; struct ndb_iterator iter, *it = &iter; struct ndb_str str; @@ -894,14 +924,15 @@ static int ndb_tag_filter_matches(struct ndb_filter_elements *els, } for (i = 0; i < els->count; i++) { - el = els->elements[i]; switch (els->field.elem_type) { case NDB_ELEMENT_ID: - if (!memcmp(el.id, str.id, 32)) + id = ndb_filter_get_id_element(filter, els, i); + if (!memcmp(id, str.id, 32)) return 1; break; case NDB_ELEMENT_STRING: - if (!strcmp(el.string, str.str)) + el_str = ndb_filter_get_string_element(filter, els, i); + if (!strcmp(el_str, str.str)) return 1; break; case NDB_ELEMENT_UNKNOWN: @@ -913,12 +944,32 @@ static int ndb_tag_filter_matches(struct ndb_filter_elements *els, return 0; } +struct search_id_state { + struct ndb_filter *filter; + struct ndb_filter_elements *els; + unsigned char *key; +}; + static int compare_ids(const void *pa, const void *pb) { - const unsigned char *a = *(const unsigned char **)pa; - const unsigned char *b = *(const unsigned char **)pb; + unsigned char *a = *(unsigned char **)pa; + unsigned char *b = *(unsigned char **)pb; + + return memcmp(a, b, 32); +} + +static int search_ids(const void *ctx, const void *mid_ptr) +{ + struct search_id_state *state; + uint32_t mid; + + state = (struct search_id_state *)ctx; + mid = *(uint32_t *)mid_ptr; + + unsigned char *mid_id = ndb_filter_elements_data(state->filter, mid); + assert(mid_id); - return memcmp(a, b, 32); + return memcmp(state->key, mid_id, 32); } static int compare_kinds(const void *pa, const void *pb) @@ -937,17 +988,21 @@ static int compare_kinds(const void *pa, const void *pb) } } - +// // returns 1 if a filter matches a note static int ndb_filter_matches_with(struct ndb_filter *filter, struct ndb_note *note, int already_matched) { int i, j; - unsigned char *id; struct ndb_filter_elements *els; + struct search_id_state state; + + state.filter = filter; for (i = 0; i < filter->num_elements; i++) { - els = filter->elements[i]; + els = ndb_filter_get_elements(filter, i); + state.els = els; + assert(els); // if we know we already match from a query scan result, // we can skip this check @@ -957,36 +1012,36 @@ static int ndb_filter_matches_with(struct ndb_filter *filter, switch (els->field.type) { case NDB_FILTER_KINDS: for (j = 0; j < els->count; j++) { - if ((unsigned int)els->elements[j].integer == note->kind) + if ((unsigned int)els->elements[j] == note->kind) goto cont; } break; case NDB_FILTER_IDS: - id = note->id; - if (bsearch(&id, &els->elements[0], els->count, - sizeof(els->elements[0].id), compare_ids)) { + state.key = ndb_note_id(note); + if (bsearch(&state, &els->elements[0], els->count, + sizeof(els->elements[0]), search_ids)) { continue; } break; case NDB_FILTER_AUTHORS: - id = note->pubkey; - if (bsearch(&id, &els->elements[0], els->count, - sizeof(els->elements[0].id), compare_ids)) { + state.key = ndb_note_pubkey(note); + if (bsearch(&state, &els->elements[0], els->count, + sizeof(els->elements[0]), search_ids)) { continue; } break; case NDB_FILTER_TAGS: - if (ndb_tag_filter_matches(els, note)) + if (ndb_tag_filter_matches(filter, els, note)) continue; break; case NDB_FILTER_SINCE: assert(els->count == 1); - if (note->created_at >= els->elements[0].integer) + if (note->created_at >= els->elements[0]) continue; break; case NDB_FILTER_UNTIL: assert(els->count == 1); - if (note->created_at < els->elements[0].integer) + if (note->created_at < els->elements[0]) continue; case NDB_FILTER_LIMIT: cont: @@ -1005,27 +1060,47 @@ int ndb_filter_matches(struct ndb_filter *filter, struct ndb_note *note) return ndb_filter_matches_with(filter, note, 0); } +// because elements are stored as offsets and qsort doesn't support context, +// we do a dumb thing where we convert elements to pointers and back if we +// are doing an id or string sort +static void sort_filter_elements(struct ndb_filter *filter, + struct ndb_filter_elements *els, + int (*cmp)(const void *, const void *)) +{ + int i; + + assert(ndb_filter_elem_is_ptr(&els->field)); + + for (i = 0; i < els->count; i++) + els->elements[i] += (uint64_t)filter->data_buf.start; + + qsort(&els->elements[0], els->count, sizeof(els->elements[0]), cmp); + + for (i = 0; i < els->count; i++) + els->elements[i] -= (uint64_t)filter->data_buf.start; +} + void ndb_filter_end_field(struct ndb_filter *filter) { + int cur_offset; struct ndb_filter_elements *cur; - cur = filter->current; + cur_offset = filter->current; - if (cur == NULL) + if (!(cur = ndb_filter_current_element(filter))) return; - filter->elements[filter->num_elements++] = cur; + filter->elements[filter->num_elements++] = cur_offset; // sort elements for binary search switch (cur->field.type) { case NDB_FILTER_IDS: case NDB_FILTER_AUTHORS: - qsort(&cur->elements[0], cur->count, - sizeof(cur->elements[0].id), compare_ids); + sort_filter_elements(filter, cur, compare_ids); break; case NDB_FILTER_KINDS: qsort(&cur->elements[0], cur->count, - sizeof(cur->elements[0].integer), compare_kinds); + sizeof(cur->elements[0]), compare_kinds); break; case NDB_FILTER_TAGS: // TODO: generic tag search sorting @@ -1037,7 +1112,7 @@ void ndb_filter_end_field(struct ndb_filter *filter) break; } - filter->current = NULL; + filter->current = -1; } @@ -2421,7 +2496,8 @@ ndb_filter_get_elems(struct ndb_filter *filter, enum ndb_filter_fieldtype typ) struct ndb_filter_elements *els; for (i = 0; i < filter->num_elements; i++) { - els = filter->elements[i]; + els = ndb_filter_get_elements(filter, i); + assert(els); if (els->field.type == typ) { return els; } @@ -2430,7 +2506,7 @@ ndb_filter_get_elems(struct ndb_filter *filter, enum ndb_filter_fieldtype typ) return NULL; } -static union ndb_filter_element * +static uint64_t * ndb_filter_get_elem(struct ndb_filter *filter, enum ndb_filter_fieldtype typ) { struct ndb_filter_elements *els; @@ -2442,10 +2518,10 @@ ndb_filter_get_elem(struct ndb_filter *filter, enum ndb_filter_fieldtype typ) static uint64_t *ndb_filter_get_int(struct ndb_filter *filter, enum ndb_filter_fieldtype typ) { - union ndb_filter_element *el = NULL; - if (!(el = ndb_filter_get_elem(filter, typ))) - return 0; - return &el->integer; + uint64_t *el; + if (NULL == (el = ndb_filter_get_elem(filter, typ))) + return NULL; + return el; } static inline int push_query_result(struct ndb_query_results *results, @@ -2526,7 +2602,7 @@ static int ndb_query_plan_execute_ids(struct ndb_txn *txn, if (query_is_full(results, limit)) break; - id = (unsigned char*)ids->elements[i].id; + id = ndb_filter_get_id_element(filter, ids, i); ndb_tsid_init(&tsid, (unsigned char *)id, until); k.mv_data = &tsid; @@ -2614,7 +2690,7 @@ static int ndb_query_plan_execute_tags(struct ndb_txn *txn, unsigned char key_buffer[255]; struct ndb_note *note; struct ndb_filter_elements *tags; - union ndb_filter_element *tag; + unsigned char *tag; struct ndb_query_result res; db = txn->lmdb->dbs[NDB_DB_NOTE_TAGS]; @@ -2630,13 +2706,13 @@ static int ndb_query_plan_execute_tags(struct ndb_txn *txn, return 0; for (i = 0; i < tags->count; i++) { - tag = &tags->elements[i]; + tag = ndb_filter_get_id_element(filter, tags, i); taglen = tags->field.elem_type == NDB_ELEMENT_ID - ? 32 : strlen(tag->string); + ? 32 : strlen((const char*)tag); if (!(len = ndb_encode_tag_key(key_buffer, sizeof(key_buffer), - tags->field.tag, tag->id, taglen, + tags->field.tag, tag, taglen, until))) return 0; @@ -2656,7 +2732,7 @@ static int ndb_query_plan_execute_tags(struct ndb_txn *txn, if (taglen != k.mv_size - 9) break; - if (memcmp(k.mv_data+1, tag->id, k.mv_size-9)) + if (memcmp(k.mv_data+1, tag, k.mv_size-9)) break; note_id = *(uint64_t*)v.mv_data; @@ -2713,7 +2789,7 @@ static int ndb_query_plan_execute_kinds(struct ndb_txn *txn, if (query_is_full(results, limit)) break; - kind = kinds->elements[i].integer; + kind = kinds->elements[i]; ndb_debug("kind %" PRIu64 "\n", kind); ndb_u64_tsid_init(&tsid, kind, until); @@ -3093,14 +3169,6 @@ static int prefix_count(const char *str1, int len1, const char *str2, int len2) return count; } -static void ndb_print_text_search_key(struct ndb_text_search_key *key) -{ - printf("K<'%.*s' %" PRIu64 " %" PRIu64 " note_id:%" PRIu64 ">", key->str_len, key->str, - key->word_index, - key->timestamp, - key->note_id); -} - static int ndb_prefix_matches(struct ndb_text_search_result *result, struct ndb_word *search_word) { @@ -3564,7 +3632,7 @@ static void ndb_notify_subscriptions(struct ndb_monitor *monitor, note = written->note->note; if (ndb_filter_group_matches(&sub->group, note)) { - //ndb_debug("pushing note\n"); + ndb_debug("pushing note\n"); if (!prot_queue_push(&sub->inbox, &written->note_id)) { ndb_debug("couldn't push note to subscriber"); } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 76dd43ce5..85ab2df40 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -234,7 +234,9 @@ struct ndb_filter_field { struct ndb_filter_elements { struct ndb_filter_field field; int count; - union ndb_filter_element elements[0]; + + // this needs to be pointer size for reasons + uint64_t elements[0]; }; struct ndb_filter { @@ -242,8 +244,10 @@ struct ndb_filter { struct cursor data_buf; int num_elements; int finalized; - struct ndb_filter_elements *current; - struct ndb_filter_elements *elements[NDB_NUM_FILTERS]; + int current; + + // struct ndb_filter_elements offsets into elem_buf + int elements[NDB_NUM_FILTERS]; }; struct ndb_config { @@ -479,6 +483,8 @@ int ndb_filter_init(struct ndb_filter *); int ndb_filter_add_id_element(struct ndb_filter *, const unsigned char *id); int ndb_filter_add_int_element(struct ndb_filter *, uint64_t integer); int ndb_filter_add_str_element(struct ndb_filter *, const char *str); + +struct ndb_filter_elements *ndb_filter_current_element(struct ndb_filter *); int ndb_filter_start_field(struct ndb_filter *, enum ndb_filter_fieldtype); int ndb_filter_start_tag_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); From 2e2c03849d6c8d5705a12d15a0f8f830a9741963 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 9 Feb 2024 14:07:43 -0800 Subject: [PATCH 097/146] nostrdb: filter: add ndb_filter_clone Clone filters when moving them into subscriptions. This will allow us to fix the double free issue on the rust side. Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 31 ++++++++++++++++++++++++++++++- nostrdb/src/nostrdb.h | 1 + 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 8adec07a7..30531c67b 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -514,6 +514,35 @@ static inline int ndb_filter_elem_is_ptr(struct ndb_filter_field *field) { return field->elem_type == NDB_ELEMENT_STRING || field->elem_type == NDB_ELEMENT_ID; } +// Copy the filter +int ndb_filter_clone(struct ndb_filter *dst, struct ndb_filter *src) +{ + size_t src_size, elem_size, data_size; + + elem_size = src->elem_buf.end - src->elem_buf.start; + data_size = src->data_buf.end - src->data_buf.start; + src_size = data_size + elem_size; + + // let's only allow finalized filters to be cloned + if (!src || !src->finalized) + return 0; + + dst->elem_buf.start = malloc(src_size); + dst->elem_buf.end = dst->elem_buf.start + elem_size; + dst->elem_buf.p = dst->elem_buf.end; + + dst->data_buf.start = dst->elem_buf.start + elem_size; + dst->data_buf.end = dst->data_buf.start + data_size; + dst->data_buf.p = dst->data_buf.end; + + if (dst->elem_buf.start == NULL) + return 0; + + memcpy(dst->elem_buf.start, src->elem_buf.start, src_size); + + return 1; +} + // "Finalize" the filter. This resizes the allocated heap buffers so that they // are as small as possible. This also prevents new fields from being added int ndb_filter_end(struct ndb_filter *filter) @@ -1127,7 +1156,7 @@ static int ndb_filter_group_add(struct ndb_filter_group *group, if (group->num_filters + 1 > MAX_FILTERS) return 0; - memcpy(&group->filters[group->num_filters++], filter, sizeof(*filter)); + ndb_filter_clone(&group->filters[group->num_filters++], filter); return 1; } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 85ab2df40..b3e65a306 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -488,6 +488,7 @@ struct ndb_filter_elements *ndb_filter_current_element(struct ndb_filter *); int ndb_filter_start_field(struct ndb_filter *, enum ndb_filter_fieldtype); int ndb_filter_start_tag_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); +int ndb_filter_clone(struct ndb_filter *dst, struct ndb_filter *src); int ndb_filter_end(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); void ndb_filter_destroy(struct ndb_filter *); From 6c9b36025ad39dd3955ce26a295a87614d1fcce4 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 9 Feb 2024 14:14:09 -0800 Subject: [PATCH 098/146] nostrdb: filter: make sure to return clone errors Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 30531c67b..1edd0750c 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -1156,8 +1156,7 @@ static int ndb_filter_group_add(struct ndb_filter_group *group, if (group->num_filters + 1 > MAX_FILTERS) return 0; - ndb_filter_clone(&group->filters[group->num_filters++], filter); - return 1; + return ndb_filter_clone(&group->filters[group->num_filters++], filter); } static int ndb_filter_group_matches(struct ndb_filter_group *group, From 24e9531f990a34317fde6c7a7ee3e06fcf92018d Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 9 Feb 2024 15:09:23 -0800 Subject: [PATCH 099/146] nostrdb: filter: make sure clone copies metadata Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 1edd0750c..fed09708d 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -519,6 +519,8 @@ int ndb_filter_clone(struct ndb_filter *dst, struct ndb_filter *src) { size_t src_size, elem_size, data_size; + memcpy(dst, src, sizeof(*src)); + elem_size = src->elem_buf.end - src->elem_buf.start; data_size = src->data_buf.end - src->data_buf.start; src_size = data_size + elem_size; From 10586958c17dd4cf4c106a53adbeda7381e023e8 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 9 Feb 2024 18:59:30 -0800 Subject: [PATCH 100/146] nostrdb: random: add getrandom fallback for android Signed-off-by: William Casarin --- nostrdb/src/random.h | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/nostrdb/src/random.h b/nostrdb/src/random.h index 166703805..736ed88b2 100644 --- a/nostrdb/src/random.h +++ b/nostrdb/src/random.h @@ -20,10 +20,16 @@ #include #include #include -#elif defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) +#elif defined(__ANDROID__) +#include +#include +#include +#elif defined(__linux__) || defined(__FreeBSD__) #include #elif defined(__OpenBSD__) #include +#elif defined(__APPLE__) +#include #else #error "Couldn't identify the OS" #endif @@ -42,7 +48,27 @@ static int fill_random(unsigned char* data, size_t size) { } else { return 1; } -#elif defined(__linux__) || defined(__FreeBSD__) +#elif defined(__ANDROID__) + int fd = open("/dev/urandom", O_RDONLY); + if (fd < 0) { + return 0; // Failed to open /dev/urandom + } + ssize_t read_bytes = 0; + while (size > 0) { + read_bytes = read(fd, data, size); + if (read_bytes <= 0) { + if (errno == EINTR) { + continue; // If interrupted by signal, try again + } + close(fd); + return 0; // Failed to read + } + data += read_bytes; + size -= read_bytes; + } + close(fd); + return 1; +#elif defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) /* If `getrandom(2)` is not available you should fallback to /dev/urandom */ ssize_t res = getrandom(data, size, 0); if (res < 0 || (size_t)res != size ) { @@ -50,10 +76,10 @@ static int fill_random(unsigned char* data, size_t size) { } else { return 1; } -#elif defined(__APPLE__) || defined(__OpenBSD__) +#elif defined(__APPLE__) /* If `getentropy(2)` is not available you should fallback to either * `SecRandomCopyBytes` or /dev/urandom */ - int res = getentropy(data, size); + int res = SecRandomCopyBytes(kSecRandomDefault, size, data); if (res == 0) { return 1; } else { From 50359ca6a9bb1d9e24a8b9946b59b4163878c9cf Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Apr 2024 21:56:05 +0100 Subject: [PATCH 101/146] nostrdb: fix a few note size compile issues Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index fed09708d..deba21868 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2611,7 +2611,7 @@ static int ndb_query_plan_execute_ids(struct ndb_txn *txn, struct ndb_query_result res; struct ndb_tsid tsid, *ptsid; uint64_t note_id, until, *pint; - uint64_t note_size; + size_t note_size; unsigned char *id; matched = 0; @@ -2716,7 +2716,8 @@ static int ndb_query_plan_execute_tags(struct ndb_txn *txn, MDB_dbi db; MDB_val k, v; int len, taglen, rc, i; - uint64_t *pint, until, note_id, note_size; + uint64_t *pint, until, note_id; + size_t note_size; unsigned char key_buffer[255]; struct ndb_note *note; struct ndb_filter_elements *tags; @@ -2799,7 +2800,8 @@ static int ndb_query_plan_execute_kinds(struct ndb_txn *txn, struct ndb_u64_tsid tsid, *ptsid; struct ndb_filter_elements *kinds; struct ndb_query_result res; - uint64_t kind, note_id, note_size, until, *pint; + uint64_t kind, note_id, until, *pint; + size_t note_size; int i, rc; // we should have kinds in a kinds filter! From 4ec15e40a4004c28545cb8218d493ce67ec10971 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sun, 11 Feb 2024 14:05:36 -0800 Subject: [PATCH 102/146] nostrdb: cores: just set to 2 on unknown platforms Signed-off-by: William Casarin --- nostrdb/src/cpu.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/cpu.h b/nostrdb/src/cpu.h index a51ff7b86..bb010aa0f 100644 --- a/nostrdb/src/cpu.h +++ b/nostrdb/src/cpu.h @@ -27,7 +27,7 @@ static inline int get_cpu_cores() { size_t size = sizeof(num_cores); sysctlbyname("hw.physicalcpu", &num_cores, &size, NULL, 0); #else - num_cores = -1; // Unsupported platform + num_cores = 2; // Unsupported platform #endif return num_cores; From d52a3088c99cd07cff9890958aa68af0e701ab53 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Tue, 12 Mar 2024 18:55:23 +0000 Subject: [PATCH 103/146] nostrdb: plan: add created_at query plan This introduces the basic created_at query plan. We scan the created_at + id index in descending order looking for items that match a filter. This is a very general query plan, but might not be very efficient for anything other than local timelines. Changelog-Added: Add general created_at query plan for timelines Closes: https://github.com/damus-io/nostrdb/issues/26 Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 94 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 89 insertions(+), 5 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index deba21868..95ceb4e19 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -992,12 +992,13 @@ static int compare_ids(const void *pa, const void *pb) static int search_ids(const void *ctx, const void *mid_ptr) { struct search_id_state *state; + unsigned char *mid_id; uint32_t mid; state = (struct search_id_state *)ctx; mid = *(uint32_t *)mid_ptr; - unsigned char *mid_id = ndb_filter_elements_data(state->filter, mid); + mid_id = ndb_filter_elements_data(state->filter, mid); assert(mid_id); return memcmp(state->key, mid_id, 32); @@ -1780,7 +1781,7 @@ static void *ndb_lookup_by_key(struct ndb_txn *txn, uint64_t key, k.mv_size = sizeof(key); if (mdb_get(txn->mdb_txn, txn->lmdb->dbs[store], &k, &v)) { - ndb_debug("ndb_get_profile_by_pubkey: mdb_get note failed\n"); + ndb_debug("ndb_lookup_by_key: mdb_get note failed\n"); return NULL; } @@ -2707,6 +2708,73 @@ static int ndb_encode_tag_key(unsigned char *buf, int buf_size, return writer.p - writer.start; } +static int ndb_query_plan_execute_created_at(struct ndb_txn *txn, + struct ndb_filter *filter, + struct ndb_query_results *results, + int limit) +{ + MDB_dbi db; + MDB_val k, v; + MDB_cursor *cur; + int rc; + struct ndb_note *note; + struct ndb_tsid key, *pkey; + uint64_t *pint, until, since, note_id, note_size; + struct ndb_query_result res; + unsigned char high_key[32] = {0xFF}; + + db = txn->lmdb->dbs[NDB_DB_NOTE_ID]; + + until = UINT64_MAX; + if ((pint = ndb_filter_get_int(filter, NDB_FILTER_UNTIL))) + until = *pint; + + since = 0; + if ((pint = ndb_filter_get_int(filter, NDB_FILTER_SINCE))) + since = *pint; + + if ((rc = mdb_cursor_open(txn->mdb_txn, db, &cur))) + return 0; + + // if we have until, start there, otherwise just use max + ndb_tsid_init(&key, high_key, until); + k.mv_data = &key; + k.mv_size = sizeof(key); + + if (!ndb_cursor_start(cur, &k, &v)) + return 1; + + while (!query_is_full(results, limit)) { + pkey = (struct ndb_tsid *)k.mv_data; + note_id = *(uint64_t*)v.mv_data; + assert(v.mv_size == 8); + + // TODO(perf): if we are only looking for IDs and have no other + // condition, then we can use the ID in the index without + // looking up the note. For now we always look up the note + if (!(note = ndb_get_note_by_key(txn, note_id, ¬e_size))) + goto next; + + // does this entry match our filter? + if (!ndb_filter_matches_with(filter, note, 0)) + goto next; + + // don't continue the scan if we're below `since` + if (pkey->timestamp < since) + break; + + ndb_query_result_init(&res, note, note_size, note_id); + if (!push_query_result(results, &res)) + break; +next: + if (mdb_cursor_get(cur, &k, &v, MDB_PREV)) + break; + } + + mdb_cursor_close(cur); + return 1; +} + static int ndb_query_plan_execute_tags(struct ndb_txn *txn, struct ndb_filter *filter, struct ndb_query_results *results, @@ -2769,7 +2837,7 @@ static int ndb_query_plan_execute_tags(struct ndb_txn *txn, note_id = *(uint64_t*)v.mv_data; if (!(note = ndb_get_note_by_key(txn, note_id, ¬e_size))) - continue; + goto next; if (!ndb_filter_matches_with(filter, note, 1 << NDB_FILTER_TAGS)) goto next; @@ -2881,6 +2949,18 @@ static enum ndb_query_plan ndb_filter_plan(struct ndb_filter *filter) return NDB_PLAN_CREATED; } +static const char *ndb_query_plan_name(int plan_id) +{ + switch (plan_id) { + case NDB_PLAN_IDS: return "ids"; + case NDB_PLAN_KINDS: return "kinds"; + case NDB_PLAN_TAGS: return "tags"; + case NDB_PLAN_CREATED: return "created"; + case NDB_PLAN_AUTHORS: return "authors"; + } + + return "unknown"; +} static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, struct ndb_query_result *res, int capacity, @@ -2900,7 +2980,7 @@ static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, &results.cur); plan = ndb_filter_plan(filter); - ndb_debug("using query plan %d\n", plan); + ndb_debug("using query plan '%s'\n", ndb_query_plan_name(plan)); switch (plan) { // We have a list of ids, just open a cursor and jump to each once case NDB_PLAN_IDS: @@ -2918,9 +2998,12 @@ static int ndb_query_filter(struct ndb_txn *txn, struct ndb_filter *filter, if (!ndb_query_plan_execute_tags(txn, filter, &results, limit)) return 0; break; - // TODO: finish query execution plans! case NDB_PLAN_CREATED: + if (!ndb_query_plan_execute_created_at(txn, filter, &results, limit)) + return 0; + break; case NDB_PLAN_AUTHORS: + // TODO: finish authors query plan return 0; } @@ -2934,6 +3017,7 @@ int ndb_query(struct ndb_txn *txn, struct ndb_filter *filters, int num_filters, int i, out; struct ndb_query_result *p = results; + out = 0; *count = 0; for (i = 0; i < num_filters; i++) { From 7314bca76a467a7ce8c5440ee53eb0fe69ea944a Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 13 Mar 2024 07:31:44 +0000 Subject: [PATCH 104/146] nostrdb: plan: use a less efficient plan for author query plans This is less efficient for now but we don't have a small-author-list query plan yet. Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 95ceb4e19..2c0476aac 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2939,7 +2939,9 @@ static enum ndb_query_plan ndb_filter_plan(struct ndb_filter *filter) if (ids) { return NDB_PLAN_IDS; } else if (authors && authors->count <= 5) { - return NDB_PLAN_AUTHORS; + // TODO: actually implment author plan and use it + //return NDB_PLAN_AUTHORS; + return NDB_PLAN_CREATED; } else if (tags && tags->count <= 5) { return NDB_PLAN_TAGS; } else if (kinds) { From b2db60e25d420d8244e3aacb1d41024dc1d6e4ac Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 3 Apr 2024 12:23:34 -0700 Subject: [PATCH 105/146] nostrdb: fix dubious looking parens logic Signed-off-by: William Casarin --- nostrdb/src/content_parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index 7767a7271..9243ff8a4 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -423,7 +423,7 @@ static int parse_url(struct cursor *cur, struct ndb_block *block) { } // smart parens - if (start - 1 >= 0 && + if ((start - 1) >= cur->start && start < cur->end && *(start - 1) == '(' && (cur->p - 1) < cur->end && From 19be2855eba4b39f052523619b304ac9d10b11ef Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Apr 2024 21:03:26 +0100 Subject: [PATCH 106/146] nostrdb: build: fix compile warning A small size_t/uint64 conversion issue Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 2c0476aac..9b2bb612c 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -2719,7 +2719,8 @@ static int ndb_query_plan_execute_created_at(struct ndb_txn *txn, int rc; struct ndb_note *note; struct ndb_tsid key, *pkey; - uint64_t *pint, until, since, note_id, note_size; + uint64_t *pint, until, since, note_id; + size_t note_size; struct ndb_query_result res; unsigned char high_key[32] = {0xFF}; @@ -2763,7 +2764,7 @@ static int ndb_query_plan_execute_created_at(struct ndb_txn *txn, if (pkey->timestamp < since) break; - ndb_query_result_init(&res, note, note_size, note_id); + ndb_query_result_init(&res, note, (uint64_t)note_size, note_id); if (!push_query_result(results, &res)) break; next: From e33464a560acbcb0788a1dd851a9823eada031d1 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 10 Apr 2024 18:06:45 -0700 Subject: [PATCH 107/146] nostrdb: add ndb_unsubscribe We didn't have a way to unsubscribe from subscriptions. Now we do! Apps like notecrumbs may open up many local subscriptions based on incoming requests. We may need to make the MAX_SUBSCRIPTIONS size much larger, but this should be okish for now. Changelog-Added: Add ndb_unsubscribe to unsubscribe from subscriptions Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 51 +++++++++++++++++++++++++++++++++---------- nostrdb/src/nostrdb.h | 3 ++- 2 files changed, 41 insertions(+), 13 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 9b2bb612c..e7766c07d 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -35,7 +35,7 @@ static const int THREAD_QUEUE_BATCH = 4096; // maximum number of active subscriptions -#define MAX_SUBSCRIPTIONS 32 +#define MAX_SUBSCRIPTIONS 256 #define MAX_SCAN_CURSORS 12 #define MAX_FILTERS 16 @@ -4236,7 +4236,7 @@ static int ndb_run_migrations(struct ndb *ndb) static void ndb_monitor_init(struct ndb_monitor *monitor) { - monitor->num_subscriptions = 0; + memset(monitor, 0, sizeof(*monitor)); } void ndb_filter_group_destroy(struct ndb_filter_group *group) @@ -4249,18 +4249,19 @@ void ndb_filter_group_destroy(struct ndb_filter_group *group) } } +static void ndb_subscription_destroy(struct ndb_subscription *sub) +{ + ndb_filter_group_destroy(&sub->group); + prot_queue_destroy(&sub->inbox); + sub->subid = 0; +} + static void ndb_monitor_destroy(struct ndb_monitor *monitor) { int i; - struct ndb_subscription *sub; - struct ndb_filter_group *group; for (i = 0; i < monitor->num_subscriptions; i++) { - sub = &monitor->subscriptions[i]; - group = &sub->group; - - ndb_filter_group_destroy(group); - prot_queue_destroy(&sub->inbox); + ndb_subscription_destroy(&monitor->subscriptions[i]); } } @@ -5867,7 +5868,7 @@ struct ndb_blocks *ndb_get_blocks_by_key(struct ndb *ndb, struct ndb_txn *txn, u return blocks; } -struct ndb_subscription *ndb_find_subscription(struct ndb *ndb, uint64_t subid) +struct ndb_subscription *ndb_find_subscription(struct ndb *ndb, uint64_t subid, int *index) { struct ndb_subscription *sub, *tsub; int i; @@ -5876,6 +5877,8 @@ struct ndb_subscription *ndb_find_subscription(struct ndb *ndb, uint64_t subid) tsub = &ndb->monitor.subscriptions[i]; if (tsub->subid == subid) { sub = tsub; + if (index) + *index = i; break; } } @@ -5891,7 +5894,7 @@ int ndb_poll_for_notes(struct ndb *ndb, uint64_t subid, uint64_t *note_ids, if (subid == 0) return 0; - if (!(sub = ndb_find_subscription(ndb, subid))) + if (!(sub = ndb_find_subscription(ndb, subid, NULL))) return 0; return prot_queue_try_pop_all(&sub->inbox, note_ids, note_id_capacity); @@ -5906,12 +5909,36 @@ int ndb_wait_for_notes(struct ndb *ndb, uint64_t subid, uint64_t *note_ids, if (subid == 0) return 0; - if (!(sub = ndb_find_subscription(ndb, subid))) + if (!(sub = ndb_find_subscription(ndb, subid, NULL))) return 0; return prot_queue_pop_all(&sub->inbox, note_ids, note_id_capacity); } +int ndb_unsubscribe(struct ndb *ndb, uint64_t subid) +{ + struct ndb_subscription *sub; + int index, elems_to_move; + + if (!(sub = ndb_find_subscription(ndb, subid, &index))) + return 0; + + ndb_subscription_destroy(sub); + + elems_to_move = (--ndb->monitor.num_subscriptions) - index; + + memmove(&ndb->monitor.subscriptions[index], + &ndb->monitor.subscriptions[index+1], + elems_to_move * sizeof(*sub)); + + return 1; +} + +int ndb_num_subscriptions(struct ndb *ndb) +{ + return ndb->monitor.num_subscriptions; +} + uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter *filters, int num_filters) { static uint64_t subids = 0; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index b3e65a306..27ead4ddb 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -497,7 +497,8 @@ void ndb_filter_destroy(struct ndb_filter *); uint64_t ndb_subscribe(struct ndb *, struct ndb_filter *, int num_filters); int ndb_wait_for_notes(struct ndb *, uint64_t subid, uint64_t *note_ids, int note_id_capacity); int ndb_poll_for_notes(struct ndb *, uint64_t subid, uint64_t *note_ids, int note_id_capacity); -int ndb_unsubscribe(int subid); +int ndb_unsubscribe(struct ndb *, uint64_t subid); +int ndb_num_subscriptions(struct ndb *); // FULLTEXT SEARCH int ndb_text_search(struct ndb_txn *txn, const char *query, struct ndb_text_search_results *, struct ndb_text_search_config *); From ab1380a524bc83864499900ef1d680d98873a614 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Apr 2024 21:22:35 +0100 Subject: [PATCH 108/146] nostrdb: add ability to register a subscription callback Since Damus iOS is not an immediate-mode UI like android, we would rather not poll for results. Instead we need a way to register a callback function that is called when we get new subscription results. This is also useful on the android side, allowing us to request a new frame to draw when we have new results, instead of drawing every second. Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 31 ++++++++++++++++++++++++++++--- nostrdb/src/nostrdb.h | 6 ++++++ 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index e7766c07d..c94137b11 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -191,6 +191,8 @@ struct ndb_subscription { struct ndb_monitor { struct ndb_subscription subscriptions[MAX_SUBSCRIPTIONS]; + ndb_sub_fn sub_cb; + void *sub_cb_ctx; int num_subscriptions; }; @@ -3738,6 +3740,7 @@ static void ndb_notify_subscriptions(struct ndb_monitor *monitor, struct written_note *wrote, int num_notes) { int i, k; + int pushed; struct written_note *written; struct ndb_note *note; struct ndb_subscription *sub; @@ -3746,20 +3749,31 @@ static void ndb_notify_subscriptions(struct ndb_monitor *monitor, sub = &monitor->subscriptions[i]; ndb_debug("checking subscription %d, %d notes\n", i, num_notes); + pushed = 0; for (k = 0; k < num_notes; k++) { written = &wrote[k]; note = written->note->note; if (ndb_filter_group_matches(&sub->group, note)) { ndb_debug("pushing note\n"); + if (!prot_queue_push(&sub->inbox, &written->note_id)) { ndb_debug("couldn't push note to subscriber"); + } else { + pushed++; } } else { ndb_debug("not pushing note\n"); } } + // After pushing all of the matching notes, check to see if we + // have a registered subscription callback. If so, we call it. + // The callback needs to call ndb_poll_for_notes to pull data + // that was just pushed to the queue in the for loop above. + if (monitor->sub_cb != NULL && pushed > 0) { + monitor->sub_cb(monitor->sub_cb_ctx, sub->subid); + } } } @@ -4234,9 +4248,12 @@ static int ndb_run_migrations(struct ndb *ndb) return 1; } -static void ndb_monitor_init(struct ndb_monitor *monitor) +static void ndb_monitor_init(struct ndb_monitor *monitor, ndb_sub_fn cb, + void *sub_cb_ctx) { - memset(monitor, 0, sizeof(*monitor)); + monitor->num_subscriptions = 0; + monitor->sub_cb = cb; + monitor->sub_cb_ctx = sub_cb_ctx; } void ndb_filter_group_destroy(struct ndb_filter_group *group) @@ -4281,7 +4298,7 @@ int ndb_init(struct ndb **pndb, const char *filename, const struct ndb_config *c if (!ndb_init_lmdb(filename, &ndb->lmdb, config->mapsize)) return 0; - ndb_monitor_init(&ndb->monitor); + ndb_monitor_init(&ndb->monitor, config->sub_cb, config->sub_cb_ctx); if (!ndb_writer_init(&ndb->writer, &ndb->lmdb, &ndb->monitor)) { fprintf(stderr, "ndb_writer_init failed\n"); @@ -5496,6 +5513,14 @@ void ndb_default_config(struct ndb_config *config) config->flags = 0; config->ingest_filter = NULL; config->filter_context = NULL; + config->sub_cb_ctx = NULL; + config->sub_cb = NULL; +} + +void ndb_config_set_subscription_callback(struct ndb_config *config, ndb_sub_fn fn, void *context) +{ + config->sub_cb_ctx = context; + config->sub_cb = fn; } void ndb_config_set_ingest_threads(struct ndb_config *config, int threads) diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 27ead4ddb..a80a18ad5 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -64,6 +64,9 @@ struct ndb_keypair { // function pointer for controlling what to do after we parse an id typedef enum ndb_idres (*ndb_id_fn)(void *, const char *); +// callback function for when we receive new subscription results +typedef void (*ndb_sub_fn)(void *, uint64_t subid); + // id callback + closure data struct ndb_id_cb { ndb_id_fn fn; @@ -256,6 +259,8 @@ struct ndb_config { size_t mapsize; void *filter_context; ndb_ingest_filter_fn ingest_filter; + void *sub_cb_ctx; + ndb_sub_fn sub_cb; }; struct ndb_text_search_config { @@ -430,6 +435,7 @@ void ndb_config_set_ingest_threads(struct ndb_config *config, int threads); void ndb_config_set_flags(struct ndb_config *config, int flags); void ndb_config_set_mapsize(struct ndb_config *config, size_t mapsize); void ndb_config_set_ingest_filter(struct ndb_config *config, ndb_ingest_filter_fn fn, void *); +void ndb_config_set_subscription_callback(struct ndb_config *config, ndb_sub_fn fn, void *ctx); // HELPERS int ndb_calculate_id(struct ndb_note *note, unsigned char *buf, int buflen); From 94b8a0713600aecf303f32270b0f9e22b7b56d19 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Apr 2024 16:20:09 -0700 Subject: [PATCH 109/146] nostrdb: fix realloc corruption can't figure out why this is happening, but let's disable it for now while we test. we shouldn't hit this code path anyways once we switch over to local notes in damus ios Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index c94137b11..2ea7e2a61 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -5841,9 +5841,9 @@ static struct ndb_blocks *ndb_note_to_blocks(struct ndb_note *note) return NULL; } - blocks = realloc(blocks, ndb_blocks_total_size(blocks)); - if (blocks == NULL) - return NULL; + //blocks = realloc(blocks, ndb_blocks_total_size(blocks)); + //if (blocks == NULL) + //return NULL; blocks->flags |= NDB_BLOCK_FLAG_OWNED; From 7eddbe0029852cd3b6f78920a65cd13d892140d4 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Tue, 30 Apr 2024 23:19:05 +0200 Subject: [PATCH 110/146] nostrdb: api: add ndb_note_json add a way to write an ndb note as json to a buffer Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 48 +++++++++++++++++++++++++++++++++++++++++++ nostrdb/src/nostrdb.h | 3 +++ 2 files changed, 51 insertions(+) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 2ea7e2a61..5bc011408 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -4726,6 +4726,54 @@ static int ndb_event_commitment(struct ndb_note *ev, unsigned char *buf, int buf return cur.p - cur.start; } +static int cursor_push_hex(struct cursor *c, unsigned char *bytes, int len) +{ + int i; + unsigned char chr; + if (c->p + (len * 2) >= c->end) + return 0; + + for (i = 0; i < len; i++) { + chr = bytes[i]; + + *(c->p++) = hexchar(chr >> 4); + *(c->p++) = hexchar(chr & 0xF); + } + + return 1; +} + +static int cursor_push_int_str(struct cursor *c, int num) +{ + char timebuf[16] = {0}; + snprintf(timebuf, sizeof(timebuf), "%d", num); + return cursor_push_str(c, timebuf); +} + +int ndb_note_json(struct ndb_note *note, char *buf, int buflen) +{ + struct cursor cur, *c = &cur; + + make_cursor((unsigned char *)buf, (unsigned char*)buf + buflen, &cur); + + return cursor_push_str(c, "{\"id\":\"") && + cursor_push_hex(c, ndb_note_id(note), 32) && + cursor_push_str(c, "\",\"pubkey\":\"") && + cursor_push_hex(c, ndb_note_pubkey(note), 32) && + cursor_push_str(c, "\",\"created_at\":") && + cursor_push_int_str(c, ndb_note_created_at(note)) && + cursor_push_str(c, ",\"kind\":") && + cursor_push_int_str(c, ndb_note_kind(note)) && + cursor_push_str(c, ",\"tags\":") && + cursor_push_json_tags(c, note) && + cursor_push_str(c, ",\"content\":") && + cursor_push_jsonstr(c, ndb_note_content(note)) && + cursor_push_str(c, ",\"sig\":\"") && + cursor_push_hex(c, ndb_note_sig(note), 64) && + cursor_push_c_str(c, "\"}"); + +} + int ndb_calculate_id(struct ndb_note *note, unsigned char *buf, int buflen) { int len; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index a80a18ad5..3f8bbc687 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -532,6 +532,9 @@ void _ndb_note_set_kind(struct ndb_note *note, uint32_t kind); struct ndb_tags *ndb_note_tags(struct ndb_note *note); int ndb_str_len(struct ndb_str *str); +/// write the note as json to a buffer +int ndb_note_json(struct ndb_note *, char *buf, int buflen); + // TAGS void ndb_tags_iterate_start(struct ndb_note *note, struct ndb_iterator *iter); uint16_t ndb_tags_count(struct ndb_tags *); From 57c67343f61c5ee6fc0a70e34cbea41fca161efe Mon Sep 17 00:00:00 2001 From: William Casarin Date: Tue, 30 Apr 2024 23:22:30 +0200 Subject: [PATCH 111/146] nostrdb: ndb: dump json in filters and fulltext queries This is much more useful Signed-off-by: William Casarin --- nostrdb/src/print_util.h | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/nostrdb/src/print_util.h b/nostrdb/src/print_util.h index 93c85168a..1cc8d730a 100644 --- a/nostrdb/src/print_util.h +++ b/nostrdb/src/print_util.h @@ -1,7 +1,7 @@ static void ndb_print_text_search_key(struct ndb_text_search_key *key) { - printf("K<'%.*s' %" PRIu64 " %" PRIu64 " note_id:%" PRIu64 ">", key->str_len, key->str, + fprintf(stderr,"K<'%.*s' %" PRIu64 " %" PRIu64 " note_id:%" PRIu64 ">", key->str_len, key->str, key->word_index, key->timestamp, key->note_id); @@ -14,23 +14,11 @@ static void print_hex(unsigned char* data, size_t size) { } } - -static void ndb_print_text_search_result(struct ndb_txn *txn, - struct ndb_text_search_result *r) -{ - size_t len; - struct ndb_note *note; - - ndb_print_text_search_key(&r->key); - - if (!(note = ndb_get_note_by_key(txn, r->key.note_id, &len))) { - printf(": note not found"); - return; +static void print_hex_stream(FILE *stream, unsigned char* data, size_t size) { + size_t i; + for (i = 0; i < size; i++) { + fprintf(stream, "%02x", data[i]); } - - printf(" "); - print_hex(ndb_note_id(note), 32); - - printf("\n%s\n\n---\n", ndb_note_content(note)); } + From 0b000f7261f9c85dbcad48b82857b950debc2f74 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 28 Jun 2024 16:41:32 -0500 Subject: [PATCH 112/146] nostrdb: ndb_note_json: return length Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 5bc011408..17b50ac8e 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -4756,7 +4756,7 @@ int ndb_note_json(struct ndb_note *note, char *buf, int buflen) make_cursor((unsigned char *)buf, (unsigned char*)buf + buflen, &cur); - return cursor_push_str(c, "{\"id\":\"") && + int ok = cursor_push_str(c, "{\"id\":\"") && cursor_push_hex(c, ndb_note_id(note), 32) && cursor_push_str(c, "\",\"pubkey\":\"") && cursor_push_hex(c, ndb_note_pubkey(note), 32) && @@ -4772,6 +4772,11 @@ int ndb_note_json(struct ndb_note *note, char *buf, int buflen) cursor_push_hex(c, ndb_note_sig(note), 64) && cursor_push_c_str(c, "\"}"); + if (!ok) { + return 0; + } + + return cur.p - cur.start; } int ndb_calculate_id(struct ndb_note *note, unsigned char *buf, int buflen) { From d506a6ab0e08b00def0567dd238f088509da8256 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 1 Aug 2024 13:37:11 -0700 Subject: [PATCH 113/146] nostrdb: fix note content parsing bug with damus.io urls Changelog-Fixed: Fixed bug where non-bech32 damus io urls would cause corruption Signed-off-by: William Casarin --- nostrdb/src/nostr_bech32.c | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index e4ba25205..6e086e80b 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -52,25 +52,25 @@ int parse_nostr_bech32_type(const char *prefix, enum nostr_bech32_type *type) { // Parse type if (strncmp(prefix, "note", 4) == 0) { *type = NOSTR_BECH32_NOTE; - return 1; + return 4; } else if (strncmp(prefix, "npub", 4) == 0) { *type = NOSTR_BECH32_NPUB; - return 1; + return 4; } else if (strncmp(prefix, "nsec", 4) == 0) { *type = NOSTR_BECH32_NSEC; - return 1; + return 4; } else if (strncmp(prefix, "nprofile", 8) == 0) { *type = NOSTR_BECH32_NPROFILE; - return 1; + return 8; } else if (strncmp(prefix, "nevent", 6) == 0) { *type = NOSTR_BECH32_NEVENT; - return 1; + return 6; } else if (strncmp(prefix, "nrelay", 6) == 0) { *type = NOSTR_BECH32_NRELAY; - return 1; + return 6; } else if (strncmp(prefix, "naddr", 5) == 0) { *type = NOSTR_BECH32_NADDR; - return 1; + return 5; } return 0; @@ -272,11 +272,26 @@ int parse_nostr_bech32_buffer(struct cursor *cur, int parse_nostr_bech32_str(struct cursor *bech32, enum nostr_bech32_type *type) { - if (!parse_nostr_bech32_type((const char *)bech32->p, type)) + unsigned char *start = bech32->p; + unsigned char *data_start; + int n; + + if (!(n = parse_nostr_bech32_type((const char *)bech32->p, type))) { + bech32->p = start; return 0; + } - if (!consume_until_non_alphanumeric(bech32, 1)) + data_start = start + n; + if (!consume_until_non_alphanumeric(bech32, 1)) { + bech32->p = start; + return 0; + } + + // must be at least 60 chars for the data part + if (bech32->p - data_start < 60) { + bech32->p = start; return 0; + } return 1; } From 05b157d90ef737a4b2cafbf12e36e09e1e6055af Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 1 Aug 2024 13:38:26 -0700 Subject: [PATCH 114/146] nostrdb: debug: improve tag index display Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 8 +++----- nostrdb/src/print_util.h | 28 ++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 17b50ac8e..cdd335935 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -5598,7 +5598,7 @@ void ndb_config_set_ingest_filter(struct ndb_config *config, config->filter_context = filter_ctx; } -int ndb_print_tag_keys(struct ndb_txn *txn) +int ndb_print_tag_index(struct ndb_txn *txn) { MDB_cursor *cur; MDB_val k, v; @@ -5609,10 +5609,8 @@ int ndb_print_tag_keys(struct ndb_txn *txn) i = 1; while (mdb_cursor_get(cur, &k, &v, MDB_NEXT) == 0) { - printf("%d note_tags '%.*s' %" PRIu64 "\n", - i, (int)k.mv_size-8, (const char *)k.mv_data, - *(uint64_t*)(k.mv_data+(k.mv_size-8))); - + printf("%d ", i); + print_tag_kv(txn, &k, &v); i++; } diff --git a/nostrdb/src/print_util.h b/nostrdb/src/print_util.h index 1cc8d730a..6c77882b5 100644 --- a/nostrdb/src/print_util.h +++ b/nostrdb/src/print_util.h @@ -1,3 +1,5 @@ +#include "hex.h" +#include "lmdb.h" static void ndb_print_text_search_key(struct ndb_text_search_key *key) { @@ -14,6 +16,32 @@ static void print_hex(unsigned char* data, size_t size) { } } +static void print_tag_kv(struct ndb_txn *txn, MDB_val *k, MDB_val *v) +{ + char hex_id[65]; + struct ndb_note *note; + uint64_t ts; + + ts = *(uint64_t*)(k->mv_data+(k->mv_size-8)); + + // TODO: p tags, etc + if (((const char*)k->mv_data)[0] == 'e' && k->mv_size == (1 + 32 + 8)) { + printf("note_tags 'e"); + print_hex(k->mv_data+1, 32); + printf("' %" PRIu64, ts); + } else { + printf("note_tags '%.*s' %" PRIu64, (int)k->mv_size-8, + (const char *)k->mv_data, ts); + } + + ts = *(uint64_t*)v->mv_data; + + note = ndb_get_note_by_key(txn, ts, NULL); + assert(note); + hex_encode(ndb_note_id(note), 32, hex_id); + printf(" note_key:%" PRIu64 " id:%s\n", ts, hex_id); +} + static void print_hex_stream(FILE *stream, unsigned char* data, size_t size) { size_t i; for (i = 0; i < size; i++) { From 82b13cb114f2247d40b975da624bfb55fcaaacad Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 1 Aug 2024 14:07:19 -0700 Subject: [PATCH 115/146] nostrdb: fix bech32 parsing and add test was off by one Signed-off-by: William Casarin --- nostrdb/src/nostr_bech32.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index 6e086e80b..f9f8c334b 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -287,8 +287,9 @@ int parse_nostr_bech32_str(struct cursor *bech32, enum nostr_bech32_type *type) return 0; } - // must be at least 60 chars for the data part - if (bech32->p - data_start < 60) { + // must be at least 59 chars for the data part + //ndb_debug("bech32_data_size %ld '%c' '%c' '%.*s'\n", bech32->p - data_start, *(bech32->p-1), *data_start, (int)(bech32->p - data_start), data_start); + if (bech32->p - data_start < 59) { bech32->p = start; return 0; } From 34e8e2ad8eb18492c0a64a3794356321637eda47 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 1 Aug 2024 16:55:22 -0700 Subject: [PATCH 116/146] nostrdb: Fix issue where id tag filters are pushed as strings When creating filters, sometimes IDs are pushed as strings, so if there is ever a 0 byte, the id prematurely ends, causing the filter to not match Fixes: https://github.com/rust-nostr/nostr/issues/454 Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index cdd335935..ad1a4f366 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -784,8 +784,18 @@ static int ndb_filter_add_element(struct ndb_filter *filter, union ndb_filter_el offset = el.integer; break; case NDB_FILTER_TAGS: - if (!cursor_push_c_str(&filter->data_buf, el.string)) + switch (current->field.elem_type) { + case NDB_ELEMENT_ID: + if (!cursor_push(&filter->data_buf, (unsigned char *)el.id, 32)) + return 0; + break; + case NDB_ELEMENT_STRING: + if (!cursor_push_c_str(&filter->data_buf, el.string)) + return 0; + break; + case NDB_ELEMENT_UNKNOWN: return 0; + } // push a pointer of the string in the databuf as an element break; } From 1075890b3846023d9fdee363812afc9204dca2a9 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 3 Aug 2024 13:34:36 -0700 Subject: [PATCH 117/146] nostrdb: add ndb_filter_json method Changelog-Added: Add ndb_filter_json method for creating json filters Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 145 +++++++++++++++++++++++++++++++++++++++++- nostrdb/src/nostrdb.h | 2 + 2 files changed, 145 insertions(+), 2 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index ad1a4f366..a27a2130c 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -649,6 +649,12 @@ ndb_filter_get_string_element(struct ndb_filter *filter, struct ndb_filter_eleme return (const char *)ndb_filter_elements_data(filter, els->elements[index]); } +static inline uint64_t +ndb_filter_get_int_element(struct ndb_filter_elements *els, int index) +{ + return els->elements[index]; +} + int ndb_filter_init(struct ndb_filter *filter) { struct cursor cur; @@ -793,6 +799,8 @@ static int ndb_filter_add_element(struct ndb_filter *filter, union ndb_filter_el if (!cursor_push_c_str(&filter->data_buf, el.string)) return 0; break; + case NDB_ELEMENT_INT: + // ints are not allowed in tag filters case NDB_ELEMENT_UNKNOWN: return 0; } @@ -879,6 +887,9 @@ int ndb_filter_add_int_element(struct ndb_filter *filter, uint64_t integer) break; } + if (!ndb_filter_set_elem_type(filter, NDB_ELEMENT_INT)) + return 0; + el.integer = integer; return ndb_filter_add_element(filter, el); @@ -978,6 +989,8 @@ static int ndb_tag_filter_matches(struct ndb_filter *filter, if (!strcmp(el_str, str.str)) return 1; break; + case NDB_ELEMENT_INT: + // int elements int tag queries are not supported case NDB_ELEMENT_UNKNOWN: return 0; } @@ -4753,10 +4766,10 @@ static int cursor_push_hex(struct cursor *c, unsigned char *bytes, int len) return 1; } -static int cursor_push_int_str(struct cursor *c, int num) +static int cursor_push_int_str(struct cursor *c, uint64_t num) { char timebuf[16] = {0}; - snprintf(timebuf, sizeof(timebuf), "%d", num); + snprintf(timebuf, sizeof(timebuf), "%" PRIu64, num); return cursor_push_str(c, timebuf); } @@ -4789,6 +4802,134 @@ int ndb_note_json(struct ndb_note *note, char *buf, int buflen) return cur.p - cur.start; } +static int cursor_push_json_elem_array(struct cursor *cur, + struct ndb_filter *filter, + struct ndb_filter_elements *elems) +{ + int i; + unsigned char *id; + const char *str; + uint64_t val; + + if (!cursor_push_byte(cur, '[')) + return 0; + + for (i = 0; i < elems->count; i++) { + + switch (elems->field.elem_type) { + case NDB_ELEMENT_STRING: + str = ndb_filter_get_string_element(filter, elems, i); + if (!cursor_push_jsonstr(cur, str)) + return 0; + break; + case NDB_ELEMENT_ID: + id = ndb_filter_get_id_element(filter, elems, i); + if (!cursor_push_hex_str(cur, id, 32)) + return 0; + break; + case NDB_ELEMENT_INT: + val = ndb_filter_get_int_element(elems, i); + if (!cursor_push_int_str(cur, val)) + return 0; + break; + case NDB_ELEMENT_UNKNOWN: + ndb_debug("unknown element in cursor_push_json_elem_array"); + return 0; + } + + if (i != elems->count-1) { + if (!cursor_push_byte(cur, ',')) + return 0; + } + } + + if (!cursor_push_str(cur, "]")) + return 0; + + return 1; +} + +int ndb_filter_json(struct ndb_filter *filter, char *buf, int buflen) +{ + struct cursor cur, *c = &cur; + struct ndb_filter_elements *elems; + int i; + + if (!filter->finalized) { + ndb_debug("filter not finalized in ndb_filter_json\n"); + return 0; + } + + make_cursor((unsigned char *)buf, (unsigned char*)buf + buflen, c); + + if (!cursor_push_str(c, "{")) + return 0; + + for (i = 0; i < filter->num_elements; i++) { + elems = ndb_filter_get_elements(filter, i); + switch (elems->field.type) { + case NDB_FILTER_IDS: + if (!cursor_push_str(c, "\"ids\":")) + return 0; + if (!cursor_push_json_elem_array(c, filter, elems)) + return 0; + break; + case NDB_FILTER_AUTHORS: + if (!cursor_push_str(c, "\"authors\":")) + return 0; + if (!cursor_push_json_elem_array(c, filter, elems)) + return 0; + break; + case NDB_FILTER_KINDS: + if (!cursor_push_str(c, "\"kinds\":")) + return 0; + if (!cursor_push_json_elem_array(c, filter, elems)) + return 0; + break; + case NDB_FILTER_TAGS: + if (!cursor_push_str(c, "\"#")) + return 0; + if (!cursor_push_byte(c, elems->field.tag)) + return 0; + if (!cursor_push_str(c, "\":")) + return 0; + if (!cursor_push_json_elem_array(c, filter, elems)) + return 0; + break; + case NDB_FILTER_SINCE: + if (!cursor_push_str(c, "\"since\":")) + return 0; + if (!cursor_push_int_str(c, ndb_filter_get_int_element(elems, 0))) + return 0; + break; + case NDB_FILTER_UNTIL: + if (!cursor_push_str(c, "\"until\":")) + return 0; + if (!cursor_push_int_str(c, ndb_filter_get_int_element(elems, 0))) + return 0; + break; + case NDB_FILTER_LIMIT: + if (!cursor_push_str(c, "\"limit\":")) + return 0; + if (!cursor_push_int_str(c, ndb_filter_get_int_element(elems, 0))) + return 0; + break; + } + + if (i != filter->num_elements-1) { + if (!cursor_push_byte(c, ',')) { + return 0; + } + } + + } + + if (!cursor_push_c_str(c, "}")) + return 0; + + return cur.p - cur.start; +} + int ndb_calculate_id(struct ndb_note *note, unsigned char *buf, int buflen) { int len; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 3f8bbc687..eaadaf924 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -161,6 +161,7 @@ enum ndb_generic_element_type { NDB_ELEMENT_UNKNOWN = 0, NDB_ELEMENT_STRING = 1, NDB_ELEMENT_ID = 2, + NDB_ELEMENT_INT = 3, }; enum ndb_search_order { @@ -498,6 +499,7 @@ int ndb_filter_clone(struct ndb_filter *dst, struct ndb_filter *src); int ndb_filter_end(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); void ndb_filter_destroy(struct ndb_filter *); +int ndb_filter_json(struct ndb_filter *, char *buf, int buflen); // SUBSCRIPTIONS uint64_t ndb_subscribe(struct ndb *, struct ndb_filter *, int num_filters); From 895bbb27b986bace4033ab3b018c67b87c67099e Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 3 Aug 2024 14:24:58 -0700 Subject: [PATCH 118/146] nostrdb: make more things const rust is happier this way Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 16 ++++++++-------- nostrdb/src/nostrdb.h | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index a27a2130c..58ca2e722 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -589,7 +589,7 @@ int ndb_filter_end(struct ndb_filter *filter) } static inline struct ndb_filter_elements * -ndb_filter_get_elements_by_offset(struct ndb_filter *filter, int offset) +ndb_filter_get_elements_by_offset(const struct ndb_filter *filter, int offset) { struct ndb_filter_elements *els; @@ -605,13 +605,13 @@ ndb_filter_get_elements_by_offset(struct ndb_filter *filter, int offset) } struct ndb_filter_elements * -ndb_filter_current_element(struct ndb_filter *filter) +ndb_filter_current_element(const struct ndb_filter *filter) { return ndb_filter_get_elements_by_offset(filter, filter->current); } static inline struct ndb_filter_elements * -ndb_filter_get_elements(struct ndb_filter *filter, int index) +ndb_filter_get_elements(const struct ndb_filter *filter, int index) { if (filter->num_elements <= 0) return NULL; @@ -623,7 +623,7 @@ ndb_filter_get_elements(struct ndb_filter *filter, int index) } static inline unsigned char * -ndb_filter_elements_data(struct ndb_filter *filter, int offset) +ndb_filter_elements_data(const struct ndb_filter *filter, int offset) { unsigned char *data; @@ -638,13 +638,13 @@ ndb_filter_elements_data(struct ndb_filter *filter, int offset) } static inline unsigned char * -ndb_filter_get_id_element(struct ndb_filter *filter, struct ndb_filter_elements *els, int index) +ndb_filter_get_id_element(const struct ndb_filter *filter, struct ndb_filter_elements *els, int index) { return ndb_filter_elements_data(filter, els->elements[index]); } static inline const char * -ndb_filter_get_string_element(struct ndb_filter *filter, struct ndb_filter_elements *els, int index) +ndb_filter_get_string_element(const struct ndb_filter *filter, struct ndb_filter_elements *els, int index) { return (const char *)ndb_filter_elements_data(filter, els->elements[index]); } @@ -4803,7 +4803,7 @@ int ndb_note_json(struct ndb_note *note, char *buf, int buflen) } static int cursor_push_json_elem_array(struct cursor *cur, - struct ndb_filter *filter, + const struct ndb_filter *filter, struct ndb_filter_elements *elems) { int i; @@ -4849,7 +4849,7 @@ static int cursor_push_json_elem_array(struct cursor *cur, return 1; } -int ndb_filter_json(struct ndb_filter *filter, char *buf, int buflen) +int ndb_filter_json(const struct ndb_filter *filter, char *buf, int buflen) { struct cursor cur, *c = &cur; struct ndb_filter_elements *elems; diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index eaadaf924..5ecf4386f 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -491,7 +491,7 @@ int ndb_filter_add_id_element(struct ndb_filter *, const unsigned char *id); int ndb_filter_add_int_element(struct ndb_filter *, uint64_t integer); int ndb_filter_add_str_element(struct ndb_filter *, const char *str); -struct ndb_filter_elements *ndb_filter_current_element(struct ndb_filter *); +struct ndb_filter_elements *ndb_filter_current_element(const struct ndb_filter *); int ndb_filter_start_field(struct ndb_filter *, enum ndb_filter_fieldtype); int ndb_filter_start_tag_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); @@ -499,7 +499,7 @@ int ndb_filter_clone(struct ndb_filter *dst, struct ndb_filter *src); int ndb_filter_end(struct ndb_filter *); void ndb_filter_end_field(struct ndb_filter *); void ndb_filter_destroy(struct ndb_filter *); -int ndb_filter_json(struct ndb_filter *, char *buf, int buflen); +int ndb_filter_json(const struct ndb_filter *, char *buf, int buflen); // SUBSCRIPTIONS uint64_t ndb_subscribe(struct ndb *, struct ndb_filter *, int num_filters); From 091d9ddd1811aaca05ef43ced9295dbb3f0675c9 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Tue, 13 Aug 2024 11:20:38 -0700 Subject: [PATCH 119/146] nostrdb: expose ndb_filter_get_elements This can be used to iterate though filter elements Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 2 +- nostrdb/src/nostrdb.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 58ca2e722..8963dcd53 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -610,7 +610,7 @@ ndb_filter_current_element(const struct ndb_filter *filter) return ndb_filter_get_elements_by_offset(filter, filter->current); } -static inline struct ndb_filter_elements * +struct ndb_filter_elements * ndb_filter_get_elements(const struct ndb_filter *filter, int index) { if (filter->num_elements <= 0) diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 5ecf4386f..237178a2c 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -492,6 +492,7 @@ int ndb_filter_add_int_element(struct ndb_filter *, uint64_t integer); int ndb_filter_add_str_element(struct ndb_filter *, const char *str); struct ndb_filter_elements *ndb_filter_current_element(const struct ndb_filter *); +struct ndb_filter_elements *ndb_filter_get_elements(const struct ndb_filter *, int); int ndb_filter_start_field(struct ndb_filter *, enum ndb_filter_fieldtype); int ndb_filter_start_tag_field(struct ndb_filter *, char tag); int ndb_filter_matches(struct ndb_filter *, struct ndb_note *); From 94eda3cd8b57a1d3d1177390a63a772490fdf812 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 14 Aug 2024 11:21:31 -0700 Subject: [PATCH 120/146] nostrdb: expose filter introspection methods Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 12 ++++++------ nostrdb/src/nostrdb.h | 5 +++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 8963dcd53..705b5b022 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -637,20 +637,20 @@ ndb_filter_elements_data(const struct ndb_filter *filter, int offset) return data; } -static inline unsigned char * -ndb_filter_get_id_element(const struct ndb_filter *filter, struct ndb_filter_elements *els, int index) +unsigned char * +ndb_filter_get_id_element(const struct ndb_filter *filter, const struct ndb_filter_elements *els, int index) { return ndb_filter_elements_data(filter, els->elements[index]); } -static inline const char * -ndb_filter_get_string_element(const struct ndb_filter *filter, struct ndb_filter_elements *els, int index) +const char * +ndb_filter_get_string_element(const struct ndb_filter *filter, const struct ndb_filter_elements *els, int index) { return (const char *)ndb_filter_elements_data(filter, els->elements[index]); } -static inline uint64_t -ndb_filter_get_int_element(struct ndb_filter_elements *els, int index) +uint64_t +ndb_filter_get_int_element(const struct ndb_filter_elements *els, int index) { return els->elements[index]; } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 237178a2c..91197f960 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -491,6 +491,11 @@ int ndb_filter_add_id_element(struct ndb_filter *, const unsigned char *id); int ndb_filter_add_int_element(struct ndb_filter *, uint64_t integer); int ndb_filter_add_str_element(struct ndb_filter *, const char *str); +// getting field elements +unsigned char *ndb_filter_get_id_element(const struct ndb_filter *, const struct ndb_filter_elements *, int index); +const char *ndb_filter_get_string_element(const struct ndb_filter *, const struct ndb_filter_elements *, int index); +uint64_t ndb_filter_get_int_element(const struct ndb_filter_elements *, int index); + struct ndb_filter_elements *ndb_filter_current_element(const struct ndb_filter *); struct ndb_filter_elements *ndb_filter_get_elements(const struct ndb_filter *, int); int ndb_filter_start_field(struct ndb_filter *, enum ndb_filter_fieldtype); From 5d624847536a84eb2876c25ba7476e243afb3854 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 17 Aug 2024 14:57:06 +0930 Subject: [PATCH 121/146] nostrdb: bolt11: move utf8_check into local function. It isn't actually in the CCAN module (though it probably should be!). So it breaks when we update. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/src/bolt11/bolt11.c | 18 ++++++++++++++++++ nostrdb/src/bolt11/utf8.h | 2 -- nostrdb/src/util.h | 1 - 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/nostrdb/src/bolt11/bolt11.c b/nostrdb/src/bolt11/bolt11.c index 343a40904..c22a92152 100644 --- a/nostrdb/src/bolt11/bolt11.c +++ b/nostrdb/src/bolt11/bolt11.c @@ -178,6 +178,24 @@ static void decode_p(struct bolt11 *b11, *have_p = true; } +/* Check for valid UTF-8 */ +static bool utf8_check(const void *vbuf, size_t buflen) +{ + const u8 *buf = vbuf; + struct utf8_state utf8_state = UTF8_STATE_INIT; + bool need_more = false; + + for (size_t i = 0; i < buflen; i++) { + if (!utf8_decode(&utf8_state, buf[i])) { + need_more = true; + continue; + } + need_more = false; + if (errno != 0) + return false; + } + return !need_more; +} static char *utf8_str(const tal_t *ctx, const u8 *buf TAKES, size_t buflen) { diff --git a/nostrdb/src/bolt11/utf8.h b/nostrdb/src/bolt11/utf8.h index 1321568ad..3eac3a0ee 100644 --- a/nostrdb/src/bolt11/utf8.h +++ b/nostrdb/src/bolt11/utf8.h @@ -52,6 +52,4 @@ bool utf8_decode(struct utf8_state *utf8_state, char c); */ size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]); -/* Check for valid UTF-8 */ -bool utf8_check(const void *vbuf, size_t buflen); #endif /* CCAN_UTF8_H */ diff --git a/nostrdb/src/util.h b/nostrdb/src/util.h index e60e38800..1d769c579 100644 --- a/nostrdb/src/util.h +++ b/nostrdb/src/util.h @@ -28,6 +28,5 @@ static inline char *strdupn(const char *src, size_t size) { dest[size] = '\0'; return dest; } - #endif // NDB_UTIL_H From bcacf9bf2f597c20666a0fe69489cb217cf3e5bf Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 17 Aug 2024 14:57:12 +0930 Subject: [PATCH 122/146] nostrdb: Makefile: build using ccan/ versions of files. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/src/bolt11/amount.c | 6 +++--- nostrdb/src/bolt11/amount.h | 4 ++-- nostrdb/src/bolt11/bech32_util.h | 2 +- nostrdb/src/bolt11/bolt11.c | 16 ++++++++-------- nostrdb/src/bolt11/bolt11.h | 4 ++-- nostrdb/src/bolt11/hash_u5.c | 3 ++- nostrdb/src/bolt11/hash_u5.h | 4 ++-- nostrdb/src/bolt11/node_id.h | 4 ++-- nostrdb/src/bolt11/overflows.h | 2 +- nostrdb/src/nostrdb.c | 2 +- 10 files changed, 24 insertions(+), 23 deletions(-) diff --git a/nostrdb/src/bolt11/amount.c b/nostrdb/src/bolt11/amount.c index a0f9ef571..a7584ad7a 100644 --- a/nostrdb/src/bolt11/amount.c +++ b/nostrdb/src/bolt11/amount.c @@ -1,9 +1,9 @@ #include "../config.h" -#include -#include "mem.h" -#include "talstr.h" +#include "ccan/mem/mem.h" +#include "ccan/tal/str/str.h" #include "amount.h" #include "overflows.h" +#include #include bool amount_sat_to_msat(struct amount_msat *msat, diff --git a/nostrdb/src/bolt11/amount.h b/nostrdb/src/bolt11/amount.h index 4e6c11ed7..db8e54023 100644 --- a/nostrdb/src/bolt11/amount.h +++ b/nostrdb/src/bolt11/amount.h @@ -1,8 +1,8 @@ #ifndef LIGHTNING_COMMON_AMOUNT_H #define LIGHTNING_COMMON_AMOUNT_H #include "../config.h" -#include "short_types.h" -#include "tal.h" +#include "ccan/short_types/short_types.h" +#include "ccan/tal/tal.h" #define MSAT_PER_SAT ((u64)1000) #define SAT_PER_BTC ((u64)100000000) diff --git a/nostrdb/src/bolt11/bech32_util.h b/nostrdb/src/bolt11/bech32_util.h index 20031ebc6..3d5ce3139 100644 --- a/nostrdb/src/bolt11/bech32_util.h +++ b/nostrdb/src/bolt11/bech32_util.h @@ -2,7 +2,7 @@ #define LIGHTNING_COMMON_BECH32_UTIL_H #include "../config.h" -#include "tal.h" +#include "ccan/tal/tal.h" #include "hash_u5.h" /** diff --git a/nostrdb/src/bolt11/bolt11.c b/nostrdb/src/bolt11/bolt11.c index c22a92152..397f1ca7c 100644 --- a/nostrdb/src/bolt11/bolt11.c +++ b/nostrdb/src/bolt11/bolt11.c @@ -10,18 +10,18 @@ //#include "address.h" //#include "script.h" #include "bech32.h" -#include "utf8.h" -#include "../compiler.h" -#include "../endian.h" -#include "list.h" -#include "talstr.h" -#include "tal.h" +#include "ccan/utf8/utf8.h" +#include "ccan/compiler//compiler.h" +#include "ccan/endian/endian.h" +#include "ccan/list/list.h" +#include "ccan/tal/str/str.h" +#include "ccan/tal/tal.h" #include "node_id.h" #include "bech32_util.h" #include "bolt11.h" #include "amount.h" -#include "array_size.h" -#include "structeq.h" +#include "ccan/array_size/array_size.h" +#include "ccan/structeq/structeq.h" //#include "features.h" #include diff --git a/nostrdb/src/bolt11/bolt11.h b/nostrdb/src/bolt11/bolt11.h index aabbb8a5b..4f0de2596 100644 --- a/nostrdb/src/bolt11/bolt11.h +++ b/nostrdb/src/bolt11/bolt11.h @@ -1,10 +1,10 @@ #ifndef LIGHTNING_COMMON_BOLT11_H #define LIGHTNING_COMMON_BOLT11_H -#include "short_types.h" +#include "ccan/short_types/short_types.h" #include "hash_u5.h" #include "amount.h" -#include "list.h" +#include "ccan/list/list.h" #include "amount.h" #include "node_id.h" //#include diff --git a/nostrdb/src/bolt11/hash_u5.c b/nostrdb/src/bolt11/hash_u5.c index 737ec03f2..04cb5fcee 100644 --- a/nostrdb/src/bolt11/hash_u5.c +++ b/nostrdb/src/bolt11/hash_u5.c @@ -1,5 +1,6 @@ #include "../config.h" -#include "../endian.h" +#include "ccan/endian/endian.h" +#include "ccan/short_types/short_types.h" #include "hash_u5.h" #include diff --git a/nostrdb/src/bolt11/hash_u5.h b/nostrdb/src/bolt11/hash_u5.h index 69f4b6f78..8d4debec5 100644 --- a/nostrdb/src/bolt11/hash_u5.h +++ b/nostrdb/src/bolt11/hash_u5.h @@ -1,8 +1,8 @@ /* bech32 (thus bolt11) deal in 5-bit values */ #ifndef LIGHTNING_COMMON_HASH_U5_H #define LIGHTNING_COMMON_HASH_U5_H -#include "../sha256.h" -#include "short_types.h" +#include "ccan/crypto/sha256/sha256.h" +#include "ccan/short_types/short_types.h" /* Type to annotate a 5 bit value. */ typedef unsigned char u5; diff --git a/nostrdb/src/bolt11/node_id.h b/nostrdb/src/bolt11/node_id.h index 873e10b18..00d798d67 100644 --- a/nostrdb/src/bolt11/node_id.h +++ b/nostrdb/src/bolt11/node_id.h @@ -2,8 +2,8 @@ #ifndef LIGHTNING_COMMON_NODE_ID_H #define LIGHTNING_COMMON_NODE_ID_H #include "../config.h" -#include "short_types.h" -#include "tal.h" +#include "ccan/short_types/short_types.h" +#include "ccan/tal/tal.h" struct node_id { u8 k[33]; diff --git a/nostrdb/src/bolt11/overflows.h b/nostrdb/src/bolt11/overflows.h index dac460c05..129b618fc 100644 --- a/nostrdb/src/bolt11/overflows.h +++ b/nostrdb/src/bolt11/overflows.h @@ -1,7 +1,7 @@ #ifndef LIGHTNING_COMMON_OVERFLOWS_H #define LIGHTNING_COMMON_OVERFLOWS_H #include "../config.h" -#include "short_types.h" +#include "ccan/short_types/short_types.h" static inline bool add_overflows_size_t(uint64_t a, uint64_t b) { diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 705b5b022..89b383e7a 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -4,7 +4,7 @@ #include "hex.h" #include "cursor.h" #include "random.h" -#include "sha256.h" +#include "ccan/crypto/sha256/sha256.h" #include "bolt11/bolt11.h" #include "bolt11/amount.h" #include "lmdb.h" From e1dbdd8474e49bb193b42a9be3cbefad80199390 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 17 Aug 2024 14:57:12 +0930 Subject: [PATCH 123/146] nostrdb: src: delete copies outside ccan/ dirs. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/src/bolt11/alignof.h | 20 - nostrdb/src/bolt11/array_size.h | 26 - nostrdb/src/bolt11/build_assert.h | 40 -- nostrdb/src/bolt11/check_type.h | 64 -- nostrdb/src/bolt11/container_of.h | 145 ----- nostrdb/src/bolt11/cppmagic.h | 191 ------ nostrdb/src/bolt11/likely.h | 115 ---- nostrdb/src/bolt11/list.c | 43 -- nostrdb/src/bolt11/list.h | 842 -------------------------- nostrdb/src/bolt11/mem.c | 128 ---- nostrdb/src/bolt11/mem.h | 295 --------- nostrdb/src/bolt11/short_types.h | 35 -- nostrdb/src/bolt11/structeq.h | 46 -- nostrdb/src/bolt11/take.c | 126 ---- nostrdb/src/bolt11/take.h | 136 ----- nostrdb/src/bolt11/tal.c | 972 ------------------------------ nostrdb/src/bolt11/tal.h | 553 ----------------- nostrdb/src/bolt11/talstr.c | 315 ---------- nostrdb/src/bolt11/talstr.h | 225 ------- nostrdb/src/bolt11/typesafe_cb.h | 134 ---- nostrdb/src/bolt11/utf8.c | 199 ------ nostrdb/src/bolt11/utf8.h | 55 -- nostrdb/src/compiler.h | 323 ---------- nostrdb/src/cursor.h | 2 +- nostrdb/src/endian.h | 365 ----------- nostrdb/src/sha256.c | 302 ---------- nostrdb/src/sha256.h | 155 ----- 27 files changed, 1 insertion(+), 5851 deletions(-) delete mode 100644 nostrdb/src/bolt11/alignof.h delete mode 100644 nostrdb/src/bolt11/array_size.h delete mode 100644 nostrdb/src/bolt11/build_assert.h delete mode 100644 nostrdb/src/bolt11/check_type.h delete mode 100644 nostrdb/src/bolt11/container_of.h delete mode 100644 nostrdb/src/bolt11/cppmagic.h delete mode 100644 nostrdb/src/bolt11/likely.h delete mode 100644 nostrdb/src/bolt11/list.c delete mode 100644 nostrdb/src/bolt11/list.h delete mode 100644 nostrdb/src/bolt11/mem.c delete mode 100644 nostrdb/src/bolt11/mem.h delete mode 100644 nostrdb/src/bolt11/short_types.h delete mode 100644 nostrdb/src/bolt11/structeq.h delete mode 100644 nostrdb/src/bolt11/take.c delete mode 100644 nostrdb/src/bolt11/take.h delete mode 100644 nostrdb/src/bolt11/tal.c delete mode 100644 nostrdb/src/bolt11/tal.h delete mode 100644 nostrdb/src/bolt11/talstr.c delete mode 100644 nostrdb/src/bolt11/talstr.h delete mode 100644 nostrdb/src/bolt11/typesafe_cb.h delete mode 100644 nostrdb/src/bolt11/utf8.c delete mode 100644 nostrdb/src/bolt11/utf8.h delete mode 100644 nostrdb/src/compiler.h delete mode 100644 nostrdb/src/endian.h delete mode 100644 nostrdb/src/sha256.c delete mode 100644 nostrdb/src/sha256.h diff --git a/nostrdb/src/bolt11/alignof.h b/nostrdb/src/bolt11/alignof.h deleted file mode 100644 index 7cf7b5ccb..000000000 --- a/nostrdb/src/bolt11/alignof.h +++ /dev/null @@ -1,20 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_ALIGNOF_H -#define CCAN_ALIGNOF_H -#include "../config.h" - -/** - * ALIGNOF - get the alignment of a type - * @t: the type to test - * - * This returns a safe alignment for the given type. - */ -#if HAVE_ALIGNOF -/* A GCC extension. */ -#define ALIGNOF(t) __alignof__(t) -#else -/* Alignment by measuring structure padding. */ -#define ALIGNOF(t) ((char *)(&((struct { char c; t _h; } *)0)->_h) - (char *)0) -#endif - -#endif /* CCAN_ALIGNOF_H */ diff --git a/nostrdb/src/bolt11/array_size.h b/nostrdb/src/bolt11/array_size.h deleted file mode 100644 index 3f9494e8b..000000000 --- a/nostrdb/src/bolt11/array_size.h +++ /dev/null @@ -1,26 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_ARRAY_SIZE_H -#define CCAN_ARRAY_SIZE_H -#include "../config.h" -#include "build_assert.h" - -/** - * ARRAY_SIZE - get the number of elements in a visible array - * @arr: the array whose size you want. - * - * This does not work on pointers, or arrays declared as [], or - * function parameters. With correct compiler support, such usage - * will cause a build error (see build_assert). - */ -#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + _array_size_chk(arr)) - -#if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF -/* Two gcc extensions. - * &a[0] degrades to a pointer: a different type from an array */ -#define _array_size_chk(arr) \ - BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(arr), \ - typeof(&(arr)[0]))) -#else -#define _array_size_chk(arr) 0 -#endif -#endif /* CCAN_ALIGNOF_H */ diff --git a/nostrdb/src/bolt11/build_assert.h b/nostrdb/src/bolt11/build_assert.h deleted file mode 100644 index 6df9dae7e..000000000 --- a/nostrdb/src/bolt11/build_assert.h +++ /dev/null @@ -1,40 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_BUILD_ASSERT_H -#define CCAN_BUILD_ASSERT_H - -/** - * BUILD_ASSERT - assert a build-time dependency. - * @cond: the compile-time condition which must be true. - * - * Your compile will fail if the condition isn't true, or can't be evaluated - * by the compiler. This can only be used within a function. - * - * Example: - * #include - * ... - * static char *foo_to_char(struct foo *foo) - * { - * // This code needs string to be at start of foo. - * BUILD_ASSERT(offsetof(struct foo, string) == 0); - * return (char *)foo; - * } - */ -#define BUILD_ASSERT(cond) \ - do { (void) sizeof(char [1 - 2*!(cond)]); } while(0) - -/** - * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression. - * @cond: the compile-time condition which must be true. - * - * Your compile will fail if the condition isn't true, or can't be evaluated - * by the compiler. This can be used in an expression: its value is "0". - * - * Example: - * #define foo_to_char(foo) \ - * ((char *)(foo) \ - * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0)) - */ -#define BUILD_ASSERT_OR_ZERO(cond) \ - (sizeof(char [1 - 2*!(cond)]) - 1) - -#endif /* CCAN_BUILD_ASSERT_H */ diff --git a/nostrdb/src/bolt11/check_type.h b/nostrdb/src/bolt11/check_type.h deleted file mode 100644 index 0492b56bc..000000000 --- a/nostrdb/src/bolt11/check_type.h +++ /dev/null @@ -1,64 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_CHECK_TYPE_H -#define CCAN_CHECK_TYPE_H -#include "../config.h" - -/** - * check_type - issue a warning or build failure if type is not correct. - * @expr: the expression whose type we should check (not evaluated). - * @type: the exact type we expect the expression to be. - * - * This macro is usually used within other macros to try to ensure that a macro - * argument is of the expected type. No type promotion of the expression is - * done: an unsigned int is not the same as an int! - * - * check_type() always evaluates to 0. - * - * If your compiler does not support typeof, then the best we can do is fail - * to compile if the sizes of the types are unequal (a less complete check). - * - * Example: - * // They should always pass a 64-bit value to _set_some_value! - * #define set_some_value(expr) \ - * _set_some_value((check_type((expr), uint64_t), (expr))) - */ - -/** - * check_types_match - issue a warning or build failure if types are not same. - * @expr1: the first expression (not evaluated). - * @expr2: the second expression (not evaluated). - * - * This macro is usually used within other macros to try to ensure that - * arguments are of identical types. No type promotion of the expressions is - * done: an unsigned int is not the same as an int! - * - * check_types_match() always evaluates to 0. - * - * If your compiler does not support typeof, then the best we can do is fail - * to compile if the sizes of the types are unequal (a less complete check). - * - * Example: - * // Do subtraction to get to enclosing type, but make sure that - * // pointer is of correct type for that member. - * #define container_of(mbr_ptr, encl_type, mbr) \ - * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \ - * ((encl_type *) \ - * ((char *)(mbr_ptr) - offsetof(encl_type, mbr)))) - */ -#if HAVE_TYPEOF -#define check_type(expr, type) \ - ((typeof(expr) *)0 != (type *)0) - -#define check_types_match(expr1, expr2) \ - ((typeof(expr1) *)0 != (typeof(expr2) *)0) -#else -#include -/* Without typeof, we can only test the sizes. */ -#define check_type(expr, type) \ - BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type)) - -#define check_types_match(expr1, expr2) \ - BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2)) -#endif /* HAVE_TYPEOF */ - -#endif /* CCAN_CHECK_TYPE_H */ diff --git a/nostrdb/src/bolt11/container_of.h b/nostrdb/src/bolt11/container_of.h deleted file mode 100644 index b27d7f3da..000000000 --- a/nostrdb/src/bolt11/container_of.h +++ /dev/null @@ -1,145 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_CONTAINER_OF_H -#define CCAN_CONTAINER_OF_H -#include - -#include "../config.h" -#include "check_type.h" - -/** - * container_of - get pointer to enclosing structure - * @member_ptr: pointer to the structure member - * @containing_type: the type this member is within - * @member: the name of this member within the structure. - * - * Given a pointer to a member of a structure, this macro does pointer - * subtraction to return the pointer to the enclosing type. - * - * Example: - * struct foo { - * int fielda, fieldb; - * // ... - * }; - * struct info { - * int some_other_field; - * struct foo my_foo; - * }; - * - * static struct info *foo_to_info(struct foo *foo) - * { - * return container_of(foo, struct info, my_foo); - * } - */ -#define container_of(member_ptr, containing_type, member) \ - ((containing_type *) \ - ((char *)(member_ptr) \ - - container_off(containing_type, member)) \ - + check_types_match(*(member_ptr), ((containing_type *)0)->member)) - - -/** - * container_of_or_null - get pointer to enclosing structure, or NULL - * @member_ptr: pointer to the structure member - * @containing_type: the type this member is within - * @member: the name of this member within the structure. - * - * Given a pointer to a member of a structure, this macro does pointer - * subtraction to return the pointer to the enclosing type, unless it - * is given NULL, in which case it also returns NULL. - * - * Example: - * struct foo { - * int fielda, fieldb; - * // ... - * }; - * struct info { - * int some_other_field; - * struct foo my_foo; - * }; - * - * static struct info *foo_to_info_allowing_null(struct foo *foo) - * { - * return container_of_or_null(foo, struct info, my_foo); - * } - */ -static inline char *container_of_or_null_(void *member_ptr, size_t offset) -{ - return member_ptr ? (char *)member_ptr - offset : NULL; -} -#define container_of_or_null(member_ptr, containing_type, member) \ - ((containing_type *) \ - container_of_or_null_(member_ptr, \ - container_off(containing_type, member)) \ - + check_types_match(*(member_ptr), ((containing_type *)0)->member)) - -/** - * container_off - get offset to enclosing structure - * @containing_type: the type this member is within - * @member: the name of this member within the structure. - * - * Given a pointer to a member of a structure, this macro does - * typechecking and figures out the offset to the enclosing type. - * - * Example: - * struct foo { - * int fielda, fieldb; - * // ... - * }; - * struct info { - * int some_other_field; - * struct foo my_foo; - * }; - * - * static struct info *foo_to_info(struct foo *foo) - * { - * size_t off = container_off(struct info, my_foo); - * return (void *)((char *)foo - off); - * } - */ -#define container_off(containing_type, member) \ - offsetof(containing_type, member) - -/** - * container_of_var - get pointer to enclosing structure using a variable - * @member_ptr: pointer to the structure member - * @container_var: a pointer of same type as this member's container - * @member: the name of this member within the structure. - * - * Given a pointer to a member of a structure, this macro does pointer - * subtraction to return the pointer to the enclosing type. - * - * Example: - * static struct info *foo_to_i(struct foo *foo) - * { - * struct info *i = container_of_var(foo, i, my_foo); - * return i; - * } - */ -#if HAVE_TYPEOF -#define container_of_var(member_ptr, container_var, member) \ - container_of(member_ptr, typeof(*container_var), member) -#else -#define container_of_var(member_ptr, container_var, member) \ - ((void *)((char *)(member_ptr) - \ - container_off_var(container_var, member))) -#endif - -/** - * container_off_var - get offset of a field in enclosing structure - * @container_var: a pointer to a container structure - * @member: the name of a member within the structure. - * - * Given (any) pointer to a structure and a its member name, this - * macro does pointer subtraction to return offset of member in a - * structure memory layout. - * - */ -#if HAVE_TYPEOF -#define container_off_var(var, member) \ - container_off(typeof(*var), member) -#else -#define container_off_var(var, member) \ - ((const char *)&(var)->member - (const char *)(var)) -#endif - -#endif /* CCAN_CONTAINER_OF_H */ diff --git a/nostrdb/src/bolt11/cppmagic.h b/nostrdb/src/bolt11/cppmagic.h deleted file mode 100644 index fa8d70e24..000000000 --- a/nostrdb/src/bolt11/cppmagic.h +++ /dev/null @@ -1,191 +0,0 @@ -/* MIT (BSD) license - see LICENSE file for details */ -#ifndef CCAN_CPPMAGIC_H -#define CCAN_CPPMAGIC_H - -/** - * CPPMAGIC_NOTHING - expands to nothing - */ -#define CPPMAGIC_NOTHING() - -/** - * CPPMAGIC_STRINGIFY - convert arguments to a string literal - */ -#define _CPPMAGIC_STRINGIFY(...) #__VA_ARGS__ -#define CPPMAGIC_STRINGIFY(...) _CPPMAGIC_STRINGIFY(__VA_ARGS__) - -/** - * CPPMAGIC_GLUE2 - glue arguments together - * - * CPPMAGIC_GLUE2(@a_, @b_) - * expands to the expansion of @a_ followed immediately - * (combining tokens) by the expansion of @b_ - */ -#define _CPPMAGIC_GLUE2(a_, b_) a_##b_ -#define CPPMAGIC_GLUE2(a_, b_) _CPPMAGIC_GLUE2(a_, b_) - -/** - * CPPMAGIC_1ST - return 1st argument - * - * CPPMAGIC_1ST(@a_, ...) - * expands to the expansion of @a_ - */ -#define CPPMAGIC_1ST(a_, ...) a_ - -/** - * CPPMAGIC_2ND - return 2nd argument - * - * CPPMAGIC_2ST(@a_, @b_, ...) - * expands to the expansion of @b_ - */ -#define CPPMAGIC_2ND(a_, b_, ...) b_ - -/** - * CPPMAGIC_ISZERO - is argument '0' - * - * CPPMAGIC_ISZERO(@a) - * expands to '1' if @a is '0', otherwise expands to '0'. - */ -#define _CPPMAGIC_ISPROBE(...) CPPMAGIC_2ND(__VA_ARGS__, 0) -#define _CPPMAGIC_PROBE() $, 1 -#define _CPPMAGIC_ISZERO_0 _CPPMAGIC_PROBE() -#define CPPMAGIC_ISZERO(a_) \ - _CPPMAGIC_ISPROBE(CPPMAGIC_GLUE2(_CPPMAGIC_ISZERO_, a_)) - -/** - * CPPMAGIC_NONZERO - is argument not '0' - * - * CPPMAGIC_NONZERO(@a) - * expands to '0' if @a is '0', otherwise expands to '1'. - */ -#define CPPMAGIC_NONZERO(a_) CPPMAGIC_ISZERO(CPPMAGIC_ISZERO(a_)) - -/** - * CPPMAGIC_NONEMPTY - does the macro have any arguments? - * - * CPPMAGIC_NONEMPTY() - * expands to '0' - * CPPMAGIC_NONEMPTY(@a) - * CPPMAGIC_NONEMPTY(@a, ...) - * expand to '1' - */ -#define _CPPMAGIC_EOA() 0 -#define CPPMAGIC_NONEMPTY(...) \ - CPPMAGIC_NONZERO(CPPMAGIC_1ST(_CPPMAGIC_EOA __VA_ARGS__)()) - -/** - * CPPMAGIC_ISEMPTY - does the macro have no arguments? - * - * CPPMAGIC_ISEMPTY() - * expands to '1' - * CPPMAGIC_ISEMPTY(@a) - * CPPMAGIC_ISEMPTY(@a, ...) - * expand to '0' - */ -#define CPPMAGIC_ISEMPTY(...) \ - CPPMAGIC_ISZERO(CPPMAGIC_NONEMPTY(__VA_ARGS__)) - -/* - * CPPMAGIC_IFELSE - preprocessor conditional - * - * CPPMAGIC_IFELSE(@cond)(@if)(@else) - * expands to @else if @cond is '0', otherwise expands to @if - */ -#define _CPPMAGIC_IF_0(...) _CPPMAGIC_IF_0_ELSE -#define _CPPMAGIC_IF_1(...) __VA_ARGS__ _CPPMAGIC_IF_1_ELSE -#define _CPPMAGIC_IF_0_ELSE(...) __VA_ARGS__ -#define _CPPMAGIC_IF_1_ELSE(...) -#define _CPPMAGIC_IFELSE(cond_) CPPMAGIC_GLUE2(_CPPMAGIC_IF_, cond_) -#define CPPMAGIC_IFELSE(cond_) \ - _CPPMAGIC_IFELSE(CPPMAGIC_NONZERO(cond_)) - -/** - * CPPMAGIC_EVAL - force multiple expansion passes - * - * Forces macros in the arguments to be expanded repeatedly (up to - * 1024 times) even when CPP would usually stop expanding. - */ -#define CPPMAGIC_EVAL1(...) __VA_ARGS__ -#define CPPMAGIC_EVAL2(...) \ - CPPMAGIC_EVAL1(CPPMAGIC_EVAL1(__VA_ARGS__)) -#define CPPMAGIC_EVAL4(...) \ - CPPMAGIC_EVAL2(CPPMAGIC_EVAL2(__VA_ARGS__)) -#define CPPMAGIC_EVAL8(...) \ - CPPMAGIC_EVAL4(CPPMAGIC_EVAL4(__VA_ARGS__)) -#define CPPMAGIC_EVAL16(...) \ - CPPMAGIC_EVAL8(CPPMAGIC_EVAL8(__VA_ARGS__)) -#define CPPMAGIC_EVAL32(...) \ - CPPMAGIC_EVAL16(CPPMAGIC_EVAL16(__VA_ARGS__)) -#define CPPMAGIC_EVAL64(...) \ - CPPMAGIC_EVAL32(CPPMAGIC_EVAL32(__VA_ARGS__)) -#define CPPMAGIC_EVAL128(...) \ - CPPMAGIC_EVAL64(CPPMAGIC_EVAL64(__VA_ARGS__)) -#define CPPMAGIC_EVAL256(...) \ - CPPMAGIC_EVAL128(CPPMAGIC_EVAL128(__VA_ARGS__)) -#define CPPMAGIC_EVAL512(...) \ - CPPMAGIC_EVAL256(CPPMAGIC_EVAL256(__VA_ARGS__)) -#define CPPMAGIC_EVAL1024(...) \ - CPPMAGIC_EVAL512(CPPMAGIC_EVAL512(__VA_ARGS__)) -#define CPPMAGIC_EVAL(...) CPPMAGIC_EVAL1024(__VA_ARGS__) - -/** - * CPPMAGIC_DEFER1, CPPMAGIC_DEFER2 - defer expansion - */ -#define CPPMAGIC_DEFER1(a_) a_ CPPMAGIC_NOTHING() -#define CPPMAGIC_DEFER2(a_) a_ CPPMAGIC_NOTHING CPPMAGIC_NOTHING()() - -/** - * CPPMAGIC_MAP - iterate another macro across arguments - * @m: name of a one argument macro - * - * CPPMAGIC_MAP(@m, @a1, @a2, ... @an) - * expands to the expansion of @m(@a1) , @m(@a2) , ... , @m(@an) - */ -#define _CPPMAGIC_MAP_() _CPPMAGIC_MAP -#define _CPPMAGIC_MAP(m_, a_, ...) \ - m_(a_) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (, CPPMAGIC_DEFER2(_CPPMAGIC_MAP_)()(m_, __VA_ARGS__)) \ - () -#define CPPMAGIC_MAP(m_, ...) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (CPPMAGIC_EVAL(_CPPMAGIC_MAP(m_, __VA_ARGS__))) \ - () - -/** - * CPPMAGIC_2MAP - iterate another macro across pairs of arguments - * @m: name of a two argument macro - * - * CPPMAGIC_2MAP(@m, @a1, @b1, @a2, @b2, ..., @an, @bn) - * expands to the expansion of - * @m(@a1, @b1) , @m(@a2, @b2) , ... , @m(@an, @bn) - */ -#define _CPPMAGIC_2MAP_() _CPPMAGIC_2MAP -#define _CPPMAGIC_2MAP(m_, a_, b_, ...) \ - m_(a_, b_) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (, CPPMAGIC_DEFER2(_CPPMAGIC_2MAP_)()(m_, __VA_ARGS__)) \ - () -#define CPPMAGIC_2MAP(m_, ...) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (CPPMAGIC_EVAL(_CPPMAGIC_2MAP(m_, __VA_ARGS__))) \ - () - -/** - * CPPMAGIC_JOIN - separate arguments with given delimiter - * @d: delimiter - * - * CPPMAGIC_JOIN(@d, @a1, @a2, ..., @an) - * expands to the expansion of @a1 @d @a2 @d ... @d @an - */ -#define _CPPMAGIC_JOIN_() _CPPMAGIC_JOIN -#define _CPPMAGIC_JOIN(d_, a_, ...) \ - a_ \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (d_ CPPMAGIC_DEFER2(_CPPMAGIC_JOIN_)()(d_, __VA_ARGS__)) \ - () -#define CPPMAGIC_JOIN(d_, ...) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (CPPMAGIC_EVAL(_CPPMAGIC_JOIN(d_, __VA_ARGS__))) \ - () - -#endif /* CCAN_CPPMAGIC_H */ diff --git a/nostrdb/src/bolt11/likely.h b/nostrdb/src/bolt11/likely.h deleted file mode 100644 index 3a2f18e6f..000000000 --- a/nostrdb/src/bolt11/likely.h +++ /dev/null @@ -1,115 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_LIKELY_H -#define CCAN_LIKELY_H -#include "../config.h" -#include - -#ifndef CCAN_LIKELY_DEBUG -#if HAVE_BUILTIN_EXPECT -/** - * likely - indicate that a condition is likely to be true. - * @cond: the condition - * - * This uses a compiler extension where available to indicate a likely - * code path and optimize appropriately; it's also useful for readers - * to quickly identify exceptional paths through functions. The - * threshold for "likely" is usually considered to be between 90 and - * 99%; marginal cases should not be marked either way. - * - * See Also: - * unlikely(), likely_stats() - * - * Example: - * // Returns false if we overflow. - * static inline bool inc_int(unsigned int *val) - * { - * (*val)++; - * if (likely(*val)) - * return true; - * return false; - * } - */ -#define likely(cond) __builtin_expect(!!(cond), 1) - -/** - * unlikely - indicate that a condition is unlikely to be true. - * @cond: the condition - * - * This uses a compiler extension where available to indicate an unlikely - * code path and optimize appropriately; see likely() above. - * - * See Also: - * likely(), likely_stats(), COLD (compiler.h) - * - * Example: - * // Prints a warning if we overflow. - * static inline void inc_int(unsigned int *val) - * { - * (*val)++; - * if (unlikely(*val == 0)) - * fprintf(stderr, "Overflow!"); - * } - */ -#define unlikely(cond) __builtin_expect(!!(cond), 0) -#else -#ifndef likely -#define likely(cond) (!!(cond)) -#endif -#ifndef unlikely -#define unlikely(cond) (!!(cond)) -#endif -#endif -#else /* CCAN_LIKELY_DEBUG versions */ -#include - -#define likely(cond) \ - (_likely_trace(!!(cond), 1, stringify(cond), __FILE__, __LINE__)) -#define unlikely(cond) \ - (_likely_trace(!!(cond), 0, stringify(cond), __FILE__, __LINE__)) - -long _likely_trace(bool cond, bool expect, - const char *condstr, - const char *file, unsigned int line); -/** - * likely_stats - return description of abused likely()/unlikely() - * @min_hits: minimum number of hits - * @percent: maximum percentage correct - * - * When CCAN_LIKELY_DEBUG is defined, likely() and unlikely() trace their - * results: this causes a significant slowdown, but allows analysis of - * whether the branches are labelled correctly. - * - * This function returns a malloc'ed description of the least-correct - * usage of likely() or unlikely(). It ignores places which have been - * called less than @min_hits times, and those which were predicted - * correctly more than @percent of the time. It returns NULL when - * nothing meets those criteria. - * - * Note that this call is destructive; the returned offender is - * removed from the trace so that the next call to likely_stats() will - * return the next-worst likely()/unlikely() usage. - * - * Example: - * // Print every place hit more than twice which was wrong > 5%. - * static void report_stats(void) - * { - * #ifdef CCAN_LIKELY_DEBUG - * const char *bad; - * - * while ((bad = likely_stats(2, 95)) != NULL) { - * printf("Suspicious likely: %s", bad); - * free(bad); - * } - * #endif - * } - */ -char *likely_stats(unsigned int min_hits, unsigned int percent); - -/** - * likely_stats_reset - free up memory of likely()/unlikely() branches. - * - * This can also plug memory leaks. - */ -void likely_stats_reset(void); -#endif /* CCAN_LIKELY_DEBUG */ -#endif /* CCAN_LIKELY_H */ diff --git a/nostrdb/src/bolt11/list.c b/nostrdb/src/bolt11/list.c deleted file mode 100644 index c9ee35c70..000000000 --- a/nostrdb/src/bolt11/list.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Licensed under BSD-MIT - see LICENSE file for details */ -#include -#include -#include "list.h" - -static void *corrupt(const char *abortstr, - const struct list_node *head, - const struct list_node *node, - unsigned int count) -{ - if (abortstr) { - fprintf(stderr, - "%s: prev corrupt in node %p (%u) of %p\n", - abortstr, node, count, head); - abort(); - } - return NULL; -} - -struct list_node *list_check_node(const struct list_node *node, - const char *abortstr) -{ - const struct list_node *p, *n; - int count = 0; - - for (p = node, n = node->next; n != node; p = n, n = n->next) { - count++; - if (n->prev != p) - return corrupt(abortstr, node, n, count); - } - /* Check prev on head node. */ - if (node->prev != p) - return corrupt(abortstr, node, node, 0); - - return (struct list_node *)node; -} - -struct list_head *list_check(const struct list_head *h, const char *abortstr) -{ - if (!list_check_node(&h->n, abortstr)) - return NULL; - return (struct list_head *)h; -} diff --git a/nostrdb/src/bolt11/list.h b/nostrdb/src/bolt11/list.h deleted file mode 100644 index 4574e911c..000000000 --- a/nostrdb/src/bolt11/list.h +++ /dev/null @@ -1,842 +0,0 @@ -/* Licensed under BSD-MIT - see LICENSE file for details */ -#ifndef CCAN_LIST_H -#define CCAN_LIST_H -//#define CCAN_LIST_DEBUG 1 -#include -#include -#include "str.h" -#include "container_of.h" -#include "check_type.h" - -/** - * struct list_node - an entry in a doubly-linked list - * @next: next entry (self if empty) - * @prev: previous entry (self if empty) - * - * This is used as an entry in a linked list. - * Example: - * struct child { - * const char *name; - * // Linked list of all us children. - * struct list_node list; - * }; - */ -struct list_node -{ - struct list_node *next, *prev; -}; - -/** - * struct list_head - the head of a doubly-linked list - * @h: the list_head (containing next and prev pointers) - * - * This is used as the head of a linked list. - * Example: - * struct parent { - * const char *name; - * struct list_head children; - * unsigned int num_children; - * }; - */ -struct list_head -{ - struct list_node n; -}; - -/** - * list_check - check head of a list for consistency - * @h: the list_head - * @abortstr: the location to print on aborting, or NULL. - * - * Because list_nodes have redundant information, consistency checking between - * the back and forward links can be done. This is useful as a debugging check. - * If @abortstr is non-NULL, that will be printed in a diagnostic if the list - * is inconsistent, and the function will abort. - * - * Returns the list head if the list is consistent, NULL if not (it - * can never return NULL if @abortstr is set). - * - * See also: list_check_node() - * - * Example: - * static void dump_parent(struct parent *p) - * { - * struct child *c; - * - * printf("%s (%u children):\n", p->name, p->num_children); - * list_check(&p->children, "bad child list"); - * list_for_each(&p->children, c, list) - * printf(" -> %s\n", c->name); - * } - */ -struct list_head *list_check(const struct list_head *h, const char *abortstr); - -/** - * list_check_node - check node of a list for consistency - * @n: the list_node - * @abortstr: the location to print on aborting, or NULL. - * - * Check consistency of the list node is in (it must be in one). - * - * See also: list_check() - * - * Example: - * static void dump_child(const struct child *c) - * { - * list_check_node(&c->list, "bad child list"); - * printf("%s\n", c->name); - * } - */ -struct list_node *list_check_node(const struct list_node *n, - const char *abortstr); - -#define LIST_LOC __FILE__ ":" stringify(__LINE__) -#ifdef CCAN_LIST_DEBUG -#define list_debug(h, loc) list_check((h), loc) -#define list_debug_node(n, loc) list_check_node((n), loc) -#else -#define list_debug(h, loc) ((void)loc, h) -#define list_debug_node(n, loc) ((void)loc, n) -#endif - -/** - * LIST_HEAD_INIT - initializer for an empty list_head - * @name: the name of the list. - * - * Explicit initializer for an empty list. - * - * See also: - * LIST_HEAD, list_head_init() - * - * Example: - * static struct list_head my_list = LIST_HEAD_INIT(my_list); - */ -#define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } } - -/** - * LIST_HEAD - define and initialize an empty list_head - * @name: the name of the list. - * - * The LIST_HEAD macro defines a list_head and initializes it to an empty - * list. It can be prepended by "static" to define a static list_head. - * - * See also: - * LIST_HEAD_INIT, list_head_init() - * - * Example: - * static LIST_HEAD(my_global_list); - */ -#define LIST_HEAD(name) \ - struct list_head name = LIST_HEAD_INIT(name) - -/** - * list_head_init - initialize a list_head - * @h: the list_head to set to the empty list - * - * Example: - * ... - * struct parent *parent = malloc(sizeof(*parent)); - * - * list_head_init(&parent->children); - * parent->num_children = 0; - */ -static inline void list_head_init(struct list_head *h) -{ - h->n.next = h->n.prev = &h->n; -} - -/** - * list_node_init - initialize a list_node - * @n: the list_node to link to itself. - * - * You don't need to use this normally! But it lets you list_del(@n) - * safely. - */ -static inline void list_node_init(struct list_node *n) -{ - n->next = n->prev = n; -} - -/** - * list_add_after - add an entry after an existing node in a linked list - * @h: the list_head to add the node to (for debugging) - * @p: the existing list_node to add the node after - * @n: the new list_node to add to the list. - * - * The existing list_node must already be a member of the list. - * The new list_node does not need to be initialized; it will be overwritten. - * - * Example: - * struct child c1, c2, c3; - * LIST_HEAD(h); - * - * list_add_tail(&h, &c1.list); - * list_add_tail(&h, &c3.list); - * list_add_after(&h, &c1.list, &c2.list); - */ -#define list_add_after(h, p, n) list_add_after_(h, p, n, LIST_LOC) -static inline void list_add_after_(struct list_head *h, - struct list_node *p, - struct list_node *n, - const char *abortstr) -{ - n->next = p->next; - n->prev = p; - p->next->prev = n; - p->next = n; - (void)list_debug(h, abortstr); -} - -/** - * list_add - add an entry at the start of a linked list. - * @h: the list_head to add the node to - * @n: the list_node to add to the list. - * - * The list_node does not need to be initialized; it will be overwritten. - * Example: - * struct child *child = malloc(sizeof(*child)); - * - * child->name = "marvin"; - * list_add(&parent->children, &child->list); - * parent->num_children++; - */ -#define list_add(h, n) list_add_(h, n, LIST_LOC) -static inline void list_add_(struct list_head *h, - struct list_node *n, - const char *abortstr) -{ - list_add_after_(h, &h->n, n, abortstr); -} - -/** - * list_add_before - add an entry before an existing node in a linked list - * @h: the list_head to add the node to (for debugging) - * @p: the existing list_node to add the node before - * @n: the new list_node to add to the list. - * - * The existing list_node must already be a member of the list. - * The new list_node does not need to be initialized; it will be overwritten. - * - * Example: - * list_head_init(&h); - * list_add_tail(&h, &c1.list); - * list_add_tail(&h, &c3.list); - * list_add_before(&h, &c3.list, &c2.list); - */ -#define list_add_before(h, p, n) list_add_before_(h, p, n, LIST_LOC) -static inline void list_add_before_(struct list_head *h, - struct list_node *p, - struct list_node *n, - const char *abortstr) -{ - n->next = p; - n->prev = p->prev; - p->prev->next = n; - p->prev = n; - (void)list_debug(h, abortstr); -} - -/** - * list_add_tail - add an entry at the end of a linked list. - * @h: the list_head to add the node to - * @n: the list_node to add to the list. - * - * The list_node does not need to be initialized; it will be overwritten. - * Example: - * list_add_tail(&parent->children, &child->list); - * parent->num_children++; - */ -#define list_add_tail(h, n) list_add_tail_(h, n, LIST_LOC) -static inline void list_add_tail_(struct list_head *h, - struct list_node *n, - const char *abortstr) -{ - list_add_before_(h, &h->n, n, abortstr); -} - -/** - * list_empty - is a list empty? - * @h: the list_head - * - * If the list is empty, returns true. - * - * Example: - * assert(list_empty(&parent->children) == (parent->num_children == 0)); - */ -#define list_empty(h) list_empty_(h, LIST_LOC) -static inline bool list_empty_(const struct list_head *h, const char* abortstr) -{ - (void)list_debug(h, abortstr); - return h->n.next == &h->n; -} - -/** - * list_empty_nodebug - is a list empty (and don't perform debug checks)? - * @h: the list_head - * - * If the list is empty, returns true. - * This differs from list_empty() in that if CCAN_LIST_DEBUG is set it - * will NOT perform debug checks. Only use this function if you REALLY - * know what you're doing. - * - * Example: - * assert(list_empty_nodebug(&parent->children) == (parent->num_children == 0)); - */ -#ifndef CCAN_LIST_DEBUG -#define list_empty_nodebug(h) list_empty(h) -#else -static inline bool list_empty_nodebug(const struct list_head *h) -{ - return h->n.next == &h->n; -} -#endif - -/** - * list_empty_nocheck - is a list empty? - * @h: the list_head - * - * If the list is empty, returns true. This doesn't perform any - * debug check for list consistency, so it can be called without - * locks, racing with the list being modified. This is ok for - * checks where an incorrect result is not an issue (optimized - * bail out path for example). - */ -static inline bool list_empty_nocheck(const struct list_head *h) -{ - return h->n.next == &h->n; -} - -/** - * list_del - delete an entry from an (unknown) linked list. - * @n: the list_node to delete from the list. - * - * Note that this leaves @n in an undefined state; it can be added to - * another list, but not deleted again. - * - * See also: - * list_del_from(), list_del_init() - * - * Example: - * list_del(&child->list); - * parent->num_children--; - */ -#define list_del(n) list_del_(n, LIST_LOC) -static inline void list_del_(struct list_node *n, const char* abortstr) -{ - (void)list_debug_node(n, abortstr); - n->next->prev = n->prev; - n->prev->next = n->next; -#ifdef CCAN_LIST_DEBUG - /* Catch use-after-del. */ - n->next = n->prev = NULL; -#endif -} - -/** - * list_del_init - delete a node, and reset it so it can be deleted again. - * @n: the list_node to be deleted. - * - * list_del(@n) or list_del_init() again after this will be safe, - * which can be useful in some cases. - * - * See also: - * list_del_from(), list_del() - * - * Example: - * list_del_init(&child->list); - * parent->num_children--; - */ -#define list_del_init(n) list_del_init_(n, LIST_LOC) -static inline void list_del_init_(struct list_node *n, const char *abortstr) -{ - list_del_(n, abortstr); - list_node_init(n); -} - -/** - * list_del_from - delete an entry from a known linked list. - * @h: the list_head the node is in. - * @n: the list_node to delete from the list. - * - * This explicitly indicates which list a node is expected to be in, - * which is better documentation and can catch more bugs. - * - * See also: list_del() - * - * Example: - * list_del_from(&parent->children, &child->list); - * parent->num_children--; - */ -static inline void list_del_from(struct list_head *h, struct list_node *n) -{ -#ifdef CCAN_LIST_DEBUG - { - /* Thorough check: make sure it was in list! */ - struct list_node *i; - for (i = h->n.next; i != n; i = i->next) - assert(i != &h->n); - } -#endif /* CCAN_LIST_DEBUG */ - - /* Quick test that catches a surprising number of bugs. */ - assert(!list_empty(h)); - list_del(n); -} - -/** - * list_swap - swap out an entry from an (unknown) linked list for a new one. - * @o: the list_node to replace from the list. - * @n: the list_node to insert in place of the old one. - * - * Note that this leaves @o in an undefined state; it can be added to - * another list, but not deleted/swapped again. - * - * See also: - * list_del() - * - * Example: - * struct child x1, x2; - * LIST_HEAD(xh); - * - * list_add(&xh, &x1.list); - * list_swap(&x1.list, &x2.list); - */ -#define list_swap(o, n) list_swap_(o, n, LIST_LOC) -static inline void list_swap_(struct list_node *o, - struct list_node *n, - const char* abortstr) -{ - (void)list_debug_node(o, abortstr); - *n = *o; - n->next->prev = n; - n->prev->next = n; -#ifdef CCAN_LIST_DEBUG - /* Catch use-after-del. */ - o->next = o->prev = NULL; -#endif -} - -/** - * list_entry - convert a list_node back into the structure containing it. - * @n: the list_node - * @type: the type of the entry - * @member: the list_node member of the type - * - * Example: - * // First list entry is children.next; convert back to child. - * child = list_entry(parent->children.n.next, struct child, list); - * - * See Also: - * list_top(), list_for_each() - */ -#define list_entry(n, type, member) container_of(n, type, member) - -/** - * list_top - get the first entry in a list - * @h: the list_head - * @type: the type of the entry - * @member: the list_node member of the type - * - * If the list is empty, returns NULL. - * - * Example: - * struct child *first; - * first = list_top(&parent->children, struct child, list); - * if (!first) - * printf("Empty list!\n"); - */ -#define list_top(h, type, member) \ - ((type *)list_top_((h), list_off_(type, member))) - -static inline const void *list_top_(const struct list_head *h, size_t off) -{ - if (list_empty(h)) - return NULL; - return (const char *)h->n.next - off; -} - -/** - * list_pop - remove the first entry in a list - * @h: the list_head - * @type: the type of the entry - * @member: the list_node member of the type - * - * If the list is empty, returns NULL. - * - * Example: - * struct child *one; - * one = list_pop(&parent->children, struct child, list); - * if (!one) - * printf("Empty list!\n"); - */ -#define list_pop(h, type, member) \ - ((type *)list_pop_((h), list_off_(type, member))) - -static inline const void *list_pop_(const struct list_head *h, size_t off) -{ - struct list_node *n; - - if (list_empty(h)) - return NULL; - n = h->n.next; - list_del(n); - return (const char *)n - off; -} - -/** - * list_tail - get the last entry in a list - * @h: the list_head - * @type: the type of the entry - * @member: the list_node member of the type - * - * If the list is empty, returns NULL. - * - * Example: - * struct child *last; - * last = list_tail(&parent->children, struct child, list); - * if (!last) - * printf("Empty list!\n"); - */ -#define list_tail(h, type, member) \ - ((type *)list_tail_((h), list_off_(type, member))) - -static inline const void *list_tail_(const struct list_head *h, size_t off) -{ - if (list_empty(h)) - return NULL; - return (const char *)h->n.prev - off; -} - -/** - * list_for_each - iterate through a list. - * @h: the list_head (warning: evaluated multiple times!) - * @i: the structure containing the list_node - * @member: the list_node member of the structure - * - * This is a convenient wrapper to iterate @i over the entire list. It's - * a for loop, so you can break and continue as normal. - * - * Example: - * list_for_each(&parent->children, child, list) - * printf("Name: %s\n", child->name); - */ -#define list_for_each(h, i, member) \ - list_for_each_off(h, i, list_off_var_(i, member)) - -/** - * list_for_each_rev - iterate through a list backwards. - * @h: the list_head - * @i: the structure containing the list_node - * @member: the list_node member of the structure - * - * This is a convenient wrapper to iterate @i over the entire list. It's - * a for loop, so you can break and continue as normal. - * - * Example: - * list_for_each_rev(&parent->children, child, list) - * printf("Name: %s\n", child->name); - */ -#define list_for_each_rev(h, i, member) \ - list_for_each_rev_off(h, i, list_off_var_(i, member)) - -/** - * list_for_each_rev_safe - iterate through a list backwards, - * maybe during deletion - * @h: the list_head - * @i: the structure containing the list_node - * @nxt: the structure containing the list_node - * @member: the list_node member of the structure - * - * This is a convenient wrapper to iterate @i over the entire list backwards. - * It's a for loop, so you can break and continue as normal. The extra - * variable * @nxt is used to hold the next element, so you can delete @i - * from the list. - * - * Example: - * struct child *next; - * list_for_each_rev_safe(&parent->children, child, next, list) { - * printf("Name: %s\n", child->name); - * } - */ -#define list_for_each_rev_safe(h, i, nxt, member) \ - list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member)) - -/** - * list_for_each_safe - iterate through a list, maybe during deletion - * @h: the list_head - * @i: the structure containing the list_node - * @nxt: the structure containing the list_node - * @member: the list_node member of the structure - * - * This is a convenient wrapper to iterate @i over the entire list. It's - * a for loop, so you can break and continue as normal. The extra variable - * @nxt is used to hold the next element, so you can delete @i from the list. - * - * Example: - * list_for_each_safe(&parent->children, child, next, list) { - * list_del(&child->list); - * parent->num_children--; - * } - */ -#define list_for_each_safe(h, i, nxt, member) \ - list_for_each_safe_off(h, i, nxt, list_off_var_(i, member)) - -/** - * list_next - get the next entry in a list - * @h: the list_head - * @i: a pointer to an entry in the list. - * @member: the list_node member of the structure - * - * If @i was the last entry in the list, returns NULL. - * - * Example: - * struct child *second; - * second = list_next(&parent->children, first, list); - * if (!second) - * printf("No second child!\n"); - */ -#define list_next(h, i, member) \ - ((list_typeof(i))list_entry_or_null(list_debug(h, \ - __FILE__ ":" stringify(__LINE__)), \ - (i)->member.next, \ - list_off_var_((i), member))) - -/** - * list_prev - get the previous entry in a list - * @h: the list_head - * @i: a pointer to an entry in the list. - * @member: the list_node member of the structure - * - * If @i was the first entry in the list, returns NULL. - * - * Example: - * first = list_prev(&parent->children, second, list); - * if (!first) - * printf("Can't go back to first child?!\n"); - */ -#define list_prev(h, i, member) \ - ((list_typeof(i))list_entry_or_null(list_debug(h, \ - __FILE__ ":" stringify(__LINE__)), \ - (i)->member.prev, \ - list_off_var_((i), member))) - -/** - * list_append_list - empty one list onto the end of another. - * @to: the list to append into - * @from: the list to empty. - * - * This takes the entire contents of @from and moves it to the end of - * @to. After this @from will be empty. - * - * Example: - * struct list_head adopter; - * - * list_append_list(&adopter, &parent->children); - * assert(list_empty(&parent->children)); - * parent->num_children = 0; - */ -#define list_append_list(t, f) list_append_list_(t, f, \ - __FILE__ ":" stringify(__LINE__)) -static inline void list_append_list_(struct list_head *to, - struct list_head *from, - const char *abortstr) -{ - struct list_node *from_tail = list_debug(from, abortstr)->n.prev; - struct list_node *to_tail = list_debug(to, abortstr)->n.prev; - - /* Sew in head and entire list. */ - to->n.prev = from_tail; - from_tail->next = &to->n; - to_tail->next = &from->n; - from->n.prev = to_tail; - - /* Now remove head. */ - list_del(&from->n); - list_head_init(from); -} - -/** - * list_prepend_list - empty one list into the start of another. - * @to: the list to prepend into - * @from: the list to empty. - * - * This takes the entire contents of @from and moves it to the start - * of @to. After this @from will be empty. - * - * Example: - * list_prepend_list(&adopter, &parent->children); - * assert(list_empty(&parent->children)); - * parent->num_children = 0; - */ -#define list_prepend_list(t, f) list_prepend_list_(t, f, LIST_LOC) -static inline void list_prepend_list_(struct list_head *to, - struct list_head *from, - const char *abortstr) -{ - struct list_node *from_tail = list_debug(from, abortstr)->n.prev; - struct list_node *to_head = list_debug(to, abortstr)->n.next; - - /* Sew in head and entire list. */ - to->n.next = &from->n; - from->n.prev = &to->n; - to_head->prev = from_tail; - from_tail->next = to_head; - - /* Now remove head. */ - list_del(&from->n); - list_head_init(from); -} - -/* internal macros, do not use directly */ -#define list_for_each_off_dir_(h, i, off, dir) \ - for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ - (off)); \ - list_node_from_off_((void *)i, (off)) != &(h)->n; \ - i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, \ - (off))) - -#define list_for_each_safe_off_dir_(h, i, nxt, off, dir) \ - for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ - (off)), \ - nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ - (off)); \ - list_node_from_off_(i, (off)) != &(h)->n; \ - i = nxt, \ - nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ - (off))) - -/** - * list_for_each_off - iterate through a list of memory regions. - * @h: the list_head - * @i: the pointer to a memory region which contains list node data. - * @off: offset(relative to @i) at which list node data resides. - * - * This is a low-level wrapper to iterate @i over the entire list, used to - * implement all oher, more high-level, for-each constructs. It's a for loop, - * so you can break and continue as normal. - * - * WARNING! Being the low-level macro that it is, this wrapper doesn't know - * nor care about the type of @i. The only assumption made is that @i points - * to a chunk of memory that at some @offset, relative to @i, contains a - * properly filled `struct list_node' which in turn contains pointers to - * memory chunks and it's turtles all the way down. With all that in mind - * remember that given the wrong pointer/offset couple this macro will - * happily churn all you memory until SEGFAULT stops it, in other words - * caveat emptor. - * - * It is worth mentioning that one of legitimate use-cases for that wrapper - * is operation on opaque types with known offset for `struct list_node' - * member(preferably 0), because it allows you not to disclose the type of - * @i. - * - * Example: - * list_for_each_off(&parent->children, child, - * offsetof(struct child, list)) - * printf("Name: %s\n", child->name); - */ -#define list_for_each_off(h, i, off) \ - list_for_each_off_dir_((h),(i),(off),next) - -/** - * list_for_each_rev_off - iterate through a list of memory regions backwards - * @h: the list_head - * @i: the pointer to a memory region which contains list node data. - * @off: offset(relative to @i) at which list node data resides. - * - * See list_for_each_off for details - */ -#define list_for_each_rev_off(h, i, off) \ - list_for_each_off_dir_((h),(i),(off),prev) - -/** - * list_for_each_safe_off - iterate through a list of memory regions, maybe - * during deletion - * @h: the list_head - * @i: the pointer to a memory region which contains list node data. - * @nxt: the structure containing the list_node - * @off: offset(relative to @i) at which list node data resides. - * - * For details see `list_for_each_off' and `list_for_each_safe' - * descriptions. - * - * Example: - * list_for_each_safe_off(&parent->children, child, - * next, offsetof(struct child, list)) - * printf("Name: %s\n", child->name); - */ -#define list_for_each_safe_off(h, i, nxt, off) \ - list_for_each_safe_off_dir_((h),(i),(nxt),(off),next) - -/** - * list_for_each_rev_safe_off - iterate backwards through a list of - * memory regions, maybe during deletion - * @h: the list_head - * @i: the pointer to a memory region which contains list node data. - * @nxt: the structure containing the list_node - * @off: offset(relative to @i) at which list node data resides. - * - * For details see `list_for_each_rev_off' and `list_for_each_rev_safe' - * descriptions. - * - * Example: - * list_for_each_rev_safe_off(&parent->children, child, - * next, offsetof(struct child, list)) - * printf("Name: %s\n", child->name); - */ -#define list_for_each_rev_safe_off(h, i, nxt, off) \ - list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev) - -/* Other -off variants. */ -#define list_entry_off(n, type, off) \ - ((type *)list_node_from_off_((n), (off))) - -#define list_head_off(h, type, off) \ - ((type *)list_head_off((h), (off))) - -#define list_tail_off(h, type, off) \ - ((type *)list_tail_((h), (off))) - -#define list_add_off(h, n, off) \ - list_add((h), list_node_from_off_((n), (off))) - -#define list_del_off(n, off) \ - list_del(list_node_from_off_((n), (off))) - -#define list_del_from_off(h, n, off) \ - list_del_from(h, list_node_from_off_((n), (off))) - -/* Offset helper functions so we only single-evaluate. */ -static inline void *list_node_to_off_(struct list_node *node, size_t off) -{ - return (void *)((char *)node - off); -} -static inline struct list_node *list_node_from_off_(void *ptr, size_t off) -{ - return (struct list_node *)((char *)ptr + off); -} - -/* Get the offset of the member, but make sure it's a list_node. */ -#define list_off_(type, member) \ - (container_off(type, member) + \ - check_type(((type *)0)->member, struct list_node)) - -#define list_off_var_(var, member) \ - (container_off_var(var, member) + \ - check_type(var->member, struct list_node)) - -#if HAVE_TYPEOF -#define list_typeof(var) typeof(var) -#else -#define list_typeof(var) void * -#endif - -/* Returns member, or NULL if at end of list. */ -static inline void *list_entry_or_null(const struct list_head *h, - const struct list_node *n, - size_t off) -{ - if (n == &h->n) - return NULL; - return (char *)n - off; -} -#endif /* CCAN_LIST_H */ diff --git a/nostrdb/src/bolt11/mem.c b/nostrdb/src/bolt11/mem.c deleted file mode 100644 index 150f06164..000000000 --- a/nostrdb/src/bolt11/mem.c +++ /dev/null @@ -1,128 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ - -#include "config.h" - -#include -#include -#include "mem.h" - -#if !HAVE_MEMMEM -void *memmem(const void *haystack, size_t haystacklen, - const void *needle, size_t needlelen) -{ - const char *p; - - if (needlelen > haystacklen) - return NULL; - - p = haystack; - - for (p = haystack; - (p + needlelen) <= ((const char *)haystack + haystacklen); - p++) - if (memcmp(p, needle, needlelen) == 0) - return (void *)p; - - return NULL; -} -#endif - -#if !HAVE_MEMRCHR -void *memrchr(const void *s, int c, size_t n) -{ - unsigned char *p = (unsigned char *)s; - - while (n) { - if (p[n-1] == c) - return p + n - 1; - n--; - } - - return NULL; -} -#endif - -void *mempbrkm(const void *data_, size_t len, const void *accept_, size_t accept_len) -{ - const char *data = data_, *accept = accept_; - size_t i, j; - - for (i = 0; i < len; i++) - for (j = 0; j < accept_len; j++) - if (accept[j] == data[i]) - return (void *)&data[i]; - return NULL; -} - -void *memcchr(void const *data, int c, size_t data_len) -{ - char const *p = data; - size_t i; - - for (i = 0; i < data_len; i++) - if (p[i] != c) - return (void *)&p[i]; - - return NULL; -} - -#define MEMSWAP_TMP_SIZE 256 - -void memswap(void *a, void *b, size_t n) -{ - char *ap = a; - char *bp = b; - char tmp[MEMSWAP_TMP_SIZE]; - - assert(!memoverlaps(a, n, b, n)); - - while (n) { - size_t m = n > MEMSWAP_TMP_SIZE ? MEMSWAP_TMP_SIZE : n; - - memcpy(tmp, bp, m); - memcpy(bp, ap, m); - memcpy(ap, tmp, m); - - ap += m; - bp += m; - n -= m; - } -} - -bool memeqzero(const void *data, size_t length) -{ - const unsigned char *p = data; - size_t len; - - /* Check first 16 bytes manually */ - for (len = 0; len < 16; len++) { - if (!length) - return true; - if (*p) - return false; - p++; - length--; - } - - /* Now we know that's zero, memcmp with self. */ - return memcmp(data, p, length) == 0; -} - -void memtaint(void *data, size_t len) -{ - /* Using 16 bytes is a bit quicker than 4 */ - const unsigned tainter[] - = { 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef }; - char *p = data; - - while (len >= sizeof(tainter)) { - memcpy(p, tainter, sizeof(tainter)); - p += sizeof(tainter); - len -= sizeof(tainter); - } - memcpy(p, tainter, len); - -#if HAVE_VALGRIND_MEMCHECK_H - VALGRIND_MAKE_MEM_UNDEFINED(data, len); -#endif -} diff --git a/nostrdb/src/bolt11/mem.h b/nostrdb/src/bolt11/mem.h deleted file mode 100644 index 9b8d01a38..000000000 --- a/nostrdb/src/bolt11/mem.h +++ /dev/null @@ -1,295 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_MEM_H -#define CCAN_MEM_H - -#include "../config.h" -#include "../compiler.h" - -#include -#include - -#if !HAVE_MEMMEM -PURE_FUNCTION -void *memmem(const void *haystack, size_t haystacklen, - const void *needle, size_t needlelen); -#endif - -#if !HAVE_MEMRCHR -PURE_FUNCTION -void *memrchr(const void *s, int c, size_t n); -#endif - -/** - * mempbrkm - locates the first occurrence in @data of any bytes in @accept - * @data: where we search - * @len: length of data in bytes - * @accept: array of bytes we search for - * @accept_len: # of bytes in accept - * - * Returns a pointer to the byte in @data that matches one of the bytes in - * @accept, or NULL if no such byte is found. - * - * Example: - * char otherbytes[] = "Hello \0world"; - * size_t otherbytes_len = sizeof(otherbytes) - 1; - * char *r = mempbrkm(otherbytes, otherbytes_len, "\0b", 2); - * if (r) { - * printf("Found %c\n", *r); - * } else { - * printf("Nada\n"); - * } - * - */ -PURE_FUNCTION -void *mempbrkm(const void *data, size_t len, const void *accept, size_t accept_len); - -/** - * mempbrk - locates the first occurrence in @data of any bytes in @accept - * @data: where we search - * @len: length of data in bytes - * @accept: NUL terminated string containing the bytes we search for - * - * Returns a pointer to the byte in @data that matches one of the bytes in - * @accept, or NULL if no such byte is found. - * - * Example: - * - * r = mempbrk(otherbytes, otherbytes_len, "abcde"); - * if (r) { - * printf("Found %c\n", *r); - * } else { - * printf("Nada\n"); - * } - */ -PURE_FUNCTION -static inline char *mempbrk(const void *data, size_t len, const char *accept) -{ - return mempbrkm(data, len, accept, strlen(accept)); -} - -/** - * memcchr - scan memory until a character does _not_ match - * @data: pointer to memory to scan - * @data_len: length of data - * @c: character to scan for - * - * The complement of memchr(). - * - * Returns a pointer to the first character which is _not_ @c. If all memory in - * @data is @c, returns NULL. - * - * Example: - * char somebytes[] = "HI By\0e"; - * size_t bytes_len = sizeof(somebytes) - 1; - * r = memcchr(somebytes, ' ', bytes_len); - * if (r) { - * printf("Found %c after trimming spaces\n", *r); - * } - */ -PURE_FUNCTION -void *memcchr(void const *data, int c, size_t data_len); - -/** - * memeq - Are two byte arrays equal? - * @a: first array - * @al: bytes in first array - * @b: second array - * @bl: bytes in second array - * - * Example: - * if (memeq(somebytes, bytes_len, otherbytes, otherbytes_len)) { - * printf("memory blocks are the same!\n"); - * } - */ -PURE_FUNCTION -static inline bool memeq(const void *a, size_t al, const void *b, size_t bl) -{ - return al == bl && !memcmp(a, b, bl); -} - -/** - * memstarts - determine if @data starts with @prefix - * @data: does this begin with @prefix? - * @data_len: bytes in @data - * @prefix: does @data begin with these bytes? - * @prefix_len: bytes in @prefix - * - * Returns true if @data starts with @prefix, otherwise return false. - * - * Example: - * if (memstarts(somebytes, bytes_len, otherbytes, otherbytes_len)) { - * printf("somebytes starts with otherbytes!\n"); - * } - */ -PURE_FUNCTION -static inline bool memstarts(void const *data, size_t data_len, - void const *prefix, size_t prefix_len) -{ - if (prefix_len > data_len) - return false; - return memeq(data, prefix_len, prefix, prefix_len); -} - -/** - * memeqstr - Is a byte array equal to a NUL terminated string? - * @data: byte array - * @length: length of @data in bytes - * @string: NUL terminated string - * - * The '\0' byte is ignored when checking if @bytes == @string. - * - * Example: - * if (memeqstr(somebytes, bytes_len, "foo")) { - * printf("somebytes == 'foo'!\n"); - * } - */ -PURE_FUNCTION -static inline bool memeqstr(const void *data, size_t length, const char *string) -{ - return memeq(data, length, string, strlen(string)); -} - -/** - * memeqzero - Is a byte array all zeroes? - * @data: byte array - * @length: length of @data in bytes - * - * Example: - * if (memeqzero(somebytes, bytes_len)) { - * printf("somebytes == 0!\n"); - * } - */ -PURE_FUNCTION -bool memeqzero(const void *data, size_t length); - -/** - * memstarts_str - Does this byte array start with a string prefix? - * @a: byte array - * @al: length in bytes - * @s: string prefix - * - * Example: - * if (memstarts_str(somebytes, bytes_len, "It")) { - * printf("somebytes starts with 'It'\n"); - * } - */ -PURE_FUNCTION -static inline bool memstarts_str(const void *a, size_t al, const char *s) -{ - return memstarts(a, al, s, strlen(s)); -} - -/** - * memends - Does this byte array end with a given byte-array suffix? - * @s: byte array - * @s_len: length in bytes - * @suffix: byte array suffix - * @suffix_len: length of suffix in bytes - * - * Returns true if @suffix appears as a substring at the end of @s, - * false otherwise. - */ -PURE_FUNCTION -static inline bool memends(const void *s, size_t s_len, const void *suffix, size_t suffix_len) -{ - return (s_len >= suffix_len) && (memcmp((const char *)s + s_len - suffix_len, - suffix, suffix_len) == 0); -} - -/** - * memends_str - Does this byte array end with a string suffix? - * @a: byte array - * @al: length in bytes - * @s: string suffix - * - * Example: - * if (memends_str(somebytes, bytes_len, "It")) { - * printf("somebytes ends with with 'It'\n"); - * } - */ -PURE_FUNCTION -static inline bool memends_str(const void *a, size_t al, const char *s) -{ - return memends(a, al, s, strlen(s)); -} - -/** - * memoverlaps - Do two memory ranges overlap? - * @a: pointer to first memory range - * @al: length of first memory range - * @b: pointer to second memory range - * @al: length of second memory range - */ -CONST_FUNCTION -static inline bool memoverlaps(const void *a_, size_t al, - const void *b_, size_t bl) -{ - const char *a = a_; - const char *b = b_; - - return (a < (b + bl)) && (b < (a + al)); -} - -/* - * memswap - Exchange two memory regions - * @a: first region - * @b: second region - * @n: length of the regions - * - * Undefined results if the two memory regions overlap. - */ -void memswap(void *a, void *b, size_t n); - -#if HAVE_VALGRIND_MEMCHECK_H -#include -static inline void *memcheck_(const void *data, size_t len) -{ - VALGRIND_CHECK_MEM_IS_DEFINED(data, len); - return (void *)data; -} -#else -static inline void *memcheck_(const void *data, size_t len) -{ - (void)len; - return (void *)data; -} -#endif - -#if HAVE_TYPEOF -/** - * memcheck - check that a memory region is initialized - * @data: start of region - * @len: length in bytes - * - * When running under valgrind, this causes an error to be printed - * if the entire region is not defined. Otherwise valgrind only - * reports an error when an undefined value is used for a branch, or - * written out. - * - * Example: - * // Search for space, but make sure it's all initialized. - * if (memchr(memcheck(somebytes, bytes_len), ' ', bytes_len)) { - * printf("space was found!\n"); - * } - */ -#define memcheck(data, len) ((__typeof__((data)+0))memcheck_((data), (len))) -#else -#define memcheck(data, len) memcheck_((data), (len)) -#endif - -/** - * memtaint - mark a memory region unused - * @data: start of region - * @len: length in bytes - * - * This writes an "0xdeadbeef" eyecatcher repeatedly to the memory. - * When running under valgrind, it also tells valgrind that the memory is - * uninitialized, triggering valgrind errors if it is used for branches - * or written out (or passed to memcheck!) in future. - * - * Example: - * // We'll reuse this buffer later, but be sure we don't access it. - * memtaint(somebytes, bytes_len); - */ -void memtaint(void *data, size_t len); -#endif /* CCAN_MEM_H */ diff --git a/nostrdb/src/bolt11/short_types.h b/nostrdb/src/bolt11/short_types.h deleted file mode 100644 index 175377e9b..000000000 --- a/nostrdb/src/bolt11/short_types.h +++ /dev/null @@ -1,35 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_SHORT_TYPES_H -#define CCAN_SHORT_TYPES_H -#include - -/** - * u64/s64/u32/s32/u16/s16/u8/s8 - short names for explicitly-sized types. - */ -typedef uint64_t u64; -typedef int64_t s64; -typedef uint32_t u32; -typedef int32_t s32; -typedef uint16_t u16; -typedef int16_t s16; -typedef uint8_t u8; -typedef int8_t s8; - -/* Whichever they include first, they get these definitions. */ -#ifdef CCAN_ENDIAN_H -/** - * be64/be32/be16 - 64/32/16 bit big-endian representation. - */ -typedef beint64_t be64; -typedef beint32_t be32; -typedef beint16_t be16; - -/** - * le64/le32/le16 - 64/32/16 bit little-endian representation. - */ -typedef leint64_t le64; -typedef leint32_t le32; -typedef leint16_t le16; -#endif - -#endif /* CCAN_SHORT_TYPES_H */ diff --git a/nostrdb/src/bolt11/structeq.h b/nostrdb/src/bolt11/structeq.h deleted file mode 100644 index bb7014651..000000000 --- a/nostrdb/src/bolt11/structeq.h +++ /dev/null @@ -1,46 +0,0 @@ -/* MIT (BSD) license - see LICENSE file for details */ -#ifndef CCAN_STRUCTEQ_H -#define CCAN_STRUCTEQ_H -#include "build_assert.h" -#include "cppmagic.h" -#include -#include - -/** - * STRUCTEQ_DEF - define an ..._eq function to compare two structures. - * @sname: name of the structure, and function (_eq) to define. - * @padbytes: number of bytes of expected padding, or negative "max". - * @...: name of every member of the structure. - * - * This generates a single memcmp() call in the common case where the - * structure contains no padding. Since it can't tell the difference between - * padding and a missing member, @padbytes can be used to assert that - * there isn't any, or how many we expect. A negative number means - * "up to or equal to that amount of padding", as padding can be - * platform dependent. - */ -#define STRUCTEQ_DEF(sname, padbytes, ...) \ -static inline bool CPPMAGIC_GLUE2(sname, _eq)(const struct sname *_a, \ - const struct sname *_b) \ -{ \ - BUILD_ASSERT(((padbytes) < 0 && \ - CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ - __VA_ARGS__)) \ - - (padbytes) >= sizeof(*_a)) \ - || CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ - __VA_ARGS__)) \ - + (padbytes) == sizeof(*_a)); \ - if (CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, __VA_ARGS__)) \ - == sizeof(*_a)) \ - return memcmp(_a, _b, sizeof(*_a)) == 0; \ - else \ - return CPPMAGIC_JOIN(&&, \ - CPPMAGIC_MAP(STRUCTEQ_MEMBER_CMP_, \ - __VA_ARGS__)); \ -} - -/* Helpers */ -#define STRUCTEQ_MEMBER_SIZE_(m) sizeof((_a)->m) -#define STRUCTEQ_MEMBER_CMP_(m) memcmp(&_a->m, &_b->m, sizeof(_a->m)) == 0 - -#endif /* CCAN_STRUCTEQ_H */ diff --git a/nostrdb/src/bolt11/take.c b/nostrdb/src/bolt11/take.c deleted file mode 100644 index 3b59db081..000000000 --- a/nostrdb/src/bolt11/take.c +++ /dev/null @@ -1,126 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#include "take.h" -#include "likely.h" -#include -#include -#include - -static const void **takenarr; -static const char **labelarr; -static size_t max_taken, num_taken; -static size_t allocfail; -static void (*allocfailfn)(const void *p); - -void *take_(const void *p, const char *label) -{ - /* Overallocate: it's better than risking calloc returning NULL! */ - if (unlikely(label && !labelarr)) - labelarr = calloc(max_taken+1, sizeof(*labelarr)); - - if (unlikely(num_taken == max_taken)) { - const void **new; - - new = realloc(takenarr, sizeof(*takenarr) * (max_taken+1)); - if (unlikely(!new)) { - if (allocfailfn) { - allocfail++; - allocfailfn(p); - return NULL; - } - /* Otherwise we leak p. */ - return (void *)p; - } - takenarr = new; - /* Once labelarr is set, we maintain it. */ - if (labelarr) { - const char **labelarr_new; - labelarr_new = realloc(labelarr, - sizeof(*labelarr) * (max_taken+1)); - if (labelarr_new) { - labelarr = labelarr_new; - } else { - /* num_taken will be out of sync with the size of - * labelarr after realloc failure. - * Just pretend that we never had labelarr allocated. */ - free(labelarr); - labelarr = NULL; - } - } - max_taken++; - } - if (unlikely(labelarr)) - labelarr[num_taken] = label; - takenarr[num_taken++] = p; - - return (void *)p; -} - -static size_t find_taken(const void *p) -{ - size_t i; - - for (i = 0; i < num_taken; i++) { - if (takenarr[i] == p) - return i+1; - } - return 0; -} - -bool taken(const void *p) -{ - size_t i; - - if (!p && unlikely(allocfail)) { - allocfail--; - return true; - } - - i = find_taken(p); - if (!i) - return false; - - memmove(&takenarr[i-1], &takenarr[i], - (--num_taken - (i - 1))*sizeof(takenarr[0])); - return true; -} - -bool is_taken(const void *p) -{ - if (!p && unlikely(allocfail)) - return true; - - return find_taken(p) > 0; -} - -const char *taken_any(void) -{ - static char pointer_buf[32]; - - if (num_taken == 0) - return NULL; - - /* We're *allowed* to have some with labels, some without. */ - if (labelarr) { - size_t i; - for (i = 0; i < num_taken; i++) - if (labelarr[i]) - return labelarr[i]; - } - - sprintf(pointer_buf, "%p", takenarr[0]); - return pointer_buf; -} - -void take_cleanup(void) -{ - max_taken = num_taken = 0; - free(takenarr); - takenarr = NULL; - free(labelarr); - labelarr = NULL; -} - -void take_allocfail(void (*fn)(const void *p)) -{ - allocfailfn = fn; -} diff --git a/nostrdb/src/bolt11/take.h b/nostrdb/src/bolt11/take.h deleted file mode 100644 index 3de6f99de..000000000 --- a/nostrdb/src/bolt11/take.h +++ /dev/null @@ -1,136 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_TAKE_H -#define CCAN_TAKE_H -#include "../config.h" -#include -#include "str.h" - -#ifdef CCAN_TAKE_DEBUG -#define TAKE_LABEL(p) __FILE__ ":" stringify(__LINE__) ":" stringify(p) -#else -#define TAKE_LABEL(p) NULL -#endif - -/** - * TAKES - annotate a formal parameter as being take()-able - * - * This doesn't do anything, but useful for documentation. - * - * Example: - * void print_string(const char *str TAKES); - * - */ -#define TAKES - -/** - * take - record a pointer to be consumed by the function its handed to. - * @p: the pointer to mark, or NULL. - * - * This marks a pointer object to be freed by the called function, - * which is extremely useful for chaining functions. It works on - * NULL, for pass-through error handling. - */ -#define take(p) (take_typeof(p) take_((p), TAKE_LABEL(p))) - -/** - * taken - check (and un-take) a pointer was passed with take() - * @p: the pointer to check. - * - * A function which accepts take() arguments uses this to see if it - * should own the pointer; it will be removed from the take list, so - * this only returns true once. - * - * Example: - * // Silly routine to add 1 - * static int *add_one(const int *num TAKES) - * { - * int *ret; - * if (taken(num)) - * ret = (int *)num; - * else - * ret = malloc(sizeof(int)); - * if (ret) - * *ret = (*num) + 1; - * return ret; - * } - */ -bool taken(const void *p); - -/** - * is_taken - check if a pointer was passed with take() - * @p: the pointer to check. - * - * This is like the above, but doesn't remove it from the taken list. - * - * Example: - * // Silly routine to add 1: doesn't handle taken args! - * static int *add_one_notake(const int *num) - * { - * int *ret = malloc(sizeof(int)); - * assert(!is_taken(num)); - * if (ret) - * *ret = (*num) + 1; - * return ret; - * } - */ -bool is_taken(const void *p); - -/** - * taken_any - are there any taken pointers? - * - * Mainly useful for debugging take() leaks. With CCAN_TAKE_DEBUG, returns - * the label where the pointer was passed to take(), otherwise returns - * a static char buffer with the pointer value in it. NULL if none are taken. - * - * Example: - * static void cleanup(void) - * { - * assert(!taken_any()); - * } - */ -const char *taken_any(void); - -/** - * take_cleanup - remove all taken pointers from list. - * - * This is useful in atexit() handlers for valgrind-style leak detection. - * - * Example: - * static void cleanup2(void) - * { - * take_cleanup(); - * } - */ -void take_cleanup(void); - -/** - * take_allocfail - set function to call if we can't reallocated taken array. - * @fn: the function. - * - * If this is not set, then if the array reallocation fails, the - * pointer won't be marked taken(). If @fn returns, it is expected to - * free the pointer; we return NULL from take() and the function handles - * it like any allocation failure. - * - * Example: - * static void free_on_fail(const void *p) - * { - * free((void *)p); - * } - * - * static void init(void) - * { - * take_allocfail(free_on_fail); - * } - */ -void take_allocfail(void (*fn)(const void *p)); - -/* Private functions */ -#if HAVE_TYPEOF -#define take_typeof(ptr) (__typeof__(ptr)) -#else -#define take_typeof(ptr) -#endif - -void *take_(const void *p, const char *label); -#endif /* CCAN_TAKE_H */ diff --git a/nostrdb/src/bolt11/tal.c b/nostrdb/src/bolt11/tal.c deleted file mode 100644 index 516b44049..000000000 --- a/nostrdb/src/bolt11/tal.c +++ /dev/null @@ -1,972 +0,0 @@ -/* Licensed under BSD-MIT - see LICENSE file for details */ -#include "tal.h" -#include "../compiler.h" -#include "list.h" -#include "alignof.h" - -#include -#include -#include -#include -#include -#include -#include - -//#define TAL_DEBUG 1 - -#define NOTIFY_IS_DESTRUCTOR 512 -#define NOTIFY_EXTRA_ARG 1024 - -/* This makes our parent_child ptr stand out for to_tal_hdr checks */ -#define TAL_PTR_OBFUSTICATOR ((intptr_t)0x1984200820142016ULL) - -/* 32-bit type field, first byte 0 in either endianness. */ -enum prop_type { - CHILDREN = 0x00c1d500, - NAME = 0x00111100, - NOTIFIER = 0x00071f00, -}; - -struct tal_hdr { - struct list_node list; - struct prop_hdr *prop; - /* XOR with TAL_PTR_OBFUSTICATOR */ - intptr_t parent_child; - size_t bytelen; -}; - -struct prop_hdr { - enum prop_type type; - struct prop_hdr *next; -}; - -struct children { - struct prop_hdr hdr; /* CHILDREN */ - struct tal_hdr *parent; - struct list_head children; /* Head of siblings. */ -}; - -struct name { - struct prop_hdr hdr; /* NAME */ - char name[]; -}; - -struct notifier { - struct prop_hdr hdr; /* NOTIFIER */ - enum tal_notify_type types; - union notifier_cb { - void (*notifyfn)(tal_t *, enum tal_notify_type, void *); - void (*destroy)(tal_t *); /* If NOTIFY_IS_DESTRUCTOR set */ - void (*destroy2)(tal_t *, void *); /* If NOTIFY_EXTRA_ARG */ - } u; -}; - -/* Extra arg */ -struct notifier_extra_arg { - struct notifier n; - void *arg; -}; - -#define EXTRA_ARG(n) (((struct notifier_extra_arg *)(n))->arg) - -static struct { - struct tal_hdr hdr; - struct children c; -} null_parent = { { { &null_parent.hdr.list, &null_parent.hdr.list }, - &null_parent.c.hdr, TAL_PTR_OBFUSTICATOR, 0 }, - { { CHILDREN, NULL }, - &null_parent.hdr, - { { &null_parent.c.children.n, - &null_parent.c.children.n } } - } -}; - - -static void *(*allocfn)(size_t size) = malloc; -static void *(*resizefn)(void *, size_t size) = realloc; -static void (*freefn)(void *) = free; -static void (*errorfn)(const char *msg) = (void *)abort; -/* Count on non-destrutor notifiers; often stays zero. */ -static size_t notifiers = 0; - -static inline void COLD call_error(const char *msg) -{ - errorfn(msg); -} - -static bool get_destroying_bit(intptr_t parent_child) -{ - return parent_child & 1; -} - -static void set_destroying_bit(intptr_t *parent_child) -{ - *parent_child |= 1; -} - -static struct children *ignore_destroying_bit(intptr_t parent_child) -{ - return (void *)((parent_child ^ TAL_PTR_OBFUSTICATOR) & ~(intptr_t)1); -} - -/* This means valgrind can see leaks. */ -void tal_cleanup(void) -{ - struct tal_hdr *i; - - while ((i = list_top(&null_parent.c.children, struct tal_hdr, list))) { - list_del(&i->list); - memset(i, 0, sizeof(*i)); - } - - /* Cleanup any taken pointers. */ - take_cleanup(); -} - -/* We carefully start all real properties with a zero byte. */ -static bool is_literal(const struct prop_hdr *prop) -{ - return ((char *)prop)[0] != 0; -} - -#ifndef NDEBUG -static const void *bounds_start, *bounds_end; - -static void update_bounds(const void *new, size_t size) -{ - if (unlikely(!bounds_start)) { - bounds_start = new; - bounds_end = (char *)new + size; - } else if (new < bounds_start) - bounds_start = new; - else if ((char *)new + size > (char *)bounds_end) - bounds_end = (char *)new + size; -} - -static bool in_bounds(const void *p) -{ - return !p - || (p >= (void *)&null_parent && p <= (void *)(&null_parent + 1)) - || (p >= bounds_start && p <= bounds_end); -} -#else -static void update_bounds(const void *new, size_t size) -{ -} - -static bool in_bounds(const void *p) -{ - return true; -} -#endif - -static void check_bounds(const void *p) -{ - if (!in_bounds(p)) - call_error("Not a valid header"); -} - -static struct tal_hdr *to_tal_hdr(const void *ctx) -{ - struct tal_hdr *t; - - t = (struct tal_hdr *)((char *)ctx - sizeof(struct tal_hdr)); - check_bounds(t); - check_bounds(ignore_destroying_bit(t->parent_child)); - check_bounds(t->list.next); - check_bounds(t->list.prev); - if (t->prop && !is_literal(t->prop)) - check_bounds(t->prop); - return t; -} - -static struct tal_hdr *to_tal_hdr_or_null(const void *ctx) -{ - if (!ctx) - return &null_parent.hdr; - return to_tal_hdr(ctx); -} - -static void *from_tal_hdr(const struct tal_hdr *hdr) -{ - return (void *)(hdr + 1); -} - -static void *from_tal_hdr_or_null(const struct tal_hdr *hdr) -{ - if (hdr == &null_parent.hdr) - return NULL; - return from_tal_hdr(hdr); -} - -#ifdef TAL_DEBUG -static struct tal_hdr *debug_tal(struct tal_hdr *tal) -{ - tal_check(from_tal_hdr_or_null(tal), "TAL_DEBUG "); - return tal; -} -#else -static struct tal_hdr *debug_tal(struct tal_hdr *tal) -{ - return tal; -} -#endif - -static void notify(const struct tal_hdr *ctx, - enum tal_notify_type type, const void *info, - int saved_errno) -{ - const struct prop_hdr *p; - - for (p = ctx->prop; p; p = p->next) { - struct notifier *n; - - if (is_literal(p)) - break; - if (p->type != NOTIFIER) - continue; - n = (struct notifier *)p; - if (n->types & type) { - errno = saved_errno; - if (n->types & NOTIFY_IS_DESTRUCTOR) { - /* Blatt this notifier in case it tries to - * tal_del_destructor() from inside */ - union notifier_cb cb = n->u; - /* It's a union, so this NULLs destroy2 too! */ - n->u.destroy = NULL; - if (n->types & NOTIFY_EXTRA_ARG) - cb.destroy2(from_tal_hdr(ctx), - EXTRA_ARG(n)); - else - cb.destroy(from_tal_hdr(ctx)); - } else - n->u.notifyfn(from_tal_hdr_or_null(ctx), type, - (void *)info); - } - } -} - -static void *allocate(size_t size) -{ - void *ret = allocfn(size); - if (!ret) - call_error("allocation failed"); - else - update_bounds(ret, size); - return ret; -} - -static struct prop_hdr **find_property_ptr(const struct tal_hdr *t, - enum prop_type type) -{ - struct prop_hdr **p; - - for (p = (struct prop_hdr **)&t->prop; *p; p = &(*p)->next) { - if (is_literal(*p)) { - if (type == NAME) - return p; - break; - } - if ((*p)->type == type) - return p; - } - return NULL; -} - -static void *find_property(const struct tal_hdr *parent, enum prop_type type) -{ - struct prop_hdr **p = find_property_ptr(parent, type); - - if (p) - return *p; - return NULL; -} - -static void init_property(struct prop_hdr *hdr, - struct tal_hdr *parent, - enum prop_type type) -{ - hdr->type = type; - hdr->next = parent->prop; - parent->prop = hdr; -} - -static struct notifier *add_notifier_property(struct tal_hdr *t, - enum tal_notify_type types, - void (*fn)(void *, - enum tal_notify_type, - void *), - void *extra_arg) -{ - struct notifier *prop; - - if (types & NOTIFY_EXTRA_ARG) - prop = allocate(sizeof(struct notifier_extra_arg)); - else - prop = allocate(sizeof(struct notifier)); - - if (prop) { - init_property(&prop->hdr, t, NOTIFIER); - prop->types = types; - prop->u.notifyfn = fn; - if (types & NOTIFY_EXTRA_ARG) - EXTRA_ARG(prop) = extra_arg; - } - return prop; -} - -static enum tal_notify_type del_notifier_property(struct tal_hdr *t, - void (*fn)(tal_t *, - enum tal_notify_type, - void *), - bool match_extra_arg, - void *extra_arg) -{ - struct prop_hdr **p; - - for (p = (struct prop_hdr **)&t->prop; *p; p = &(*p)->next) { - struct notifier *n; - enum tal_notify_type types; - - if (is_literal(*p)) - break; - if ((*p)->type != NOTIFIER) - continue; - n = (struct notifier *)*p; - if (n->u.notifyfn != fn) - continue; - - types = n->types; - if ((types & NOTIFY_EXTRA_ARG) - && match_extra_arg - && extra_arg != EXTRA_ARG(n)) - continue; - - *p = (*p)->next; - freefn(n); - return types & ~(NOTIFY_IS_DESTRUCTOR|NOTIFY_EXTRA_ARG); - } - return 0; -} - -static struct name *add_name_property(struct tal_hdr *t, const char *name) -{ - struct name *prop; - - prop = allocate(sizeof(*prop) + strlen(name) + 1); - if (prop) { - init_property(&prop->hdr, t, NAME); - strcpy(prop->name, name); - } - return prop; -} - -static struct children *add_child_property(struct tal_hdr *parent, - struct tal_hdr *child UNNEEDED) -{ - struct children *prop = allocate(sizeof(*prop)); - if (prop) { - init_property(&prop->hdr, parent, CHILDREN); - prop->parent = parent; - list_head_init(&prop->children); - } - return prop; -} - -static bool add_child(struct tal_hdr *parent, struct tal_hdr *child) -{ - struct children *children = find_property(parent, CHILDREN); - - if (!children) { - children = add_child_property(parent, child); - if (!children) - return false; - } - list_add(&children->children, &child->list); - child->parent_child = (intptr_t)children ^ TAL_PTR_OBFUSTICATOR; - return true; -} - -static void del_tree(struct tal_hdr *t, const tal_t *orig, int saved_errno) -{ - struct prop_hdr **prop, *p, *next; - - assert(!taken(from_tal_hdr(t))); - - /* Already being destroyed? Don't loop. */ - if (unlikely(get_destroying_bit(t->parent_child))) - return; - - set_destroying_bit(&t->parent_child); - - /* Call free notifiers. */ - notify(t, TAL_NOTIFY_FREE, (tal_t *)orig, saved_errno); - - /* Now free children and groups. */ - prop = find_property_ptr(t, CHILDREN); - if (prop) { - struct tal_hdr *i; - struct children *c = (struct children *)*prop; - - while ((i = list_top(&c->children, struct tal_hdr, list))) { - list_del(&i->list); - del_tree(i, orig, saved_errno); - } - } - - /* Finally free our properties. */ - for (p = t->prop; p && !is_literal(p); p = next) { - next = p->next; - freefn(p); - } - freefn(t); -} - -void *tal_alloc_(const tal_t *ctx, size_t size, bool clear, const char *label) -{ - struct tal_hdr *child, *parent = debug_tal(to_tal_hdr_or_null(ctx)); - - child = allocate(sizeof(struct tal_hdr) + size); - if (!child) - return NULL; - if (clear) - memset(from_tal_hdr(child), 0, size); - child->prop = (void *)label; - child->bytelen = size; - - if (!add_child(parent, child)) { - freefn(child); - return NULL; - } - debug_tal(parent); - if (notifiers) - notify(parent, TAL_NOTIFY_ADD_CHILD, from_tal_hdr(child), 0); - return from_tal_hdr(debug_tal(child)); -} - -static bool adjust_size(size_t *size, size_t count) -{ - const size_t extra = sizeof(struct tal_hdr); - - /* Multiplication wrap */ - if (count && unlikely(*size * count / *size != count)) - goto overflow; - - *size *= count; - - /* Make sure we don't wrap adding header. */ - if (*size + extra < extra) - goto overflow; - return true; -overflow: - call_error("allocation size overflow"); - return false; -} - -void *tal_alloc_arr_(const tal_t *ctx, size_t size, size_t count, bool clear, - const char *label) -{ - if (!adjust_size(&size, count)) - return NULL; - - return tal_alloc_(ctx, size, clear, label); -} - -void *tal_free(const tal_t *ctx) -{ - if (ctx) { - struct tal_hdr *t; - int saved_errno = errno; - t = debug_tal(to_tal_hdr(ctx)); - if (unlikely(get_destroying_bit(t->parent_child))) - return NULL; - if (notifiers) - notify(ignore_destroying_bit(t->parent_child)->parent, - TAL_NOTIFY_DEL_CHILD, ctx, saved_errno); - list_del(&t->list); - del_tree(t, ctx, saved_errno); - errno = saved_errno; - } - return NULL; -} - -void *tal_steal_(const tal_t *new_parent, const tal_t *ctx) -{ - if (ctx) { - struct tal_hdr *newpar, *t, *old_parent; - - newpar = debug_tal(to_tal_hdr_or_null(new_parent)); - t = debug_tal(to_tal_hdr(ctx)); - - /* Unlink it from old parent. */ - list_del(&t->list); - old_parent = ignore_destroying_bit(t->parent_child)->parent; - - if (unlikely(!add_child(newpar, t))) { - /* We can always add to old parent, because it has a - * children property already. */ - if (!add_child(old_parent, t)) - abort(); - return NULL; - } - debug_tal(newpar); - if (notifiers) - notify(t, TAL_NOTIFY_STEAL, new_parent, 0); - } - return (void *)ctx; -} - -bool tal_add_destructor_(const tal_t *ctx, void (*destroy)(void *me)) -{ - tal_t *t = debug_tal(to_tal_hdr(ctx)); - return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR, - (void *)destroy, NULL); -} - -bool tal_add_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), - void *arg) -{ - tal_t *t = debug_tal(to_tal_hdr(ctx)); - return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR - |NOTIFY_EXTRA_ARG, - (void *)destroy, arg); -} - -/* We could support notifiers with an extra arg, but we didn't add to API */ -bool tal_add_notifier_(const tal_t *ctx, enum tal_notify_type types, - void (*callback)(tal_t *, enum tal_notify_type, void *)) -{ - struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); - struct notifier *n; - - assert(types); - assert((types & ~(TAL_NOTIFY_FREE | TAL_NOTIFY_STEAL | TAL_NOTIFY_MOVE - | TAL_NOTIFY_RESIZE | TAL_NOTIFY_RENAME - | TAL_NOTIFY_ADD_CHILD | TAL_NOTIFY_DEL_CHILD - | TAL_NOTIFY_ADD_NOTIFIER - | TAL_NOTIFY_DEL_NOTIFIER)) == 0); - - /* Don't call notifier about itself: set types after! */ - n = add_notifier_property(t, 0, callback, NULL); - if (unlikely(!n)) - return false; - - if (notifiers) - notify(t, TAL_NOTIFY_ADD_NOTIFIER, callback, 0); - - n->types = types; - if (types != TAL_NOTIFY_FREE) - notifiers++; - return true; -} - -bool tal_del_notifier_(const tal_t *ctx, - void (*callback)(tal_t *, enum tal_notify_type, void *), - bool match_extra_arg, void *extra_arg) -{ - struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); - enum tal_notify_type types; - - types = del_notifier_property(t, callback, match_extra_arg, extra_arg); - if (types) { - notify(t, TAL_NOTIFY_DEL_NOTIFIER, callback, 0); - if (types != TAL_NOTIFY_FREE) - notifiers--; - return true; - } - return false; -} - -bool tal_del_destructor_(const tal_t *ctx, void (*destroy)(void *me)) -{ - return tal_del_notifier_(ctx, (void *)destroy, false, NULL); -} - -bool tal_del_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), - void *arg) -{ - return tal_del_notifier_(ctx, (void *)destroy, true, arg); -} - -bool tal_set_name_(tal_t *ctx, const char *name, bool literal) -{ - struct tal_hdr *t = debug_tal(to_tal_hdr(ctx)); - struct prop_hdr **prop = find_property_ptr(t, NAME); - - /* Get rid of any old name */ - if (prop) { - struct name *name = (struct name *)*prop; - if (is_literal(&name->hdr)) - *prop = NULL; - else { - *prop = name->hdr.next; - freefn(name); - } - } - - if (literal && name[0]) { - struct prop_hdr **p; - - /* Append literal. */ - for (p = &t->prop; *p && !is_literal(*p); p = &(*p)->next); - *p = (struct prop_hdr *)name; - } else if (!add_name_property(t, name)) - return false; - - debug_tal(t); - if (notifiers) - notify(t, TAL_NOTIFY_RENAME, name, 0); - return true; -} - -const char *tal_name(const tal_t *t) -{ - struct name *n; - - n = find_property(debug_tal(to_tal_hdr(t)), NAME); - if (!n) - return NULL; - - if (is_literal(&n->hdr)) - return (const char *)n; - return n->name; -} - -size_t tal_bytelen(const tal_t *ptr) -{ - /* NULL -> null_parent which has bytelen 0 */ - struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ptr)); - - return t->bytelen; -} - -/* Start one past first child: make stopping natural in circ. list. */ -static struct tal_hdr *first_child(struct tal_hdr *parent) -{ - struct children *child; - - child = find_property(parent, CHILDREN); - if (!child) - return NULL; - - return list_top(&child->children, struct tal_hdr, list); -} - -tal_t *tal_first(const tal_t *root) -{ - struct tal_hdr *c, *t = debug_tal(to_tal_hdr_or_null(root)); - - c = first_child(t); - if (!c) - return NULL; - return from_tal_hdr(c); -} - -tal_t *tal_next(const tal_t *prev) -{ - struct tal_hdr *next, *prevhdr = debug_tal(to_tal_hdr(prev)); - struct list_head *head; - - head = &ignore_destroying_bit(prevhdr->parent_child)->children; - next = list_next(head, prevhdr, list); - if (!next) - return NULL; - return from_tal_hdr(next); -} - -tal_t *tal_parent(const tal_t *ctx) -{ - struct tal_hdr *t; - - if (!ctx) - return NULL; - - t = debug_tal(to_tal_hdr(ctx)); - if (ignore_destroying_bit(t->parent_child)->parent == &null_parent.hdr) - return NULL; - return from_tal_hdr(ignore_destroying_bit(t->parent_child)->parent); -} - -bool tal_resize_(tal_t **ctxp, size_t size, size_t count, bool clear) -{ - struct tal_hdr *old_t, *t; - struct children *child; - - old_t = debug_tal(to_tal_hdr(*ctxp)); - - if (!adjust_size(&size, count)) - return false; - - t = resizefn(old_t, sizeof(struct tal_hdr) + size); - if (!t) { - call_error("Reallocation failure"); - return false; - } - - /* Clear between old end and new end. */ - if (clear && size > t->bytelen) { - char *old_end = (char *)(t + 1) + t->bytelen; - memset(old_end, 0, size - t->bytelen); - } - - /* Update length. */ - t->bytelen = size; - update_bounds(t, sizeof(struct tal_hdr) + size); - - /* If it didn't move, we're done! */ - if (t != old_t) { - /* Fix up linked list pointers. */ - t->list.next->prev = t->list.prev->next = &t->list; - - /* Copy take() property. */ - if (taken(from_tal_hdr(old_t))) - take(from_tal_hdr(t)); - - /* Fix up child property's parent pointer. */ - child = find_property(t, CHILDREN); - if (child) { - assert(child->parent == old_t); - child->parent = t; - } - *ctxp = from_tal_hdr(debug_tal(t)); - if (notifiers) - notify(t, TAL_NOTIFY_MOVE, from_tal_hdr(old_t), 0); - } - if (notifiers) - notify(t, TAL_NOTIFY_RESIZE, (void *)size, 0); - - return true; -} - -bool tal_expand_(tal_t **ctxp, const void *src, size_t size, size_t count) -{ - size_t old_len; - bool ret = false; - - old_len = debug_tal(to_tal_hdr(*ctxp))->bytelen; - - /* Check for additive overflow */ - if (old_len + count * size < old_len) { - call_error("dup size overflow"); - goto out; - } - - /* Don't point src inside thing we're expanding! */ - assert(src < *ctxp - || (char *)src >= (char *)(*ctxp) + old_len); - - if (!tal_resize_(ctxp, size, old_len/size + count, false)) - goto out; - - memcpy((char *)*ctxp + old_len, src, count * size); - ret = true; - -out: - if (taken(src)) - tal_free(src); - return ret; -} - -void *tal_dup_(const tal_t *ctx, const void *p, size_t size, - size_t n, size_t extra, bool nullok, const char *label) -{ - void *ret; - size_t nbytes = size; - - if (nullok && p == NULL) { - /* take(NULL) works. */ - (void)taken(p); - return NULL; - } - - if (!adjust_size(&nbytes, n)) { - if (taken(p)) - tal_free(p); - return NULL; - } - - /* Beware addition overflow! */ - if (n + extra < n) { - call_error("dup size overflow"); - if (taken(p)) - tal_free(p); - return NULL; - } - - if (taken(p)) { - if (unlikely(!p)) - return NULL; - if (unlikely(!tal_resize_((void **)&p, size, n + extra, false))) - return tal_free(p); - if (unlikely(!tal_steal(ctx, p))) - return tal_free(p); - return (void *)p; - } - - ret = tal_alloc_arr_(ctx, size, n + extra, false, label); - if (ret) - memcpy(ret, p, nbytes); - return ret; -} - -void *tal_dup_talarr_(const tal_t *ctx, const tal_t *src TAKES, const char *label) -{ - return tal_dup_(ctx, src, 1, tal_bytelen(src), 0, true, label); -} - -void tal_set_backend(void *(*alloc_fn)(size_t size), - void *(*resize_fn)(void *, size_t size), - void (*free_fn)(void *), - void (*error_fn)(const char *msg)) -{ - if (alloc_fn) - allocfn = alloc_fn; - if (resize_fn) - resizefn = resize_fn; - if (free_fn) - freefn = free_fn; - if (error_fn) - errorfn = error_fn; -} - -#ifdef CCAN_TAL_DEBUG -static void dump_node(unsigned int indent, const struct tal_hdr *t) -{ - unsigned int i; - const struct prop_hdr *p; - - for (i = 0; i < indent; i++) - fprintf(stderr, " "); - fprintf(stderr, "%p len=%zu", t, t->bytelen); - for (p = t->prop; p; p = p->next) { - struct children *c; - struct name *n; - struct notifier *no; - if (is_literal(p)) { - fprintf(stderr, " \"%s\"", (const char *)p); - break; - } - switch (p->type) { - case CHILDREN: - c = (struct children *)p; - fprintf(stderr, " CHILDREN(%p):parent=%p,children={%p,%p}", - p, c->parent, - c->children.n.prev, c->children.n.next); - break; - case NAME: - n = (struct name *)p; - fprintf(stderr, " NAME(%p):%s", p, n->name); - break; - case NOTIFIER: - no = (struct notifier *)p; - fprintf(stderr, " NOTIFIER(%p):fn=%p", p, no->u.notifyfn); - break; - default: - fprintf(stderr, " **UNKNOWN(%p):%i**", p, p->type); - } - } - fprintf(stderr, "\n"); -} - -static void tal_dump_(unsigned int level, const struct tal_hdr *t) -{ - struct children *children; - - dump_node(level, t); - - children = find_property(t, CHILDREN); - if (children) { - struct tal_hdr *i; - - list_for_each(&children->children, i, list) - tal_dump_(level + 1, i); - } -} - -void tal_dump(void) -{ - tal_dump_(0, &null_parent.hdr); -} -#endif /* CCAN_TAL_DEBUG */ - -#ifndef NDEBUG -static bool check_err(struct tal_hdr *t, const char *errorstr, - const char *errmsg) -{ - if (errorstr) { - /* Try not to malloc: it may be corrupted. */ - char msg[strlen(errorstr) + 20 + strlen(errmsg) + 1]; - sprintf(msg, "%s:%p %s", errorstr, from_tal_hdr(t), errmsg); - call_error(msg); - } - return false; -} - -static bool check_node(struct children *parent_child, - struct tal_hdr *t, const char *errorstr) -{ - struct prop_hdr *p; - struct name *name = NULL; - struct children *children = NULL; - - if (!in_bounds(t)) - return check_err(t, errorstr, "invalid pointer"); - - if (ignore_destroying_bit(t->parent_child) != parent_child) - return check_err(t, errorstr, "incorrect parent"); - - for (p = t->prop; p; p = p->next) { - if (is_literal(p)) { - if (name) - return check_err(t, errorstr, - "has extra literal"); - break; - } - if (!in_bounds(p)) - return check_err(t, errorstr, - "has bad property pointer"); - - switch (p->type) { - case CHILDREN: - if (children) - return check_err(t, errorstr, - "has two child nodes"); - children = (struct children *)p; - break; - case NOTIFIER: - break; - case NAME: - if (name) - return check_err(t, errorstr, - "has two names"); - name = (struct name *)p; - break; - default: - return check_err(t, errorstr, "has unknown property"); - } - } - if (children) { - struct tal_hdr *i; - - if (!list_check(&children->children, errorstr)) - return false; - list_for_each(&children->children, i, list) { - if (!check_node(children, i, errorstr)) - return false; - } - } - return true; -} - -bool tal_check(const tal_t *ctx, const char *errorstr) -{ - struct tal_hdr *t = to_tal_hdr_or_null(ctx); - - return check_node(ignore_destroying_bit(t->parent_child), t, errorstr); -} -#else /* NDEBUG */ -bool tal_check(const tal_t *ctx, const char *errorstr) -{ - return true; -} -#endif diff --git a/nostrdb/src/bolt11/tal.h b/nostrdb/src/bolt11/tal.h deleted file mode 100644 index 8daafa3d8..000000000 --- a/nostrdb/src/bolt11/tal.h +++ /dev/null @@ -1,553 +0,0 @@ -/* Licensed under BSD-MIT - see LICENSE file for details */ -#ifndef CCAN_TAL_H -#define CCAN_TAL_H -#include "../config.h" -#include "../compiler.h" -#include "likely.h" -#include "typesafe_cb.h" -#include "str.h" -#include "take.h" - -#include -#include -#include - -/** - * tal_t - convenient alias for void to mark tal pointers. - * - * Since any pointer can be a tal-allocated pointer, it's often - * useful to use this typedef to mark them explicitly. - */ -typedef void tal_t; - -/** - * tal - basic allocator function - * @ctx: NULL, or tal allocated object to be parent. - * @type: the type to allocate. - * - * Allocates a specific type, with a given parent context. The name - * of the object is a string of the type, but if CCAN_TAL_DEBUG is - * defined it also contains the file and line which allocated it. - * - * tal_count() of the return will be 1. - * - * Example: - * int *p = tal(NULL, int); - * *p = 1; - */ -#define tal(ctx, type) \ - tal_label(ctx, type, TAL_LABEL(type, "")) - -/** - * talz - zeroing allocator function - * @ctx: NULL, or tal allocated object to be parent. - * @type: the type to allocate. - * - * Equivalent to tal() followed by memset() to zero. - * - * Example: - * p = talz(NULL, int); - * assert(*p == 0); - */ -#define talz(ctx, type) \ - talz_label(ctx, type, TAL_LABEL(type, "")) - -/** - * tal_free - free a tal-allocated pointer. - * @p: NULL, or tal allocated object to free. - * - * This calls the destructors for p (if any), then does the same for all its - * children (recursively) before finally freeing the memory. It returns - * NULL, for convenience. - * - * Note: errno is preserved by this call, and also saved and restored - * for any destructors or notifiers. - * - * Example: - * p = tal_free(p); - */ -void *tal_free(const tal_t *p); - -/** - * tal_arr - allocate an array of objects. - * @ctx: NULL, or tal allocated object to be parent. - * @type: the type to allocate. - * @count: the number to allocate. - * - * tal_count() of the returned pointer will be @count. - * - * Example: - * p = tal_arr(NULL, int, 2); - * p[0] = 0; - * p[1] = 1; - */ -#define tal_arr(ctx, type, count) \ - tal_arr_label(ctx, type, count, TAL_LABEL(type, "[]")) - -/** - * tal_arrz - allocate an array of zeroed objects. - * @ctx: NULL, or tal allocated object to be parent. - * @type: the type to allocate. - * @count: the number to allocate. - * - * Equivalent to tal_arr() followed by memset() to zero. - * - * Example: - * p = tal_arrz(NULL, int, 2); - * assert(p[0] == 0 && p[1] == 0); - */ -#define tal_arrz(ctx, type, count) \ - tal_arrz_label(ctx, type, count, TAL_LABEL(type, "[]")) - -/** - * tal_resize - enlarge or reduce a tal object. - * @p: A pointer to the tal allocated array to resize. - * @count: the number to allocate. - * - * This returns true on success (and may move *@p), or false on failure. - * On success, tal_count() of *@p will be @count. - * - * Note: if *p is take(), it will still be take() upon return, even if it - * has been moved. - * - * Example: - * tal_resize(&p, 100); - */ -#define tal_resize(p, count) \ - tal_resize_((void **)(p), sizeof**(p), (count), false) - -/** - * tal_resizez - enlarge or reduce a tal object; zero out extra. - * @p: A pointer to the tal allocated array to resize. - * @count: the number to allocate. - * - * This returns true on success (and may move *@p), or false on failure. - * - * Example: - * tal_resizez(&p, 200); - */ -#define tal_resizez(p, count) \ - tal_resize_((void **)(p), sizeof**(p), (count), true) - -/** - * tal_steal - change the parent of a tal-allocated pointer. - * @ctx: The new parent. - * @ptr: The tal allocated object to move, or NULL. - * - * This may need to perform an allocation, in which case it may fail; thus - * it can return NULL, otherwise returns @ptr. If @ptr is NULL, this function does - * nothing. - */ -#if HAVE_STATEMENT_EXPR -/* Weird macro avoids gcc's 'warning: value computed is not used'. */ -#define tal_steal(ctx, ptr) \ - ({ (tal_typeof(ptr) tal_steal_((ctx),(ptr))); }) -#else -#define tal_steal(ctx, ptr) \ - (tal_typeof(ptr) tal_steal_((ctx),(ptr))) -#endif - -/** - * tal_add_destructor - add a callback function when this context is destroyed. - * @ptr: The tal allocated object. - * @function: the function to call before it's freed. - * - * This is a more convenient form of tal_add_notifier(@ptr, - * TAL_NOTIFY_FREE, ...), in that the function prototype takes only @ptr. - * - * Note that this can only fail if your allocfn fails and your errorfn returns. - */ -#define tal_add_destructor(ptr, function) \ - tal_add_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) - -/** - * tal_del_destructor - remove a destructor callback function. - * @ptr: The tal allocated object. - * @function: the function to call before it's freed. - * - * If @function has not been successfully added as a destructor, this returns - * false. Note that if we're inside the destructor call itself, this will - * return false. - */ -#define tal_del_destructor(ptr, function) \ - tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) - -/** - * tal_add_destructor2 - add a 2-arg callback function when context is destroyed. - * @ptr: The tal allocated object. - * @function: the function to call before it's freed. - * @arg: the extra argument to the function. - * - * Sometimes an extra argument is required for a destructor; this - * saves the extra argument internally to avoid the caller having to - * do an extra allocation. - * - * Note that this can only fail if your allocfn fails and your errorfn returns. - */ -#define tal_add_destructor2(ptr, function, arg) \ - tal_add_destructor2_((ptr), \ - typesafe_cb_cast(void (*)(tal_t *, void *), \ - void (*)(__typeof__(ptr), \ - __typeof__(arg)), \ - (function)), \ - (arg)) - -/** - * tal_del_destructor - remove a destructor callback function. - * @ptr: The tal allocated object. - * @function: the function to call before it's freed. - * - * If @function has not been successfully added as a destructor, this returns - * false. Note that if we're inside the destructor call itself, this will - * return false. - */ -#define tal_del_destructor(ptr, function) \ - tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) - -/** - * tal_del_destructor2 - remove 2-arg callback function. - * @ptr: The tal allocated object. - * @function: the function to call before it's freed. - * @arg: the extra argument to the function. - * - * If @function has not been successfully added as a destructor with - * @arg, this returns false. - */ -#define tal_del_destructor2(ptr, function, arg) \ - tal_del_destructor2_((ptr), \ - typesafe_cb_cast(void (*)(tal_t *, void *), \ - void (*)(__typeof__(ptr), \ - __typeof__(arg)), \ - (function)), \ - (arg)) -enum tal_notify_type { - TAL_NOTIFY_FREE = 1, - TAL_NOTIFY_STEAL = 2, - TAL_NOTIFY_MOVE = 4, - TAL_NOTIFY_RESIZE = 8, - TAL_NOTIFY_RENAME = 16, - TAL_NOTIFY_ADD_CHILD = 32, - TAL_NOTIFY_DEL_CHILD = 64, - TAL_NOTIFY_ADD_NOTIFIER = 128, - TAL_NOTIFY_DEL_NOTIFIER = 256 -}; - -/** - * tal_add_notifier - add a callback function when this context changes. - * @ptr: The tal allocated object, or NULL. - * @types: Bitwise OR of the types the callback is interested in. - * @callback: the function to call. - * - * Note that this can only fail if your allocfn fails and your errorfn - * returns. Also note that notifiers are not reliable in the case - * where an allocation fails, as they may be called before any - * allocation is actually done. - * - * TAL_NOTIFY_FREE is called when @ptr is freed, either directly or - * because an ancestor is freed: @info is the argument to tal_free(). - * It is exactly equivalent to a destructor, with more information. - * errno is set to the value it was at the call of tal_free(). - * - * TAL_NOTIFY_STEAL is called when @ptr's parent changes: @info is the - * new parent. - * - * TAL_NOTIFY_MOVE is called when @ptr is realloced (via tal_resize) - * and moved. In this case, @ptr arg here is the new memory, and - * @info is the old pointer. - * - * TAL_NOTIFY_RESIZE is called when @ptr is realloced via tal_resize: - * @info is the new size, in bytes. If the pointer has moved, - * TAL_NOTIFY_MOVE callbacks are called first. - * - * TAL_NOTIFY_ADD_CHILD/TAL_NOTIFY_DEL_CHILD are called when @ptr is - * the context for a tal() allocating call, or a direct child is - * tal_free()d: @info is the child. Note that TAL_NOTIFY_DEL_CHILD is - * not called when this context is tal_free()d: TAL_NOTIFY_FREE is - * considered sufficient for that case. - * - * TAL_NOTIFY_ADD_NOTIFIER/TAL_NOTIFIER_DEL_NOTIFIER are called when a - * notifier is added or removed (not for this notifier): @info is the - * callback. This is also called for tal_add_destructor and - * tal_del_destructor. - */ -#define tal_add_notifier(ptr, types, callback) \ - tal_add_notifier_((ptr), (types), \ - typesafe_cb_postargs(void, tal_t *, (callback), \ - (ptr), \ - enum tal_notify_type, void *)) - -/** - * tal_del_notifier - remove a notifier callback function. - * @ptr: The tal allocated object. - * @callback: the function to call. - */ -#define tal_del_notifier(ptr, callback) \ - tal_del_notifier_((ptr), \ - typesafe_cb_postargs(void, void *, (callback), \ - (ptr), \ - enum tal_notify_type, void *), \ - false, NULL) - -/** - * tal_set_name - attach a name to a tal pointer. - * @ptr: The tal allocated object. - * @name: The name to use. - * - * The name is copied, unless we're certain it's a string literal. - */ -#define tal_set_name(ptr, name) \ - tal_set_name_((ptr), (name), TAL_IS_LITERAL(name)) - -/** - * tal_name - get the name for a tal pointer. - * @ptr: The tal allocated object. - * - * Returns NULL if no name has been set. - */ -const char *tal_name(const tal_t *ptr); - -/** - * tal_count - get the count of objects in a tal object. - * @ptr: The tal allocated object (or NULL) - * - * Returns 0 if @ptr is NULL. Note that if the allocation was done as a - * different type to @ptr, the result may not match the @count argument - * (or implied 1) of that allocation! - */ -#define tal_count(p) (tal_bytelen(p) / sizeof(*p)) - -/** - * tal_bytelen - get the count of bytes in a tal object. - * @ptr: The tal allocated object (or NULL) - * - * Returns 0 if @ptr is NULL. - */ -size_t tal_bytelen(const tal_t *ptr); - -/** - * tal_first - get the first immediate tal object child. - * @root: The tal allocated object to start with, or NULL. - * - * Returns NULL if there are no children. - */ -tal_t *tal_first(const tal_t *root); - -/** - * tal_next - get the next immediate tal object child. - * @prev: The return value from tal_first or tal_next. - * - * Returns NULL if there are no more immediate children. This should be safe to - * call on an altering tree unless @prev is no longer valid. - */ -tal_t *tal_next(const tal_t *prev); - -/** - * tal_parent - get the parent of a tal object. - * @ctx: The tal allocated object. - * - * Returns the parent, which may be NULL. Returns NULL if @ctx is NULL. - */ -tal_t *tal_parent(const tal_t *ctx); - -/** - * tal_dup - duplicate an object. - * @ctx: The tal allocated object to be parent of the result (may be NULL). - * @type: the type (should match type of @p!) - * @p: the object to copy (or reparented if take()). Must not be NULL. - */ -#define tal_dup(ctx, type, p) \ - tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), false) - -/** - * tal_dup_or_null - duplicate an object, or just pass NULL. - * @ctx: The tal allocated object to be parent of the result (may be NULL). - * @type: the type (should match type of @p!) - * @p: the object to copy (or reparented if take()) - * - * if @p is NULL, just return NULL, otherwise to tal_dup(). - */ -#define tal_dup_or_null(ctx, type, p) \ - tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), true) - -/** - * tal_dup_arr - duplicate an array. - * @ctx: The tal allocated object to be parent of the result (may be NULL). - * @type: the type (should match type of @p!) - * @p: the array to copy (or resized & reparented if take()) - * @n: the number of sizeof(type) entries to copy. - * @extra: the number of extra sizeof(type) entries to allocate. - */ -#define tal_dup_arr(ctx, type, p, n, extra) \ - tal_dup_arr_label(ctx, type, p, n, extra, TAL_LABEL(type, "[]")) - - -/** - * tal_dup_arr - duplicate a tal array. - * @ctx: The tal allocated object to be parent of the result (may be NULL). - * @type: the type (should match type of @p!) - * @p: the tal array to copy (or resized & reparented if take()) - * - * The common case of duplicating an entire tal array. - */ -#define tal_dup_talarr(ctx, type, p) \ - ((type *)tal_dup_talarr_((ctx), tal_typechk_(p, type *), \ - TAL_LABEL(type, "[]"))) -/* Lower-level interfaces, where you want to supply your own label string. */ -#define tal_label(ctx, type, label) \ - ((type *)tal_alloc_((ctx), sizeof(type), false, label)) -#define talz_label(ctx, type, label) \ - ((type *)tal_alloc_((ctx), sizeof(type), true, label)) -#define tal_arr_label(ctx, type, count, label) \ - ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), false, label)) -#define tal_arrz_label(ctx, type, count, label) \ - ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), true, label)) -#define tal_dup_label(ctx, type, p, label, nullok) \ - ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ - sizeof(type), 1, 0, nullok, \ - label)) -#define tal_dup_arr_label(ctx, type, p, n, extra, label) \ - ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ - sizeof(type), (n), (extra), false, \ - label)) - -/** - * tal_set_backend - set the allocation or error functions to use - * @alloc_fn: allocator or NULL (default is malloc) - * @resize_fn: re-allocator or NULL (default is realloc) - * @free_fn: free function or NULL (default is free) - * @error_fn: called on errors or NULL (default is abort) - * - * The defaults are set up so tal functions never return NULL, but you - * can override error_fn to change that. error_fn can return, and is - * called if alloc_fn or resize_fn fail. - * - * If any parameter is NULL, that function is unchanged. - */ -void tal_set_backend(void *(*alloc_fn)(size_t size), - void *(*resize_fn)(void *, size_t size), - void (*free_fn)(void *), - void (*error_fn)(const char *msg)); - -/** - * tal_expand - expand a tal array with contents. - * @a1p: a pointer to the tal array to expand. - * @a2: the second array (can be take()). - * @num2: the number of elements in the second array. - * - * Note that *@a1 and @a2 should be the same type. tal_count(@a1) will - * be increased by @num2. - * - * Example: - * int *arr1 = tal_arrz(NULL, int, 2); - * int arr2[2] = { 1, 3 }; - * - * tal_expand(&arr1, arr2, 2); - * assert(tal_count(arr1) == 4); - * assert(arr1[2] == 1); - * assert(arr1[3] == 3); - */ -#define tal_expand(a1p, a2, num2) \ - tal_expand_((void **)(a1p), (a2), sizeof**(a1p), \ - (num2) + 0*sizeof(*(a1p) == (a2))) - -/** - * tal_cleanup - remove pointers from NULL node - * - * Internally, tal keeps a list of nodes allocated from @ctx NULL; this - * prevents valgrind from noticing memory leaks. This re-initializes - * that list to empty. - * - * It also calls take_cleanup() for you. - */ -void tal_cleanup(void); - - -/** - * tal_check - sanity check a tal context and its children. - * @ctx: a tal context, or NULL. - * @errorstr: a string to prepend calls to error_fn, or NULL. - * - * This sanity-checks a tal tree (unless NDEBUG is defined, in which case - * it simply returns true). If errorstr is not null, error_fn is called - * when a problem is found, otherwise it is not. - * - * See also: - * tal_set_backend() - */ -bool tal_check(const tal_t *ctx, const char *errorstr); - -#ifdef CCAN_TAL_DEBUG -/** - * tal_dump - dump entire tal tree to stderr. - * - * This is a helper for debugging tal itself, which dumps all the tal internal - * state. - */ -void tal_dump(void); -#endif - -/* Internal support functions */ -#ifndef TAL_LABEL -#ifdef CCAN_TAL_NO_LABELS -#define TAL_LABEL(type, arr) NULL -#else -#ifdef CCAN_TAL_DEBUG -#define TAL_LABEL(type, arr) \ - __FILE__ ":" stringify(__LINE__) ":" stringify(type) arr -#else -#define TAL_LABEL(type, arr) stringify(type) arr -#endif /* CCAN_TAL_DEBUG */ -#endif -#endif - -#if HAVE_BUILTIN_CONSTANT_P -#define TAL_IS_LITERAL(str) __builtin_constant_p(str) -#else -#define TAL_IS_LITERAL(str) (sizeof(&*(str)) != sizeof(char *)) -#endif - -bool tal_set_name_(tal_t *ctx, const char *name, bool literal); - -#if HAVE_TYPEOF -#define tal_typeof(ptr) (__typeof__(ptr)) -#if HAVE_STATEMENT_EXPR -/* Careful: ptr can be const foo *, ptype is foo *. Also, ptr could - * be an array, eg "hello". */ -#define tal_typechk_(ptr, ptype) ({ __typeof__((ptr)+0) _p = (ptype)(ptr); _p; }) -#else -#define tal_typechk_(ptr, ptype) (ptr) -#endif -#else /* !HAVE_TYPEOF */ -#define tal_typeof(ptr) -#define tal_typechk_(ptr, ptype) (ptr) -#endif - -void *tal_alloc_(const tal_t *ctx, size_t bytes, bool clear, const char *label); -void *tal_alloc_arr_(const tal_t *ctx, size_t bytes, size_t count, bool clear, - const char *label); - -void *tal_dup_(const tal_t *ctx, const void *p TAKES, size_t size, - size_t n, size_t extra, bool nullok, const char *label); -void *tal_dup_talarr_(const tal_t *ctx, const tal_t *src TAKES, - const char *label); - -tal_t *tal_steal_(const tal_t *new_parent, const tal_t *t); - -bool tal_resize_(tal_t **ctxp, size_t size, size_t count, bool clear); -bool tal_expand_(tal_t **ctxp, const void *src TAKES, size_t size, size_t count); - -bool tal_add_destructor_(const tal_t *ctx, void (*destroy)(void *me)); -bool tal_add_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), - void *arg); -bool tal_del_destructor_(const tal_t *ctx, void (*destroy)(void *me)); -bool tal_del_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), - void *arg); - -bool tal_add_notifier_(const tal_t *ctx, enum tal_notify_type types, - void (*notify)(tal_t *ctx, enum tal_notify_type, - void *info)); -bool tal_del_notifier_(const tal_t *ctx, - void (*notify)(tal_t *ctx, enum tal_notify_type, - void *info), - bool match_extra_arg, void *arg); -#endif /* CCAN_TAL_H */ diff --git a/nostrdb/src/bolt11/talstr.c b/nostrdb/src/bolt11/talstr.c deleted file mode 100644 index 1fb66858e..000000000 --- a/nostrdb/src/bolt11/talstr.c +++ /dev/null @@ -1,315 +0,0 @@ -/* Licensed under BSD-MIT - see LICENSE file for details */ -#include -#include -#include -#include -#include -#include "talstr.h" -#include -#include -#include -#include -#include -#include "str.h" - -char *tal_strdup_(const tal_t *ctx, const char *p, const char *label) -{ - /* We have to let through NULL for take(). */ - return tal_dup_arr_label(ctx, char, p, p ? strlen(p) + 1: 1, 0, label); -} - -char *tal_strndup_(const tal_t *ctx, const char *p, size_t n, const char *label) -{ - size_t len; - char *ret; - - /* We have to let through NULL for take(). */ - if (likely(p)) - len = strnlen(p, n); - else - len = n; - - ret = tal_dup_arr_label(ctx, char, p, len, 1, label); - if (ret) - ret[len] = '\0'; - return ret; -} - -char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt, ...) -{ - va_list ap; - char *ret; - - va_start(ap, fmt); - ret = tal_vfmt_(ctx, fmt, ap, label); - va_end(ap); - - return ret; -} - -static bool do_vfmt(char **buf, size_t off, const char *fmt, va_list ap) -{ - /* A decent guess to start. */ - size_t max = strlen(fmt) * 2 + 1; - bool ok; - - for (;;) { - va_list ap2; - int ret; - - if (!tal_resize(buf, off + max)) { - ok = false; - break; - } - - va_copy(ap2, ap); - ret = vsnprintf(*buf + off, max, fmt, ap2); - va_end(ap2); - - if (ret < max) { - ok = true; - /* Make sure tal_count() is correct! */ - tal_resize(buf, off + ret + 1); - break; - } - max *= 2; - } - - if (taken(fmt)) - tal_free(fmt); - return ok; -} - -char *tal_vfmt_(const tal_t *ctx, const char *fmt, va_list ap, const char *label) -{ - char *buf; - - if (!fmt && taken(fmt)) - return NULL; - - /* A decent guess to start. */ - buf = tal_arr_label(ctx, char, strlen(fmt) * 2, label); - if (!do_vfmt(&buf, 0, fmt, ap)) - buf = tal_free(buf); - return buf; -} - -bool tal_append_vfmt(char **baseptr, const char *fmt, va_list ap) -{ - if (!fmt && taken(fmt)) - return false; - - return do_vfmt(baseptr, strlen(*baseptr), fmt, ap); -} - -bool tal_append_fmt(char **baseptr, const char *fmt, ...) -{ - va_list ap; - bool ret; - - va_start(ap, fmt); - ret = tal_append_vfmt(baseptr, fmt, ap); - va_end(ap); - - return ret; -} - -char *tal_strcat_(const tal_t *ctx, const char *s1, const char *s2, - const char *label) -{ - size_t len1, len2; - char *ret; - - if (unlikely(!s2) && taken(s2)) { - if (taken(s1)) - tal_free(s1); - return NULL; - } - /* We have to let through NULL for take(). */ - len1 = s1 ? strlen(s1) : 0; - len2 = strlen(s2); - - ret = tal_dup_arr_label(ctx, char, s1, len1, len2 + 1, label); - if (likely(ret)) - memcpy(ret + len1, s2, len2 + 1); - - if (taken(s2)) - tal_free(s2); - return ret; -} - -char **tal_strsplit_(const tal_t *ctx, - const char *string, const char *delims, enum strsplit flags, - const char *label) -{ - char **parts, *str; - size_t max = 64, num = 0; - - parts = tal_arr(ctx, char *, max + 1); - if (unlikely(!parts)) { - if (taken(string)) - tal_free(string); - if (taken(delims)) - tal_free(delims); - return NULL; - } - str = tal_strdup(parts, string); - if (unlikely(!str)) - goto fail; - if (unlikely(!delims) && is_taken(delims)) - goto fail; - - if (flags == STR_NO_EMPTY) - str += strspn(str, delims); - - while (*str != '\0') { - size_t len = strcspn(str, delims), dlen; - - parts[num] = str; - dlen = strspn(str + len, delims); - parts[num][len] = '\0'; - if (flags == STR_EMPTY_OK && dlen) - dlen = 1; - str += len + dlen; - if (++num == max && !tal_resize(&parts, max*=2 + 1)) - goto fail; - } - parts[num] = NULL; - - /* Ensure that tal_count() is correct. */ - if (unlikely(!tal_resize(&parts, num+1))) - goto fail; - - if (taken(delims)) - tal_free(delims); - return parts; - -fail: - tal_free(parts); - if (taken(delims)) - tal_free(delims); - return NULL; -} - -char *tal_strjoin_(const tal_t *ctx, - char *strings[], const char *delim, enum strjoin flags, - const char *label) -{ - unsigned int i; - char *ret = NULL; - size_t totlen = 0, dlen; - - if (unlikely(!strings) && is_taken(strings)) - goto fail; - - if (unlikely(!delim) && is_taken(delim)) - goto fail; - - dlen = strlen(delim); - ret = tal_arr_label(ctx, char, dlen*2+1, label); - if (!ret) - goto fail; - - ret[0] = '\0'; - for (i = 0; strings[i]; i++) { - size_t len = strlen(strings[i]); - - if (flags == STR_NO_TRAIL && !strings[i+1]) - dlen = 0; - if (!tal_resize(&ret, totlen + len + dlen + 1)) - goto fail; - memcpy(ret + totlen, strings[i], len); - totlen += len; - memcpy(ret + totlen, delim, dlen); - totlen += dlen; - } - ret[totlen] = '\0'; - /* Make sure tal_count() is correct! */ - tal_resize(&ret, totlen+1); -out: - if (taken(strings)) - tal_free(strings); - if (taken(delim)) - tal_free(delim); - return ret; -fail: - ret = tal_free(ret); - goto out; -} - -static size_t count_open_braces(const char *string) -{ -#if 1 - size_t num = 0, esc = 0; - - while (*string) { - if (*string == '\\') - esc++; - else { - /* An odd number of \ means it's escaped. */ - if (*string == '(' && (esc & 1) == 0) - num++; - esc = 0; - } - string++; - } - return num; -#else - return strcount(string, "("); -#endif -} - -bool tal_strreg_(const tal_t *ctx, const char *string, const char *label, - const char *regex, ...) -{ - size_t nmatch = 1 + count_open_braces(regex); - regmatch_t matches[nmatch]; - regex_t r; - bool ret = false; - unsigned int i; - va_list ap; - - if (unlikely(!regex) && is_taken(regex)) - goto fail_no_re; - - if (regcomp(&r, regex, REG_EXTENDED) != 0) - goto fail_no_re; - - if (unlikely(!string) && is_taken(string)) - goto fail; - - if (regexec(&r, string, nmatch, matches, 0) != 0) - goto fail; - - ret = true; - va_start(ap, regex); - for (i = 1; i < nmatch; i++) { - char **arg = va_arg(ap, char **); - if (arg) { - /* eg. ([a-z])? can give "no match". */ - if (matches[i].rm_so == -1) - *arg = NULL; - else { - *arg = tal_strndup_(ctx, - string + matches[i].rm_so, - matches[i].rm_eo - - matches[i].rm_so, - label); - /* FIXME: If we fail, we set some and leak! */ - if (!*arg) { - ret = false; - break; - } - } - } - } - va_end(ap); -fail: - regfree(&r); -fail_no_re: - if (taken(regex)) - tal_free(regex); - if (taken(string)) - tal_free(string); - return ret; -} diff --git a/nostrdb/src/bolt11/talstr.h b/nostrdb/src/bolt11/talstr.h deleted file mode 100644 index fbf53a86c..000000000 --- a/nostrdb/src/bolt11/talstr.h +++ /dev/null @@ -1,225 +0,0 @@ -/* Licensed under BSD-MIT - see LICENSE file for details */ -#ifndef CCAN_STR_TAL_H -#define CCAN_STR_TAL_H -#ifdef TAL_USE_TALLOC -#include -#else -#include "tal.h" -#endif -#include -#include - -/** - * tal_strdup - duplicate a string - * @ctx: NULL, or tal allocated object to be parent. - * @p: the string to copy (can be take()). - * - * The returned string will have tal_count() == strlen() + 1. - */ -#define tal_strdup(ctx, p) tal_strdup_(ctx, p, TAL_LABEL(char, "[]")) -char *tal_strdup_(const tal_t *ctx, const char *p TAKES, const char *label); - -/** - * tal_strndup - duplicate a limited amount of a string. - * @ctx: NULL, or tal allocated object to be parent. - * @p: the string to copy (can be take()). - * @n: the maximum length to copy. - * - * Always gives a nul-terminated string, with strlen() <= @n. - * The returned string will have tal_count() == strlen() + 1. - */ -#define tal_strndup(ctx, p, n) tal_strndup_(ctx, p, n, TAL_LABEL(char, "[]")) -char *tal_strndup_(const tal_t *ctx, const char *p TAKES, size_t n, - const char *label); - -/** - * tal_fmt - allocate a formatted string - * @ctx: NULL, or tal allocated object to be parent. - * @fmt: the printf-style format (can be take()). - * - * The returned string will have tal_count() == strlen() + 1. - */ -#define tal_fmt(ctx, ...) \ - tal_fmt_(ctx, TAL_LABEL(char, "[]"), __VA_ARGS__) -char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt TAKES, - ...) PRINTF_FMT(3,4); - -/** - * tal_vfmt - allocate a formatted string (va_list version) - * @ctx: NULL, or tal allocated object to be parent. - * @fmt: the printf-style format (can be take()). - * @va: the va_list containing the format args. - * - * The returned string will have tal_count() == strlen() + 1. - */ -#define tal_vfmt(ctx, fmt, va) \ - tal_vfmt_(ctx, fmt, va, TAL_LABEL(char, "[]")) -char *tal_vfmt_(const tal_t *ctx, const char *fmt TAKES, va_list ap, - const char *label) - PRINTF_FMT(2,0); - -/** - * tal_append_fmt - append a formatted string to a talloc string. - * @baseptr: a pointer to the tal string to be appended to. - * @fmt: the printf-style format (can be take()). - * - * Returns false on allocation failure. - * Otherwise tal_count(*@baseptr) == strlen(*@baseptr) + 1. - */ -bool tal_append_fmt(char **baseptr, const char *fmt TAKES, ...) PRINTF_FMT(2,3); - -/** - * tal_append_vfmt - append a formatted string to a talloc string (va_list) - * @baseptr: a pointer to the tal string to be appended to. - * @fmt: the printf-style format (can be take()). - * @va: the va_list containing the format args. - * - * Returns false on allocation failure. - * Otherwise tal_count(*@baseptr) == strlen(*@baseptr) + 1. - */ -bool tal_append_vfmt(char **baseptr, const char *fmt TAKES, va_list ap); - -/** - * tal_strcat - join two strings together - * @ctx: NULL, or tal allocated object to be parent. - * @s1: the first string (can be take()). - * @s2: the second string (can be take()). - * - * The returned string will have tal_count() == strlen() + 1. - */ -#define tal_strcat(ctx, s1, s2) tal_strcat_(ctx, s1, s2, TAL_LABEL(char, "[]")) -char *tal_strcat_(const tal_t *ctx, const char *s1 TAKES, const char *s2 TAKES, - const char *label); - -enum strsplit { - STR_EMPTY_OK, - STR_NO_EMPTY -}; - -/** - * tal_strsplit - Split string into an array of substrings - * @ctx: the context to tal from (often NULL). - * @string: the string to split (can be take()). - * @delims: delimiters where lines should be split (can be take()). - * @flags: whether to include empty substrings. - * - * This function splits a single string into multiple strings. - * - * If @string is take(), the returned array will point into the - * mangled @string. - * - * Multiple delimiters result in empty substrings. By definition, no - * delimiters will appear in the substrings. - * - * The final char * in the array will be NULL, and tal_count() will - * return the number of elements plus 1 (for that NULL). - * - * Example: - * #include - * ... - * static unsigned int count_long_lines(const char *string) - * { - * char **lines; - * unsigned int i, long_lines = 0; - * - * // Can only fail on out-of-memory. - * lines = tal_strsplit(NULL, string, "\n", STR_NO_EMPTY); - * for (i = 0; lines[i] != NULL; i++) - * if (strlen(lines[i]) > 80) - * long_lines++; - * tal_free(lines); - * return long_lines; - * } - */ -#define tal_strsplit(ctx, string, delims, flag) \ - tal_strsplit_(ctx, string, delims, flag, TAL_LABEL(char *, "[]")) -char **tal_strsplit_(const tal_t *ctx, - const char *string TAKES, - const char *delims TAKES, - enum strsplit flag, - const char *label); - -enum strjoin { - STR_TRAIL, - STR_NO_TRAIL -}; - -/** - * tal_strjoin - Join an array of substrings into one long string - * @ctx: the context to tal from (often NULL). - * @strings: the NULL-terminated array of strings to join (can be take()) - * @delim: the delimiter to insert between the strings (can be take()) - * @flags: whether to add a delimieter to the end - * - * This function joins an array of strings into a single string. The - * return value is allocated using tal. Each string in @strings is - * followed by a copy of @delim. - * - * The returned string will have tal_count() == strlen() + 1. - * - * Example: - * // Append the string "--EOL" to each line. - * static char *append_to_all_lines(const char *string) - * { - * char **lines, *ret; - * - * lines = tal_strsplit(NULL, string, "\n", STR_EMPTY_OK); - * ret = tal_strjoin(NULL, lines, "-- EOL\n", STR_TRAIL); - * tal_free(lines); - * return ret; - * } - */ -#define tal_strjoin(ctx, strings, delim, flags) \ - tal_strjoin_(ctx, strings, delim, flags, TAL_LABEL(char, "[]")) -char *tal_strjoin_(const void *ctx, - char *strings[] TAKES, - const char *delim TAKES, - enum strjoin flags, - const char *label); - -/** - * tal_strreg - match/extract from a string via (extended) regular expressions. - * @ctx: the context to tal from (often NULL) - * @string: the string to try to match (can be take()) - * @regex: the regular expression to match (can be take()) - * ...: pointers to strings to allocate for subexpressions. - * - * Returns true if we matched, in which case any parenthesized - * expressions in @regex are allocated and placed in the char ** - * arguments following @regex. NULL arguments mean the match is not - * saved. The order of the strings is the order - * of opening braces in the expression: in the case of repeated - * expressions (eg "([a-z])*") the last one is saved, in the case of - * non-existent matches (eg "([a-z]*)?") the pointer is set to NULL. - * - * Allocation failures or malformed regular expressions return false. - * The allocated strings will have tal_count() == strlen() + 1. - * - * See Also: - * regcomp(3), regex(3). - * - * Example: - * // Given "My name is Rusty" outputs "Hello Rusty!\n" - * // Given "my first name is Rusty Russell" outputs "Hello Rusty Russell!\n" - * // Given "My name isnt Rusty Russell" outputs "Hello there!\n" - * int main(int argc, char *argv[]) - * { - * char *person, *input; - * - * (void)argc; - * // Join args and trim trailing space. - * input = tal_strjoin(NULL, argv+1, " ", STR_NO_TRAIL); - * if (tal_strreg(NULL, input, - * "[Mm]y (first )?name is ([A-Za-z ]+)", - * NULL, &person)) - * printf("Hello %s!\n", person); - * else - * printf("Hello there!\n"); - * return 0; - * } - */ -#define tal_strreg(ctx, string, ...) \ - tal_strreg_(ctx, string, TAL_LABEL(char, "[]"), __VA_ARGS__) -bool tal_strreg_(const void *ctx, const char *string TAKES, - const char *label, const char *regex, ...); -#endif /* CCAN_STR_TAL_H */ diff --git a/nostrdb/src/bolt11/typesafe_cb.h b/nostrdb/src/bolt11/typesafe_cb.h deleted file mode 100644 index acf346dd9..000000000 --- a/nostrdb/src/bolt11/typesafe_cb.h +++ /dev/null @@ -1,134 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_TYPESAFE_CB_H -#define CCAN_TYPESAFE_CB_H -#include "../config.h" - -#if HAVE_TYPEOF && HAVE_BUILTIN_CHOOSE_EXPR && HAVE_BUILTIN_TYPES_COMPATIBLE_P -/** - * typesafe_cb_cast - only cast an expression if it matches a given type - * @desttype: the type to cast to - * @oktype: the type we allow - * @expr: the expression to cast - * - * This macro is used to create functions which allow multiple types. - * The result of this macro is used somewhere that a @desttype type is - * expected: if @expr is exactly of type @oktype, then it will be - * cast to @desttype type, otherwise left alone. - * - * This macro can be used in static initializers. - * - * This is merely useful for warnings: if the compiler does not - * support the primitives required for typesafe_cb_cast(), it becomes an - * unconditional cast, and the @oktype argument is not used. In - * particular, this means that @oktype can be a type which uses the - * "typeof": it will not be evaluated if typeof is not supported. - * - * Example: - * // We can take either an unsigned long or a void *. - * void _set_some_value(void *val); - * #define set_some_value(e) \ - * _set_some_value(typesafe_cb_cast(void *, unsigned long, (e))) - */ -#define typesafe_cb_cast(desttype, oktype, expr) \ - __builtin_choose_expr( \ - __builtin_types_compatible_p(__typeof__(0?(expr):(expr)), \ - oktype), \ - (desttype)(expr), (expr)) -#else -#define typesafe_cb_cast(desttype, oktype, expr) ((desttype)(expr)) -#endif - -/** - * typesafe_cb_cast3 - only cast an expression if it matches given types - * @desttype: the type to cast to - * @ok1: the first type we allow - * @ok2: the second type we allow - * @ok3: the third type we allow - * @expr: the expression to cast - * - * This is a convenient wrapper for multiple typesafe_cb_cast() calls. - * You can chain them inside each other (ie. use typesafe_cb_cast() - * for expr) if you need more than 3 arguments. - * - * Example: - * // We can take either a long, unsigned long, void * or a const void *. - * void _set_some_value(void *val); - * #define set_some_value(expr) \ - * _set_some_value(typesafe_cb_cast3(void *,, \ - * long, unsigned long, const void *,\ - * (expr))) - */ -#define typesafe_cb_cast3(desttype, ok1, ok2, ok3, expr) \ - typesafe_cb_cast(desttype, ok1, \ - typesafe_cb_cast(desttype, ok2, \ - typesafe_cb_cast(desttype, ok3, \ - (expr)))) - -/** - * typesafe_cb - cast a callback function if it matches the arg - * @rtype: the return type of the callback function - * @atype: the (pointer) type which the callback function expects. - * @fn: the callback function to cast - * @arg: the (pointer) argument to hand to the callback function. - * - * If a callback function takes a single argument, this macro does - * appropriate casts to a function which takes a single atype argument if the - * callback provided matches the @arg. - * - * It is assumed that @arg is of pointer type: usually @arg is passed - * or assigned to a void * elsewhere anyway. - * - * Example: - * void _register_callback(void (*fn)(void *arg), void *arg); - * #define register_callback(fn, arg) \ - * _register_callback(typesafe_cb(void, (fn), void*, (arg)), (arg)) - */ -#define typesafe_cb(rtype, atype, fn, arg) \ - typesafe_cb_cast(rtype (*)(atype), \ - rtype (*)(__typeof__(arg)), \ - (fn)) - -/** - * typesafe_cb_preargs - cast a callback function if it matches the arg - * @rtype: the return type of the callback function - * @atype: the (pointer) type which the callback function expects. - * @fn: the callback function to cast - * @arg: the (pointer) argument to hand to the callback function. - * - * This is a version of typesafe_cb() for callbacks that take other arguments - * before the @arg. - * - * Example: - * void _register_callback(void (*fn)(int, void *arg), void *arg); - * #define register_callback(fn, arg) \ - * _register_callback(typesafe_cb_preargs(void, void *, \ - * (fn), (arg), int), \ - * (arg)) - */ -#define typesafe_cb_preargs(rtype, atype, fn, arg, ...) \ - typesafe_cb_cast(rtype (*)(__VA_ARGS__, atype), \ - rtype (*)(__VA_ARGS__, __typeof__(arg)), \ - (fn)) - -/** - * typesafe_cb_postargs - cast a callback function if it matches the arg - * @rtype: the return type of the callback function - * @atype: the (pointer) type which the callback function expects. - * @fn: the callback function to cast - * @arg: the (pointer) argument to hand to the callback function. - * - * This is a version of typesafe_cb() for callbacks that take other arguments - * after the @arg. - * - * Example: - * void _register_callback(void (*fn)(void *arg, int), void *arg); - * #define register_callback(fn, arg) \ - * _register_callback(typesafe_cb_postargs(void, (fn), void *, \ - * (arg), int), \ - * (arg)) - */ -#define typesafe_cb_postargs(rtype, atype, fn, arg, ...) \ - typesafe_cb_cast(rtype (*)(atype, __VA_ARGS__), \ - rtype (*)(__typeof__(arg), __VA_ARGS__), \ - (fn)) -#endif /* CCAN_CAST_IF_TYPE_H */ diff --git a/nostrdb/src/bolt11/utf8.c b/nostrdb/src/bolt11/utf8.c deleted file mode 100644 index 01a736862..000000000 --- a/nostrdb/src/bolt11/utf8.c +++ /dev/null @@ -1,199 +0,0 @@ -/* MIT (BSD) license - see LICENSE file for details - taken from ccan. thanks rusty! */ - -#include "utf8.h" -#include -#include - -/* I loved this table, so I stole it: */ -/* - * Copyright (c) 2017 Christian Hansen - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/* - * UTF-8 Encoding Form - * - * U+0000..U+007F 0xxxxxxx <= 7 bits - * U+0080..U+07FF 110xxxxx 10xxxxxx <= 11 bits - * U+0800..U+FFFF 1110xxxx 10xxxxxx 10xxxxxx <= 16 bits - * U+10000..U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx <= 21 bits - * - * - * U+0000..U+007F 00..7F - * N C0..C1 80..BF 1100000x 10xxxxxx - * U+0080..U+07FF C2..DF 80..BF - * N E0 80..9F 80..BF 11100000 100xxxxx - * U+0800..U+0FFF E0 A0..BF 80..BF - * U+1000..U+CFFF E1..EC 80..BF 80..BF - * U+D000..U+D7FF ED 80..9F 80..BF - * S ED A0..BF 80..BF 11101101 101xxxxx - * U+E000..U+FFFF EE..EF 80..BF 80..BF - * N F0 80..8F 80..BF 80..BF 11110000 1000xxxx - * U+10000..U+3FFFF F0 90..BF 80..BF 80..BF - * U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF - * U+100000..U+10FFFF F4 80..8F 80..BF 80..BF 11110100 1000xxxx - * - * Legend: - * N = Non-shortest form - * S = Surrogates - */ -bool utf8_decode(struct utf8_state *utf8_state, char c) -{ - if (utf8_state->used_len == utf8_state->total_len) { - utf8_state->used_len = 1; - /* First character in sequence. */ - if (((unsigned char)c & 0x80) == 0) { - /* ASCII, easy. */ - if (c == 0) - goto bad_encoding; - utf8_state->total_len = 1; - utf8_state->c = c; - goto finished_decoding; - } else if (((unsigned char)c & 0xE0) == 0xC0) { - utf8_state->total_len = 2; - utf8_state->c = ((unsigned char)c & 0x1F); - return false; - } else if (((unsigned char)c & 0xF0) == 0xE0) { - utf8_state->total_len = 3; - utf8_state->c = ((unsigned char)c & 0x0F); - return false; - } else if (((unsigned char)c & 0xF8) == 0xF0) { - utf8_state->total_len = 4; - utf8_state->c = ((unsigned char)c & 0x07); - return false; - } - goto bad_encoding; - } - - if (((unsigned char)c & 0xC0) != 0x80) - goto bad_encoding; - - utf8_state->c <<= 6; - utf8_state->c |= ((unsigned char)c & 0x3F); - - utf8_state->used_len++; - if (utf8_state->used_len == utf8_state->total_len) - goto finished_decoding; - return false; - -finished_decoding: - if (utf8_state->c == 0 || utf8_state->c > 0x10FFFF) - errno = ERANGE; - /* The UTF-16 "surrogate range": illegal in UTF-8 */ - else if (utf8_state->total_len == 3 - && (utf8_state->c & 0xFFFFF800) == 0x0000D800) - errno = ERANGE; - else { - int min_bits; - switch (utf8_state->total_len) { - case 1: - min_bits = 0; - break; - case 2: - min_bits = 7; - break; - case 3: - min_bits = 11; - break; - case 4: - min_bits = 16; - break; - default: - abort(); - } - if ((utf8_state->c >> min_bits) == 0) - errno = EFBIG; - else - errno = 0; - } - return true; - -bad_encoding: - utf8_state->total_len = utf8_state->used_len; - errno = EINVAL; - return true; -} - -size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]) -{ - if ((point >> 7) == 0) { - if (point == 0) { - errno = ERANGE; - return 0; - } - /* 0xxxxxxx */ - dest[0] = point; - return 1; - } - - if ((point >> 11) == 0) { - /* 110xxxxx 10xxxxxx */ - dest[1] = 0x80 | (point & 0x3F); - dest[0] = 0xC0 | (point >> 6); - return 2; - } - - if ((point >> 16) == 0) { - if (point >= 0xD800 && point <= 0xDFFF) { - errno = ERANGE; - return 0; - } - /* 1110xxxx 10xxxxxx 10xxxxxx */ - dest[2] = 0x80 | (point & 0x3F); - dest[1] = 0x80 | ((point >> 6) & 0x3F); - dest[0] = 0xE0 | (point >> 12); - return 3; - } - - if (point > 0x10FFFF) { - errno = ERANGE; - return 0; - } - - /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ - dest[3] = 0x80 | (point & 0x3F); - dest[2] = 0x80 | ((point >> 6) & 0x3F); - dest[1] = 0x80 | ((point >> 12) & 0x3F); - dest[0] = 0xF0 | (point >> 18); - return 4; -} - -/* Check for valid UTF-8 */ -bool utf8_check(const void *vbuf, size_t buflen) -{ - const unsigned char *buf = vbuf; - struct utf8_state utf8_state = UTF8_STATE_INIT; - bool need_more = false; - - for (size_t i = 0; i < buflen; i++) { - if (!utf8_decode(&utf8_state, buf[i])) { - need_more = true; - continue; - } - need_more = false; - if (errno != 0) - return false; - } - return !need_more; -} - diff --git a/nostrdb/src/bolt11/utf8.h b/nostrdb/src/bolt11/utf8.h deleted file mode 100644 index 3eac3a0ee..000000000 --- a/nostrdb/src/bolt11/utf8.h +++ /dev/null @@ -1,55 +0,0 @@ -/* MIT (BSD) license - see LICENSE file for details */ -#ifndef CCAN_UTF8_H -#define CCAN_UTF8_H -#include -#include -#include - -/* Unicode is limited to 21 bits. */ -#define UTF8_MAX_LEN 4 - -struct utf8_state { - /* How many characters we are expecting as part of this Unicode point */ - uint16_t total_len; - /* How many characters we've already seen. */ - uint16_t used_len; - /* Compound character, aka Unicode point. */ - uint32_t c; -}; - -#define UTF8_STATE_INIT { 0, 0, 0 } - -static inline void utf8_state_init(struct utf8_state *utf8_state) -{ - memset(utf8_state, 0, sizeof(*utf8_state)); -} - -/** - * utf8_decode - continue UTF8 decoding with this character. - * @utf8_state - initialized UTF8 state. - * @c - the character. - * - * Returns false if it needs another character to give results. - * Otherwise returns true, @utf8_state can be reused without initializeation, - * and sets errno: - * 0: success - * EINVAL: bad encoding (including a NUL character). - * EFBIG: not a minimal encoding. - * ERANGE: encoding of invalid character. - * - * You can extract the character from @utf8_state->c; @utf8_state->used_len - * indicates how many characters have been consumed. - */ -bool utf8_decode(struct utf8_state *utf8_state, char c); - -/** - * utf8_encode - encode a point into UTF8. - * @point - Unicode point to include. - * @dest - buffer to fill. - * - * Returns 0 if point was invalid, otherwise bytes of dest used. - * Sets errno to ERANGE if point was invalid. - */ -size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]); - -#endif /* CCAN_UTF8_H */ diff --git a/nostrdb/src/compiler.h b/nostrdb/src/compiler.h deleted file mode 100644 index 36d141e40..000000000 --- a/nostrdb/src/compiler.h +++ /dev/null @@ -1,323 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_COMPILER_H -#define CCAN_COMPILER_H -#include "config.h" - -#if HAVE_UNALIGNED_ACCESS -#define alignment_ok(p, n) 1 -#else -#define alignment_ok(p, n) ((size_t)(p) % (n) == 0) -#endif - -#ifndef COLD -#if HAVE_ATTRIBUTE_COLD -/** - * COLD - a function is unlikely to be called. - * - * Used to mark an unlikely code path and optimize appropriately. - * It is usually used on logging or error routines. - * - * Example: - * static void COLD moan(const char *reason) - * { - * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); - * } - */ -#define COLD __attribute__((__cold__)) -#else -#define COLD -#endif -#endif - -#ifndef NORETURN -#if HAVE_ATTRIBUTE_NORETURN -/** - * NORETURN - a function does not return - * - * Used to mark a function which exits; useful for suppressing warnings. - * - * Example: - * static void NORETURN fail(const char *reason) - * { - * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); - * exit(1); - * } - */ -#define NORETURN __attribute__((__noreturn__)) -#else -#define NORETURN -#endif -#endif - -#ifndef PRINTF_FMT -#if HAVE_ATTRIBUTE_PRINTF -/** - * PRINTF_FMT - a function takes printf-style arguments - * @nfmt: the 1-based number of the function's format argument. - * @narg: the 1-based number of the function's first variable argument. - * - * This allows the compiler to check your parameters as it does for printf(). - * - * Example: - * void PRINTF_FMT(2,3) my_printf(const char *prefix, const char *fmt, ...); - */ -#define PRINTF_FMT(nfmt, narg) \ - __attribute__((format(__printf__, nfmt, narg))) -#else -#define PRINTF_FMT(nfmt, narg) -#endif -#endif - -#ifndef CONST_FUNCTION -#if HAVE_ATTRIBUTE_CONST -/** - * CONST_FUNCTION - a function's return depends only on its argument - * - * This allows the compiler to assume that the function will return the exact - * same value for the exact same arguments. This implies that the function - * must not use global variables, or dereference pointer arguments. - */ -#define CONST_FUNCTION __attribute__((__const__)) -#else -#define CONST_FUNCTION -#endif - -#ifndef PURE_FUNCTION -#if HAVE_ATTRIBUTE_PURE -/** - * PURE_FUNCTION - a function is pure - * - * A pure function is one that has no side effects other than it's return value - * and uses no inputs other than it's arguments and global variables. - */ -#define PURE_FUNCTION __attribute__((__pure__)) -#else -#define PURE_FUNCTION -#endif -#endif -#endif - -#if HAVE_ATTRIBUTE_UNUSED -#ifndef UNNEEDED -/** - * UNNEEDED - a variable/function may not be needed - * - * This suppresses warnings about unused variables or functions, but tells - * the compiler that if it is unused it need not emit it into the source code. - * - * Example: - * // With some preprocessor options, this is unnecessary. - * static UNNEEDED int counter; - * - * // With some preprocessor options, this is unnecessary. - * static UNNEEDED void add_to_counter(int add) - * { - * counter += add; - * } - */ -#define UNNEEDED __attribute__((__unused__)) -#endif - -#ifndef NEEDED -#if HAVE_ATTRIBUTE_USED -/** - * NEEDED - a variable/function is needed - * - * This suppresses warnings about unused variables or functions, but tells - * the compiler that it must exist even if it (seems) unused. - * - * Example: - * // Even if this is unused, these are vital for debugging. - * static NEEDED int counter; - * static NEEDED void dump_counter(void) - * { - * printf("Counter is %i\n", counter); - * } - */ -#define NEEDED __attribute__((__used__)) -#else -/* Before used, unused functions and vars were always emitted. */ -#define NEEDED __attribute__((__unused__)) -#endif -#endif - -#ifndef UNUSED -/** - * UNUSED - a parameter is unused - * - * Some compilers (eg. gcc with -W or -Wunused) warn about unused - * function parameters. This suppresses such warnings and indicates - * to the reader that it's deliberate. - * - * Example: - * // This is used as a callback, so needs to have this prototype. - * static int some_callback(void *unused UNUSED) - * { - * return 0; - * } - */ -#define UNUSED __attribute__((__unused__)) -#endif -#else -#ifndef UNNEEDED -#define UNNEEDED -#endif -#ifndef NEEDED -#define NEEDED -#endif -#ifndef UNUSED -#define UNUSED -#endif -#endif - -#ifndef IS_COMPILE_CONSTANT -#if HAVE_BUILTIN_CONSTANT_P -/** - * IS_COMPILE_CONSTANT - does the compiler know the value of this expression? - * @expr: the expression to evaluate - * - * When an expression manipulation is complicated, it is usually better to - * implement it in a function. However, if the expression being manipulated is - * known at compile time, it is better to have the compiler see the entire - * expression so it can simply substitute the result. - * - * This can be done using the IS_COMPILE_CONSTANT() macro. - * - * Example: - * enum greek { ALPHA, BETA, GAMMA, DELTA, EPSILON }; - * - * // Out-of-line version. - * const char *greek_name(enum greek greek); - * - * // Inline version. - * static inline const char *_greek_name(enum greek greek) - * { - * switch (greek) { - * case ALPHA: return "alpha"; - * case BETA: return "beta"; - * case GAMMA: return "gamma"; - * case DELTA: return "delta"; - * case EPSILON: return "epsilon"; - * default: return "**INVALID**"; - * } - * } - * - * // Use inline if compiler knows answer. Otherwise call function - * // to avoid copies of the same code everywhere. - * #define greek_name(g) \ - * (IS_COMPILE_CONSTANT(greek) ? _greek_name(g) : greek_name(g)) - */ -#define IS_COMPILE_CONSTANT(expr) __builtin_constant_p(expr) -#else -/* If we don't know, assume it's not. */ -#define IS_COMPILE_CONSTANT(expr) 0 -#endif -#endif - -#ifndef WARN_UNUSED_RESULT -#if HAVE_WARN_UNUSED_RESULT -/** - * WARN_UNUSED_RESULT - warn if a function return value is unused. - * - * Used to mark a function where it is extremely unlikely that the caller - * can ignore the result, eg realloc(). - * - * Example: - * // buf param may be freed by this; need return value! - * static char *WARN_UNUSED_RESULT enlarge(char *buf, unsigned *size) - * { - * return realloc(buf, (*size) *= 2); - * } - */ -#define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) -#else -#define WARN_UNUSED_RESULT -#endif -#endif - - -#if HAVE_ATTRIBUTE_DEPRECATED -/** - * WARN_DEPRECATED - warn that a function/type/variable is deprecated when used. - * - * Used to mark a function, type or variable should not be used. - * - * Example: - * WARN_DEPRECATED char *oldfunc(char *buf); - */ -#define WARN_DEPRECATED __attribute__((__deprecated__)) -#else -#define WARN_DEPRECATED -#endif - - -#if HAVE_ATTRIBUTE_NONNULL -/** - * NO_NULL_ARGS - specify that no arguments to this function can be NULL. - * - * The compiler will warn if any pointer args are NULL. - * - * Example: - * NO_NULL_ARGS char *my_copy(char *buf); - */ -#define NO_NULL_ARGS __attribute__((__nonnull__)) - -/** - * NON_NULL_ARGS - specify that some arguments to this function can't be NULL. - * @...: 1-based argument numbers for which args can't be NULL. - * - * The compiler will warn if any of the specified pointer args are NULL. - * - * Example: - * char *my_copy2(char *buf, char *maybenull) NON_NULL_ARGS(1); - */ -#define NON_NULL_ARGS(...) __attribute__((__nonnull__(__VA_ARGS__))) -#else -#define NO_NULL_ARGS -#define NON_NULL_ARGS(...) -#endif - -#if HAVE_ATTRIBUTE_RETURNS_NONNULL -/** - * RETURNS_NONNULL - specify that this function cannot return NULL. - * - * Mainly an optimization opportunity, but can also suppress warnings. - * - * Example: - * RETURNS_NONNULL char *my_copy(char *buf); - */ -#define RETURNS_NONNULL __attribute__((__returns_nonnull__)) -#else -#define RETURNS_NONNULL -#endif - -#if HAVE_ATTRIBUTE_SENTINEL -/** - * LAST_ARG_NULL - specify the last argument of a variadic function must be NULL. - * - * The compiler will warn if the last argument isn't NULL. - * - * Example: - * char *join_string(char *buf, ...) LAST_ARG_NULL; - */ -#define LAST_ARG_NULL __attribute__((__sentinel__)) -#else -#define LAST_ARG_NULL -#endif - -#if HAVE_BUILTIN_CPU_SUPPORTS -/** - * cpu_supports - test if current CPU supports the named feature. - * - * This takes a literal string, and currently only works on glibc platforms. - * - * Example: - * if (cpu_supports("mmx")) - * printf("MMX support engaged!\n"); - */ -#define cpu_supports(x) __builtin_cpu_supports(x) -#else -#define cpu_supports(x) 0 -#endif /* HAVE_BUILTIN_CPU_SUPPORTS */ - -#endif /* CCAN_COMPILER_H */ diff --git a/nostrdb/src/cursor.h b/nostrdb/src/cursor.h index 21301c734..3d8fc1e5d 100644 --- a/nostrdb/src/cursor.h +++ b/nostrdb/src/cursor.h @@ -2,7 +2,7 @@ #ifndef JB55_CURSOR_H #define JB55_CURSOR_H -#include "bolt11/likely.h" +#include "ccan/likely/likely.h" #include #include diff --git a/nostrdb/src/endian.h b/nostrdb/src/endian.h deleted file mode 100644 index 6bfc09f2d..000000000 --- a/nostrdb/src/endian.h +++ /dev/null @@ -1,365 +0,0 @@ -/* CC0 (Public domain) */ -#ifndef CCAN_ENDIAN_H -#define CCAN_ENDIAN_H -#include - -#include "config.h" -#include "cursor.h" - -/** - * BSWAP_16 - reverse bytes in a constant uint16_t value. - * @val: constant value whose bytes to swap. - * - * Designed to be usable in constant-requiring initializers. - * - * Example: - * struct mystruct { - * char buf[BSWAP_16(0x1234)]; - * }; - */ -#define BSWAP_16(val) \ - ((((uint16_t)(val) & 0x00ff) << 8) \ - | (((uint16_t)(val) & 0xff00) >> 8)) - -/** - * BSWAP_32 - reverse bytes in a constant uint32_t value. - * @val: constant value whose bytes to swap. - * - * Designed to be usable in constant-requiring initializers. - * - * Example: - * struct mystruct { - * char buf[BSWAP_32(0xff000000)]; - * }; - */ -#define BSWAP_32(val) \ - ((((uint32_t)(val) & 0x000000ff) << 24) \ - | (((uint32_t)(val) & 0x0000ff00) << 8) \ - | (((uint32_t)(val) & 0x00ff0000) >> 8) \ - | (((uint32_t)(val) & 0xff000000) >> 24)) - -/** - * BSWAP_64 - reverse bytes in a constant uint64_t value. - * @val: constantvalue whose bytes to swap. - * - * Designed to be usable in constant-requiring initializers. - * - * Example: - * struct mystruct { - * char buf[BSWAP_64(0xff00000000000000ULL)]; - * }; - */ -#define BSWAP_64(val) \ - ((((uint64_t)(val) & 0x00000000000000ffULL) << 56) \ - | (((uint64_t)(val) & 0x000000000000ff00ULL) << 40) \ - | (((uint64_t)(val) & 0x0000000000ff0000ULL) << 24) \ - | (((uint64_t)(val) & 0x00000000ff000000ULL) << 8) \ - | (((uint64_t)(val) & 0x000000ff00000000ULL) >> 8) \ - | (((uint64_t)(val) & 0x0000ff0000000000ULL) >> 24) \ - | (((uint64_t)(val) & 0x00ff000000000000ULL) >> 40) \ - | (((uint64_t)(val) & 0xff00000000000000ULL) >> 56)) - -#if HAVE_BYTESWAP_H -#include -#else -/** - * bswap_16 - reverse bytes in a uint16_t value. - * @val: value whose bytes to swap. - * - * Example: - * // Output contains "1024 is 4 as two bytes reversed" - * printf("1024 is %u as two bytes reversed\n", bswap_16(1024)); - */ -static inline uint16_t bswap_16(uint16_t val) -{ - return BSWAP_16(val); -} - -/** - * bswap_32 - reverse bytes in a uint32_t value. - * @val: value whose bytes to swap. - * - * Example: - * // Output contains "1024 is 262144 as four bytes reversed" - * printf("1024 is %u as four bytes reversed\n", bswap_32(1024)); - */ -static inline uint32_t bswap_32(uint32_t val) -{ - return BSWAP_32(val); -} -#endif /* !HAVE_BYTESWAP_H */ - -#if !HAVE_BSWAP_64 -/** - * bswap_64 - reverse bytes in a uint64_t value. - * @val: value whose bytes to swap. - * - * Example: - * // Output contains "1024 is 1125899906842624 as eight bytes reversed" - * printf("1024 is %llu as eight bytes reversed\n", - * (unsigned long long)bswap_64(1024)); - */ -static inline uint64_t bswap_64(uint64_t val) -{ - return BSWAP_64(val); -} -#endif - -/* Needed for Glibc like endiness check */ -#define __LITTLE_ENDIAN 1234 -#define __BIG_ENDIAN 4321 - -/* Sanity check the defines. We don't handle weird endianness. */ -#if !HAVE_LITTLE_ENDIAN && !HAVE_BIG_ENDIAN -#error "Unknown endian" -#elif HAVE_LITTLE_ENDIAN && HAVE_BIG_ENDIAN -#error "Can't compile for both big and little endian." -#elif HAVE_LITTLE_ENDIAN -#ifndef __BYTE_ORDER -#define __BYTE_ORDER __LITTLE_ENDIAN -#elif __BYTE_ORDER != __LITTLE_ENDIAN -#error "__BYTE_ORDER already defined, but not equal to __LITTLE_ENDIAN" -#endif -#elif HAVE_BIG_ENDIAN -#ifndef __BYTE_ORDER -#define __BYTE_ORDER __BIG_ENDIAN -#elif __BYTE_ORDER != __BIG_ENDIAN -#error "__BYTE_ORDER already defined, but not equal to __BIG_ENDIAN" -#endif -#endif - - -#ifdef __CHECKER__ -/* sparse needs forcing to remove bitwise attribute from ccan/short_types */ -#define ENDIAN_CAST __attribute__((force)) -#define ENDIAN_TYPE __attribute__((bitwise)) -#else -#define ENDIAN_CAST -#define ENDIAN_TYPE -#endif - -typedef uint64_t ENDIAN_TYPE leint64_t; -typedef uint64_t ENDIAN_TYPE beint64_t; -typedef uint32_t ENDIAN_TYPE leint32_t; -typedef uint32_t ENDIAN_TYPE beint32_t; -typedef uint16_t ENDIAN_TYPE leint16_t; -typedef uint16_t ENDIAN_TYPE beint16_t; - -#if HAVE_LITTLE_ENDIAN -/** - * CPU_TO_LE64 - convert a constant uint64_t value to little-endian - * @native: constant to convert - */ -#define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native)) - -/** - * CPU_TO_LE32 - convert a constant uint32_t value to little-endian - * @native: constant to convert - */ -#define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native)) - -/** - * CPU_TO_LE16 - convert a constant uint16_t value to little-endian - * @native: constant to convert - */ -#define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native)) - -/** - * LE64_TO_CPU - convert a little-endian uint64_t constant - * @le_val: little-endian constant to convert - */ -#define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val)) - -/** - * LE32_TO_CPU - convert a little-endian uint32_t constant - * @le_val: little-endian constant to convert - */ -#define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val)) - -/** - * LE16_TO_CPU - convert a little-endian uint16_t constant - * @le_val: little-endian constant to convert - */ -#define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val)) - -#else /* ... HAVE_BIG_ENDIAN */ -#define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native)) -#define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native)) -#define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native)) -#define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val) -#define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val) -#define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val) -#endif /* HAVE_BIG_ENDIAN */ - -#if HAVE_BIG_ENDIAN -/** - * CPU_TO_BE64 - convert a constant uint64_t value to big-endian - * @native: constant to convert - */ -#define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native)) - -/** - * CPU_TO_BE32 - convert a constant uint32_t value to big-endian - * @native: constant to convert - */ -#define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native)) - -/** - * CPU_TO_BE16 - convert a constant uint16_t value to big-endian - * @native: constant to convert - */ -#define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native)) - -/** - * BE64_TO_CPU - convert a big-endian uint64_t constant - * @le_val: big-endian constant to convert - */ -#define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val)) - -/** - * BE32_TO_CPU - convert a big-endian uint32_t constant - * @le_val: big-endian constant to convert - */ -#define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val)) - -/** - * BE16_TO_CPU - convert a big-endian uint16_t constant - * @le_val: big-endian constant to convert - */ -#define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val)) - -#else /* ... HAVE_LITTLE_ENDIAN */ -#define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native)) -#define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native)) -#define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native)) -#define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val) -#define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val) -#define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val) -#endif /* HAVE_LITTE_ENDIAN */ - - -/** - * cpu_to_le64 - convert a uint64_t value to little-endian - * @native: value to convert - */ -static inline leint64_t cpu_to_le64(uint64_t native) -{ - return CPU_TO_LE64(native); -} - -/** - * cpu_to_le32 - convert a uint32_t value to little-endian - * @native: value to convert - */ -static inline leint32_t cpu_to_le32(uint32_t native) -{ - return CPU_TO_LE32(native); -} - -/** - * cpu_to_le16 - convert a uint16_t value to little-endian - * @native: value to convert - */ -static inline leint16_t cpu_to_le16(uint16_t native) -{ - return CPU_TO_LE16(native); -} - -/** - * le64_to_cpu - convert a little-endian uint64_t value - * @le_val: little-endian value to convert - */ -static inline uint64_t le64_to_cpu(leint64_t le_val) -{ - return LE64_TO_CPU(le_val); -} - -/** - * le32_to_cpu - convert a little-endian uint32_t value - * @le_val: little-endian value to convert - */ -static inline uint32_t le32_to_cpu(leint32_t le_val) -{ - return LE32_TO_CPU(le_val); -} - -/** - * le16_to_cpu - convert a little-endian uint16_t value - * @le_val: little-endian value to convert - */ -static inline uint16_t le16_to_cpu(leint16_t le_val) -{ - return LE16_TO_CPU(le_val); -} - -/** - * cpu_to_be64 - convert a uint64_t value to big endian. - * @native: value to convert - */ -static inline beint64_t cpu_to_be64(uint64_t native) -{ - return CPU_TO_BE64(native); -} - -/** - * cpu_to_be32 - convert a uint32_t value to big endian. - * @native: value to convert - */ -static inline beint32_t cpu_to_be32(uint32_t native) -{ - return CPU_TO_BE32(native); -} - -/** - * cpu_to_be16 - convert a uint16_t value to big endian. - * @native: value to convert - */ -static inline beint16_t cpu_to_be16(uint16_t native) -{ - return CPU_TO_BE16(native); -} - -/** - * be64_to_cpu - convert a big-endian uint64_t value - * @be_val: big-endian value to convert - */ -static inline uint64_t be64_to_cpu(beint64_t be_val) -{ - return BE64_TO_CPU(be_val); -} - -/** - * be32_to_cpu - convert a big-endian uint32_t value - * @be_val: big-endian value to convert - */ -static inline uint32_t be32_to_cpu(beint32_t be_val) -{ - return BE32_TO_CPU(be_val); -} - -/** - * be16_to_cpu - convert a big-endian uint16_t value - * @be_val: big-endian value to convert - */ -static inline uint16_t be16_to_cpu(beint16_t be_val) -{ - return BE16_TO_CPU(be_val); -} - -/** - * be64/be32/be16 - 64/32/16 bit big-endian representation. - */ -typedef beint64_t be64; -typedef beint32_t be32; -typedef beint16_t be16; - -/** - * le64/le32/le16 - 64/32/16 bit little-endian representation. - */ -typedef leint64_t le64; -typedef leint32_t le32; -typedef leint16_t le16; - - -#endif /* CCAN_ENDIAN_H */ - diff --git a/nostrdb/src/sha256.c b/nostrdb/src/sha256.c deleted file mode 100644 index e8ddbb747..000000000 --- a/nostrdb/src/sha256.c +++ /dev/null @@ -1,302 +0,0 @@ -/* MIT (BSD) license - see LICENSE file for details */ -/* SHA256 core code translated from the Bitcoin project's C++: - * - * src/crypto/sha256.cpp commit 417532c8acb93c36c2b6fd052b7c11b6a2906aa2 - * Copyright (c) 2014 The Bitcoin Core developers - * Distributed under the MIT software license, see the accompanying - * file COPYING or http://www.opensource.org/licenses/mit-license.php. - */ -#include "sha256.h" -#include "endian.h" -#include "compiler.h" -#include -#include -#include - -static void invalidate_sha256(struct sha256_ctx *ctx) -{ -#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL - ctx->c.md_len = 0; -#else - ctx->bytes = (size_t)-1; -#endif -} - -static void check_sha256(struct sha256_ctx *ctx) -{ -#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL - assert(ctx->c.md_len != 0); -#else - assert(ctx->bytes != (size_t)-1); -#endif -} - -#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL -void sha256_init(struct sha256_ctx *ctx) -{ - SHA256_Init(&ctx->c); -} - -void sha256_update(struct sha256_ctx *ctx, const void *p, size_t size) -{ - check_sha256(ctx); - SHA256_Update(&ctx->c, p, size); -} - -void sha256_done(struct sha256_ctx *ctx, struct sha256 *res) -{ - SHA256_Final(res->u.u8, &ctx->c); - invalidate_sha256(ctx); -} -#else -static uint32_t Ch(uint32_t x, uint32_t y, uint32_t z) -{ - return z ^ (x & (y ^ z)); -} -static uint32_t Maj(uint32_t x, uint32_t y, uint32_t z) -{ - return (x & y) | (z & (x | y)); -} -static uint32_t Sigma0(uint32_t x) -{ - return (x >> 2 | x << 30) ^ (x >> 13 | x << 19) ^ (x >> 22 | x << 10); -} -static uint32_t Sigma1(uint32_t x) -{ - return (x >> 6 | x << 26) ^ (x >> 11 | x << 21) ^ (x >> 25 | x << 7); -} -static uint32_t sigma0(uint32_t x) -{ - return (x >> 7 | x << 25) ^ (x >> 18 | x << 14) ^ (x >> 3); -} -static uint32_t sigma1(uint32_t x) -{ - return (x >> 17 | x << 15) ^ (x >> 19 | x << 13) ^ (x >> 10); -} - -/** One round of SHA-256. */ -static void Round(uint32_t a, uint32_t b, uint32_t c, uint32_t *d, uint32_t e, uint32_t f, uint32_t g, uint32_t *h, uint32_t k, uint32_t w) -{ - uint32_t t1 = *h + Sigma1(e) + Ch(e, f, g) + k + w; - uint32_t t2 = Sigma0(a) + Maj(a, b, c); - *d += t1; - *h = t1 + t2; -} - -/** Perform one SHA-256 transformation, processing a 64-byte chunk. */ -static void Transform(uint32_t *s, const uint32_t *chunk) -{ - uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7]; - uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; - - Round(a, b, c, &d, e, f, g, &h, 0x428a2f98, w0 = be32_to_cpu(chunk[0])); - Round(h, a, b, &c, d, e, f, &g, 0x71374491, w1 = be32_to_cpu(chunk[1])); - Round(g, h, a, &b, c, d, e, &f, 0xb5c0fbcf, w2 = be32_to_cpu(chunk[2])); - Round(f, g, h, &a, b, c, d, &e, 0xe9b5dba5, w3 = be32_to_cpu(chunk[3])); - Round(e, f, g, &h, a, b, c, &d, 0x3956c25b, w4 = be32_to_cpu(chunk[4])); - Round(d, e, f, &g, h, a, b, &c, 0x59f111f1, w5 = be32_to_cpu(chunk[5])); - Round(c, d, e, &f, g, h, a, &b, 0x923f82a4, w6 = be32_to_cpu(chunk[6])); - Round(b, c, d, &e, f, g, h, &a, 0xab1c5ed5, w7 = be32_to_cpu(chunk[7])); - Round(a, b, c, &d, e, f, g, &h, 0xd807aa98, w8 = be32_to_cpu(chunk[8])); - Round(h, a, b, &c, d, e, f, &g, 0x12835b01, w9 = be32_to_cpu(chunk[9])); - Round(g, h, a, &b, c, d, e, &f, 0x243185be, w10 = be32_to_cpu(chunk[10])); - Round(f, g, h, &a, b, c, d, &e, 0x550c7dc3, w11 = be32_to_cpu(chunk[11])); - Round(e, f, g, &h, a, b, c, &d, 0x72be5d74, w12 = be32_to_cpu(chunk[12])); - Round(d, e, f, &g, h, a, b, &c, 0x80deb1fe, w13 = be32_to_cpu(chunk[13])); - Round(c, d, e, &f, g, h, a, &b, 0x9bdc06a7, w14 = be32_to_cpu(chunk[14])); - Round(b, c, d, &e, f, g, h, &a, 0xc19bf174, w15 = be32_to_cpu(chunk[15])); - - Round(a, b, c, &d, e, f, g, &h, 0xe49b69c1, w0 += sigma1(w14) + w9 + sigma0(w1)); - Round(h, a, b, &c, d, e, f, &g, 0xefbe4786, w1 += sigma1(w15) + w10 + sigma0(w2)); - Round(g, h, a, &b, c, d, e, &f, 0x0fc19dc6, w2 += sigma1(w0) + w11 + sigma0(w3)); - Round(f, g, h, &a, b, c, d, &e, 0x240ca1cc, w3 += sigma1(w1) + w12 + sigma0(w4)); - Round(e, f, g, &h, a, b, c, &d, 0x2de92c6f, w4 += sigma1(w2) + w13 + sigma0(w5)); - Round(d, e, f, &g, h, a, b, &c, 0x4a7484aa, w5 += sigma1(w3) + w14 + sigma0(w6)); - Round(c, d, e, &f, g, h, a, &b, 0x5cb0a9dc, w6 += sigma1(w4) + w15 + sigma0(w7)); - Round(b, c, d, &e, f, g, h, &a, 0x76f988da, w7 += sigma1(w5) + w0 + sigma0(w8)); - Round(a, b, c, &d, e, f, g, &h, 0x983e5152, w8 += sigma1(w6) + w1 + sigma0(w9)); - Round(h, a, b, &c, d, e, f, &g, 0xa831c66d, w9 += sigma1(w7) + w2 + sigma0(w10)); - Round(g, h, a, &b, c, d, e, &f, 0xb00327c8, w10 += sigma1(w8) + w3 + sigma0(w11)); - Round(f, g, h, &a, b, c, d, &e, 0xbf597fc7, w11 += sigma1(w9) + w4 + sigma0(w12)); - Round(e, f, g, &h, a, b, c, &d, 0xc6e00bf3, w12 += sigma1(w10) + w5 + sigma0(w13)); - Round(d, e, f, &g, h, a, b, &c, 0xd5a79147, w13 += sigma1(w11) + w6 + sigma0(w14)); - Round(c, d, e, &f, g, h, a, &b, 0x06ca6351, w14 += sigma1(w12) + w7 + sigma0(w15)); - Round(b, c, d, &e, f, g, h, &a, 0x14292967, w15 += sigma1(w13) + w8 + sigma0(w0)); - - Round(a, b, c, &d, e, f, g, &h, 0x27b70a85, w0 += sigma1(w14) + w9 + sigma0(w1)); - Round(h, a, b, &c, d, e, f, &g, 0x2e1b2138, w1 += sigma1(w15) + w10 + sigma0(w2)); - Round(g, h, a, &b, c, d, e, &f, 0x4d2c6dfc, w2 += sigma1(w0) + w11 + sigma0(w3)); - Round(f, g, h, &a, b, c, d, &e, 0x53380d13, w3 += sigma1(w1) + w12 + sigma0(w4)); - Round(e, f, g, &h, a, b, c, &d, 0x650a7354, w4 += sigma1(w2) + w13 + sigma0(w5)); - Round(d, e, f, &g, h, a, b, &c, 0x766a0abb, w5 += sigma1(w3) + w14 + sigma0(w6)); - Round(c, d, e, &f, g, h, a, &b, 0x81c2c92e, w6 += sigma1(w4) + w15 + sigma0(w7)); - Round(b, c, d, &e, f, g, h, &a, 0x92722c85, w7 += sigma1(w5) + w0 + sigma0(w8)); - Round(a, b, c, &d, e, f, g, &h, 0xa2bfe8a1, w8 += sigma1(w6) + w1 + sigma0(w9)); - Round(h, a, b, &c, d, e, f, &g, 0xa81a664b, w9 += sigma1(w7) + w2 + sigma0(w10)); - Round(g, h, a, &b, c, d, e, &f, 0xc24b8b70, w10 += sigma1(w8) + w3 + sigma0(w11)); - Round(f, g, h, &a, b, c, d, &e, 0xc76c51a3, w11 += sigma1(w9) + w4 + sigma0(w12)); - Round(e, f, g, &h, a, b, c, &d, 0xd192e819, w12 += sigma1(w10) + w5 + sigma0(w13)); - Round(d, e, f, &g, h, a, b, &c, 0xd6990624, w13 += sigma1(w11) + w6 + sigma0(w14)); - Round(c, d, e, &f, g, h, a, &b, 0xf40e3585, w14 += sigma1(w12) + w7 + sigma0(w15)); - Round(b, c, d, &e, f, g, h, &a, 0x106aa070, w15 += sigma1(w13) + w8 + sigma0(w0)); - - Round(a, b, c, &d, e, f, g, &h, 0x19a4c116, w0 += sigma1(w14) + w9 + sigma0(w1)); - Round(h, a, b, &c, d, e, f, &g, 0x1e376c08, w1 += sigma1(w15) + w10 + sigma0(w2)); - Round(g, h, a, &b, c, d, e, &f, 0x2748774c, w2 += sigma1(w0) + w11 + sigma0(w3)); - Round(f, g, h, &a, b, c, d, &e, 0x34b0bcb5, w3 += sigma1(w1) + w12 + sigma0(w4)); - Round(e, f, g, &h, a, b, c, &d, 0x391c0cb3, w4 += sigma1(w2) + w13 + sigma0(w5)); - Round(d, e, f, &g, h, a, b, &c, 0x4ed8aa4a, w5 += sigma1(w3) + w14 + sigma0(w6)); - Round(c, d, e, &f, g, h, a, &b, 0x5b9cca4f, w6 += sigma1(w4) + w15 + sigma0(w7)); - Round(b, c, d, &e, f, g, h, &a, 0x682e6ff3, w7 += sigma1(w5) + w0 + sigma0(w8)); - Round(a, b, c, &d, e, f, g, &h, 0x748f82ee, w8 += sigma1(w6) + w1 + sigma0(w9)); - Round(h, a, b, &c, d, e, f, &g, 0x78a5636f, w9 += sigma1(w7) + w2 + sigma0(w10)); - Round(g, h, a, &b, c, d, e, &f, 0x84c87814, w10 += sigma1(w8) + w3 + sigma0(w11)); - Round(f, g, h, &a, b, c, d, &e, 0x8cc70208, w11 += sigma1(w9) + w4 + sigma0(w12)); - Round(e, f, g, &h, a, b, c, &d, 0x90befffa, w12 += sigma1(w10) + w5 + sigma0(w13)); - Round(d, e, f, &g, h, a, b, &c, 0xa4506ceb, w13 += sigma1(w11) + w6 + sigma0(w14)); - Round(c, d, e, &f, g, h, a, &b, 0xbef9a3f7, w14 + sigma1(w12) + w7 + sigma0(w15)); - Round(b, c, d, &e, f, g, h, &a, 0xc67178f2, w15 + sigma1(w13) + w8 + sigma0(w0)); - - s[0] += a; - s[1] += b; - s[2] += c; - s[3] += d; - s[4] += e; - s[5] += f; - s[6] += g; - s[7] += h; -} - - -static void add(struct sha256_ctx *ctx, const void *p, size_t len) -{ - const unsigned char *data = p; - size_t bufsize = ctx->bytes % 64; - - if (bufsize + len >= 64) { - /* Fill the buffer, and process it. */ - memcpy(ctx->buf.u8 + bufsize, data, 64 - bufsize); - ctx->bytes += 64 - bufsize; - data += 64 - bufsize; - len -= 64 - bufsize; - Transform(ctx->s, ctx->buf.u32); - bufsize = 0; - } - - while (len >= 64) { - /* Process full chunks directly from the source. */ - if (alignment_ok(data, sizeof(uint32_t))) - Transform(ctx->s, (const uint32_t *)data); - else { - memcpy(ctx->buf.u8, data, sizeof(ctx->buf)); - Transform(ctx->s, ctx->buf.u32); - } - ctx->bytes += 64; - data += 64; - len -= 64; - } - - if (len) { - /* Fill the buffer with what remains. */ - memcpy(ctx->buf.u8 + bufsize, data, len); - ctx->bytes += len; - } -} - -void sha256_init(struct sha256_ctx *ctx) -{ - struct sha256_ctx init = SHA256_INIT; - *ctx = init; -} - -void sha256_update(struct sha256_ctx *ctx, const void *p, size_t size) -{ - check_sha256(ctx); - add(ctx, p, size); -} - -void sha256_done(struct sha256_ctx *ctx, struct sha256 *res) -{ - static const unsigned char pad[64] = {0x80}; - uint64_t sizedesc; - size_t i; - - sizedesc = cpu_to_be64((uint64_t)ctx->bytes << 3); - /* Add '1' bit to terminate, then all 0 bits, up to next block - 8. */ - add(ctx, pad, 1 + ((128 - 8 - (ctx->bytes % 64) - 1) % 64)); - /* Add number of bits of data (big endian) */ - add(ctx, &sizedesc, 8); - for (i = 0; i < sizeof(ctx->s) / sizeof(ctx->s[0]); i++) - res->u.u32[i] = cpu_to_be32(ctx->s[i]); - invalidate_sha256(ctx); -} -#endif - -void sha256(struct sha256 *sha, const void *p, size_t size) -{ - struct sha256_ctx ctx; - - sha256_init(&ctx); - sha256_update(&ctx, p, size); - sha256_done(&ctx, sha); -} - -void sha256_u8(struct sha256_ctx *ctx, uint8_t v) -{ - sha256_update(ctx, &v, sizeof(v)); -} - -void sha256_u16(struct sha256_ctx *ctx, uint16_t v) -{ - sha256_update(ctx, &v, sizeof(v)); -} - -void sha256_u32(struct sha256_ctx *ctx, uint32_t v) -{ - sha256_update(ctx, &v, sizeof(v)); -} - -void sha256_u64(struct sha256_ctx *ctx, uint64_t v) -{ - sha256_update(ctx, &v, sizeof(v)); -} - -/* Add as little-endian */ -void sha256_le16(struct sha256_ctx *ctx, uint16_t v) -{ - leint16_t lev = cpu_to_le16(v); - sha256_update(ctx, &lev, sizeof(lev)); -} - -void sha256_le32(struct sha256_ctx *ctx, uint32_t v) -{ - leint32_t lev = cpu_to_le32(v); - sha256_update(ctx, &lev, sizeof(lev)); -} - -void sha256_le64(struct sha256_ctx *ctx, uint64_t v) -{ - leint64_t lev = cpu_to_le64(v); - sha256_update(ctx, &lev, sizeof(lev)); -} - -/* Add as big-endian */ -void sha256_be16(struct sha256_ctx *ctx, uint16_t v) -{ - beint16_t bev = cpu_to_be16(v); - sha256_update(ctx, &bev, sizeof(bev)); -} - -void sha256_be32(struct sha256_ctx *ctx, uint32_t v) -{ - beint32_t bev = cpu_to_be32(v); - sha256_update(ctx, &bev, sizeof(bev)); -} - -void sha256_be64(struct sha256_ctx *ctx, uint64_t v) -{ - beint64_t bev = cpu_to_be64(v); - sha256_update(ctx, &bev, sizeof(bev)); -} - - diff --git a/nostrdb/src/sha256.h b/nostrdb/src/sha256.h deleted file mode 100644 index 2a9283120..000000000 --- a/nostrdb/src/sha256.h +++ /dev/null @@ -1,155 +0,0 @@ - -#ifndef CCAN_CRYPTO_SHA256_H -#define CCAN_CRYPTO_SHA256_H - - -/** Output length for `wally_sha256` */ -#define SHA256_LEN 32 - - -/* BSD-MIT - see LICENSE file for details */ -/* #include "config.h" */ -#include -#include - -/* Uncomment this to use openssl's SHA256 routines (and link with -lcrypto) */ -/*#define CCAN_CRYPTO_SHA256_USE_OPENSSL 1*/ - -#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL -#include -#endif - -/** - * struct sha256 - structure representing a completed SHA256. - * @u.u8: an unsigned char array. - * @u.u32: a 32-bit integer array. - * - * Other fields may be added to the union in future. - */ -struct sha256 { - union { - uint32_t u32[8]; - unsigned char u8[32]; - } u; -}; - -/** - * sha256 - return sha256 of an object. - * @sha256: the sha256 to fill in - * @p: pointer to memory, - * @size: the number of bytes pointed to by @p - * - * The bytes pointed to by @p is SHA256 hashed into @sha256. This is - * equivalent to sha256_init(), sha256_update() then sha256_done(). - */ -void sha256(struct sha256 *sha, const void *p, size_t size); - -/** - * struct sha256_ctx - structure to store running context for sha256 - */ -struct sha256_ctx { -#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL - SHA256_CTX c; -#else - uint32_t s[8]; - union { - uint32_t u32[16]; - unsigned char u8[64]; - } buf; - size_t bytes; -#endif -}; - -/** - * sha256_init - initialize an SHA256 context. - * @ctx: the sha256_ctx to initialize - * - * This must be called before sha256_update or sha256_done, or - * alternately you can assign SHA256_INIT. - * - * If it was already initialized, this forgets anything which was - * hashed before. - * - * Example: - * static void hash_all(const char **arr, struct sha256 *hash) - * { - * size_t i; - * struct sha256_ctx ctx; - * - * sha256_init(&ctx); - * for (i = 0; arr[i]; i++) - * sha256_update(&ctx, arr[i], strlen(arr[i])); - * sha256_done(&ctx, hash); - * } - */ -void sha256_init(struct sha256_ctx *ctx); - -/** - * SHA256_INIT - initializer for an SHA256 context. - * - * This can be used to statically initialize an SHA256 context (instead - * of sha256_init()). - * - * Example: - * static void hash_all(const char **arr, struct sha256 *hash) - * { - * size_t i; - * struct sha256_ctx ctx = SHA256_INIT; - * - * for (i = 0; arr[i]; i++) - * sha256_update(&ctx, arr[i], strlen(arr[i])); - * sha256_done(&ctx, hash); - * } - */ -#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL -#define SHA256_INIT \ - { { { 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, \ - 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul }, \ - 0x0, 0x0, \ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, \ - 0x0, 0x20 } } -#else -#define SHA256_INIT \ - { { 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, \ - 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul }, \ - { { 0 } }, 0 } -#endif - -/** - * sha256_update - include some memory in the hash. - * @ctx: the sha256_ctx to use - * @p: pointer to memory, - * @size: the number of bytes pointed to by @p - * - * You can call this multiple times to hash more data, before calling - * sha256_done(). - */ -void sha256_update(struct sha256_ctx *ctx, const void *p, size_t size); - -/** - * sha256_done - finish SHA256 and return the hash - * @ctx: the sha256_ctx to complete - * @res: the hash to return. - * - * Note that @ctx is *destroyed* by this, and must be reinitialized. - * To avoid that, pass a copy instead. - */ -void sha256_done(struct sha256_ctx *sha256, struct sha256 *res); - -/* Add various types to an SHA256 hash */ -void sha256_u8(struct sha256_ctx *ctx, uint8_t v); -void sha256_u16(struct sha256_ctx *ctx, uint16_t v); -void sha256_u32(struct sha256_ctx *ctx, uint32_t v); -void sha256_u64(struct sha256_ctx *ctx, uint64_t v); - -/* Add as little-endian */ -void sha256_le16(struct sha256_ctx *ctx, uint16_t v); -void sha256_le32(struct sha256_ctx *ctx, uint32_t v); -void sha256_le64(struct sha256_ctx *ctx, uint64_t v); - -/* Add as big-endian */ -void sha256_be16(struct sha256_ctx *ctx, uint16_t v); -void sha256_be32(struct sha256_ctx *ctx, uint32_t v); -void sha256_be64(struct sha256_ctx *ctx, uint64_t v); - -#endif /* CCAN_CRYPTO_SHA256_H */ From a12b8a1da28c4be6f628bad20e7a32803fc02d2f Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 16 Aug 2024 12:17:00 -0700 Subject: [PATCH 124/146] nostrdb: ndb_filter_from_json Changelog-Added: Add method for parsing filter json Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 292 +++++++++++++++++++++++++++++++++++++++++- nostrdb/src/nostrdb.h | 10 +- 2 files changed, 297 insertions(+), 5 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 89b383e7a..96f4549ae 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -726,7 +726,8 @@ static int ndb_filter_start_field_impl(struct ndb_filter *filter, enum ndb_filte for (i = 0; i < filter->num_elements; i++) { el = ndb_filter_get_elements(filter, i); assert(el); - if (el->field.type == field) { + // TODO: fix this tags check to try to find matching tags + if (el->field.type == field && field != NDB_FILTER_TAGS) { fprintf(stderr, "ndb_filter_start_field: field '%s' already exists\n", ndb_filter_field_name(field)); return 0; @@ -796,7 +797,9 @@ static int ndb_filter_add_element(struct ndb_filter *filter, union ndb_filter_el return 0; break; case NDB_ELEMENT_STRING: - if (!cursor_push_c_str(&filter->data_buf, el.string)) + if (!cursor_push(&filter->data_buf, (unsigned char *)el.string.string, el.string.len)) + return 0; + if (!cursor_push_byte(&filter->data_buf, 0)) return 0; break; case NDB_ELEMENT_INT: @@ -840,7 +843,8 @@ static int ndb_filter_set_elem_type(struct ndb_filter *filter, return 1; } -int ndb_filter_add_str_element(struct ndb_filter *filter, const char *str) + +int ndb_filter_add_str_element_len(struct ndb_filter *filter, const char *str, int len) { union ndb_filter_element el; struct ndb_filter_elements *current; @@ -864,10 +868,17 @@ int ndb_filter_add_str_element(struct ndb_filter *filter, const char *str) if (!ndb_filter_set_elem_type(filter, NDB_ELEMENT_STRING)) return 0; - el.string = str; + el.string.string = str; + el.string.len = len; + return ndb_filter_add_element(filter, el); } +int ndb_filter_add_str_element(struct ndb_filter *filter, const char *str) +{ + return ndb_filter_add_str_element_len(filter, str, strlen(str)); +} + int ndb_filter_add_int_element(struct ndb_filter *filter, uint64_t integer) { union ndb_filter_element el; @@ -5460,6 +5471,260 @@ int ndb_ws_event_from_json(const char *json, int len, struct ndb_tce *tce, return 0; } +static enum ndb_filter_fieldtype +ndb_filter_parse_field(const char *tok, int len, char *tagchar) +{ + *tagchar = 0; + + if (len == 0) + return 0; + + if (len == 7 && !strncmp(tok, "authors", 7)) { + return NDB_FILTER_AUTHORS; + } else if (len == 3 && !strncmp(tok, "ids", 3)) { + return NDB_FILTER_IDS; + } else if (len == 5 && !strncmp(tok, "kinds", 5)) { + return NDB_FILTER_KINDS; + } else if (len == 2 && tok[0] == '#') { + *tagchar = tok[1]; + return NDB_FILTER_TAGS; + } else if (len == 5 && !strncmp(tok, "since", 5)) { + return NDB_FILTER_SINCE; + } else if (len == 5 && !strncmp(tok, "until", 5)) { + return NDB_FILTER_UNTIL; + } else if (len == 5 && !strncmp(tok, "limit", 5)) { + return NDB_FILTER_LIMIT; + } + + return 0; +} + +static int ndb_filter_parse_json_ids(struct ndb_json_parser *parser, + struct ndb_filter *filter) +{ + jsmntok_t *tok; + const char *start; + unsigned char hexbuf[32]; + int tok_len, i, size; + + tok = &parser->toks[parser->i++]; + + if (tok->type != JSMN_ARRAY) { + ndb_debug("parse_json_ids: not an array\n"); + return 0; + } + + size = tok->size; + + for (i = 0; i < size; parser->i++, i++) { + tok = &parser->toks[parser->i]; + start = parser->json + tok->start; + tok_len = toksize(tok); + + if (tok->type != JSMN_STRING) { + ndb_debug("parse_json_ids: not a string '%d'\n", tok->type); + return 0; + } + + if (tok_len != 64) { + ndb_debug("parse_json_ids: not len 64: '%.*s'\n", tok_len, start); + return 0; + } + + // id + if (!hex_decode(start, tok_len, hexbuf, sizeof(hexbuf))) { + ndb_debug("parse_json_ids: hex decode failed\n"); + return 0; + } + + ndb_debug("adding id elem\n"); + if (!ndb_filter_add_id_element(filter, hexbuf)) { + ndb_debug("parse_json_ids: failed to add id element\n"); + return 0; + } + } + + parser->i--; + return 1; +} + +static int ndb_filter_parse_json_elems(struct ndb_json_parser *parser, + struct ndb_filter *filter) +{ + jsmntok_t *tok; + const char *start; + int tok_len; + unsigned char hexbuf[32]; + enum ndb_generic_element_type typ; + tok = NULL; + int i, size; + + tok = &parser->toks[parser->i++]; + + if (tok->type != JSMN_ARRAY) + return 0; + + size = tok->size; + + for (i = 0; i < size; i++, parser->i++) { + tok = &parser->toks[parser->i]; + start = parser->json + tok->start; + tok_len = toksize(tok); + + if (tok->type != JSMN_STRING) + return 0; + + if (i == 0) { + if (tok_len == 64 && hex_decode(start, 64, hexbuf, sizeof(hexbuf))) { + typ = NDB_ELEMENT_ID; + if (!ndb_filter_add_id_element(filter, hexbuf)) { + ndb_debug("failed to push id elem\n"); + return 0; + } + } else { + typ = NDB_ELEMENT_STRING; + if (!ndb_filter_add_str_element_len(filter, start, tok_len)) + return 0; + } + } else if (typ == NDB_ELEMENT_ID) { + if (!hex_decode(start, 64, hexbuf, sizeof(hexbuf))) + return 0; + if (!ndb_filter_add_id_element(filter, hexbuf)) + return 0; + } else if (typ == NDB_ELEMENT_STRING) { + if (!ndb_filter_add_str_element_len(filter, start, tok_len)) + return 0; + } else { + // ??? + return 0; + } + } + + parser->i--; + return 1; +} + +static int ndb_filter_parse_json_int(struct ndb_json_parser *parser, + struct ndb_filter *filter) +{ + jsmntok_t *tok; + const char *start; + int tok_len; + unsigned int value; + + tok = &parser->toks[parser->i]; + start = parser->json + tok->start; + tok_len = toksize(tok); + + if (tok->type != JSMN_PRIMITIVE) + return 0; + + if (!parse_unsigned_int(start, tok_len, &value)) + return 0; + + if (!ndb_filter_add_int_element(filter, (uint64_t)value)) + return 0; + + ndb_debug("added int elem %d\n", value); + + return 1; +} + + +static int ndb_filter_parse_json_ints(struct ndb_json_parser *parser, + struct ndb_filter *filter) +{ + jsmntok_t *tok; + int size, i; + + tok = &parser->toks[parser->i++]; + + if (tok->type != JSMN_ARRAY) + return 0; + + size = tok->size; + + for (i = 0; i < size; parser->i++, i++) { + if (!ndb_filter_parse_json_int(parser, filter)) + return 0; + } + + parser->i--; + return 1; +} + + +static int ndb_filter_parse_json(struct ndb_json_parser *parser, + struct ndb_filter *filter) +{ + jsmntok_t *tok = NULL; + const char *json = parser->json; + const char *start; + char tag; + int tok_len; + enum ndb_filter_fieldtype field; + + if (parser->toks[parser->i++].type != JSMN_OBJECT) + return 0; + + for (; parser->i < parser->num_tokens; parser->i++) { + tok = &parser->toks[parser->i++]; + start = json + tok->start; + tok_len = toksize(tok); + + if (!(field = ndb_filter_parse_field(start, tok_len, &tag))) { + ndb_debug("failed field '%.*s'\n", tok_len, start); + continue; + } + + if (tag) { + ndb_debug("starting tag field '%c'\n", tag); + if (!ndb_filter_start_tag_field(filter, tag)) { + ndb_debug("failed to start tag field '%c'\n", tag); + return 0; + } + } else if (!ndb_filter_start_field(filter, field)) { + ndb_debug("field already started\n"); + return 0; + } + + // we parsed a top-level field + switch(field) { + case NDB_FILTER_AUTHORS: + case NDB_FILTER_IDS: + if (!ndb_filter_parse_json_ids(parser, filter)) { + ndb_debug("failed to parse filter ids/authors\n"); + return 0; + } + break; + case NDB_FILTER_SINCE: + case NDB_FILTER_UNTIL: + case NDB_FILTER_LIMIT: + if (!ndb_filter_parse_json_int(parser, filter)) { + ndb_debug("failed to parse filter since/until/limit\n"); + return 0; + } + break; + case NDB_FILTER_KINDS: + if (!ndb_filter_parse_json_ints(parser, filter)) { + ndb_debug("failed to parse filter kinds\n"); + return 0; + } + break; + case NDB_FILTER_TAGS: + if (!ndb_filter_parse_json_elems(parser, filter)) { + ndb_debug("failed to parse filter tags\n"); + return 0; + } + break; + } + + ndb_filter_end_field(filter); + } + + return ndb_filter_end(filter); +} + int ndb_parse_json_note(struct ndb_json_parser *parser, struct ndb_note **note) { jsmntok_t *tok = NULL; @@ -5557,6 +5822,25 @@ int ndb_parse_json_note(struct ndb_json_parser *parser, struct ndb_note **note) return ndb_builder_finalize(&parser->builder, note, NULL); } +int ndb_filter_from_json(const char *json, int len, struct ndb_filter *filter, + unsigned char *buf, int bufsize) +{ + struct ndb_json_parser parser; + int res; + + if (filter->finalized) + return 0; + + ndb_json_parser_init(&parser, json, len, buf, bufsize); + if ((res = ndb_json_parser_parse(&parser, NULL)) < 0) + return res; + + if (parser.num_tokens < 1) + return 0; + + return ndb_filter_parse_json(&parser, filter); +} + int ndb_note_from_json(const char *json, int len, struct ndb_note **note, unsigned char *buf, int bufsize) { diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 91197f960..00842f128 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -223,8 +223,13 @@ struct ndb_iterator { int index; }; -union ndb_filter_element { +struct ndb_filter_string { const char *string; + int len; +}; + +union ndb_filter_element { + struct ndb_filter_string string; const unsigned char *id; uint64_t integer; }; @@ -491,6 +496,9 @@ int ndb_filter_add_id_element(struct ndb_filter *, const unsigned char *id); int ndb_filter_add_int_element(struct ndb_filter *, uint64_t integer); int ndb_filter_add_str_element(struct ndb_filter *, const char *str); +// filters from json +int ndb_filter_from_json(const char *, int len, struct ndb_filter *filter, unsigned char *buf, int bufsize); + // getting field elements unsigned char *ndb_filter_get_id_element(const struct ndb_filter *, const struct ndb_filter_elements *, int index); const char *ndb_filter_get_string_element(const struct ndb_filter *, const struct ndb_filter_elements *, int index); From 3bab65ac36e7fa83f71be1a34ebe9af8aeeb4565 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sun, 18 Aug 2024 11:28:37 +0930 Subject: [PATCH 125/146] nostrdb: Makefile: fix missing dependencies on bolt11 headers. I wondered by `make check` was giving strange errors, until I realized it wasn't fully rebuilding. Also, remove leftover CCAN files I missed previously. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/src/bolt11/str.h | 228 --------------------------------- nostrdb/src/bolt11/str_debug.h | 30 ----- 2 files changed, 258 deletions(-) delete mode 100644 nostrdb/src/bolt11/str.h delete mode 100644 nostrdb/src/bolt11/str_debug.h diff --git a/nostrdb/src/bolt11/str.h b/nostrdb/src/bolt11/str.h deleted file mode 100644 index f391abdde..000000000 --- a/nostrdb/src/bolt11/str.h +++ /dev/null @@ -1,228 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_STR_H -#define CCAN_STR_H -#include "../config.h" -#include -#include -#include -#include - -/** - * streq - Are two strings equal? - * @a: first string - * @b: first string - * - * This macro is arguably more readable than "!strcmp(a, b)". - * - * Example: - * if (streq(somestring, "")) - * printf("String is empty!\n"); - */ -#define streq(a,b) (strcmp((a),(b)) == 0) - -/** - * strstarts - Does this string start with this prefix? - * @str: string to test - * @prefix: prefix to look for at start of str - * - * Example: - * if (strstarts(somestring, "foo")) - * printf("String %s begins with 'foo'!\n", somestring); - */ -#define strstarts(str,prefix) (strncmp((str),(prefix),strlen(prefix)) == 0) - -/** - * strends - Does this string end with this postfix? - * @str: string to test - * @postfix: postfix to look for at end of str - * - * Example: - * if (strends(somestring, "foo")) - * printf("String %s end with 'foo'!\n", somestring); - */ -static inline bool strends(const char *str, const char *postfix) -{ - if (strlen(str) < strlen(postfix)) - return false; - - return streq(str + strlen(str) - strlen(postfix), postfix); -} - -/** - * stringify - Turn expression into a string literal - * @expr: any C expression - * - * Example: - * #define PRINT_COND_IF_FALSE(cond) \ - * ((cond) || printf("%s is false!", stringify(cond))) - */ -#define stringify(expr) stringify_1(expr) -/* Double-indirection required to stringify expansions */ -#define stringify_1(expr) #expr - -/** - * strcount - Count number of (non-overlapping) occurrences of a substring. - * @haystack: a C string - * @needle: a substring - * - * Example: - * assert(strcount("aaa aaa", "a") == 6); - * assert(strcount("aaa aaa", "ab") == 0); - * assert(strcount("aaa aaa", "aa") == 2); - */ -size_t strcount(const char *haystack, const char *needle); - -/** - * STR_MAX_CHARS - Maximum possible size of numeric string for this type. - * @type_or_expr: a pointer or integer type or expression. - * - * This provides enough space for a nul-terminated string which represents the - * largest possible value for the type or expression. - * - * Note: The implementation adds extra space so hex values or negative - * values will fit (eg. sprintf(... "%p"). ) - * - * Example: - * char str[STR_MAX_CHARS(int)]; - * - * sprintf(str, "%i", 7); - */ -#define STR_MAX_CHARS(type_or_expr) \ - ((sizeof(type_or_expr) * CHAR_BIT + 8) / 9 * 3 + 2 \ - + STR_MAX_CHARS_TCHECK_(type_or_expr)) - -#if HAVE_TYPEOF -/* Only a simple type can have 0 assigned, so test that. */ -#define STR_MAX_CHARS_TCHECK_(type_or_expr) \ - (sizeof(({ typeof(type_or_expr) x = 0; x; }))*0) -#else -#define STR_MAX_CHARS_TCHECK_(type_or_expr) 0 -#endif - -/** - * cisalnum - isalnum() which takes a char (and doesn't accept EOF) - * @c: a character - * - * Surprisingly, the standard ctype.h isalnum() takes an int, which - * must have the value of EOF (-1) or an unsigned char. This variant - * takes a real char, and doesn't accept EOF. - */ -static inline bool cisalnum(char c) -{ - return isalnum((unsigned char)c); -} -static inline bool cisalpha(char c) -{ - return isalpha((unsigned char)c); -} -static inline bool cisascii(char c) -{ - return isascii((unsigned char)c); -} -#if HAVE_ISBLANK -static inline bool cisblank(char c) -{ - return isblank((unsigned char)c); -} -#endif -static inline bool ciscntrl(char c) -{ - return iscntrl((unsigned char)c); -} -static inline bool cisdigit(char c) -{ - return isdigit((unsigned char)c); -} -static inline bool cisgraph(char c) -{ - return isgraph((unsigned char)c); -} -static inline bool cislower(char c) -{ - return islower((unsigned char)c); -} -static inline bool cisprint(char c) -{ - return isprint((unsigned char)c); -} -static inline bool cispunct(char c) -{ - return ispunct((unsigned char)c); -} -static inline bool cisspace(char c) -{ - return isspace((unsigned char)c); -} -static inline bool cisupper(char c) -{ - return isupper((unsigned char)c); -} -static inline bool cisxdigit(char c) -{ - return isxdigit((unsigned char)c); -} - -#include "str_debug.h" - -/* These checks force things out of line, hence they are under DEBUG. */ -#ifdef CCAN_STR_DEBUG -#include - -/* These are commonly misused: they take -1 or an *unsigned* char value. */ -#undef isalnum -#undef isalpha -#undef isascii -#undef isblank -#undef iscntrl -#undef isdigit -#undef isgraph -#undef islower -#undef isprint -#undef ispunct -#undef isspace -#undef isupper -#undef isxdigit - -/* You can use a char if char is unsigned. */ -#if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF -#define str_check_arg_(i) \ - ((i) + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(i), \ - char) \ - || (char)255 > 0)) -#else -#define str_check_arg_(i) (i) -#endif - -#define isalnum(i) str_isalnum(str_check_arg_(i)) -#define isalpha(i) str_isalpha(str_check_arg_(i)) -#define isascii(i) str_isascii(str_check_arg_(i)) -#if HAVE_ISBLANK -#define isblank(i) str_isblank(str_check_arg_(i)) -#endif -#define iscntrl(i) str_iscntrl(str_check_arg_(i)) -#define isdigit(i) str_isdigit(str_check_arg_(i)) -#define isgraph(i) str_isgraph(str_check_arg_(i)) -#define islower(i) str_islower(str_check_arg_(i)) -#define isprint(i) str_isprint(str_check_arg_(i)) -#define ispunct(i) str_ispunct(str_check_arg_(i)) -#define isspace(i) str_isspace(str_check_arg_(i)) -#define isupper(i) str_isupper(str_check_arg_(i)) -#define isxdigit(i) str_isxdigit(str_check_arg_(i)) - -#if HAVE_TYPEOF -/* With GNU magic, we can make const-respecting standard string functions. */ -#undef strstr -#undef strchr -#undef strrchr - -/* + 0 is needed to decay array into pointer. */ -#define strstr(haystack, needle) \ - ((typeof((haystack) + 0))str_strstr((haystack), (needle))) -#define strchr(haystack, c) \ - ((typeof((haystack) + 0))str_strchr((haystack), (c))) -#define strrchr(haystack, c) \ - ((typeof((haystack) + 0))str_strrchr((haystack), (c))) -#endif -#endif /* CCAN_STR_DEBUG */ - -#endif /* CCAN_STR_H */ diff --git a/nostrdb/src/bolt11/str_debug.h b/nostrdb/src/bolt11/str_debug.h deleted file mode 100644 index 92c10c41c..000000000 --- a/nostrdb/src/bolt11/str_debug.h +++ /dev/null @@ -1,30 +0,0 @@ -/* CC0 (Public domain) - see LICENSE file for details */ -#ifndef CCAN_STR_DEBUG_H -#define CCAN_STR_DEBUG_H - -/* #define CCAN_STR_DEBUG 1 */ - -#ifdef CCAN_STR_DEBUG -/* Because we mug the real ones with macros, we need our own wrappers. */ -int str_isalnum(int i); -int str_isalpha(int i); -int str_isascii(int i); -#if HAVE_ISBLANK -int str_isblank(int i); -#endif -int str_iscntrl(int i); -int str_isdigit(int i); -int str_isgraph(int i); -int str_islower(int i); -int str_isprint(int i); -int str_ispunct(int i); -int str_isspace(int i); -int str_isupper(int i); -int str_isxdigit(int i); - -char *str_strstr(const char *haystack, const char *needle); -char *str_strchr(const char *s, int c); -char *str_strrchr(const char *s, int c); -#endif /* CCAN_STR_DEBUG */ - -#endif /* CCAN_STR_DEBUG_H */ From 7a7d94d6c026e5be8fba98d1d4eb2095338208da Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sun, 18 Aug 2024 11:28:48 +0930 Subject: [PATCH 126/146] nostrdb: bolt11: update to latest version from CLN Copy the latest, which has parsing fixes. We make a new explicit "bolt11_decode_minimal" which doesn't check sigs, rather than neutering the bolt11_decode logic. As a bonus, this now correctly parses "LIGHTNING:BECH32..." format (upper case, with prefix). Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/src/bolt11/bolt11.c | 693 ++++++++++++++++++++--------------- nostrdb/src/bolt11/bolt11.h | 51 +-- nostrdb/src/content_parser.c | 2 +- 3 files changed, 401 insertions(+), 345 deletions(-) diff --git a/nostrdb/src/bolt11/bolt11.c b/nostrdb/src/bolt11/bolt11.c index 397f1ca7c..f92c8e3b3 100644 --- a/nostrdb/src/bolt11/bolt11.c +++ b/nostrdb/src/bolt11/bolt11.c @@ -28,6 +28,10 @@ #include #include +struct secret { + u8 data[32]; +}; + #define MSAT_PER_SAT ((u64)1000) #define SAT_PER_BTC ((u64)100000000) #define MSAT_PER_BTC (MSAT_PER_SAT * SAT_PER_BTC) @@ -55,10 +59,11 @@ static struct multiplier multipliers[] = { }; /* If pad is false, we discard any bits which don't fit in the last byte. - * Otherwise we add an extra byte */ -static bool pull_bits(struct hash_u5 *hu5, - u5 **data, size_t *data_len, void *dst, size_t nbits, - bool pad) + * Otherwise we add an extra byte. Returns error string or NULL on success. */ +static const char *pull_bits(struct hash_u5 *hu5, + const u5 **data, size_t *data_len, + void *dst, size_t nbits, + bool pad) { size_t n5 = nbits / 5; size_t len = 0; @@ -67,53 +72,67 @@ static bool pull_bits(struct hash_u5 *hu5, n5++; if (*data_len < n5) - return false; + return "truncated"; if (!bech32_convert_bits(dst, &len, 8, *data, n5, 5, pad)) - return false; + return "non-zero trailing bits"; if (hu5) hash_u5(hu5, *data, n5); *data += n5; *data_len -= n5; - return true; + return NULL; } -/* For pulling fields where we should have checked it will succeed already. */ -#ifndef NDEBUG -#define pull_bits_certain(hu5, data, data_len, dst, nbits, pad) \ - assert(pull_bits((hu5), (data), (data_len), (dst), (nbits), (pad))) -#else -#define pull_bits_certain pull_bits -#endif - /* Helper for pulling a variable-length big-endian int. */ -static bool pull_uint(struct hash_u5 *hu5, - u5 **data, size_t *data_len, - u64 *val, size_t databits) +static const char *pull_uint(struct hash_u5 *hu5, + const u5 **data, size_t *data_len, + u64 *val, size_t databits) { be64 be_val; + const char *err; /* Too big. */ if (databits > sizeof(be_val) * CHAR_BIT) - return false; - if (!pull_bits(hu5, data, data_len, &be_val, databits, true)) - return false; - *val = be64_to_cpu(be_val) >> (sizeof(be_val) * CHAR_BIT - databits); - return true; + return "integer too large"; + err = pull_bits(hu5, data, data_len, &be_val, databits, true); + if (err) + return err; + if (databits == 0) + *val = 0; + else + *val = be64_to_cpu(be_val) >> + (sizeof(be_val) * CHAR_BIT - databits); + return NULL; } -static size_t num_u8(size_t num_u5) +static void *pull_all(const tal_t *ctx, + struct hash_u5 *hu5, + const u5 **data, size_t *data_len, + bool pad, + const char **err) { - return (num_u5 * 5 + 4) / 8; + void *ret; + size_t retlen; + + if (pad) + retlen = (*data_len * 5 + 7) / 8; + else + retlen = (*data_len * 5) / 8; + + ret = tal_arr(ctx, u8, retlen); + *err = pull_bits(hu5, data, data_len, ret, *data_len * 5, pad); + if (*err) + return tal_free(ret); + return ret; } /* Frees bolt11, returns NULL. */ static struct bolt11 *decode_fail(struct bolt11 *b11, char **fail, - const char *fmt, ...) + const char *fmt, ...) PRINTF_FMT(3,4); static struct bolt11 *decode_fail(struct bolt11 *b11, char **fail, - const char *fmt, ...) + const char *fmt, ...) { va_list ap; @@ -127,20 +146,39 @@ static struct bolt11 *decode_fail(struct bolt11 *b11, char **fail, * These handle specific fields in the payment request; returning the problem * if any, or NULL. */ -static char *unknown_field(struct bolt11 *b11, - struct hash_u5 *hu5, - u5 **data, size_t *data_len, - u5 type, size_t length) +static const char *unknown_field(struct bolt11 *b11, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + u5 type) { struct bolt11_field *extra = tal(b11, struct bolt11_field); - u8 u8data[num_u8(length)]; + const char *err; extra->tag = type; - extra->data = tal_dup_arr(extra, u5, *data, length, 0); + /* FIXME: record u8 data here, not u5! */ + extra->data = tal_dup_arr(extra, u5, *data, *field_len, 0); list_add_tail(&b11->extra_fields, &extra->list); - pull_bits_certain(hu5, data, data_len, u8data, length * 5, true); - return NULL; + tal_free(pull_all(extra, hu5, data, field_len, true, &err)); + return err; +} + +/* If field isn't expected length (in *bech32*!), call unknown_field. + * Otherwise copy into dst without padding, set have_flag if non-NULL. */ +static const char *pull_expected_length(struct bolt11 *b11, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + size_t expected_length, + u5 type, + bool *have_flag, + void *dst) +{ + if (*field_len != expected_length) + return unknown_field(b11, hu5, data, field_len, type); + + if (have_flag) + *have_flag = true; + return pull_bits(hu5, data, field_len, dst, *field_len * 5, false); } /* BOLT #11: @@ -148,34 +186,27 @@ static char *unknown_field(struct bolt11 *b11, * `p` (1): `data_length` 52. 256-bit SHA256 payment_hash. Preimage of this * provides proof of payment */ -static void decode_p(struct bolt11 *b11, - struct hash_u5 *hu5, - u5 **data, size_t *data_len, - size_t data_length, bool *have_p) +static const char *decode_p(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_p) { /* BOLT #11: * * A payer... SHOULD use the first `p` field that it did NOT * skip as the payment hash. */ - if (*have_p) { - unknown_field(b11, hu5, data, data_len, 'p', data_length); - return; - } + assert(!*have_p); /* BOLT #11: * * A reader... MUST skip over unknown fields, OR an `f` field * with unknown `version`, OR `p`, `h`, `s` or `n` fields that do * NOT have `data_length`s of 52, 52, 52 or 53, respectively. - */ - if (data_length != 52) { - unknown_field(b11, hu5, data, data_len, 'p', data_length); - return; - } - - pull_bits_certain(hu5, data, data_len, &b11->payment_hash, 256, false); - *have_p = true; + */ + return pull_expected_length(b11, hu5, data, field_len, 52, 'p', + have_p, &b11->payment_hash); } /* Check for valid UTF-8 */ @@ -213,23 +244,24 @@ static char *utf8_str(const tal_t *ctx, const u8 *buf TAKES, size_t buflen) return ret; } - /* BOLT #11: * * `d` (13): `data_length` variable. Short description of purpose of payment * (UTF-8), e.g. '1 cup of coffee' or 'ナンセンス 1杯' */ -static char *decode_d(struct bolt11 *b11, - struct hash_u5 *hu5, - u5 **data, size_t *data_len, - size_t data_length, bool *have_d) +static const char *decode_d(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_d) { u8 *desc; - if (*have_d) - return unknown_field(b11, hu5, data, data_len, 'd', data_length); + const char *err; - desc = tal_arr(NULL, u8, data_length * 5 / 8); - pull_bits_certain(hu5, data, data_len, desc, data_length*5, false); + assert(!*have_d); + desc = pull_all(NULL, hu5, data, field_len, false, &err); + if (!desc) + return err; *have_d = true; b11->description = utf8_str(b11, take(desc), tal_bytelen(desc)); @@ -246,30 +278,28 @@ static char *decode_d(struct bolt11 *b11, * 639 bytes, but the transport mechanism for the description in that case is * transport specific and not defined here. */ -static void decode_h(struct bolt11 *b11, - struct hash_u5 *hu5, - u5 **data, size_t *data_len, - size_t data_length, bool *have_h) +static const char *decode_h(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_h) { - if (*have_h) { - unknown_field(b11, hu5, data, data_len, 'h', data_length); - return; - } + const char *err; + struct sha256 hash; + assert(!*have_h); /* BOLT #11: * * A reader... MUST skip over unknown fields, OR an `f` field * with unknown `version`, OR `p`, `h`, `s` or `n` fields that do * NOT have `data_length`s of 52, 52, 52 or 53, respectively. */ - if (data_length != 52) { - unknown_field(b11, hu5, data, data_len, 'h', data_length); - return; - } + err = pull_expected_length(b11, hu5, data, field_len, 52, 'h', + have_h, &hash); - b11->description_hash = tal(b11, struct sha256); - pull_bits_certain(hu5, data, data_len, b11->description_hash, 256, - false); - *have_h = true; + /* If that gave us the hash, store it */ + if (*have_h) + b11->description_hash = tal_dup(b11, struct sha256, &hash); + return err; } /* BOLT #11: @@ -278,19 +308,20 @@ static void decode_h(struct bolt11 *b11, * (big-endian). Default is 3600 (1 hour) if not specified. */ #define DEFAULT_X 3600 -static char *decode_x(struct bolt11 *b11, - struct hash_u5 *hu5, - u5 **data, size_t *data_len, - size_t data_length, bool *have_x) +static const char *decode_x(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_x) { - if (*have_x) - return unknown_field(b11, hu5, data, data_len, 'x', - data_length); + const char *err; + + assert(!*have_x); /* FIXME: Put upper limit in bolt 11 */ - if (!pull_uint(hu5, data, data_len, &b11->expiry, data_length * 5)) - return tal_fmt(b11, "x: length %zu chars is excessive", - *data_len); + err = pull_uint(hu5, data, field_len, &b11->expiry, *field_len * 5); + if (err) + return tal_fmt(b11, "x: %s", err); *have_x = true; return NULL; @@ -298,24 +329,25 @@ static char *decode_x(struct bolt11 *b11, /* BOLT #11: * - * `c` (24): `data_length` variable. `min_final_cltv_expiry` to use for the + * `c` (24): `data_length` variable. `min_final_cltv_expiry_delta` to use for the * last HTLC in the route. Default is 18 if not specified. */ -static char *decode_c(struct bolt11 *b11, - struct hash_u5 *hu5, - u5 **data, size_t *data_len, - size_t data_length, bool *have_c) +static const char *decode_c(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_c) { u64 c; - if (*have_c) - return unknown_field(b11, hu5, data, data_len, 'c', - data_length); + const char *err; + + assert(!*have_c); /* FIXME: Put upper limit in bolt 11 */ - if (!pull_uint(hu5, data, data_len, &c, data_length * 5)) - return tal_fmt(b11, "c: length %zu chars is excessive", - *data_len); - b11->min_final_cltv_expiry = (u32)c; + err = pull_uint(hu5, data, field_len, &c, *field_len * 5); + if (err) + return tal_fmt(b11, "c: %s", err); + b11->min_final_cltv_expiry = c; /* Can overflow, since c is 64 bits but value must be < 32 bits */ if (b11->min_final_cltv_expiry != c) return tal_fmt(b11, "c: %"PRIu64" is too large", c); @@ -324,33 +356,95 @@ static char *decode_c(struct bolt11 *b11, return NULL; } -static char *decode_n(struct bolt11 *b11, - struct hash_u5 *hu5, - u5 **data, size_t *data_len, - size_t data_length, bool *have_n) +static const char *decode_n(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_n) { - if (*have_n) - return unknown_field(b11, hu5, data, data_len, 'n', - data_length); + const char *err; + assert(!*have_n); /* BOLT #11: * * A reader... MUST skip over unknown fields, OR an `f` field * with unknown `version`, OR `p`, `h`, `s` or `n` fields that do * NOT have `data_length`s of 52, 52, 52 or 53, respectively. */ - if (data_length != 53) - return unknown_field(b11, hu5, data, data_len, 'n', - data_length); - - pull_bits_certain(hu5, data, data_len, &b11->receiver_id.k, - data_length * 5, false); - /* - if (!node_id_valid(&b11->receiver_id)) - return tal_fmt(b11, "n: invalid pubkey %s", - node_id_to_hexstr(b11, &b11->receiver_id)); - */ + err = pull_expected_length(b11, hu5, data, field_len, 53, 'n', have_n, + &b11->receiver_id.k); + + return err; +} + +/* BOLT #11: + * + * * `s` (16): `data_length` 52. This 256-bit secret prevents + * forwarding nodes from probing the payment recipient. + */ +static const char *decode_s(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_s) +{ + const char *err; + struct secret secret; + + assert(!*have_s); + + /* BOLT #11: + * + * A reader... MUST skip over unknown fields, OR an `f` field + * with unknown `version`, OR `p`, `h`, `s` or `n` fields that do + * NOT have `data_length`s of 52, 52, 52 or 53, respectively. */ + err = pull_expected_length(b11, hu5, data, field_len, 52, 's', + have_s, &secret); + if (*have_s) + b11->payment_secret = tal_dup(b11, struct secret, &secret); + return err; +} + +static void shift_bitmap_down(u8 *bitmap, size_t bits) +{ + u8 prev = 0; + assert(bits < CHAR_BIT); + + for (size_t i = 0; i < tal_bytelen(bitmap); i++) { + /* Save top bits for next one */ + u8 v = bitmap[i]; + bitmap[i] = (prev | (v >> bits)); + prev = (v << (8 - bits)); + } + assert(prev == 0); +} - *have_n = true; +/* BOLT #11: + * + * `9` (5): `data_length` variable. One or more 5-bit values containing features + * supported or required for receiving this payment. + * See [Feature Bits](#feature-bits). + */ +static const char *decode_9(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_9) +{ + size_t flen = (*field_len * 5 + 7) / 8; + size_t databits = *field_len * 5; + const char *err; + + assert(!*have_9); + + b11->features = pull_all(b11, hu5, data, field_len, true, &err); + if (!b11->features) + return err; + + /* pull_bits pads with zero bits: we need to remove them. */ + shift_bitmap_down(b11->features, + flen * 8 - databits); + + *have_9 = true; return NULL; } @@ -361,80 +455,162 @@ static char *decode_n(struct bolt11 *b11, * maximum hop payload size. Long metadata fields reduce the maximum * route length. */ -static char *decode_m(struct bolt11 *b11, - struct hash_u5 *hu5, - u5 **data, size_t *data_len, - size_t data_length, - bool *have_m) +static const char *decode_m(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_m) { - size_t mlen = (data_length * 5) / 8; + const char *err; - if (*have_m) - return unknown_field(b11, hu5, data, data_len, 'm', - data_length); + assert(!*have_m); - b11->metadata = tal_arr(b11, u8, mlen); - pull_bits_certain(hu5, data, data_len, b11->metadata, - data_length * 5, false); + b11->metadata = pull_all(b11, hu5, data, field_len, false, &err); + if (!b11->metadata) + return err; *have_m = true; return NULL; } -struct bolt11 *new_bolt11(const tal_t *ctx) +static struct bolt11 *new_bolt11(const tal_t *ctx, + const struct amount_msat *msat TAKES) { struct bolt11 *b11 = tal(ctx, struct bolt11); list_head_init(&b11->extra_fields); b11->description = NULL; b11->description_hash = NULL; - b11->fallbacks = NULL; b11->msat = NULL; b11->expiry = DEFAULT_X; b11->features = tal_arr(b11, u8, 0); /* BOLT #11: - * - if the `c` field (`min_final_cltv_expiry`) is not provided: + * - if the `c` field (`min_final_cltv_expiry_delta`) is not provided: * - MUST use an expiry delta of at least 18 when making the payment */ b11->min_final_cltv_expiry = 18; - //b11->payment_secret = NULL; + b11->payment_secret = NULL; b11->metadata = NULL; - //if (msat) - //b11->msat = tal_dup(b11, struct amount_msat, msat); + if (msat) + b11->msat = tal_dup(b11, struct amount_msat, msat); return b11; } -/* Define sha256_eq. */ -//STRUCTEQ_DEF(sha256, 0, u); +struct decoder { + /* What BOLT11 letter this is */ + const char letter; + /* If false, then any dups get treated as "unknown" fields */ + bool allow_duplicates; + /* Routine to decode: returns NULL if it decodes ok, and + * sets *have_field = true if it is not an unknown form. + * Otherwise returns error string (literal or tal off b11). */ + const char *(*decode)(struct bolt11 *b11, + const struct feature_set *our_features, + struct hash_u5 *hu5, + const u5 **data, size_t *field_len, + bool *have_field); +}; -/* Extracts signature but does not check it. */ -struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sig, char **fail) +static const struct decoder decoders[] = { + /* BOLT #11: + * + * A payer... SHOULD use the first `p` field that it did NOT + * skip as the payment hash. + */ + { 'p', false, decode_p }, + { 'd', false, decode_d }, + { 'h', false, decode_h }, + { 'x', false, decode_x }, + { 'c', false, decode_c }, + { 'n', false, decode_n }, + { 's', false, decode_s }, + { '9', false, decode_9 }, + { 'm', false, decode_m }, +}; + +static const struct decoder *find_decoder(char c) { - char *hrp, *amountstr, *prefix; - u5 *data; - size_t data_len; - struct bolt11 *b11 = new_bolt11(ctx); - struct hash_u5 hu5; - bool have_p = false, have_d = false, have_h = false, have_n = false, - have_x = false, have_c = false, have_m = false; + for (size_t i = 0; i < ARRAY_SIZE(decoders); i++) { + if (decoders[i].letter == c) + return decoders + i; + } + return NULL; +} + +static bool bech32_decode_alloc(const tal_t *ctx, + const char **hrp_ret, + const u5 **data_ret, + size_t *data_len, + const char *str) +{ + char *hrp = tal_arr(ctx, char, strlen(str) - 6); + u5 *data = tal_arr(ctx, u5, strlen(str) - 8); + + if (bech32_decode(hrp, data, data_len, str, (size_t)-1) + != BECH32_ENCODING_BECH32) { + tal_free(hrp); + tal_free(data); + return false; + } + /* We needed temporaries because these are const */ + *hrp_ret = hrp; + *data_ret = data; + return true; +} + +static bool has_lightning_prefix(const char *invstring) +{ /* BOLT #11: * * If a URI scheme is desired, the current recommendation is to either - * use 'lightning:' as a prefix before the BOLT-11 encoding - */ - if (strstarts(str, "lightning:") || strstarts(str, "LIGHTNING:")) - str += strlen("lightning:"); + * use 'lightning:' as a prefix before the BOLT-11 encoding */ + return (strstarts(invstring, "lightning:") || + strstarts(invstring, "LIGHTNING:")); +} + +static char *str_lowering(const void *ctx, const char *string TAKES) +{ + char *ret; + + ret = tal_strdup(ctx, string); + for (char *p = ret; *p; p++) *p = tolower(*p); + return ret; +} + +static const char *to_canonical_invstr(const tal_t *ctx, + const char *invstring) +{ + if (has_lightning_prefix(invstring)) + invstring += strlen("lightning:"); + return str_lowering(ctx, invstring); +} + +/* Extracts signature but does not check it. */ +static struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, + const struct feature_set *our_features, + struct sha256 *hash, + const u5 **sig, + bool *have_n, + char **fail) +{ + const char *hrp, *prefix; + char *amountstr; + const u5 *data; + size_t data_len; + struct bolt11 *b11 = new_bolt11(ctx, NULL); + struct hash_u5 hu5; + const char *err; + /* We don't need all of these, but in theory we could have 32 types */ + bool have_field[32]; + + memset(have_field, 0, sizeof(have_field)); if (strlen(str) < 8) return decode_fail(b11, fail, "Bad bech32 string"); - hrp = tal_arr(b11, char, strlen(str) - 6); - data = tal_arr(b11, u5, strlen(str) - 8); - - if (bech32_decode(hrp, data, &data_len, str, (size_t)-1) - != BECH32_ENCODING_BECH32) + if (!bech32_decode_alloc(b11, &hrp, &data, &data_len, str)) return decode_fail(b11, fail, "Bad bech32 string"); /* For signature checking at the end. */ @@ -447,7 +623,7 @@ struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sig, * `lntb` for Bitcoin testnet, `lntbs` for Bitcoin signet, and `lnbcrt` for Bitcoin regtest) * 1. `amount`: optional number in that currency, followed by an optional * `multiplier` letter. The unit encoded here is the 'social' convention of a payment unit -- in the case of Bitcoin the unit is 'bitcoin' NOT satoshis. - */ + */ prefix = tal_strndup(b11, hrp, strcspn(hrp, "0123456789")); /* BOLT #11: @@ -456,7 +632,7 @@ struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sig, */ if (!strstarts(prefix, "ln")) return decode_fail(b11, fail, - "Prefix '%s' does not start with ln", prefix); + "Prefix '%s' does not start with ln", prefix); /* BOLT #11: * @@ -493,17 +669,17 @@ struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sig, amount = strtoull(amountstr, &end, 10); if (amount == ULLONG_MAX && errno == ERANGE) return decode_fail(b11, fail, - "Invalid amount '%s'", amountstr); + "Invalid amount '%s'", amountstr); if (!*amountstr || *end) return decode_fail(b11, fail, - "Invalid amount postfix '%s'", end); + "Invalid amount postfix '%s'", end); /* BOLT #11: * * if the `multiplier` is present... MUST multiply * `amount` by the `multiplier` value to derive the * amount required for payment. - */ + */ b11->msat = tal(b11, struct amount_msat); /* BOLT #11: * @@ -513,8 +689,8 @@ struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sig, */ if (amount * m10 % 10 != 0) return decode_fail(b11, fail, - "Invalid sub-millisatoshi amount" - " '%sp'", amountstr); + "Invalid sub-millisatoshi amount" + " '%sp'", amountstr); *b11->msat = amount_msat(amount * m10 / 10); } @@ -527,12 +703,16 @@ struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sig, * 1. zero or more tagged parts * 1. `signature`: Bitcoin-style signature of above (520 bits) */ - if (!pull_uint(&hu5, &data, &data_len, &b11->timestamp, 35)) - return decode_fail(b11, fail, "Can't get 35-bit timestamp"); + err = pull_uint(&hu5, &data, &data_len, &b11->timestamp, 35); + if (err) + return decode_fail(b11, fail, + "Can't get 35-bit timestamp: %s", err); while (data_len > 520 / 5) { const char *problem = NULL; - u64 type, data_length; + u64 type, field_len64; + size_t field_len; + const struct decoder *decoder; /* BOLT #11: * @@ -542,153 +722,72 @@ struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sig, * 1. `data_length` (10 bits, big-endian) * 1. `data` (`data_length` x 5 bits) */ - if (!pull_uint(&hu5, &data, &data_len, &type, 5) - || !pull_uint(&hu5, &data, &data_len, &data_length, 10)) + err = pull_uint(&hu5, &data, &data_len, &type, 5); + if (err) return decode_fail(b11, fail, - "Can't get tag and length"); + "Can't get tag: %s", err); + err = pull_uint(&hu5, &data, &data_len, &field_len64, 10); + if (err) + return decode_fail(b11, fail, + "Can't get length: %s", err); /* Can't exceed total data remaining. */ - if (data_length > data_len) + if (field_len64 > data_len) return decode_fail(b11, fail, "%c: truncated", - bech32_charset[type]); - - switch (bech32_charset[type]) { - case 'p': - decode_p(b11, &hu5, &data, &data_len, data_length, - &have_p); - break; - - case 'd': - problem = decode_d(b11, &hu5, &data, &data_len, - data_length, &have_d); - break; - - case 'h': - decode_h(b11, &hu5, &data, &data_len, data_length, - &have_h); - break; - - case 'n': - problem = decode_n(b11, &hu5, &data, - &data_len, data_length, - &have_n); - break; - - case 'x': - problem = decode_x(b11, &hu5, &data, - &data_len, data_length, - &have_x); - break; - - case 'c': - problem = decode_c(b11, &hu5, &data, - &data_len, data_length, - &have_c); - break; - - /* - case 'f': - problem = decode_f(b11, &hu5, &data, - &data_len, data_length); - break; - case 'r': - problem = decode_r(b11, &hu5, &data, &data_len, - data_length); - break; - case '9': - problem = decode_9(b11, our_features, &hu5, - &data, &data_len, - data_length); - break; - case 's': - problem = decode_s(b11, &hu5, &data, &data_len, - data_length, &have_s); - break; - */ - case 'm': - problem = decode_m(b11, &hu5, &data, &data_len, - data_length, &have_m); - break; - default: - unknown_field(b11, &hu5, &data, &data_len, - bech32_charset[type], data_length); + bech32_charset[type]); + + /* These are different types on 32 bit! But since data_len is + * also size_t, above check ensures this will fit. */ + field_len = field_len64; + assert(field_len == field_len64); + + /* Do this now: the decode function fixes up the data ptr */ + data_len -= field_len; + + decoder = find_decoder(bech32_charset[type]); + if (!decoder || (have_field[type] && !decoder->allow_duplicates)) { + problem = unknown_field(b11, &hu5, &data, &field_len, + bech32_charset[type]); + } else { + problem = decoder->decode(b11, our_features, &hu5, + &data, &field_len, &have_field[type]); } if (problem) return decode_fail(b11, fail, "%s", problem); + if (field_len) + return decode_fail(b11, fail, "%c: extra %zu bytes", + bech32_charset[type], field_len); } - if (!have_p) + if (!have_field[bech32_charset_rev['p']]) return decode_fail(b11, fail, "No valid 'p' field found"); - *sig = tal_dup_arr(ctx, u5, data, data_len, 0); - return b11; -} - -/* Decodes and checks signature; returns NULL on error. */ -struct bolt11 *bolt11_decode(const tal_t *ctx, const char *str, char **fail) -{ - u5 *sigdata; - size_t data_len; - u8 sig_and_recid[65]; - //secp256k1_ecdsa_recoverable_signature sig; - struct bolt11 *b11; - - b11 = bolt11_decode_nosig(ctx, str, &sigdata, fail); - if (!b11) - return NULL; - /* BOLT #11: - * - * A writer...MUST set `signature` to a valid 512-bit - * secp256k1 signature of the SHA2 256-bit hash of the - * human-readable part, represented as UTF-8 bytes, - * concatenated with the data part (excluding the signature) - * with 0 bits appended to pad the data to the next byte - * boundary, with a trailing byte containing the recovery ID - * (0, 1, 2, or 3). + * A writer: + *... + * - MUST include either exactly one `d` or exactly one `h` field. */ - data_len = tal_count(sigdata); - if (!pull_bits(NULL, &sigdata, &data_len, sig_and_recid, 520, false)) - return decode_fail(b11, fail, "signature truncated"); - - assert(data_len == 0); + /* FIXME: It doesn't actually say the reader must check though! */ + if (!have_field[bech32_charset_rev['d']] + && !have_field[bech32_charset_rev['h']]) + return decode_fail(b11, fail, + "must have either 'd' or 'h' field"); - /* - if (!secp256k1_ecdsa_recoverable_signature_parse_compact - (secp256k1_ctx, &sig, sig_and_recid, sig_and_recid[64])) - return decode_fail(b11, fail, "signature invalid"); + hash_u5_done(&hu5, hash); + *sig = tal_dup_arr(ctx, u5, data, data_len, 0); - secp256k1_ecdsa_recoverable_signature_convert(secp256k1_ctx, - &b11->sig, &sig); - */ + *have_n = have_field[bech32_charset_rev['n']]; + return b11; +} - /* BOLT #11: - * - * A reader... MUST check that the `signature` is valid (see - * the `n` tagged field specified below). ... A reader... - * MUST use the `n` field to validate the signature instead of - * performing signature recovery. - */ - /* - if (!have_n) { - struct pubkey k; - if (!secp256k1_ecdsa_recover(secp256k1_ctx, - &k.pubkey, - &sig, - (const u8 *)&hash)) - return decode_fail(b11, fail, - "signature recovery failed"); - node_id_from_pubkey(&b11->receiver_id, &k); - } else { - struct pubkey k; - if (!pubkey_from_node_id(&k, &b11->receiver_id)) - abort(); - if (!secp256k1_ecdsa_verify(secp256k1_ctx, &b11->sig, - (const u8 *)&hash, - &k.pubkey)) - return decode_fail(b11, fail, "invalid signature"); - } - */ +struct bolt11 *bolt11_decode_minimal(const tal_t *ctx, const char *str, + char **fail) +{ + const u5 *sigdata; + struct sha256 hash; + bool have_n; - return b11; + str = to_canonical_invstr(ctx, str); + return bolt11_decode_nosig(ctx, str, NULL, &hash, &sigdata, &have_n, + fail); } diff --git a/nostrdb/src/bolt11/bolt11.h b/nostrdb/src/bolt11/bolt11.h index 4f0de2596..c2cb7f4db 100644 --- a/nostrdb/src/bolt11/bolt11.h +++ b/nostrdb/src/bolt11/bolt11.h @@ -1,5 +1,6 @@ #ifndef LIGHTNING_COMMON_BOLT11_H #define LIGHTNING_COMMON_BOLT11_H +/* Borrowed from CLN's common/bolt11.[ch] implementation as of v24.08rc1 */ #include "ccan/short_types/short_types.h" #include "hash_u5.h" @@ -28,25 +29,7 @@ struct bolt11_field { u5 *data; }; -/* BOLT #11: - * * `pubkey` (264 bits) - * * `short_channel_id` (64 bits) - * * `fee_base_msat` (32 bits, big-endian) - * * `fee_proportional_millionths` (32 bits, big-endian) - * * `cltv_expiry_delta` (16 bits, big-endian) - */ - -/* -struct route_info { - struct node_id pubkey; - u16 cltv_expiry_delta; - struct short_channel_id short_channel_id; - u32 fee_base_msat, fee_proportional_millionths; -}; - */ - struct bolt11 { - const struct chainparams *chain; u64 timestamp; struct amount_msat *msat; /* NULL if not specified. */ @@ -63,17 +46,7 @@ struct bolt11 { /* How many blocks final hop requires. */ u32 min_final_cltv_expiry; - /* If non-NULL, indicates fallback addresses to pay to. */ - const u8 **fallbacks; - - /* If non-NULL: array of route arrays */ - //struct route_info **routes; - - /* signature of sha256 of entire thing. */ - //secp256k1_ecdsa_signature sig; - - /* payment secret, if any. */ - //struct secret *payment_secret; + struct secret *payment_secret; /* Features bitmap, if any. */ u8 *features; @@ -84,23 +57,7 @@ struct bolt11 { struct list_head extra_fields; }; -/* Decodes and checks signature; returns NULL on error; description is - * (optional) out-of-band description of payment, for `h` field. - * fset is NULL to accept any features (usually not desirable!). - * - * if @must_be_chain is not NULL, fails unless it's this chain. - */ -struct bolt11 *bolt11_decode(const tal_t *ctx, const char *str, char **fail); - -/* Extracts signature but does not check it. */ -struct bolt11 *bolt11_decode_nosig(const tal_t *ctx, const char *str, u5 **sigdata, char **fail); - -/* Initialize an empty bolt11 struct with optional amount */ -struct bolt11 *new_bolt11(const tal_t *ctx); - -#if DEVELOPER -/* Flag for tests to suppress `min_final_cltv_expiry` field generation, to match test vectors */ -extern bool dev_bolt11_no_c_generation; -#endif +/* Does not check signature, nor extract node. */ +struct bolt11 *bolt11_decode_minimal(const tal_t *ctx, const char *str, char **fail); #endif /* LIGHTNING_COMMON_BOLT11_H */ diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index 9243ff8a4..c302a4503 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -168,7 +168,7 @@ static int push_invoice_str(struct ndb_content_parser *p, struct ndb_str_block * struct bolt11 *bolt11; char *fail; - if (!(bolt11 = bolt11_decode(NULL, str->str, &fail))) + if (!(bolt11 = bolt11_decode_minimal(NULL, str->str, &fail))) return 0; start = p->buffer.p; From 3ddebca85daa5a327a047dabe0025c8135652859 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sun, 18 Aug 2024 11:28:57 +0930 Subject: [PATCH 127/146] nostrdb: bolt11: remove unneeded fields. If we make unknown_field simply discard, we can remove decoders and have them discard those fields. Now we can cut down struct bolt11 to only the fields needed by invoice.c, and also speed up parsing a little. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/src/bolt11/bolt11.c | 175 +----------------------------------- nostrdb/src/bolt11/bolt11.h | 17 ---- 2 files changed, 3 insertions(+), 189 deletions(-) diff --git a/nostrdb/src/bolt11/bolt11.c b/nostrdb/src/bolt11/bolt11.c index f92c8e3b3..efeb8bb53 100644 --- a/nostrdb/src/bolt11/bolt11.c +++ b/nostrdb/src/bolt11/bolt11.c @@ -28,10 +28,6 @@ #include #include -struct secret { - u8 data[32]; -}; - #define MSAT_PER_SAT ((u64)1000) #define SAT_PER_BTC ((u64)100000000) #define MSAT_PER_BTC (MSAT_PER_SAT * SAT_PER_BTC) @@ -151,15 +147,9 @@ static const char *unknown_field(struct bolt11 *b11, const u5 **data, size_t *field_len, u5 type) { - struct bolt11_field *extra = tal(b11, struct bolt11_field); const char *err; - extra->tag = type; - /* FIXME: record u8 data here, not u5! */ - extra->data = tal_dup_arr(extra, u5, *data, *field_len, 0); - list_add_tail(&b11->extra_fields, &extra->list); - - tal_free(pull_all(extra, hu5, data, field_len, true, &err)); + tal_free(pull_all(NULL, hu5, data, field_len, true, &err)); return err; } @@ -192,6 +182,7 @@ static const char *decode_p(struct bolt11 *b11, const u5 **data, size_t *field_len, bool *have_p) { + struct sha256 payment_hash; /* BOLT #11: * * A payer... SHOULD use the first `p` field that it did NOT @@ -206,7 +197,7 @@ static const char *decode_p(struct bolt11 *b11, * NOT have `data_length`s of 52, 52, 52 or 53, respectively. */ return pull_expected_length(b11, hu5, data, field_len, 52, 'p', - have_p, &b11->payment_hash); + have_p, &payment_hash); } /* Check for valid UTF-8 */ @@ -327,170 +318,15 @@ static const char *decode_x(struct bolt11 *b11, return NULL; } -/* BOLT #11: - * - * `c` (24): `data_length` variable. `min_final_cltv_expiry_delta` to use for the - * last HTLC in the route. Default is 18 if not specified. - */ -static const char *decode_c(struct bolt11 *b11, - const struct feature_set *our_features, - struct hash_u5 *hu5, - const u5 **data, size_t *field_len, - bool *have_c) -{ - u64 c; - const char *err; - - assert(!*have_c); - - /* FIXME: Put upper limit in bolt 11 */ - err = pull_uint(hu5, data, field_len, &c, *field_len * 5); - if (err) - return tal_fmt(b11, "c: %s", err); - b11->min_final_cltv_expiry = c; - /* Can overflow, since c is 64 bits but value must be < 32 bits */ - if (b11->min_final_cltv_expiry != c) - return tal_fmt(b11, "c: %"PRIu64" is too large", c); - - *have_c = true; - return NULL; -} - -static const char *decode_n(struct bolt11 *b11, - const struct feature_set *our_features, - struct hash_u5 *hu5, - const u5 **data, size_t *field_len, - bool *have_n) -{ - const char *err; - - assert(!*have_n); - /* BOLT #11: - * - * A reader... MUST skip over unknown fields, OR an `f` field - * with unknown `version`, OR `p`, `h`, `s` or `n` fields that do - * NOT have `data_length`s of 52, 52, 52 or 53, respectively. */ - err = pull_expected_length(b11, hu5, data, field_len, 53, 'n', have_n, - &b11->receiver_id.k); - - return err; -} - -/* BOLT #11: - * - * * `s` (16): `data_length` 52. This 256-bit secret prevents - * forwarding nodes from probing the payment recipient. - */ -static const char *decode_s(struct bolt11 *b11, - const struct feature_set *our_features, - struct hash_u5 *hu5, - const u5 **data, size_t *field_len, - bool *have_s) -{ - const char *err; - struct secret secret; - - assert(!*have_s); - - /* BOLT #11: - * - * A reader... MUST skip over unknown fields, OR an `f` field - * with unknown `version`, OR `p`, `h`, `s` or `n` fields that do - * NOT have `data_length`s of 52, 52, 52 or 53, respectively. */ - err = pull_expected_length(b11, hu5, data, field_len, 52, 's', - have_s, &secret); - if (*have_s) - b11->payment_secret = tal_dup(b11, struct secret, &secret); - return err; -} - -static void shift_bitmap_down(u8 *bitmap, size_t bits) -{ - u8 prev = 0; - assert(bits < CHAR_BIT); - - for (size_t i = 0; i < tal_bytelen(bitmap); i++) { - /* Save top bits for next one */ - u8 v = bitmap[i]; - bitmap[i] = (prev | (v >> bits)); - prev = (v << (8 - bits)); - } - assert(prev == 0); -} - -/* BOLT #11: - * - * `9` (5): `data_length` variable. One or more 5-bit values containing features - * supported or required for receiving this payment. - * See [Feature Bits](#feature-bits). - */ -static const char *decode_9(struct bolt11 *b11, - const struct feature_set *our_features, - struct hash_u5 *hu5, - const u5 **data, size_t *field_len, - bool *have_9) -{ - size_t flen = (*field_len * 5 + 7) / 8; - size_t databits = *field_len * 5; - const char *err; - - assert(!*have_9); - - b11->features = pull_all(b11, hu5, data, field_len, true, &err); - if (!b11->features) - return err; - - /* pull_bits pads with zero bits: we need to remove them. */ - shift_bitmap_down(b11->features, - flen * 8 - databits); - - *have_9 = true; - return NULL; -} - -/* BOLT #11: - * - * `m` (27): `data_length` variable. Additional metadata to attach to - * the payment. Note that the size of this field is limited by the - * maximum hop payload size. Long metadata fields reduce the maximum - * route length. - */ -static const char *decode_m(struct bolt11 *b11, - const struct feature_set *our_features, - struct hash_u5 *hu5, - const u5 **data, size_t *field_len, - bool *have_m) -{ - const char *err; - - assert(!*have_m); - - b11->metadata = pull_all(b11, hu5, data, field_len, false, &err); - if (!b11->metadata) - return err; - - *have_m = true; - return NULL; -} - static struct bolt11 *new_bolt11(const tal_t *ctx, const struct amount_msat *msat TAKES) { struct bolt11 *b11 = tal(ctx, struct bolt11); - list_head_init(&b11->extra_fields); b11->description = NULL; b11->description_hash = NULL; b11->msat = NULL; b11->expiry = DEFAULT_X; - b11->features = tal_arr(b11, u8, 0); - /* BOLT #11: - * - if the `c` field (`min_final_cltv_expiry_delta`) is not provided: - * - MUST use an expiry delta of at least 18 when making the payment - */ - b11->min_final_cltv_expiry = 18; - b11->payment_secret = NULL; - b11->metadata = NULL; if (msat) b11->msat = tal_dup(b11, struct amount_msat, msat); @@ -522,11 +358,6 @@ static const struct decoder decoders[] = { { 'd', false, decode_d }, { 'h', false, decode_h }, { 'x', false, decode_x }, - { 'c', false, decode_c }, - { 'n', false, decode_n }, - { 's', false, decode_s }, - { '9', false, decode_9 }, - { 'm', false, decode_m }, }; static const struct decoder *find_decoder(char c) diff --git a/nostrdb/src/bolt11/bolt11.h b/nostrdb/src/bolt11/bolt11.h index c2cb7f4db..9fb24fd43 100644 --- a/nostrdb/src/bolt11/bolt11.h +++ b/nostrdb/src/bolt11/bolt11.h @@ -8,7 +8,6 @@ #include "ccan/list/list.h" #include "amount.h" #include "node_id.h" -//#include /* We only have 10 bits for the field length, meaning < 640 bytes */ #define BOLT11_FIELD_BYTE_LIMIT ((1 << 10) * 5 / 8) @@ -33,28 +32,12 @@ struct bolt11 { u64 timestamp; struct amount_msat *msat; /* NULL if not specified. */ - struct sha256 payment_hash; - struct node_id receiver_id; - /* description_hash valid if and only if description is NULL. */ const char *description; struct sha256 *description_hash; /* How many seconds to pay from @timestamp above. */ u64 expiry; - - /* How many blocks final hop requires. */ - u32 min_final_cltv_expiry; - - struct secret *payment_secret; - - /* Features bitmap, if any. */ - u8 *features; - - /* Optional metadata to send with payment. */ - u8 *metadata; - - struct list_head extra_fields; }; /* Does not check signature, nor extract node. */ From 963a85f2e05e4513c3fa8ec027eb5a7719b90d4e Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 19 Aug 2024 14:23:22 -0700 Subject: [PATCH 128/146] nostrdb: filter: allow mutable int elements Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 14 +++++++------- nostrdb/src/nostrdb.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 96f4549ae..99442f925 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -649,10 +649,10 @@ ndb_filter_get_string_element(const struct ndb_filter *filter, const struct ndb_ return (const char *)ndb_filter_elements_data(filter, els->elements[index]); } -uint64_t -ndb_filter_get_int_element(const struct ndb_filter_elements *els, int index) +uint64_t * +ndb_filter_get_int_element(struct ndb_filter_elements *els, int index) { - return els->elements[index]; + return &els->elements[index]; } int ndb_filter_init(struct ndb_filter *filter) @@ -4839,7 +4839,7 @@ static int cursor_push_json_elem_array(struct cursor *cur, return 0; break; case NDB_ELEMENT_INT: - val = ndb_filter_get_int_element(elems, i); + val = *ndb_filter_get_int_element(elems, i); if (!cursor_push_int_str(cur, val)) return 0; break; @@ -4910,19 +4910,19 @@ int ndb_filter_json(const struct ndb_filter *filter, char *buf, int buflen) case NDB_FILTER_SINCE: if (!cursor_push_str(c, "\"since\":")) return 0; - if (!cursor_push_int_str(c, ndb_filter_get_int_element(elems, 0))) + if (!cursor_push_int_str(c, *ndb_filter_get_int_element(elems, 0))) return 0; break; case NDB_FILTER_UNTIL: if (!cursor_push_str(c, "\"until\":")) return 0; - if (!cursor_push_int_str(c, ndb_filter_get_int_element(elems, 0))) + if (!cursor_push_int_str(c, *ndb_filter_get_int_element(elems, 0))) return 0; break; case NDB_FILTER_LIMIT: if (!cursor_push_str(c, "\"limit\":")) return 0; - if (!cursor_push_int_str(c, ndb_filter_get_int_element(elems, 0))) + if (!cursor_push_int_str(c, *ndb_filter_get_int_element(elems, 0))) return 0; break; } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 00842f128..825fe3697 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -502,7 +502,7 @@ int ndb_filter_from_json(const char *, int len, struct ndb_filter *filter, unsig // getting field elements unsigned char *ndb_filter_get_id_element(const struct ndb_filter *, const struct ndb_filter_elements *, int index); const char *ndb_filter_get_string_element(const struct ndb_filter *, const struct ndb_filter_elements *, int index); -uint64_t ndb_filter_get_int_element(const struct ndb_filter_elements *, int index); +uint64_t *ndb_filter_get_int_element(struct ndb_filter_elements *, int index); struct ndb_filter_elements *ndb_filter_current_element(const struct ndb_filter *); struct ndb_filter_elements *ndb_filter_get_elements(const struct ndb_filter *, int); From 806a9c7d21803630c2444dba10b1d2e8e8bc556f Mon Sep 17 00:00:00 2001 From: William Casarin Date: Mon, 19 Aug 2024 14:35:04 -0700 Subject: [PATCH 129/146] nostrdb: filter: retain const variant of get_int_elemnet otherwise rust gets bitchy at as Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 16 +++++++++++----- nostrdb/src/nostrdb.h | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 99442f925..3561b7d36 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -650,11 +650,17 @@ ndb_filter_get_string_element(const struct ndb_filter *filter, const struct ndb_ } uint64_t * -ndb_filter_get_int_element(struct ndb_filter_elements *els, int index) +ndb_filter_get_int_element_ptr(struct ndb_filter_elements *els, int index) { return &els->elements[index]; } +uint64_t +ndb_filter_get_int_element(const struct ndb_filter_elements *els, int index) +{ + return els->elements[index]; +} + int ndb_filter_init(struct ndb_filter *filter) { struct cursor cur; @@ -4839,7 +4845,7 @@ static int cursor_push_json_elem_array(struct cursor *cur, return 0; break; case NDB_ELEMENT_INT: - val = *ndb_filter_get_int_element(elems, i); + val = ndb_filter_get_int_element(elems, i); if (!cursor_push_int_str(cur, val)) return 0; break; @@ -4910,19 +4916,19 @@ int ndb_filter_json(const struct ndb_filter *filter, char *buf, int buflen) case NDB_FILTER_SINCE: if (!cursor_push_str(c, "\"since\":")) return 0; - if (!cursor_push_int_str(c, *ndb_filter_get_int_element(elems, 0))) + if (!cursor_push_int_str(c, ndb_filter_get_int_element(elems, 0))) return 0; break; case NDB_FILTER_UNTIL: if (!cursor_push_str(c, "\"until\":")) return 0; - if (!cursor_push_int_str(c, *ndb_filter_get_int_element(elems, 0))) + if (!cursor_push_int_str(c, ndb_filter_get_int_element(elems, 0))) return 0; break; case NDB_FILTER_LIMIT: if (!cursor_push_str(c, "\"limit\":")) return 0; - if (!cursor_push_int_str(c, *ndb_filter_get_int_element(elems, 0))) + if (!cursor_push_int_str(c, ndb_filter_get_int_element(elems, 0))) return 0; break; } diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 825fe3697..4dca10f83 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -502,7 +502,8 @@ int ndb_filter_from_json(const char *, int len, struct ndb_filter *filter, unsig // getting field elements unsigned char *ndb_filter_get_id_element(const struct ndb_filter *, const struct ndb_filter_elements *, int index); const char *ndb_filter_get_string_element(const struct ndb_filter *, const struct ndb_filter_elements *, int index); -uint64_t *ndb_filter_get_int_element(struct ndb_filter_elements *, int index); +uint64_t ndb_filter_get_int_element(const struct ndb_filter_elements *, int index); +uint64_t *ndb_filter_get_int_element_ptr(struct ndb_filter_elements *, int index); struct ndb_filter_elements *ndb_filter_current_element(const struct ndb_filter *); struct ndb_filter_elements *ndb_filter_get_elements(const struct ndb_filter *, int); From 50f07ce2e925390510867f1e1a794f653f5f747d Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 24 Aug 2024 16:44:33 +0930 Subject: [PATCH 130/146] nostrdb: content_parser: fix incorrect comment. Sure, this format would be nice, but it's not what the code does. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/src/content_parser.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index c302a4503..753880b42 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -91,8 +91,8 @@ static int parse_hashtag(struct cursor *cur, struct ndb_block *block) { // // bech32 blocks are stored as: // -// nostr_bech32_type : varint // bech32_buffer_size : u16 +// nostr_bech32_type : varint // bech32_data : [u8] // // The TLV form is compact already, so we just use it directly From f0de1e1eb94c12210c6aa9b2a3c2f9b828c6869a Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 24 Aug 2024 16:44:52 +0930 Subject: [PATCH 131/146] nostrdb: nostrdb: fix ndb_builder_find_str. This will find strings which match the beginning of other strings, which seems wrong. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/src/nostrdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index 3561b7d36..c569be119 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -5071,7 +5071,7 @@ static inline int ndb_builder_find_str(struct ndb_builder *builder, uint32_t index = ((uint32_t*)builder->str_indices.start)[i]; const char *some_str = (const char*)builder->strings.start + index; - if (!memcmp(some_str, str, len)) { + if (!memcmp(some_str, str, len) && some_str[len] == '\0') { // found an existing matching str, use that index *pstr = ndb_offset_str(index); return 1; From 10b4a09c25966075b1321d43fc093e4bd7113fa2 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 28 Aug 2024 15:22:17 +0300 Subject: [PATCH 132/146] nostrdb: content_parser: fix blocks_size we are crossing cursors Signed-off-by: William Casarin --- nostrdb/src/content_parser.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nostrdb/src/content_parser.c b/nostrdb/src/content_parser.c index 753880b42..4875d4174 100644 --- a/nostrdb/src/content_parser.c +++ b/nostrdb/src/content_parser.c @@ -522,7 +522,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, struct ndb_content_parser parser; struct ndb_block block; - unsigned char *start, *pre_mention, *blocks_start; + unsigned char *start, *pre_mention; make_cursor(buf, buf + buf_size, &parser.buffer); @@ -539,7 +539,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, parser.blocks->flags = 0; parser.blocks->version = 1; - blocks_start = start = parser.content.p; + start = parser.content.p; while (parser.content.p < parser.content.end) { cp = peek_char(&parser.content, -1); c = peek_char(&parser.content, 0); @@ -577,7 +577,7 @@ int ndb_parse_content(unsigned char *buf, int buf_size, return 0; } - parser.blocks->blocks_size = parser.buffer.p - blocks_start; + parser.blocks->blocks_size = parser.buffer.p - parser.buffer.start; // // pad to 8-byte alignment From 9d58cb1574388dd3a90a4eeddc11a45feeb105be Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 17 Aug 2024 14:36:21 +0930 Subject: [PATCH 133/146] nostrdb: ccan: copy ccan files into their own subdirectory. This lets them be updated/bugfixed together. I just copied them for now, didn't change anything else. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/ccan/README | 5 + nostrdb/ccan/ccan/alignof/alignof.h | 20 + nostrdb/ccan/ccan/array_size/array_size.h | 26 + nostrdb/ccan/ccan/build_assert/build_assert.h | 40 + nostrdb/ccan/ccan/check_type/check_type.h | 64 ++ nostrdb/ccan/ccan/compiler/compiler.h | 323 ++++++ nostrdb/ccan/ccan/container_of/container_of.h | 145 +++ nostrdb/ccan/ccan/cppmagic/cppmagic.h | 191 ++++ nostrdb/ccan/ccan/crypto/sha256/sha256.c | 302 ++++++ nostrdb/ccan/ccan/crypto/sha256/sha256.h | 155 +++ nostrdb/ccan/ccan/endian/endian.h | 365 +++++++ nostrdb/ccan/ccan/likely/likely.h | 115 +++ nostrdb/ccan/ccan/list/list.c | 43 + nostrdb/ccan/ccan/list/list.h | 842 +++++++++++++++ nostrdb/ccan/ccan/mem/mem.c | 128 +++ nostrdb/ccan/ccan/mem/mem.h | 295 ++++++ nostrdb/ccan/ccan/short_types/short_types.h | 35 + nostrdb/ccan/ccan/str/str.h | 228 ++++ nostrdb/ccan/ccan/structeq/structeq.h | 46 + nostrdb/ccan/ccan/take/take.c | 126 +++ nostrdb/ccan/ccan/take/take.h | 136 +++ nostrdb/ccan/ccan/tal/str/str.c | 315 ++++++ nostrdb/ccan/ccan/tal/str/str.h | 225 ++++ nostrdb/ccan/ccan/tal/tal.c | 972 ++++++++++++++++++ nostrdb/ccan/ccan/tal/tal.h | 553 ++++++++++ nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h | 134 +++ nostrdb/ccan/ccan/utf8/utf8.c | 199 ++++ nostrdb/ccan/ccan/utf8/utf8.h | 57 + 28 files changed, 6085 insertions(+) create mode 100644 nostrdb/ccan/README create mode 100644 nostrdb/ccan/ccan/alignof/alignof.h create mode 100644 nostrdb/ccan/ccan/array_size/array_size.h create mode 100644 nostrdb/ccan/ccan/build_assert/build_assert.h create mode 100644 nostrdb/ccan/ccan/check_type/check_type.h create mode 100644 nostrdb/ccan/ccan/compiler/compiler.h create mode 100644 nostrdb/ccan/ccan/container_of/container_of.h create mode 100644 nostrdb/ccan/ccan/cppmagic/cppmagic.h create mode 100644 nostrdb/ccan/ccan/crypto/sha256/sha256.c create mode 100644 nostrdb/ccan/ccan/crypto/sha256/sha256.h create mode 100644 nostrdb/ccan/ccan/endian/endian.h create mode 100644 nostrdb/ccan/ccan/likely/likely.h create mode 100644 nostrdb/ccan/ccan/list/list.c create mode 100644 nostrdb/ccan/ccan/list/list.h create mode 100644 nostrdb/ccan/ccan/mem/mem.c create mode 100644 nostrdb/ccan/ccan/mem/mem.h create mode 100644 nostrdb/ccan/ccan/short_types/short_types.h create mode 100644 nostrdb/ccan/ccan/str/str.h create mode 100644 nostrdb/ccan/ccan/structeq/structeq.h create mode 100644 nostrdb/ccan/ccan/take/take.c create mode 100644 nostrdb/ccan/ccan/take/take.h create mode 100644 nostrdb/ccan/ccan/tal/str/str.c create mode 100644 nostrdb/ccan/ccan/tal/str/str.h create mode 100644 nostrdb/ccan/ccan/tal/tal.c create mode 100644 nostrdb/ccan/ccan/tal/tal.h create mode 100644 nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h create mode 100644 nostrdb/ccan/ccan/utf8/utf8.c create mode 100644 nostrdb/ccan/ccan/utf8/utf8.h diff --git a/nostrdb/ccan/README b/nostrdb/ccan/README new file mode 100644 index 000000000..edf83a03b --- /dev/null +++ b/nostrdb/ccan/README @@ -0,0 +1,5 @@ +CCAN imported from https://github.com/rustyrussell/ccan + +Use "make update-ccan" at top level to refresh from ../ccan. + +CCAN version: unknown diff --git a/nostrdb/ccan/ccan/alignof/alignof.h b/nostrdb/ccan/ccan/alignof/alignof.h new file mode 100644 index 000000000..7cf7b5ccb --- /dev/null +++ b/nostrdb/ccan/ccan/alignof/alignof.h @@ -0,0 +1,20 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_ALIGNOF_H +#define CCAN_ALIGNOF_H +#include "../config.h" + +/** + * ALIGNOF - get the alignment of a type + * @t: the type to test + * + * This returns a safe alignment for the given type. + */ +#if HAVE_ALIGNOF +/* A GCC extension. */ +#define ALIGNOF(t) __alignof__(t) +#else +/* Alignment by measuring structure padding. */ +#define ALIGNOF(t) ((char *)(&((struct { char c; t _h; } *)0)->_h) - (char *)0) +#endif + +#endif /* CCAN_ALIGNOF_H */ diff --git a/nostrdb/ccan/ccan/array_size/array_size.h b/nostrdb/ccan/ccan/array_size/array_size.h new file mode 100644 index 000000000..3f9494e8b --- /dev/null +++ b/nostrdb/ccan/ccan/array_size/array_size.h @@ -0,0 +1,26 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_ARRAY_SIZE_H +#define CCAN_ARRAY_SIZE_H +#include "../config.h" +#include "build_assert.h" + +/** + * ARRAY_SIZE - get the number of elements in a visible array + * @arr: the array whose size you want. + * + * This does not work on pointers, or arrays declared as [], or + * function parameters. With correct compiler support, such usage + * will cause a build error (see build_assert). + */ +#define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + _array_size_chk(arr)) + +#if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF +/* Two gcc extensions. + * &a[0] degrades to a pointer: a different type from an array */ +#define _array_size_chk(arr) \ + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(arr), \ + typeof(&(arr)[0]))) +#else +#define _array_size_chk(arr) 0 +#endif +#endif /* CCAN_ALIGNOF_H */ diff --git a/nostrdb/ccan/ccan/build_assert/build_assert.h b/nostrdb/ccan/ccan/build_assert/build_assert.h new file mode 100644 index 000000000..6df9dae7e --- /dev/null +++ b/nostrdb/ccan/ccan/build_assert/build_assert.h @@ -0,0 +1,40 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_BUILD_ASSERT_H +#define CCAN_BUILD_ASSERT_H + +/** + * BUILD_ASSERT - assert a build-time dependency. + * @cond: the compile-time condition which must be true. + * + * Your compile will fail if the condition isn't true, or can't be evaluated + * by the compiler. This can only be used within a function. + * + * Example: + * #include + * ... + * static char *foo_to_char(struct foo *foo) + * { + * // This code needs string to be at start of foo. + * BUILD_ASSERT(offsetof(struct foo, string) == 0); + * return (char *)foo; + * } + */ +#define BUILD_ASSERT(cond) \ + do { (void) sizeof(char [1 - 2*!(cond)]); } while(0) + +/** + * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression. + * @cond: the compile-time condition which must be true. + * + * Your compile will fail if the condition isn't true, or can't be evaluated + * by the compiler. This can be used in an expression: its value is "0". + * + * Example: + * #define foo_to_char(foo) \ + * ((char *)(foo) \ + * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0)) + */ +#define BUILD_ASSERT_OR_ZERO(cond) \ + (sizeof(char [1 - 2*!(cond)]) - 1) + +#endif /* CCAN_BUILD_ASSERT_H */ diff --git a/nostrdb/ccan/ccan/check_type/check_type.h b/nostrdb/ccan/ccan/check_type/check_type.h new file mode 100644 index 000000000..0492b56bc --- /dev/null +++ b/nostrdb/ccan/ccan/check_type/check_type.h @@ -0,0 +1,64 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_CHECK_TYPE_H +#define CCAN_CHECK_TYPE_H +#include "../config.h" + +/** + * check_type - issue a warning or build failure if type is not correct. + * @expr: the expression whose type we should check (not evaluated). + * @type: the exact type we expect the expression to be. + * + * This macro is usually used within other macros to try to ensure that a macro + * argument is of the expected type. No type promotion of the expression is + * done: an unsigned int is not the same as an int! + * + * check_type() always evaluates to 0. + * + * If your compiler does not support typeof, then the best we can do is fail + * to compile if the sizes of the types are unequal (a less complete check). + * + * Example: + * // They should always pass a 64-bit value to _set_some_value! + * #define set_some_value(expr) \ + * _set_some_value((check_type((expr), uint64_t), (expr))) + */ + +/** + * check_types_match - issue a warning or build failure if types are not same. + * @expr1: the first expression (not evaluated). + * @expr2: the second expression (not evaluated). + * + * This macro is usually used within other macros to try to ensure that + * arguments are of identical types. No type promotion of the expressions is + * done: an unsigned int is not the same as an int! + * + * check_types_match() always evaluates to 0. + * + * If your compiler does not support typeof, then the best we can do is fail + * to compile if the sizes of the types are unequal (a less complete check). + * + * Example: + * // Do subtraction to get to enclosing type, but make sure that + * // pointer is of correct type for that member. + * #define container_of(mbr_ptr, encl_type, mbr) \ + * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \ + * ((encl_type *) \ + * ((char *)(mbr_ptr) - offsetof(encl_type, mbr)))) + */ +#if HAVE_TYPEOF +#define check_type(expr, type) \ + ((typeof(expr) *)0 != (type *)0) + +#define check_types_match(expr1, expr2) \ + ((typeof(expr1) *)0 != (typeof(expr2) *)0) +#else +#include +/* Without typeof, we can only test the sizes. */ +#define check_type(expr, type) \ + BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type)) + +#define check_types_match(expr1, expr2) \ + BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2)) +#endif /* HAVE_TYPEOF */ + +#endif /* CCAN_CHECK_TYPE_H */ diff --git a/nostrdb/ccan/ccan/compiler/compiler.h b/nostrdb/ccan/ccan/compiler/compiler.h new file mode 100644 index 000000000..36d141e40 --- /dev/null +++ b/nostrdb/ccan/ccan/compiler/compiler.h @@ -0,0 +1,323 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_COMPILER_H +#define CCAN_COMPILER_H +#include "config.h" + +#if HAVE_UNALIGNED_ACCESS +#define alignment_ok(p, n) 1 +#else +#define alignment_ok(p, n) ((size_t)(p) % (n) == 0) +#endif + +#ifndef COLD +#if HAVE_ATTRIBUTE_COLD +/** + * COLD - a function is unlikely to be called. + * + * Used to mark an unlikely code path and optimize appropriately. + * It is usually used on logging or error routines. + * + * Example: + * static void COLD moan(const char *reason) + * { + * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); + * } + */ +#define COLD __attribute__((__cold__)) +#else +#define COLD +#endif +#endif + +#ifndef NORETURN +#if HAVE_ATTRIBUTE_NORETURN +/** + * NORETURN - a function does not return + * + * Used to mark a function which exits; useful for suppressing warnings. + * + * Example: + * static void NORETURN fail(const char *reason) + * { + * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); + * exit(1); + * } + */ +#define NORETURN __attribute__((__noreturn__)) +#else +#define NORETURN +#endif +#endif + +#ifndef PRINTF_FMT +#if HAVE_ATTRIBUTE_PRINTF +/** + * PRINTF_FMT - a function takes printf-style arguments + * @nfmt: the 1-based number of the function's format argument. + * @narg: the 1-based number of the function's first variable argument. + * + * This allows the compiler to check your parameters as it does for printf(). + * + * Example: + * void PRINTF_FMT(2,3) my_printf(const char *prefix, const char *fmt, ...); + */ +#define PRINTF_FMT(nfmt, narg) \ + __attribute__((format(__printf__, nfmt, narg))) +#else +#define PRINTF_FMT(nfmt, narg) +#endif +#endif + +#ifndef CONST_FUNCTION +#if HAVE_ATTRIBUTE_CONST +/** + * CONST_FUNCTION - a function's return depends only on its argument + * + * This allows the compiler to assume that the function will return the exact + * same value for the exact same arguments. This implies that the function + * must not use global variables, or dereference pointer arguments. + */ +#define CONST_FUNCTION __attribute__((__const__)) +#else +#define CONST_FUNCTION +#endif + +#ifndef PURE_FUNCTION +#if HAVE_ATTRIBUTE_PURE +/** + * PURE_FUNCTION - a function is pure + * + * A pure function is one that has no side effects other than it's return value + * and uses no inputs other than it's arguments and global variables. + */ +#define PURE_FUNCTION __attribute__((__pure__)) +#else +#define PURE_FUNCTION +#endif +#endif +#endif + +#if HAVE_ATTRIBUTE_UNUSED +#ifndef UNNEEDED +/** + * UNNEEDED - a variable/function may not be needed + * + * This suppresses warnings about unused variables or functions, but tells + * the compiler that if it is unused it need not emit it into the source code. + * + * Example: + * // With some preprocessor options, this is unnecessary. + * static UNNEEDED int counter; + * + * // With some preprocessor options, this is unnecessary. + * static UNNEEDED void add_to_counter(int add) + * { + * counter += add; + * } + */ +#define UNNEEDED __attribute__((__unused__)) +#endif + +#ifndef NEEDED +#if HAVE_ATTRIBUTE_USED +/** + * NEEDED - a variable/function is needed + * + * This suppresses warnings about unused variables or functions, but tells + * the compiler that it must exist even if it (seems) unused. + * + * Example: + * // Even if this is unused, these are vital for debugging. + * static NEEDED int counter; + * static NEEDED void dump_counter(void) + * { + * printf("Counter is %i\n", counter); + * } + */ +#define NEEDED __attribute__((__used__)) +#else +/* Before used, unused functions and vars were always emitted. */ +#define NEEDED __attribute__((__unused__)) +#endif +#endif + +#ifndef UNUSED +/** + * UNUSED - a parameter is unused + * + * Some compilers (eg. gcc with -W or -Wunused) warn about unused + * function parameters. This suppresses such warnings and indicates + * to the reader that it's deliberate. + * + * Example: + * // This is used as a callback, so needs to have this prototype. + * static int some_callback(void *unused UNUSED) + * { + * return 0; + * } + */ +#define UNUSED __attribute__((__unused__)) +#endif +#else +#ifndef UNNEEDED +#define UNNEEDED +#endif +#ifndef NEEDED +#define NEEDED +#endif +#ifndef UNUSED +#define UNUSED +#endif +#endif + +#ifndef IS_COMPILE_CONSTANT +#if HAVE_BUILTIN_CONSTANT_P +/** + * IS_COMPILE_CONSTANT - does the compiler know the value of this expression? + * @expr: the expression to evaluate + * + * When an expression manipulation is complicated, it is usually better to + * implement it in a function. However, if the expression being manipulated is + * known at compile time, it is better to have the compiler see the entire + * expression so it can simply substitute the result. + * + * This can be done using the IS_COMPILE_CONSTANT() macro. + * + * Example: + * enum greek { ALPHA, BETA, GAMMA, DELTA, EPSILON }; + * + * // Out-of-line version. + * const char *greek_name(enum greek greek); + * + * // Inline version. + * static inline const char *_greek_name(enum greek greek) + * { + * switch (greek) { + * case ALPHA: return "alpha"; + * case BETA: return "beta"; + * case GAMMA: return "gamma"; + * case DELTA: return "delta"; + * case EPSILON: return "epsilon"; + * default: return "**INVALID**"; + * } + * } + * + * // Use inline if compiler knows answer. Otherwise call function + * // to avoid copies of the same code everywhere. + * #define greek_name(g) \ + * (IS_COMPILE_CONSTANT(greek) ? _greek_name(g) : greek_name(g)) + */ +#define IS_COMPILE_CONSTANT(expr) __builtin_constant_p(expr) +#else +/* If we don't know, assume it's not. */ +#define IS_COMPILE_CONSTANT(expr) 0 +#endif +#endif + +#ifndef WARN_UNUSED_RESULT +#if HAVE_WARN_UNUSED_RESULT +/** + * WARN_UNUSED_RESULT - warn if a function return value is unused. + * + * Used to mark a function where it is extremely unlikely that the caller + * can ignore the result, eg realloc(). + * + * Example: + * // buf param may be freed by this; need return value! + * static char *WARN_UNUSED_RESULT enlarge(char *buf, unsigned *size) + * { + * return realloc(buf, (*size) *= 2); + * } + */ +#define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) +#else +#define WARN_UNUSED_RESULT +#endif +#endif + + +#if HAVE_ATTRIBUTE_DEPRECATED +/** + * WARN_DEPRECATED - warn that a function/type/variable is deprecated when used. + * + * Used to mark a function, type or variable should not be used. + * + * Example: + * WARN_DEPRECATED char *oldfunc(char *buf); + */ +#define WARN_DEPRECATED __attribute__((__deprecated__)) +#else +#define WARN_DEPRECATED +#endif + + +#if HAVE_ATTRIBUTE_NONNULL +/** + * NO_NULL_ARGS - specify that no arguments to this function can be NULL. + * + * The compiler will warn if any pointer args are NULL. + * + * Example: + * NO_NULL_ARGS char *my_copy(char *buf); + */ +#define NO_NULL_ARGS __attribute__((__nonnull__)) + +/** + * NON_NULL_ARGS - specify that some arguments to this function can't be NULL. + * @...: 1-based argument numbers for which args can't be NULL. + * + * The compiler will warn if any of the specified pointer args are NULL. + * + * Example: + * char *my_copy2(char *buf, char *maybenull) NON_NULL_ARGS(1); + */ +#define NON_NULL_ARGS(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else +#define NO_NULL_ARGS +#define NON_NULL_ARGS(...) +#endif + +#if HAVE_ATTRIBUTE_RETURNS_NONNULL +/** + * RETURNS_NONNULL - specify that this function cannot return NULL. + * + * Mainly an optimization opportunity, but can also suppress warnings. + * + * Example: + * RETURNS_NONNULL char *my_copy(char *buf); + */ +#define RETURNS_NONNULL __attribute__((__returns_nonnull__)) +#else +#define RETURNS_NONNULL +#endif + +#if HAVE_ATTRIBUTE_SENTINEL +/** + * LAST_ARG_NULL - specify the last argument of a variadic function must be NULL. + * + * The compiler will warn if the last argument isn't NULL. + * + * Example: + * char *join_string(char *buf, ...) LAST_ARG_NULL; + */ +#define LAST_ARG_NULL __attribute__((__sentinel__)) +#else +#define LAST_ARG_NULL +#endif + +#if HAVE_BUILTIN_CPU_SUPPORTS +/** + * cpu_supports - test if current CPU supports the named feature. + * + * This takes a literal string, and currently only works on glibc platforms. + * + * Example: + * if (cpu_supports("mmx")) + * printf("MMX support engaged!\n"); + */ +#define cpu_supports(x) __builtin_cpu_supports(x) +#else +#define cpu_supports(x) 0 +#endif /* HAVE_BUILTIN_CPU_SUPPORTS */ + +#endif /* CCAN_COMPILER_H */ diff --git a/nostrdb/ccan/ccan/container_of/container_of.h b/nostrdb/ccan/ccan/container_of/container_of.h new file mode 100644 index 000000000..b27d7f3da --- /dev/null +++ b/nostrdb/ccan/ccan/container_of/container_of.h @@ -0,0 +1,145 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_CONTAINER_OF_H +#define CCAN_CONTAINER_OF_H +#include + +#include "../config.h" +#include "check_type.h" + +/** + * container_of - get pointer to enclosing structure + * @member_ptr: pointer to the structure member + * @containing_type: the type this member is within + * @member: the name of this member within the structure. + * + * Given a pointer to a member of a structure, this macro does pointer + * subtraction to return the pointer to the enclosing type. + * + * Example: + * struct foo { + * int fielda, fieldb; + * // ... + * }; + * struct info { + * int some_other_field; + * struct foo my_foo; + * }; + * + * static struct info *foo_to_info(struct foo *foo) + * { + * return container_of(foo, struct info, my_foo); + * } + */ +#define container_of(member_ptr, containing_type, member) \ + ((containing_type *) \ + ((char *)(member_ptr) \ + - container_off(containing_type, member)) \ + + check_types_match(*(member_ptr), ((containing_type *)0)->member)) + + +/** + * container_of_or_null - get pointer to enclosing structure, or NULL + * @member_ptr: pointer to the structure member + * @containing_type: the type this member is within + * @member: the name of this member within the structure. + * + * Given a pointer to a member of a structure, this macro does pointer + * subtraction to return the pointer to the enclosing type, unless it + * is given NULL, in which case it also returns NULL. + * + * Example: + * struct foo { + * int fielda, fieldb; + * // ... + * }; + * struct info { + * int some_other_field; + * struct foo my_foo; + * }; + * + * static struct info *foo_to_info_allowing_null(struct foo *foo) + * { + * return container_of_or_null(foo, struct info, my_foo); + * } + */ +static inline char *container_of_or_null_(void *member_ptr, size_t offset) +{ + return member_ptr ? (char *)member_ptr - offset : NULL; +} +#define container_of_or_null(member_ptr, containing_type, member) \ + ((containing_type *) \ + container_of_or_null_(member_ptr, \ + container_off(containing_type, member)) \ + + check_types_match(*(member_ptr), ((containing_type *)0)->member)) + +/** + * container_off - get offset to enclosing structure + * @containing_type: the type this member is within + * @member: the name of this member within the structure. + * + * Given a pointer to a member of a structure, this macro does + * typechecking and figures out the offset to the enclosing type. + * + * Example: + * struct foo { + * int fielda, fieldb; + * // ... + * }; + * struct info { + * int some_other_field; + * struct foo my_foo; + * }; + * + * static struct info *foo_to_info(struct foo *foo) + * { + * size_t off = container_off(struct info, my_foo); + * return (void *)((char *)foo - off); + * } + */ +#define container_off(containing_type, member) \ + offsetof(containing_type, member) + +/** + * container_of_var - get pointer to enclosing structure using a variable + * @member_ptr: pointer to the structure member + * @container_var: a pointer of same type as this member's container + * @member: the name of this member within the structure. + * + * Given a pointer to a member of a structure, this macro does pointer + * subtraction to return the pointer to the enclosing type. + * + * Example: + * static struct info *foo_to_i(struct foo *foo) + * { + * struct info *i = container_of_var(foo, i, my_foo); + * return i; + * } + */ +#if HAVE_TYPEOF +#define container_of_var(member_ptr, container_var, member) \ + container_of(member_ptr, typeof(*container_var), member) +#else +#define container_of_var(member_ptr, container_var, member) \ + ((void *)((char *)(member_ptr) - \ + container_off_var(container_var, member))) +#endif + +/** + * container_off_var - get offset of a field in enclosing structure + * @container_var: a pointer to a container structure + * @member: the name of a member within the structure. + * + * Given (any) pointer to a structure and a its member name, this + * macro does pointer subtraction to return offset of member in a + * structure memory layout. + * + */ +#if HAVE_TYPEOF +#define container_off_var(var, member) \ + container_off(typeof(*var), member) +#else +#define container_off_var(var, member) \ + ((const char *)&(var)->member - (const char *)(var)) +#endif + +#endif /* CCAN_CONTAINER_OF_H */ diff --git a/nostrdb/ccan/ccan/cppmagic/cppmagic.h b/nostrdb/ccan/ccan/cppmagic/cppmagic.h new file mode 100644 index 000000000..fa8d70e24 --- /dev/null +++ b/nostrdb/ccan/ccan/cppmagic/cppmagic.h @@ -0,0 +1,191 @@ +/* MIT (BSD) license - see LICENSE file for details */ +#ifndef CCAN_CPPMAGIC_H +#define CCAN_CPPMAGIC_H + +/** + * CPPMAGIC_NOTHING - expands to nothing + */ +#define CPPMAGIC_NOTHING() + +/** + * CPPMAGIC_STRINGIFY - convert arguments to a string literal + */ +#define _CPPMAGIC_STRINGIFY(...) #__VA_ARGS__ +#define CPPMAGIC_STRINGIFY(...) _CPPMAGIC_STRINGIFY(__VA_ARGS__) + +/** + * CPPMAGIC_GLUE2 - glue arguments together + * + * CPPMAGIC_GLUE2(@a_, @b_) + * expands to the expansion of @a_ followed immediately + * (combining tokens) by the expansion of @b_ + */ +#define _CPPMAGIC_GLUE2(a_, b_) a_##b_ +#define CPPMAGIC_GLUE2(a_, b_) _CPPMAGIC_GLUE2(a_, b_) + +/** + * CPPMAGIC_1ST - return 1st argument + * + * CPPMAGIC_1ST(@a_, ...) + * expands to the expansion of @a_ + */ +#define CPPMAGIC_1ST(a_, ...) a_ + +/** + * CPPMAGIC_2ND - return 2nd argument + * + * CPPMAGIC_2ST(@a_, @b_, ...) + * expands to the expansion of @b_ + */ +#define CPPMAGIC_2ND(a_, b_, ...) b_ + +/** + * CPPMAGIC_ISZERO - is argument '0' + * + * CPPMAGIC_ISZERO(@a) + * expands to '1' if @a is '0', otherwise expands to '0'. + */ +#define _CPPMAGIC_ISPROBE(...) CPPMAGIC_2ND(__VA_ARGS__, 0) +#define _CPPMAGIC_PROBE() $, 1 +#define _CPPMAGIC_ISZERO_0 _CPPMAGIC_PROBE() +#define CPPMAGIC_ISZERO(a_) \ + _CPPMAGIC_ISPROBE(CPPMAGIC_GLUE2(_CPPMAGIC_ISZERO_, a_)) + +/** + * CPPMAGIC_NONZERO - is argument not '0' + * + * CPPMAGIC_NONZERO(@a) + * expands to '0' if @a is '0', otherwise expands to '1'. + */ +#define CPPMAGIC_NONZERO(a_) CPPMAGIC_ISZERO(CPPMAGIC_ISZERO(a_)) + +/** + * CPPMAGIC_NONEMPTY - does the macro have any arguments? + * + * CPPMAGIC_NONEMPTY() + * expands to '0' + * CPPMAGIC_NONEMPTY(@a) + * CPPMAGIC_NONEMPTY(@a, ...) + * expand to '1' + */ +#define _CPPMAGIC_EOA() 0 +#define CPPMAGIC_NONEMPTY(...) \ + CPPMAGIC_NONZERO(CPPMAGIC_1ST(_CPPMAGIC_EOA __VA_ARGS__)()) + +/** + * CPPMAGIC_ISEMPTY - does the macro have no arguments? + * + * CPPMAGIC_ISEMPTY() + * expands to '1' + * CPPMAGIC_ISEMPTY(@a) + * CPPMAGIC_ISEMPTY(@a, ...) + * expand to '0' + */ +#define CPPMAGIC_ISEMPTY(...) \ + CPPMAGIC_ISZERO(CPPMAGIC_NONEMPTY(__VA_ARGS__)) + +/* + * CPPMAGIC_IFELSE - preprocessor conditional + * + * CPPMAGIC_IFELSE(@cond)(@if)(@else) + * expands to @else if @cond is '0', otherwise expands to @if + */ +#define _CPPMAGIC_IF_0(...) _CPPMAGIC_IF_0_ELSE +#define _CPPMAGIC_IF_1(...) __VA_ARGS__ _CPPMAGIC_IF_1_ELSE +#define _CPPMAGIC_IF_0_ELSE(...) __VA_ARGS__ +#define _CPPMAGIC_IF_1_ELSE(...) +#define _CPPMAGIC_IFELSE(cond_) CPPMAGIC_GLUE2(_CPPMAGIC_IF_, cond_) +#define CPPMAGIC_IFELSE(cond_) \ + _CPPMAGIC_IFELSE(CPPMAGIC_NONZERO(cond_)) + +/** + * CPPMAGIC_EVAL - force multiple expansion passes + * + * Forces macros in the arguments to be expanded repeatedly (up to + * 1024 times) even when CPP would usually stop expanding. + */ +#define CPPMAGIC_EVAL1(...) __VA_ARGS__ +#define CPPMAGIC_EVAL2(...) \ + CPPMAGIC_EVAL1(CPPMAGIC_EVAL1(__VA_ARGS__)) +#define CPPMAGIC_EVAL4(...) \ + CPPMAGIC_EVAL2(CPPMAGIC_EVAL2(__VA_ARGS__)) +#define CPPMAGIC_EVAL8(...) \ + CPPMAGIC_EVAL4(CPPMAGIC_EVAL4(__VA_ARGS__)) +#define CPPMAGIC_EVAL16(...) \ + CPPMAGIC_EVAL8(CPPMAGIC_EVAL8(__VA_ARGS__)) +#define CPPMAGIC_EVAL32(...) \ + CPPMAGIC_EVAL16(CPPMAGIC_EVAL16(__VA_ARGS__)) +#define CPPMAGIC_EVAL64(...) \ + CPPMAGIC_EVAL32(CPPMAGIC_EVAL32(__VA_ARGS__)) +#define CPPMAGIC_EVAL128(...) \ + CPPMAGIC_EVAL64(CPPMAGIC_EVAL64(__VA_ARGS__)) +#define CPPMAGIC_EVAL256(...) \ + CPPMAGIC_EVAL128(CPPMAGIC_EVAL128(__VA_ARGS__)) +#define CPPMAGIC_EVAL512(...) \ + CPPMAGIC_EVAL256(CPPMAGIC_EVAL256(__VA_ARGS__)) +#define CPPMAGIC_EVAL1024(...) \ + CPPMAGIC_EVAL512(CPPMAGIC_EVAL512(__VA_ARGS__)) +#define CPPMAGIC_EVAL(...) CPPMAGIC_EVAL1024(__VA_ARGS__) + +/** + * CPPMAGIC_DEFER1, CPPMAGIC_DEFER2 - defer expansion + */ +#define CPPMAGIC_DEFER1(a_) a_ CPPMAGIC_NOTHING() +#define CPPMAGIC_DEFER2(a_) a_ CPPMAGIC_NOTHING CPPMAGIC_NOTHING()() + +/** + * CPPMAGIC_MAP - iterate another macro across arguments + * @m: name of a one argument macro + * + * CPPMAGIC_MAP(@m, @a1, @a2, ... @an) + * expands to the expansion of @m(@a1) , @m(@a2) , ... , @m(@an) + */ +#define _CPPMAGIC_MAP_() _CPPMAGIC_MAP +#define _CPPMAGIC_MAP(m_, a_, ...) \ + m_(a_) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (, CPPMAGIC_DEFER2(_CPPMAGIC_MAP_)()(m_, __VA_ARGS__)) \ + () +#define CPPMAGIC_MAP(m_, ...) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (CPPMAGIC_EVAL(_CPPMAGIC_MAP(m_, __VA_ARGS__))) \ + () + +/** + * CPPMAGIC_2MAP - iterate another macro across pairs of arguments + * @m: name of a two argument macro + * + * CPPMAGIC_2MAP(@m, @a1, @b1, @a2, @b2, ..., @an, @bn) + * expands to the expansion of + * @m(@a1, @b1) , @m(@a2, @b2) , ... , @m(@an, @bn) + */ +#define _CPPMAGIC_2MAP_() _CPPMAGIC_2MAP +#define _CPPMAGIC_2MAP(m_, a_, b_, ...) \ + m_(a_, b_) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (, CPPMAGIC_DEFER2(_CPPMAGIC_2MAP_)()(m_, __VA_ARGS__)) \ + () +#define CPPMAGIC_2MAP(m_, ...) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (CPPMAGIC_EVAL(_CPPMAGIC_2MAP(m_, __VA_ARGS__))) \ + () + +/** + * CPPMAGIC_JOIN - separate arguments with given delimiter + * @d: delimiter + * + * CPPMAGIC_JOIN(@d, @a1, @a2, ..., @an) + * expands to the expansion of @a1 @d @a2 @d ... @d @an + */ +#define _CPPMAGIC_JOIN_() _CPPMAGIC_JOIN +#define _CPPMAGIC_JOIN(d_, a_, ...) \ + a_ \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (d_ CPPMAGIC_DEFER2(_CPPMAGIC_JOIN_)()(d_, __VA_ARGS__)) \ + () +#define CPPMAGIC_JOIN(d_, ...) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (CPPMAGIC_EVAL(_CPPMAGIC_JOIN(d_, __VA_ARGS__))) \ + () + +#endif /* CCAN_CPPMAGIC_H */ diff --git a/nostrdb/ccan/ccan/crypto/sha256/sha256.c b/nostrdb/ccan/ccan/crypto/sha256/sha256.c new file mode 100644 index 000000000..b869dea78 --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/sha256.c @@ -0,0 +1,302 @@ +/* MIT (BSD) license - see LICENSE file for details */ +/* SHA256 core code translated from the Bitcoin project's C++: + * + * src/crypto/sha256.cpp commit 417532c8acb93c36c2b6fd052b7c11b6a2906aa2 + * Copyright (c) 2014 The Bitcoin Core developers + * Distributed under the MIT software license, see the accompanying + * file COPYING or http://www.opensource.org/licenses/mit-license.php. + */ +#include "sha256.h" +#include "endian.h" +#include "compiler.h" +#include +#include +#include + +static void invalidate_sha256(struct sha256_ctx *ctx) +{ +#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL + ctx->c.md_len = 0; +#else + ctx->bytes = (size_t)-1; +#endif +} + +static void check_sha256(struct sha256_ctx *ctx) +{ +#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL + assert(ctx->c.md_len != 0); +#else + assert(ctx->bytes != (size_t)-1); +#endif +} + +#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL +void sha256_init(struct sha256_ctx *ctx) +{ + SHA256_Init(&ctx->c); +} + +void sha256_update(struct sha256_ctx *ctx, const void *p, size_t size) +{ + check_sha256(ctx); + SHA256_Update(&ctx->c, p, size); +} + +void sha256_done(struct sha256_ctx *ctx, struct sha256 *res) +{ + SHA256_Final(res->u.u8, &ctx->c); + invalidate_sha256(ctx); +} +#else +static uint32_t Ch(uint32_t x, uint32_t y, uint32_t z) +{ + return z ^ (x & (y ^ z)); +} +static uint32_t Maj(uint32_t x, uint32_t y, uint32_t z) +{ + return (x & y) | (z & (x | y)); +} +static uint32_t Sigma0(uint32_t x) +{ + return (x >> 2 | x << 30) ^ (x >> 13 | x << 19) ^ (x >> 22 | x << 10); +} +static uint32_t Sigma1(uint32_t x) +{ + return (x >> 6 | x << 26) ^ (x >> 11 | x << 21) ^ (x >> 25 | x << 7); +} +static uint32_t sigma0(uint32_t x) +{ + return (x >> 7 | x << 25) ^ (x >> 18 | x << 14) ^ (x >> 3); +} +static uint32_t sigma1(uint32_t x) +{ + return (x >> 17 | x << 15) ^ (x >> 19 | x << 13) ^ (x >> 10); +} + +/** One round of SHA-256. */ +static void Round(uint32_t a, uint32_t b, uint32_t c, uint32_t *d, uint32_t e, uint32_t f, uint32_t g, uint32_t *h, uint32_t k, uint32_t w) +{ + uint32_t t1 = *h + Sigma1(e) + Ch(e, f, g) + k + w; + uint32_t t2 = Sigma0(a) + Maj(a, b, c); + *d += t1; + *h = t1 + t2; +} + +/** Perform one SHA-256 transformation, processing a 64-byte chunk. */ +static void Transform(uint32_t *s, const uint32_t *chunk) +{ + uint32_t a = s[0], b = s[1], c = s[2], d = s[3], e = s[4], f = s[5], g = s[6], h = s[7]; + uint32_t w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15; + + Round(a, b, c, &d, e, f, g, &h, 0x428a2f98, w0 = be32_to_cpu(chunk[0])); + Round(h, a, b, &c, d, e, f, &g, 0x71374491, w1 = be32_to_cpu(chunk[1])); + Round(g, h, a, &b, c, d, e, &f, 0xb5c0fbcf, w2 = be32_to_cpu(chunk[2])); + Round(f, g, h, &a, b, c, d, &e, 0xe9b5dba5, w3 = be32_to_cpu(chunk[3])); + Round(e, f, g, &h, a, b, c, &d, 0x3956c25b, w4 = be32_to_cpu(chunk[4])); + Round(d, e, f, &g, h, a, b, &c, 0x59f111f1, w5 = be32_to_cpu(chunk[5])); + Round(c, d, e, &f, g, h, a, &b, 0x923f82a4, w6 = be32_to_cpu(chunk[6])); + Round(b, c, d, &e, f, g, h, &a, 0xab1c5ed5, w7 = be32_to_cpu(chunk[7])); + Round(a, b, c, &d, e, f, g, &h, 0xd807aa98, w8 = be32_to_cpu(chunk[8])); + Round(h, a, b, &c, d, e, f, &g, 0x12835b01, w9 = be32_to_cpu(chunk[9])); + Round(g, h, a, &b, c, d, e, &f, 0x243185be, w10 = be32_to_cpu(chunk[10])); + Round(f, g, h, &a, b, c, d, &e, 0x550c7dc3, w11 = be32_to_cpu(chunk[11])); + Round(e, f, g, &h, a, b, c, &d, 0x72be5d74, w12 = be32_to_cpu(chunk[12])); + Round(d, e, f, &g, h, a, b, &c, 0x80deb1fe, w13 = be32_to_cpu(chunk[13])); + Round(c, d, e, &f, g, h, a, &b, 0x9bdc06a7, w14 = be32_to_cpu(chunk[14])); + Round(b, c, d, &e, f, g, h, &a, 0xc19bf174, w15 = be32_to_cpu(chunk[15])); + + Round(a, b, c, &d, e, f, g, &h, 0xe49b69c1, w0 += sigma1(w14) + w9 + sigma0(w1)); + Round(h, a, b, &c, d, e, f, &g, 0xefbe4786, w1 += sigma1(w15) + w10 + sigma0(w2)); + Round(g, h, a, &b, c, d, e, &f, 0x0fc19dc6, w2 += sigma1(w0) + w11 + sigma0(w3)); + Round(f, g, h, &a, b, c, d, &e, 0x240ca1cc, w3 += sigma1(w1) + w12 + sigma0(w4)); + Round(e, f, g, &h, a, b, c, &d, 0x2de92c6f, w4 += sigma1(w2) + w13 + sigma0(w5)); + Round(d, e, f, &g, h, a, b, &c, 0x4a7484aa, w5 += sigma1(w3) + w14 + sigma0(w6)); + Round(c, d, e, &f, g, h, a, &b, 0x5cb0a9dc, w6 += sigma1(w4) + w15 + sigma0(w7)); + Round(b, c, d, &e, f, g, h, &a, 0x76f988da, w7 += sigma1(w5) + w0 + sigma0(w8)); + Round(a, b, c, &d, e, f, g, &h, 0x983e5152, w8 += sigma1(w6) + w1 + sigma0(w9)); + Round(h, a, b, &c, d, e, f, &g, 0xa831c66d, w9 += sigma1(w7) + w2 + sigma0(w10)); + Round(g, h, a, &b, c, d, e, &f, 0xb00327c8, w10 += sigma1(w8) + w3 + sigma0(w11)); + Round(f, g, h, &a, b, c, d, &e, 0xbf597fc7, w11 += sigma1(w9) + w4 + sigma0(w12)); + Round(e, f, g, &h, a, b, c, &d, 0xc6e00bf3, w12 += sigma1(w10) + w5 + sigma0(w13)); + Round(d, e, f, &g, h, a, b, &c, 0xd5a79147, w13 += sigma1(w11) + w6 + sigma0(w14)); + Round(c, d, e, &f, g, h, a, &b, 0x06ca6351, w14 += sigma1(w12) + w7 + sigma0(w15)); + Round(b, c, d, &e, f, g, h, &a, 0x14292967, w15 += sigma1(w13) + w8 + sigma0(w0)); + + Round(a, b, c, &d, e, f, g, &h, 0x27b70a85, w0 += sigma1(w14) + w9 + sigma0(w1)); + Round(h, a, b, &c, d, e, f, &g, 0x2e1b2138, w1 += sigma1(w15) + w10 + sigma0(w2)); + Round(g, h, a, &b, c, d, e, &f, 0x4d2c6dfc, w2 += sigma1(w0) + w11 + sigma0(w3)); + Round(f, g, h, &a, b, c, d, &e, 0x53380d13, w3 += sigma1(w1) + w12 + sigma0(w4)); + Round(e, f, g, &h, a, b, c, &d, 0x650a7354, w4 += sigma1(w2) + w13 + sigma0(w5)); + Round(d, e, f, &g, h, a, b, &c, 0x766a0abb, w5 += sigma1(w3) + w14 + sigma0(w6)); + Round(c, d, e, &f, g, h, a, &b, 0x81c2c92e, w6 += sigma1(w4) + w15 + sigma0(w7)); + Round(b, c, d, &e, f, g, h, &a, 0x92722c85, w7 += sigma1(w5) + w0 + sigma0(w8)); + Round(a, b, c, &d, e, f, g, &h, 0xa2bfe8a1, w8 += sigma1(w6) + w1 + sigma0(w9)); + Round(h, a, b, &c, d, e, f, &g, 0xa81a664b, w9 += sigma1(w7) + w2 + sigma0(w10)); + Round(g, h, a, &b, c, d, e, &f, 0xc24b8b70, w10 += sigma1(w8) + w3 + sigma0(w11)); + Round(f, g, h, &a, b, c, d, &e, 0xc76c51a3, w11 += sigma1(w9) + w4 + sigma0(w12)); + Round(e, f, g, &h, a, b, c, &d, 0xd192e819, w12 += sigma1(w10) + w5 + sigma0(w13)); + Round(d, e, f, &g, h, a, b, &c, 0xd6990624, w13 += sigma1(w11) + w6 + sigma0(w14)); + Round(c, d, e, &f, g, h, a, &b, 0xf40e3585, w14 += sigma1(w12) + w7 + sigma0(w15)); + Round(b, c, d, &e, f, g, h, &a, 0x106aa070, w15 += sigma1(w13) + w8 + sigma0(w0)); + + Round(a, b, c, &d, e, f, g, &h, 0x19a4c116, w0 += sigma1(w14) + w9 + sigma0(w1)); + Round(h, a, b, &c, d, e, f, &g, 0x1e376c08, w1 += sigma1(w15) + w10 + sigma0(w2)); + Round(g, h, a, &b, c, d, e, &f, 0x2748774c, w2 += sigma1(w0) + w11 + sigma0(w3)); + Round(f, g, h, &a, b, c, d, &e, 0x34b0bcb5, w3 += sigma1(w1) + w12 + sigma0(w4)); + Round(e, f, g, &h, a, b, c, &d, 0x391c0cb3, w4 += sigma1(w2) + w13 + sigma0(w5)); + Round(d, e, f, &g, h, a, b, &c, 0x4ed8aa4a, w5 += sigma1(w3) + w14 + sigma0(w6)); + Round(c, d, e, &f, g, h, a, &b, 0x5b9cca4f, w6 += sigma1(w4) + w15 + sigma0(w7)); + Round(b, c, d, &e, f, g, h, &a, 0x682e6ff3, w7 += sigma1(w5) + w0 + sigma0(w8)); + Round(a, b, c, &d, e, f, g, &h, 0x748f82ee, w8 += sigma1(w6) + w1 + sigma0(w9)); + Round(h, a, b, &c, d, e, f, &g, 0x78a5636f, w9 += sigma1(w7) + w2 + sigma0(w10)); + Round(g, h, a, &b, c, d, e, &f, 0x84c87814, w10 += sigma1(w8) + w3 + sigma0(w11)); + Round(f, g, h, &a, b, c, d, &e, 0x8cc70208, w11 += sigma1(w9) + w4 + sigma0(w12)); + Round(e, f, g, &h, a, b, c, &d, 0x90befffa, w12 += sigma1(w10) + w5 + sigma0(w13)); + Round(d, e, f, &g, h, a, b, &c, 0xa4506ceb, w13 += sigma1(w11) + w6 + sigma0(w14)); + Round(c, d, e, &f, g, h, a, &b, 0xbef9a3f7, w14 + sigma1(w12) + w7 + sigma0(w15)); + Round(b, c, d, &e, f, g, h, &a, 0xc67178f2, w15 + sigma1(w13) + w8 + sigma0(w0)); + + s[0] += a; + s[1] += b; + s[2] += c; + s[3] += d; + s[4] += e; + s[5] nostrdb: += f; + s[6] += g; + s[7] += h; +} + + +static void add(struct sha256_ctx *ctx, const void *p, size_t len) +{ + const unsigned char *data = p; + size_t bufsize = ctx->bytes % 64; + + if (bufsize + len >= 64) { + /* Fill the buffer, and process it. */ + memcpy(ctx->buf.u8 + bufsize, data, 64 - bufsize); + ctx->bytes += 64 - bufsize; + data += 64 - bufsize; + len -= 64 - bufsize; + Transform(ctx->s, ctx->buf.u32); + bufsize = 0; + } + + while (len >= 64) { + /* Process full chunks directly from the source. */ + if (alignment_ok(data, sizeof(uint32_t))) + Transform(ctx->s, (const uint32_t *)data); + else { + memcpy(ctx->buf.u8, data, sizeof(ctx->buf)); + Transform(ctx->s, ctx->buf.u32); + } + ctx->bytes += 64; + data += 64; + len -= 64; + } + + if (len) { + /* Fill the buffer with what remains. */ + memcpy(ctx->buf.u8 + bufsize, data, len); + ctx->bytes += len; + } +} + +void sha256_init(struct sha256_ctx *ctx) +{ + struct sha256_ctx init = SHA256_INIT; + *ctx = init; +} + +void sha256_update(struct sha256_ctx *ctx, const void *p, size_t size) +{ + check_sha256(ctx); + add(ctx, p, size); +} + +void sha256_done(struct sha256_ctx *ctx, struct sha256 *res) +{ + static const unsigned char pad[64] = {0x80}; + uint64_t sizedesc; + size_t i; + + sizedesc = cpu_to_be64((uint64_t)ctx->bytes << 3); + /* Add '1' bit to terminate, then all 0 bits, up to next block - 8. */ + add(ctx, pad, 1 + ((128 - 8 - (ctx->bytes % 64) - 1) % 64)); + /* Add number of bits of data (big endian) */ + add(ctx, &sizedesc, 8); + for (i = 0; i < sizeof(ctx->s) / sizeof(ctx->s[0]); i++) + res->u.u32[i] = cpu_to_be32(ctx->s[i]); + invalidate_sha256(ctx); +} +#endif + +void sha256(struct sha256 *sha, const void *p, size_t size) +{ + struct sha256_ctx ctx; + + sha256_init(&ctx); + sha256_update(&ctx, p, size); + sha256_done(&ctx, sha); +} + +void sha256_u8(struct sha256_ctx *ctx, uint8_t v) +{ + sha256_update(ctx, &v, sizeof(v)); +} + +void sha256_u16(struct sha256_ctx *ctx, uint16_t v) +{ + sha256_update(ctx, &v, sizeof(v)); +} + +void sha256_u32(struct sha256_ctx *ctx, uint32_t v) +{ + sha256_update(ctx, &v, sizeof(v)); +} + +void sha256_u64(struct sha256_ctx *ctx, uint64_t v) +{ + sha256_update(ctx, &v, sizeof(v)); +} + +/* Add as little-endian */ +void sha256_le16(struct sha256_ctx *ctx, uint16_t v) +{ + leint16_t lev = cpu_to_le16(v); + sha256_update(ctx, &lev, sizeof(lev)); +} + +void sha256_le32(struct sha256_ctx *ctx, uint32_t v) +{ + leint32_t lev = cpu_to_le32(v); + sha256_update(ctx, &lev, sizeof(lev)); +} + +void sha256_le64(struct sha256_ctx *ctx, uint64_t v) +{ + leint64_t lev = cpu_to_le64(v); + sha256_update(ctx, &lev, sizeof(lev)); +} + +/* Add as big-endian */ +void sha256_be16(struct sha256_ctx *ctx, uint16_t v) +{ + beint16_t bev = cpu_to_be16(v); + sha256_update(ctx, &bev, sizeof(bev)); +} + +void sha256_be32(struct sha256_ctx *ctx, uint32_t v) +{ + beint32_t bev = cpu_to_be32(v); + sha256_update(ctx, &bev, sizeof(bev)); +} + +void sha256_be64(struct sha256_ctx *ctx, uint64_t v) +{ + beint64_t bev = cpu_to_be64(v); + sha256_update(ctx, &bev, sizeof(bev)); +} + + diff --git a/nostrdb/ccan/ccan/crypto/sha256/sha256.h b/nostrdb/ccan/ccan/crypto/sha256/sha256.h new file mode 100644 index 000000000..2a9283120 --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/sha256.h @@ -0,0 +1,155 @@ + +#ifndef CCAN_CRYPTO_SHA256_H +#define CCAN_CRYPTO_SHA256_H + + +/** Output length for `wally_sha256` */ +#define SHA256_LEN 32 + + +/* BSD-MIT - see LICENSE file for details */ +/* #include "config.h" */ +#include +#include + +/* Uncomment this to use openssl's SHA256 routines (and link with -lcrypto) */ +/*#define CCAN_CRYPTO_SHA256_USE_OPENSSL 1*/ + +#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL +#include +#endif + +/** + * struct sha256 - structure representing a completed SHA256. + * @u.u8: an unsigned char array. + * @u.u32: a 32-bit integer array. + * + * Other fields may be added to the union in future. + */ +struct sha256 { + union { + uint32_t u32[8]; + unsigned char u8[32]; + } u; +}; + +/** + * sha256 - return sha256 of an object. + * @sha256: the sha256 to fill in + * @p: pointer to memory, + * @size: the number of bytes pointed to by @p + * + * The bytes pointed to by @p is SHA256 hashed into @sha256. This is + * equivalent to sha256_init(), sha256_update() then sha256_done(). + */ +void sha256(struct sha256 *sha, const void *p, size_t size); + +/** + * struct sha256_ctx - structure to store running context for sha256 + */ +struct sha256_ctx { +#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL + SHA256_CTX c; +#else + uint32_t s[8]; + union { + uint32_t u32[16]; + unsigned char u8[64]; + } buf; + size_t bytes; +#endif +}; + +/** + * sha256_init - initialize an SHA256 context. + * @ctx: the sha256_ctx to initialize + * + * This must be called before sha256_update or sha256_done, or + * alternately you can assign SHA256_INIT. + * + * If it was already initialized, this forgets anything which was + * hashed before. + * + * Example: + * static void hash_all(const char **arr, struct sha256 *hash) + * { + * size_t i; + * struct sha256_ctx ctx; + * + * sha256_init(&ctx); + * for (i = 0; arr[i]; i++) + * sha256_update(&ctx, arr[i], strlen(arr[i])); + * sha256_done(&ctx, hash); + * } + */ +void sha256_init(struct sha256_ctx *ctx); + +/** + * SHA256_INIT - initializer for an SHA256 context. + * + * This can be used to statically initialize an SHA256 context (instead + * of sha256_init()). + * + * Example: + * static void hash_all(const char **arr, struct sha256 *hash) + * { + * size_t i; + * struct sha256_ctx ctx = SHA256_INIT; + * + * for (i = 0; arr[i]; i++) + * sha256_update(&ctx, arr[i], strlen(arr[i])); + * sha256_done(&ctx, hash); + * } + */ +#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL +#define SHA256_INIT \ + { { { 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, \ + 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul }, \ + 0x0, 0x0, \ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, \ + 0x0, 0x20 } } +#else +#define SHA256_INIT \ + { { 0x6a09e667ul, 0xbb67ae85ul, 0x3c6ef372ul, 0xa54ff53aul, \ + 0x510e527ful, 0x9b05688cul, 0x1f83d9abul, 0x5be0cd19ul }, \ + { { 0 } }, 0 } +#endif + +/** + * sha256_update - include some memory in the hash. + * @ctx: the sha256_ctx to use + * @p: pointer to memory, + * @size: the number of bytes pointed to by @p + * + * You can call this multiple times to hash more data, before calling + * sha256_done(). + */ +void sha256_update(struct sha256_ctx *ctx, const void *p, size_t size); + +/** + * sha256_done - finish SHA256 and return the hash + * @ctx: the sha256_ctx to complete + * @res: the hash to return. + * + * Note that @ctx is *destroyed* by this, and must be reinitialized. + * To avoid that, pass a copy instead. + */ +void sha256_done(struct sha256_ctx *sha256, struct sha256 *res); + +/* Add various types to an SHA256 hash */ +void sha256_u8(struct sha256_ctx *ctx, uint8_t v); +void sha256_u16(struct sha256_ctx *ctx, uint16_t v); +void sha256_u32(struct sha256_ctx *ctx, uint32_t v); +void sha256_u64(struct sha256_ctx *ctx, uint64_t v); + +/* Add as little-endian */ +void sha256_le16(struct sha256_ctx *ctx, uint16_t v); +void sha256_le32(struct sha256_ctx *ctx, uint32_t v); +void sha256_le64(struct sha256_ctx *ctx, uint64_t v); + +/* Add as big-endian */ +void sha256_be16(struct sha256_ctx *ctx, uint16_t v); +void sha256_be32(struct sha256_ctx *ctx, uint32_t v); +void sha256_be64(struct sha256_ctx *ctx, uint64_t v); + +#endif /* CCAN_CRYPTO_SHA256_H */ diff --git a/nostrdb/ccan/ccan/endian/endian.h b/nostrdb/ccan/ccan/endian/endian.h new file mode 100644 index 000000000..6bfc09f2d --- /dev/null +++ b/nostrdb/ccan/ccan/endian/endian.h @@ -0,0 +1,365 @@ +/* CC0 (Public domain) */ +#ifndef CCAN_ENDIAN_H +#define CCAN_ENDIAN_H +#include + +#include "config.h" +#include "cursor.h" + +/** + * BSWAP_16 - reverse bytes in a constant uint16_t value. + * @val: constant value whose bytes to swap. + * + * Designed to be usable in constant-requiring initializers. + * + * Example: + * struct mystruct { + * char buf[BSWAP_16(0x1234)]; + * }; + */ +#define BSWAP_16(val) \ + ((((uint16_t)(val) & 0x00ff) << 8) \ + | (((uint16_t)(val) & 0xff00) >> 8)) + +/** + * BSWAP_32 - reverse bytes in a constant uint32_t value. + * @val: constant value whose bytes to swap. + * + * Designed to be usable in constant-requiring initializers. + * + * Example: + * struct mystruct { + * char buf[BSWAP_32(0xff000000)]; + * }; + */ +#define BSWAP_32(val) \ + ((((uint32_t)(val) & 0x000000ff) << 24) \ + | (((uint32_t)(val) & 0x0000ff00) << 8) \ + | (((uint32_t)(val) & 0x00ff0000) >> 8) \ + | (((uint32_t)(val) & 0xff000000) >> 24)) + +/** + * BSWAP_64 - reverse bytes in a constant uint64_t value. + * @val: constantvalue whose bytes to swap. + * + * Designed to be usable in constant-requiring initializers. + * + * Example: + * struct mystruct { + * char buf[BSWAP_64(0xff00000000000000ULL)]; + * }; + */ +#define BSWAP_64(val) \ + ((((uint64_t)(val) & 0x00000000000000ffULL) << 56) \ + | (((uint64_t)(val) & 0x000000000000ff00ULL) << 40) \ + | (((uint64_t)(val) & 0x0000000000ff0000ULL) << 24) \ + | (((uint64_t)(val) & 0x00000000ff000000ULL) << 8) \ + | (((uint64_t)(val) & 0x000000ff00000000ULL) >> 8) \ + | (((uint64_t)(val) & 0x0000ff0000000000ULL) >> 24) \ + | (((uint64_t)(val) & 0x00ff000000000000ULL) >> 40) \ + | (((uint64_t)(val) & 0xff00000000000000ULL) >> 56)) + +#if HAVE_BYTESWAP_H +#include +#else +/** + * bswap_16 - reverse bytes in a uint16_t value. + * @val: value whose bytes to swap. + * + * Example: + * // Output contains "1024 is 4 as two bytes reversed" + * printf("1024 is %u as two bytes reversed\n", bswap_16(1024)); + */ +static inline uint16_t bswap_16(uint16_t val) +{ + return BSWAP_16(val); +} + +/** + * bswap_32 - reverse bytes in a uint32_t value. + * @val: value whose bytes to swap. + * + * Example: + * // Output contains "1024 is 262144 as four bytes reversed" + * printf("1024 is %u as four bytes reversed\n", bswap_32(1024)); + */ +static inline uint32_t bswap_32(uint32_t val) +{ + return BSWAP_32(val); +} +#endif /* !HAVE_BYTESWAP_H */ + +#if !HAVE_BSWAP_64 +/** + * bswap_64 - reverse bytes in a uint64_t value. + * @val: value whose bytes to swap. + * + * Example: + * // Output contains "1024 is 1125899906842624 as eight bytes reversed" + * printf("1024 is %llu as eight bytes reversed\n", + * (unsigned long long)bswap_64(1024)); + */ +static inline uint64_t bswap_64(uint64_t val) +{ + return BSWAP_64(val); +} +#endif + +/* Needed for Glibc like endiness check */ +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 + +/* Sanity check the defines. We don't handle weird endianness. */ +#if !HAVE_LITTLE_ENDIAN && !HAVE_BIG_ENDIAN +#error "Unknown endian" +#elif HAVE_LITTLE_ENDIAN && HAVE_BIG_ENDIAN +#error "Can't compile for both big and little endian." +#elif HAVE_LITTLE_ENDIAN +#ifndef __BYTE_ORDER +#define __BYTE_ORDER __LITTLE_ENDIAN +#elif __BYTE_ORDER != __LITTLE_ENDIAN +#error "__BYTE_ORDER already defined, but not equal to __LITTLE_ENDIAN" +#endif +#elif HAVE_BIG_ENDIAN +#ifndef __BYTE_ORDER +#define __BYTE_ORDER __BIG_ENDIAN +#elif __BYTE_ORDER != __BIG_ENDIAN +#error "__BYTE_ORDER already defined, but not equal to __BIG_ENDIAN" +#endif +#endif + + +#ifdef __CHECKER__ +/* sparse needs forcing to remove bitwise attribute from ccan/short_types */ +#define ENDIAN_CAST __attribute__((force)) +#define ENDIAN_TYPE __attribute__((bitwise)) +#else +#define ENDIAN_CAST +#define ENDIAN_TYPE +#endif + +typedef uint64_t ENDIAN_TYPE leint64_t; +typedef uint64_t ENDIAN_TYPE beint64_t; +typedef uint32_t ENDIAN_TYPE leint32_t; +typedef uint32_t ENDIAN_TYPE beint32_t; +typedef uint16_t ENDIAN_TYPE leint16_t; +typedef uint16_t ENDIAN_TYPE beint16_t; + +#if HAVE_LITTLE_ENDIAN +/** + * CPU_TO_LE64 - convert a constant uint64_t value to little-endian + * @native: constant to convert + */ +#define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)(native)) + +/** + * CPU_TO_LE32 - convert a constant uint32_t value to little-endian + * @native: constant to convert + */ +#define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)(native)) + +/** + * CPU_TO_LE16 - convert a constant uint16_t value to little-endian + * @native: constant to convert + */ +#define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)(native)) + +/** + * LE64_TO_CPU - convert a little-endian uint64_t constant + * @le_val: little-endian constant to convert + */ +#define LE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val)) + +/** + * LE32_TO_CPU - convert a little-endian uint32_t constant + * @le_val: little-endian constant to convert + */ +#define LE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val)) + +/** + * LE16_TO_CPU - convert a little-endian uint16_t constant + * @le_val: little-endian constant to convert + */ +#define LE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val)) + +#else /* ... HAVE_BIG_ENDIAN */ +#define CPU_TO_LE64(native) ((ENDIAN_CAST leint64_t)BSWAP_64(native)) +#define CPU_TO_LE32(native) ((ENDIAN_CAST leint32_t)BSWAP_32(native)) +#define CPU_TO_LE16(native) ((ENDIAN_CAST leint16_t)BSWAP_16(native)) +#define LE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val) +#define LE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val) +#define LE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val) +#endif /* HAVE_BIG_ENDIAN */ + +#if HAVE_BIG_ENDIAN +/** + * CPU_TO_BE64 - convert a constant uint64_t value to big-endian + * @native: constant to convert + */ +#define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)(native)) + +/** + * CPU_TO_BE32 - convert a constant uint32_t value to big-endian + * @native: constant to convert + */ +#define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)(native)) + +/** + * CPU_TO_BE16 - convert a constant uint16_t value to big-endian + * @native: constant to convert + */ +#define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)(native)) + +/** + * BE64_TO_CPU - convert a big-endian uint64_t constant + * @le_val: big-endian constant to convert + */ +#define BE64_TO_CPU(le_val) ((ENDIAN_CAST uint64_t)(le_val)) + +/** + * BE32_TO_CPU - convert a big-endian uint32_t constant + * @le_val: big-endian constant to convert + */ +#define BE32_TO_CPU(le_val) ((ENDIAN_CAST uint32_t)(le_val)) + +/** + * BE16_TO_CPU - convert a big-endian uint16_t constant + * @le_val: big-endian constant to convert + */ +#define BE16_TO_CPU(le_val) ((ENDIAN_CAST uint16_t)(le_val)) + +#else /* ... HAVE_LITTLE_ENDIAN */ +#define CPU_TO_BE64(native) ((ENDIAN_CAST beint64_t)BSWAP_64(native)) +#define CPU_TO_BE32(native) ((ENDIAN_CAST beint32_t)BSWAP_32(native)) +#define CPU_TO_BE16(native) ((ENDIAN_CAST beint16_t)BSWAP_16(native)) +#define BE64_TO_CPU(le_val) BSWAP_64((ENDIAN_CAST uint64_t)le_val) +#define BE32_TO_CPU(le_val) BSWAP_32((ENDIAN_CAST uint32_t)le_val) +#define BE16_TO_CPU(le_val) BSWAP_16((ENDIAN_CAST uint16_t)le_val) +#endif /* HAVE_LITTE_ENDIAN */ + + +/** + * cpu_to_le64 - convert a uint64_t value to little-endian + * @native: value to convert + */ +static inline leint64_t cpu_to_le64(uint64_t native) +{ + return CPU_TO_LE64(native); +} + +/** + * cpu_to_le32 - convert a uint32_t value to little-endian + * @native: value to convert + */ +static inline leint32_t cpu_to_le32(uint32_t native) +{ + return CPU_TO_LE32(native); +} + +/** + * cpu_to_le16 - convert a uint16_t value to little-endian + * @native: value to convert + */ +static inline leint16_t cpu_to_le16(uint16_t native) +{ + return CPU_TO_LE16(native); +} + +/** + * le64_to_cpu - convert a little-endian uint64_t value + * @le_val: little-endian value to convert + */ +static inline uint64_t le64_to_cpu(leint64_t le_val) +{ + return LE64_TO_CPU(le_val); +} + +/** + * le32_to_cpu - convert a little-endian uint32_t value + * @le_val: little-endian value to convert + */ +static inline uint32_t le32_to_cpu(leint32_t le_val) +{ + return LE32_TO_CPU(le_val); +} + +/** + * le16_to_cpu - convert a little-endian uint16_t value + * @le_val: little-endian value to convert + */ +static inline uint16_t le16_to_cpu(leint16_t le_val) +{ + return LE16_TO_CPU(le_val); +} + +/** + * cpu_to_be64 - convert a uint64_t value to big endian. + * @native: value to convert + */ +static inline beint64_t cpu_to_be64(uint64_t native) +{ + return CPU_TO_BE64(native); +} + +/** + * cpu_to_be32 - convert a uint32_t value to big endian. + * @native: value to convert + */ +static inline beint32_t cpu_to_be32(uint32_t native) +{ + return CPU_TO_BE32(native); +} + +/** + * cpu_to_be16 - convert a uint16_t value to big endian. + * @native: value to convert + */ +static inline beint16_t cpu_to_be16(uint16_t native) +{ + return CPU_TO_BE16(native); +} + +/** + * be64_to_cpu - convert a big-endian uint64_t value + * @be_val: big-endian value to convert + */ +static inline uint64_t be64_to_cpu(beint64_t be_val) +{ + return BE64_TO_CPU(be_val); +} + +/** + * be32_to_cpu - convert a big-endian uint32_t value + * @be_val: big-endian value to convert + */ +static inline uint32_t be32_to_cpu(beint32_t be_val) +{ + return BE32_TO_CPU(be_val); +} + +/** + * be16_to_cpu - convert a big-endian uint16_t value + * @be_val: big-endian value to convert + */ +static inline uint16_t be16_to_cpu(beint16_t be_val) +{ + return BE16_TO_CPU(be_val); +} + +/** + * be64/be32/be16 - 64/32/16 bit big-endian representation. + */ +typedef beint64_t be64; +typedef beint32_t be32; +typedef beint16_t be16; + +/** + * le64/le32/le16 - 64/32/16 bit little-endian representation. + */ +typedef leint64_t le64; +typedef leint32_t le32; +typedef leint16_t le16; + + +#endif /* CCAN_ENDIAN_H */ + diff --git a/nostrdb/ccan/ccan/likely/likely.h b/nostrdb/ccan/ccan/likely/likely.h new file mode 100644 index 000000000..3a2f18e6f --- /dev/null +++ b/nostrdb/ccan/ccan/likely/likely.h @@ -0,0 +1,115 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_LIKELY_H +#define CCAN_LIKELY_H +#include "../config.h" +#include + +#ifndef CCAN_LIKELY_DEBUG +#if HAVE_BUILTIN_EXPECT +/** + * likely - indicate that a condition is likely to be true. + * @cond: the condition + * + * This uses a compiler extension where available to indicate a likely + * code path and optimize appropriately; it's also useful for readers + * to quickly identify exceptional paths through functions. The + * threshold for "likely" is usually considered to be between 90 and + * 99%; marginal cases should not be marked either way. + * + * See Also: + * unlikely(), likely_stats() + * + * Example: + * // Returns false if we overflow. + * static inline bool inc_int(unsigned int *val) + * { + * (*val)++; + * if (likely(*val)) + * return true; + * return false; + * } + */ +#define likely(cond) __builtin_expect(!!(cond), 1) + +/** + * unlikely - indicate that a condition is unlikely to be true. + * @cond: the condition + * + * This uses a compiler extension where available to indicate an unlikely + * code path and optimize appropriately; see likely() above. + * + * See Also: + * likely(), likely_stats(), COLD (compiler.h) + * + * Example: + * // Prints a warning if we overflow. + * static inline void inc_int(unsigned int *val) + * { + * (*val)++; + * if (unlikely(*val == 0)) + * fprintf(stderr, "Overflow!"); + * } + */ +#define unlikely(cond) __builtin_expect(!!(cond), 0) +#else +#ifndef likely +#define likely(cond) (!!(cond)) +#endif +#ifndef unlikely +#define unlikely(cond) (!!(cond)) +#endif +#endif +#else /* CCAN_LIKELY_DEBUG versions */ +#include + +#define likely(cond) \ + (_likely_trace(!!(cond), 1, stringify(cond), __FILE__, __LINE__)) +#define unlikely(cond) \ + (_likely_trace(!!(cond), 0, stringify(cond), __FILE__, __LINE__)) + +long _likely_trace(bool cond, bool expect, + const char *condstr, + const char *file, unsigned int line); +/** + * likely_stats - return description of abused likely()/unlikely() + * @min_hits: minimum number of hits + * @percent: maximum percentage correct + * + * When CCAN_LIKELY_DEBUG is defined, likely() and unlikely() trace their + * results: this causes a significant slowdown, but allows analysis of + * whether the branches are labelled correctly. + * + * This function returns a malloc'ed description of the least-correct + * usage of likely() or unlikely(). It ignores places which have been + * called less than @min_hits times, and those which were predicted + * correctly more than @percent of the time. It returns NULL when + * nothing meets those criteria. + * + * Note that this call is destructive; the returned offender is + * removed from the trace so that the next call to likely_stats() will + * return the next-worst likely()/unlikely() usage. + * + * Example: + * // Print every place hit more than twice which was wrong > 5%. + * static void report_stats(void) + * { + * #ifdef CCAN_LIKELY_DEBUG + * const char *bad; + * + * while ((bad = likely_stats(2, 95)) != NULL) { + * printf("Suspicious likely: %s", bad); + * free(bad); + * } + * #endif + * } + */ +char *likely_stats(unsigned int min_hits, unsigned int percent); + +/** + * likely_stats_reset - free up memory of likely()/unlikely() branches. + * + * This can also plug memory leaks. + */ +void likely_stats_reset(void); +#endif /* CCAN_LIKELY_DEBUG */ +#endif /* CCAN_LIKELY_H */ diff --git a/nostrdb/ccan/ccan/list/list.c b/nostrdb/ccan/ccan/list/list.c new file mode 100644 index 000000000..c9ee35c70 --- /dev/null +++ b/nostrdb/ccan/ccan/list/list.c @@ -0,0 +1,43 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#include +#include +#include "list.h" + +static void *corrupt(const char *abortstr, + const struct list_node *head, + const struct list_node *node, + unsigned int count) +{ + if (abortstr) { + fprintf(stderr, + "%s: prev corrupt in node %p (%u) of %p\n", + abortstr, node, count, head); + abort(); + } + return NULL; +} + +struct list_node *list_check_node(const struct list_node *node, + const char *abortstr) +{ + const struct list_node *p, *n; + int count = 0; + + for (p = node, n = node->next; n != node; p = n, n = n->next) { + count++; + if (n->prev != p) + return corrupt(abortstr, node, n, count); + } + /* Check prev on head node. */ + if (node->prev != p) + return corrupt(abortstr, node, node, 0); + + return (struct list_node *)node; +} + +struct list_head *list_check(const struct list_head *h, const char *abortstr) +{ + if (!list_check_node(&h->n, abortstr)) + return NULL; + return (struct list_head *)h; +} diff --git a/nostrdb/ccan/ccan/list/list.h b/nostrdb/ccan/ccan/list/list.h new file mode 100644 index 000000000..4574e911c --- /dev/null +++ b/nostrdb/ccan/ccan/list/list.h @@ -0,0 +1,842 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#ifndef CCAN_LIST_H +#define CCAN_LIST_H +//#define CCAN_LIST_DEBUG 1 +#include +#include +#include "str.h" +#include "container_of.h" +#include "check_type.h" + +/** + * struct list_node - an entry in a doubly-linked list + * @next: next entry (self if empty) + * @prev: previous entry (self if empty) + * + * This is used as an entry in a linked list. + * Example: + * struct child { + * const char *name; + * // Linked list of all us children. + * struct list_node list; + * }; + */ +struct list_node +{ + struct list_node *next, *prev; +}; + +/** + * struct list_head - the head of a doubly-linked list + * @h: the list_head (containing next and prev pointers) + * + * This is used as the head of a linked list. + * Example: + * struct parent { + * const char *name; + * struct list_head children; + * unsigned int num_children; + * }; + */ +struct list_head +{ + struct list_node n; +}; + +/** + * list_check - check head of a list for consistency + * @h: the list_head + * @abortstr: the location to print on aborting, or NULL. + * + * Because list_nodes have redundant information, consistency checking between + * the back and forward links can be done. This is useful as a debugging check. + * If @abortstr is non-NULL, that will be printed in a diagnostic if the list + * is inconsistent, and the function will abort. + * + * Returns the list head if the list is consistent, NULL if not (it + * can never return NULL if @abortstr is set). + * + * See also: list_check_node() + * + * Example: + * static void dump_parent(struct parent *p) + * { + * struct child *c; + * + * printf("%s (%u children):\n", p->name, p->num_children); + * list_check(&p->children, "bad child list"); + * list_for_each(&p->children, c, list) + * printf(" -> %s\n", c->name); + * } + */ +struct list_head *list_check(const struct list_head *h, const char *abortstr); + +/** + * list_check_node - check node of a list for consistency + * @n: the list_node + * @abortstr: the location to print on aborting, or NULL. + * + * Check consistency of the list node is in (it must be in one). + * + * See also: list_check() + * + * Example: + * static void dump_child(const struct child *c) + * { + * list_check_node(&c->list, "bad child list"); + * printf("%s\n", c->name); + * } + */ +struct list_node *list_check_node(const struct list_node *n, + const char *abortstr); + +#define LIST_LOC __FILE__ ":" stringify(__LINE__) +#ifdef CCAN_LIST_DEBUG +#define list_debug(h, loc) list_check((h), loc) +#define list_debug_node(n, loc) list_check_node((n), loc) +#else +#define list_debug(h, loc) ((void)loc, h) +#define list_debug_node(n, loc) ((void)loc, n) +#endif + +/** + * LIST_HEAD_INIT - initializer for an empty list_head + * @name: the name of the list. + * + * Explicit initializer for an empty list. + * + * See also: + * LIST_HEAD, list_head_init() + * + * Example: + * static struct list_head my_list = LIST_HEAD_INIT(my_list); + */ +#define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } } + +/** + * LIST_HEAD - define and initialize an empty list_head + * @name: the name of the list. + * + * The LIST_HEAD macro defines a list_head and initializes it to an empty + * list. It can be prepended by "static" to define a static list_head. + * + * See also: + * LIST_HEAD_INIT, list_head_init() + * + * Example: + * static LIST_HEAD(my_global_list); + */ +#define LIST_HEAD(name) \ + struct list_head name = LIST_HEAD_INIT(name) + +/** + * list_head_init - initialize a list_head + * @h: the list_head to set to the empty list + * + * Example: + * ... + * struct parent *parent = malloc(sizeof(*parent)); + * + * list_head_init(&parent->children); + * parent->num_children = 0; + */ +static inline void list_head_init(struct list_head *h) +{ + h->n.next = h->n.prev = &h->n; +} + +/** + * list_node_init - initialize a list_node + * @n: the list_node to link to itself. + * + * You don't need to use this normally! But it lets you list_del(@n) + * safely. + */ +static inline void list_node_init(struct list_node *n) +{ + n->next = n->prev = n; +} + +/** + * list_add_after - add an entry after an existing node in a linked list + * @h: the list_head to add the node to (for debugging) + * @p: the existing list_node to add the node after + * @n: the new list_node to add to the list. + * + * The existing list_node must already be a member of the list. + * The new list_node does not need to be initialized; it will be overwritten. + * + * Example: + * struct child c1, c2, c3; + * LIST_HEAD(h); + * + * list_add_tail(&h, &c1.list); + * list_add_tail(&h, &c3.list); + * list_add_after(&h, &c1.list, &c2.list); + */ +#define list_add_after(h, p, n) list_add_after_(h, p, n, LIST_LOC) +static inline void list_add_after_(struct list_head *h, + struct list_node *p, + struct list_node *n, + const char *abortstr) +{ + n->next = p->next; + n->prev = p; + p->next->prev = n; + p->next = n; + (void)list_debug(h, abortstr); +} + +/** + * list_add - add an entry at the start of a linked list. + * @h: the list_head to add the node to + * @n: the list_node to add to the list. + * + * The list_node does not need to be initialized; it will be overwritten. + * Example: + * struct child *child = malloc(sizeof(*child)); + * + * child->name = "marvin"; + * list_add(&parent->children, &child->list); + * parent->num_children++; + */ +#define list_add(h, n) list_add_(h, n, LIST_LOC) +static inline void list_add_(struct list_head *h, + struct list_node *n, + const char *abortstr) +{ + list_add_after_(h, &h->n, n, abortstr); +} + +/** + * list_add_before - add an entry before an existing node in a linked list + * @h: the list_head to add the node to (for debugging) + * @p: the existing list_node to add the node before + * @n: the new list_node to add to the list. + * + * The existing list_node must already be a member of the list. + * The new list_node does not need to be initialized; it will be overwritten. + * + * Example: + * list_head_init(&h); + * list_add_tail(&h, &c1.list); + * list_add_tail(&h, &c3.list); + * list_add_before(&h, &c3.list, &c2.list); + */ +#define list_add_before(h, p, n) list_add_before_(h, p, n, LIST_LOC) +static inline void list_add_before_(struct list_head *h, + struct list_node *p, + struct list_node *n, + const char *abortstr) +{ + n->next = p; + n->prev = p->prev; + p->prev->next = n; + p->prev = n; + (void)list_debug(h, abortstr); +} + +/** + * list_add_tail - add an entry at the end of a linked list. + * @h: the list_head to add the node to + * @n: the list_node to add to the list. + * + * The list_node does not need to be initialized; it will be overwritten. + * Example: + * list_add_tail(&parent->children, &child->list); + * parent->num_children++; + */ +#define list_add_tail(h, n) list_add_tail_(h, n, LIST_LOC) +static inline void list_add_tail_(struct list_head *h, + struct list_node *n, + const char *abortstr) +{ + list_add_before_(h, &h->n, n, abortstr); +} + +/** + * list_empty - is a list empty? + * @h: the list_head + * + * If the list is empty, returns true. + * + * Example: + * assert(list_empty(&parent->children) == (parent->num_children == 0)); + */ +#define list_empty(h) list_empty_(h, LIST_LOC) +static inline bool list_empty_(const struct list_head *h, const char* abortstr) +{ + (void)list_debug(h, abortstr); + return h->n.next == &h->n; +} + +/** + * list_empty_nodebug - is a list empty (and don't perform debug checks)? + * @h: the list_head + * + * If the list is empty, returns true. + * This differs from list_empty() in that if CCAN_LIST_DEBUG is set it + * will NOT perform debug checks. Only use this function if you REALLY + * know what you're doing. + * + * Example: + * assert(list_empty_nodebug(&parent->children) == (parent->num_children == 0)); + */ +#ifndef CCAN_LIST_DEBUG +#define list_empty_nodebug(h) list_empty(h) +#else +static inline bool list_empty_nodebug(const struct list_head *h) +{ + return h->n.next == &h->n; +} +#endif + +/** + * list_empty_nocheck - is a list empty? + * @h: the list_head + * + * If the list is empty, returns true. This doesn't perform any + * debug check for list consistency, so it can be called without + * locks, racing with the list being modified. This is ok for + * checks where an incorrect result is not an issue (optimized + * bail out path for example). + */ +static inline bool list_empty_nocheck(const struct list_head *h) +{ + return h->n.next == &h->n; +} + +/** + * list_del - delete an entry from an (unknown) linked list. + * @n: the list_node to delete from the list. + * + * Note that this leaves @n in an undefined state; it can be added to + * another list, but not deleted again. + * + * See also: + * list_del_from(), list_del_init() + * + * Example: + * list_del(&child->list); + * parent->num_children--; + */ +#define list_del(n) list_del_(n, LIST_LOC) +static inline void list_del_(struct list_node *n, const char* abortstr) +{ + (void)list_debug_node(n, abortstr); + n->next->prev = n->prev; + n->prev->next = n->next; +#ifdef CCAN_LIST_DEBUG + /* Catch use-after-del. */ + n->next = n->prev = NULL; +#endif +} + +/** + * list_del_init - delete a node, and reset it so it can be deleted again. + * @n: the list_node to be deleted. + * + * list_del(@n) or list_del_init() again after this will be safe, + * which can be useful in some cases. + * + * See also: + * list_del_from(), list_del() + * + * Example: + * list_del_init(&child->list); + * parent->num_children--; + */ +#define list_del_init(n) list_del_init_(n, LIST_LOC) +static inline void list_del_init_(struct list_node *n, const char *abortstr) +{ + list_del_(n, abortstr); + list_node_init(n); +} + +/** + * list_del_from - delete an entry from a known linked list. + * @h: the list_head the node is in. + * @n: the list_node to delete from the list. + * + * This explicitly indicates which list a node is expected to be in, + * which is better documentation and can catch more bugs. + * + * See also: list_del() + * + * Example: + * list_del_from(&parent->children, &child->list); + * parent->num_children--; + */ +static inline void list_del_from(struct list_head *h, struct list_node *n) +{ +#ifdef CCAN_LIST_DEBUG + { + /* Thorough check: make sure it was in list! */ + struct list_node *i; + for (i = h->n.next; i != n; i = i->next) + assert(i != &h->n); + } +#endif /* CCAN_LIST_DEBUG */ + + /* Quick test that catches a surprising number of bugs. */ + assert(!list_empty(h)); + list_del(n); +} + +/** + * list_swap - swap out an entry from an (unknown) linked list for a new one. + * @o: the list_node to replace from the list. + * @n: the list_node to insert in place of the old one. + * + * Note that this leaves @o in an undefined state; it can be added to + * another list, but not deleted/swapped again. + * + * See also: + * list_del() + * + * Example: + * struct child x1, x2; + * LIST_HEAD(xh); + * + * list_add(&xh, &x1.list); + * list_swap(&x1.list, &x2.list); + */ +#define list_swap(o, n) list_swap_(o, n, LIST_LOC) +static inline void list_swap_(struct list_node *o, + struct list_node *n, + const char* abortstr) +{ + (void)list_debug_node(o, abortstr); + *n = *o; + n->next->prev = n; + n->prev->next = n; +#ifdef CCAN_LIST_DEBUG + /* Catch use-after-del. */ + o->next = o->prev = NULL; +#endif +} + +/** + * list_entry - convert a list_node back into the structure containing it. + * @n: the list_node + * @type: the type of the entry + * @member: the list_node member of the type + * + * Example: + * // First list entry is children.next; convert back to child. + * child = list_entry(parent->children.n.next, struct child, list); + * + * See Also: + * list_top(), list_for_each() + */ +#define list_entry(n, type, member) container_of(n, type, member) + +/** + * list_top - get the first entry in a list + * @h: the list_head + * @type: the type of the entry + * @member: the list_node member of the type + * + * If the list is empty, returns NULL. + * + * Example: + * struct child *first; + * first = list_top(&parent->children, struct child, list); + * if (!first) + * printf("Empty list!\n"); + */ +#define list_top(h, type, member) \ + ((type *)list_top_((h), list_off_(type, member))) + +static inline const void *list_top_(const struct list_head *h, size_t off) +{ + if (list_empty(h)) + return NULL; + return (const char *)h->n.next - off; +} + +/** + * list_pop - remove the first entry in a list + * @h: the list_head + * @type: the type of the entry + * @member: the list_node member of the type + * + * If the list is empty, returns NULL. + * + * Example: + * struct child *one; + * one = list_pop(&parent->children, struct child, list); + * if (!one) + * printf("Empty list!\n"); + */ +#define list_pop(h, type, member) \ + ((type *)list_pop_((h), list_off_(type, member))) + +static inline const void *list_pop_(const struct list_head *h, size_t off) +{ + struct list_node *n; + + if (list_empty(h)) + return NULL; + n = h->n.next; + list_del(n); + return (const char *)n - off; +} + +/** + * list_tail - get the last entry in a list + * @h: the list_head + * @type: the type of the entry + * @member: the list_node member of the type + * + * If the list is empty, returns NULL. + * + * Example: + * struct child *last; + * last = list_tail(&parent->children, struct child, list); + * if (!last) + * printf("Empty list!\n"); + */ +#define list_tail(h, type, member) \ + ((type *)list_tail_((h), list_off_(type, member))) + +static inline const void *list_tail_(const struct list_head *h, size_t off) +{ + if (list_empty(h)) + return NULL; + return (const char *)h->n.prev - off; +} + +/** + * list_for_each - iterate through a list. + * @h: the list_head (warning: evaluated multiple times!) + * @i: the structure containing the list_node + * @member: the list_node member of the structure + * + * This is a convenient wrapper to iterate @i over the entire list. It's + * a for loop, so you can break and continue as normal. + * + * Example: + * list_for_each(&parent->children, child, list) + * printf("Name: %s\n", child->name); + */ +#define list_for_each(h, i, member) \ + list_for_each_off(h, i, list_off_var_(i, member)) + +/** + * list_for_each_rev - iterate through a list backwards. + * @h: the list_head + * @i: the structure containing the list_node + * @member: the list_node member of the structure + * + * This is a convenient wrapper to iterate @i over the entire list. It's + * a for loop, so you can break and continue as normal. + * + * Example: + * list_for_each_rev(&parent->children, child, list) + * printf("Name: %s\n", child->name); + */ +#define list_for_each_rev(h, i, member) \ + list_for_each_rev_off(h, i, list_off_var_(i, member)) + +/** + * list_for_each_rev_safe - iterate through a list backwards, + * maybe during deletion + * @h: the list_head + * @i: the structure containing the list_node + * @nxt: the structure containing the list_node + * @member: the list_node member of the structure + * + * This is a convenient wrapper to iterate @i over the entire list backwards. + * It's a for loop, so you can break and continue as normal. The extra + * variable * @nxt is used to hold the next element, so you can delete @i + * from the list. + * + * Example: + * struct child *next; + * list_for_each_rev_safe(&parent->children, child, next, list) { + * printf("Name: %s\n", child->name); + * } + */ +#define list_for_each_rev_safe(h, i, nxt, member) \ + list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member)) + +/** + * list_for_each_safe - iterate through a list, maybe during deletion + * @h: the list_head + * @i: the structure containing the list_node + * @nxt: the structure containing the list_node + * @member: the list_node member of the structure + * + * This is a convenient wrapper to iterate @i over the entire list. It's + * a for loop, so you can break and continue as normal. The extra variable + * @nxt is used to hold the next element, so you can delete @i from the list. + * + * Example: + * list_for_each_safe(&parent->children, child, next, list) { + * list_del(&child->list); + * parent->num_children--; + * } + */ +#define list_for_each_safe(h, i, nxt, member) \ + list_for_each_safe_off(h, i, nxt, list_off_var_(i, member)) + +/** + * list_next - get the next entry in a list + * @h: the list_head + * @i: a pointer to an entry in the list. + * @member: the list_node member of the structure + * + * If @i was the last entry in the list, returns NULL. + * + * Example: + * struct child *second; + * second = list_next(&parent->children, first, list); + * if (!second) + * printf("No second child!\n"); + */ +#define list_next(h, i, member) \ + ((list_typeof(i))list_entry_or_null(list_debug(h, \ + __FILE__ ":" stringify(__LINE__)), \ + (i)->member.next, \ + list_off_var_((i), member))) + +/** + * list_prev - get the previous entry in a list + * @h: the list_head + * @i: a pointer to an entry in the list. + * @member: the list_node member of the structure + * + * If @i was the first entry in the list, returns NULL. + * + * Example: + * first = list_prev(&parent->children, second, list); + * if (!first) + * printf("Can't go back to first child?!\n"); + */ +#define list_prev(h, i, member) \ + ((list_typeof(i))list_entry_or_null(list_debug(h, \ + __FILE__ ":" stringify(__LINE__)), \ + (i)->member.prev, \ + list_off_var_((i), member))) + +/** + * list_append_list - empty one list onto the end of another. + * @to: the list to append into + * @from: the list to empty. + * + * This takes the entire contents of @from and moves it to the end of + * @to. After this @from will be empty. + * + * Example: + * struct list_head adopter; + * + * list_append_list(&adopter, &parent->children); + * assert(list_empty(&parent->children)); + * parent->num_children = 0; + */ +#define list_append_list(t, f) list_append_list_(t, f, \ + __FILE__ ":" stringify(__LINE__)) +static inline void list_append_list_(struct list_head *to, + struct list_head *from, + const char *abortstr) +{ + struct list_node *from_tail = list_debug(from, abortstr)->n.prev; + struct list_node *to_tail = list_debug(to, abortstr)->n.prev; + + /* Sew in head and entire list. */ + to->n.prev = from_tail; + from_tail->next = &to->n; + to_tail->next = &from->n; + from->n.prev = to_tail; + + /* Now remove head. */ + list_del(&from->n); + list_head_init(from); +} + +/** + * list_prepend_list - empty one list into the start of another. + * @to: the list to prepend into + * @from: the list to empty. + * + * This takes the entire contents of @from and moves it to the start + * of @to. After this @from will be empty. + * + * Example: + * list_prepend_list(&adopter, &parent->children); + * assert(list_empty(&parent->children)); + * parent->num_children = 0; + */ +#define list_prepend_list(t, f) list_prepend_list_(t, f, LIST_LOC) +static inline void list_prepend_list_(struct list_head *to, + struct list_head *from, + const char *abortstr) +{ + struct list_node *from_tail = list_debug(from, abortstr)->n.prev; + struct list_node *to_head = list_debug(to, abortstr)->n.next; + + /* Sew in head and entire list. */ + to->n.next = &from->n; + from->n.prev = &to->n; + to_head->prev = from_tail; + from_tail->next = to_head; + + /* Now remove head. */ + list_del(&from->n); + list_head_init(from); +} + +/* internal macros, do not use directly */ +#define list_for_each_off_dir_(h, i, off, dir) \ + for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ + (off)); \ + list_node_from_off_((void *)i, (off)) != &(h)->n; \ + i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, \ + (off))) + +#define list_for_each_safe_off_dir_(h, i, nxt, off, dir) \ + for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ + (off)), \ + nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ + (off)); \ + list_node_from_off_(i, (off)) != &(h)->n; \ + i = nxt, \ + nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ + (off))) + +/** + * list_for_each_off - iterate through a list of memory regions. + * @h: the list_head + * @i: the pointer to a memory region which contains list node data. + * @off: offset(relative to @i) at which list node data resides. + * + * This is a low-level wrapper to iterate @i over the entire list, used to + * implement all oher, more high-level, for-each constructs. It's a for loop, + * so you can break and continue as normal. + * + * WARNING! Being the low-level macro that it is, this wrapper doesn't know + * nor care about the type of @i. The only assumption made is that @i points + * to a chunk of memory that at some @offset, relative to @i, contains a + * properly filled `struct list_node' which in turn contains pointers to + * memory chunks and it's turtles all the way down. With all that in mind + * remember that given the wrong pointer/offset couple this macro will + * happily churn all you memory until SEGFAULT stops it, in other words + * caveat emptor. + * + * It is worth mentioning that one of legitimate use-cases for that wrapper + * is operation on opaque types with known offset for `struct list_node' + * member(preferably 0), because it allows you not to disclose the type of + * @i. + * + * Example: + * list_for_each_off(&parent->children, child, + * offsetof(struct child, list)) + * printf("Name: %s\n", child->name); + */ +#define list_for_each_off(h, i, off) \ + list_for_each_off_dir_((h),(i),(off),next) + +/** + * list_for_each_rev_off - iterate through a list of memory regions backwards + * @h: the list_head + * @i: the pointer to a memory region which contains list node data. + * @off: offset(relative to @i) at which list node data resides. + * + * See list_for_each_off for details + */ +#define list_for_each_rev_off(h, i, off) \ + list_for_each_off_dir_((h),(i),(off),prev) + +/** + * list_for_each_safe_off - iterate through a list of memory regions, maybe + * during deletion + * @h: the list_head + * @i: the pointer to a memory region which contains list node data. + * @nxt: the structure containing the list_node + * @off: offset(relative to @i) at which list node data resides. + * + * For details see `list_for_each_off' and `list_for_each_safe' + * descriptions. + * + * Example: + * list_for_each_safe_off(&parent->children, child, + * next, offsetof(struct child, list)) + * printf("Name: %s\n", child->name); + */ +#define list_for_each_safe_off(h, i, nxt, off) \ + list_for_each_safe_off_dir_((h),(i),(nxt),(off),next) + +/** + * list_for_each_rev_safe_off - iterate backwards through a list of + * memory regions, maybe during deletion + * @h: the list_head + * @i: the pointer to a memory region which contains list node data. + * @nxt: the structure containing the list_node + * @off: offset(relative to @i) at which list node data resides. + * + * For details see `list_for_each_rev_off' and `list_for_each_rev_safe' + * descriptions. + * + * Example: + * list_for_each_rev_safe_off(&parent->children, child, + * next, offsetof(struct child, list)) + * printf("Name: %s\n", child->name); + */ +#define list_for_each_rev_safe_off(h, i, nxt, off) \ + list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev) + +/* Other -off variants. */ +#define list_entry_off(n, type, off) \ + ((type *)list_node_from_off_((n), (off))) + +#define list_head_off(h, type, off) \ + ((type *)list_head_off((h), (off))) + +#define list_tail_off(h, type, off) \ + ((type *)list_tail_((h), (off))) + +#define list_add_off(h, n, off) \ + list_add((h), list_node_from_off_((n), (off))) + +#define list_del_off(n, off) \ + list_del(list_node_from_off_((n), (off))) + +#define list_del_from_off(h, n, off) \ + list_del_from(h, list_node_from_off_((n), (off))) + +/* Offset helper functions so we only single-evaluate. */ +static inline void *list_node_to_off_(struct list_node *node, size_t off) +{ + return (void *)((char *)node - off); +} +static inline struct list_node *list_node_from_off_(void *ptr, size_t off) +{ + return (struct list_node *)((char *)ptr + off); +} + +/* Get the offset of the member, but make sure it's a list_node. */ +#define list_off_(type, member) \ + (container_off(type, member) + \ + check_type(((type *)0)->member, struct list_node)) + +#define list_off_var_(var, member) \ + (container_off_var(var, member) + \ + check_type(var->member, struct list_node)) + +#if HAVE_TYPEOF +#define list_typeof(var) typeof(var) +#else +#define list_typeof(var) void * +#endif + +/* Returns member, or NULL if at end of list. */ +static inline void *list_entry_or_null(const struct list_head *h, + const struct list_node *n, + size_t off) +{ + if (n == &h->n) + return NULL; + return (char *)n - off; +} +#endif /* CCAN_LIST_H */ diff --git a/nostrdb/ccan/ccan/mem/mem.c b/nostrdb/ccan/ccan/mem/mem.c new file mode 100644 index 000000000..150f06164 --- /dev/null +++ b/nostrdb/ccan/ccan/mem/mem.c @@ -0,0 +1,128 @@ +/* CC0 (Public domain) - see LICENSE file for details */ + +#include "config.h" + +#include +#include +#include "mem.h" + +#if !HAVE_MEMMEM +void *memmem(const void *haystack, size_t haystacklen, + const void *needle, size_t needlelen) +{ + const char *p; + + if (needlelen > haystacklen) + return NULL; + + p = haystack; + + for (p = haystack; + (p + needlelen) <= ((const char *)haystack + haystacklen); + p++) + if (memcmp(p, needle, needlelen) == 0) + return (void *)p; + + return NULL; +} +#endif + +#if !HAVE_MEMRCHR +void *memrchr(const void *s, int c, size_t n) +{ + unsigned char *p = (unsigned char *)s; + + while (n) { + if (p[n-1] == c) + return p + n - 1; + n--; + } + + return NULL; +} +#endif + +void *mempbrkm(const void *data_, size_t len, const void *accept_, size_t accept_len) +{ + const char *data = data_, *accept = accept_; + size_t i, j; + + for (i = 0; i < len; i++) + for (j = 0; j < accept_len; j++) + if (accept[j] == data[i]) + return (void *)&data[i]; + return NULL; +} + +void *memcchr(void const *data, int c, size_t data_len) +{ + char const *p = data; + size_t i; + + for (i = 0; i < data_len; i++) + if (p[i] != c) + return (void *)&p[i]; + + return NULL; +} + +#define MEMSWAP_TMP_SIZE 256 + +void memswap(void *a, void *b, size_t n) +{ + char *ap = a; + char *bp = b; + char tmp[MEMSWAP_TMP_SIZE]; + + assert(!memoverlaps(a, n, b, n)); + + while (n) { + size_t m = n > MEMSWAP_TMP_SIZE ? MEMSWAP_TMP_SIZE : n; + + memcpy(tmp, bp, m); + memcpy(bp, ap, m); + memcpy(ap, tmp, m); + + ap += m; + bp += m; + n -= m; + } +} + +bool memeqzero(const void *data, size_t length) +{ + const unsigned char *p = data; + size_t len; + + /* Check first 16 bytes manually */ + for (len = 0; len < 16; len++) { + if (!length) + return true; + if (*p) + return false; + p++; + length--; + } + + /* Now we know that's zero, memcmp with self. */ + return memcmp(data, p, length) == 0; +} + +void memtaint(void *data, size_t len) +{ + /* Using 16 bytes is a bit quicker than 4 */ + const unsigned tainter[] + = { 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef }; + char *p = data; + + while (len >= sizeof(tainter)) { + memcpy(p, tainter, sizeof(tainter)); + p += sizeof(tainter); + len -= sizeof(tainter); + } + memcpy(p, tainter, len); + +#if HAVE_VALGRIND_MEMCHECK_H + VALGRIND_MAKE_MEM_UNDEFINED(data, len); +#endif +} diff --git a/nostrdb/ccan/ccan/mem/mem.h b/nostrdb/ccan/ccan/mem/mem.h new file mode 100644 index 000000000..9b8d01a38 --- /dev/null +++ b/nostrdb/ccan/ccan/mem/mem.h @@ -0,0 +1,295 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_MEM_H +#define CCAN_MEM_H + +#include "../config.h" +#include "../compiler.h" + +#include +#include + +#if !HAVE_MEMMEM +PURE_FUNCTION +void *memmem(const void *haystack, size_t haystacklen, + const void *needle, size_t needlelen); +#endif + +#if !HAVE_MEMRCHR +PURE_FUNCTION +void *memrchr(const void *s, int c, size_t n); +#endif + +/** + * mempbrkm - locates the first occurrence in @data of any bytes in @accept + * @data: where we search + * @len: length of data in bytes + * @accept: array of bytes we search for + * @accept_len: # of bytes in accept + * + * Returns a pointer to the byte in @data that matches one of the bytes in + * @accept, or NULL if no such byte is found. + * + * Example: + * char otherbytes[] = "Hello \0world"; + * size_t otherbytes_len = sizeof(otherbytes) - 1; + * char *r = mempbrkm(otherbytes, otherbytes_len, "\0b", 2); + * if (r) { + * printf("Found %c\n", *r); + * } else { + * printf("Nada\n"); + * } + * + */ +PURE_FUNCTION +void *mempbrkm(const void *data, size_t len, const void *accept, size_t accept_len); + +/** + * mempbrk - locates the first occurrence in @data of any bytes in @accept + * @data: where we search + * @len: length of data in bytes + * @accept: NUL terminated string containing the bytes we search for + * + * Returns a pointer to the byte in @data that matches one of the bytes in + * @accept, or NULL if no such byte is found. + * + * Example: + * + * r = mempbrk(otherbytes, otherbytes_len, "abcde"); + * if (r) { + * printf("Found %c\n", *r); + * } else { + * printf("Nada\n"); + * } + */ +PURE_FUNCTION +static inline char *mempbrk(const void *data, size_t len, const char *accept) +{ + return mempbrkm(data, len, accept, strlen(accept)); +} + +/** + * memcchr - scan memory until a character does _not_ match + * @data: pointer to memory to scan + * @data_len: length of data + * @c: character to scan for + * + * The complement of memchr(). + * + * Returns a pointer to the first character which is _not_ @c. If all memory in + * @data is @c, returns NULL. + * + * Example: + * char somebytes[] = "HI By\0e"; + * size_t bytes_len = sizeof(somebytes) - 1; + * r = memcchr(somebytes, ' ', bytes_len); + * if (r) { + * printf("Found %c after trimming spaces\n", *r); + * } + */ +PURE_FUNCTION +void *memcchr(void const *data, int c, size_t data_len); + +/** + * memeq - Are two byte arrays equal? + * @a: first array + * @al: bytes in first array + * @b: second array + * @bl: bytes in second array + * + * Example: + * if (memeq(somebytes, bytes_len, otherbytes, otherbytes_len)) { + * printf("memory blocks are the same!\n"); + * } + */ +PURE_FUNCTION +static inline bool memeq(const void *a, size_t al, const void *b, size_t bl) +{ + return al == bl && !memcmp(a, b, bl); +} + +/** + * memstarts - determine if @data starts with @prefix + * @data: does this begin with @prefix? + * @data_len: bytes in @data + * @prefix: does @data begin with these bytes? + * @prefix_len: bytes in @prefix + * + * Returns true if @data starts with @prefix, otherwise return false. + * + * Example: + * if (memstarts(somebytes, bytes_len, otherbytes, otherbytes_len)) { + * printf("somebytes starts with otherbytes!\n"); + * } + */ +PURE_FUNCTION +static inline bool memstarts(void const *data, size_t data_len, + void const *prefix, size_t prefix_len) +{ + if (prefix_len > data_len) + return false; + return memeq(data, prefix_len, prefix, prefix_len); +} + +/** + * memeqstr - Is a byte array equal to a NUL terminated string? + * @data: byte array + * @length: length of @data in bytes + * @string: NUL terminated string + * + * The '\0' byte is ignored when checking if @bytes == @string. + * + * Example: + * if (memeqstr(somebytes, bytes_len, "foo")) { + * printf("somebytes == 'foo'!\n"); + * } + */ +PURE_FUNCTION +static inline bool memeqstr(const void *data, size_t length, const char *string) +{ + return memeq(data, length, string, strlen(string)); +} + +/** + * memeqzero - Is a byte array all zeroes? + * @data: byte array + * @length: length of @data in bytes + * + * Example: + * if (memeqzero(somebytes, bytes_len)) { + * printf("somebytes == 0!\n"); + * } + */ +PURE_FUNCTION +bool memeqzero(const void *data, size_t length); + +/** + * memstarts_str - Does this byte array start with a string prefix? + * @a: byte array + * @al: length in bytes + * @s: string prefix + * + * Example: + * if (memstarts_str(somebytes, bytes_len, "It")) { + * printf("somebytes starts with 'It'\n"); + * } + */ +PURE_FUNCTION +static inline bool memstarts_str(const void *a, size_t al, const char *s) +{ + return memstarts(a, al, s, strlen(s)); +} + +/** + * memends - Does this byte array end with a given byte-array suffix? + * @s: byte array + * @s_len: length in bytes + * @suffix: byte array suffix + * @suffix_len: length of suffix in bytes + * + * Returns true if @suffix appears as a substring at the end of @s, + * false otherwise. + */ +PURE_FUNCTION +static inline bool memends(const void *s, size_t s_len, const void *suffix, size_t suffix_len) +{ + return (s_len >= suffix_len) && (memcmp((const char *)s + s_len - suffix_len, + suffix, suffix_len) == 0); +} + +/** + * memends_str - Does this byte array end with a string suffix? + * @a: byte array + * @al: length in bytes + * @s: string suffix + * + * Example: + * if (memends_str(somebytes, bytes_len, "It")) { + * printf("somebytes ends with with 'It'\n"); + * } + */ +PURE_FUNCTION +static inline bool memends_str(const void *a, size_t al, const char *s) +{ + return memends(a, al, s, strlen(s)); +} + +/** + * memoverlaps - Do two memory ranges overlap? + * @a: pointer to first memory range + * @al: length of first memory range + * @b: pointer to second memory range + * @al: length of second memory range + */ +CONST_FUNCTION +static inline bool memoverlaps(const void *a_, size_t al, + const void *b_, size_t bl) +{ + const char *a = a_; + const char *b = b_; + + return (a < (b + bl)) && (b < (a + al)); +} + +/* + * memswap - Exchange two memory regions + * @a: first region + * @b: second region + * @n: length of the regions + * + * Undefined results if the two memory regions overlap. + */ +void memswap(void *a, void *b, size_t n); + +#if HAVE_VALGRIND_MEMCHECK_H +#include +static inline void *memcheck_(const void *data, size_t len) +{ + VALGRIND_CHECK_MEM_IS_DEFINED(data, len); + return (void *)data; +} +#else +static inline void *memcheck_(const void *data, size_t len) +{ + (void)len; + return (void *)data; +} +#endif + +#if HAVE_TYPEOF +/** + * memcheck - check that a memory region is initialized + * @data: start of region + * @len: length in bytes + * + * When running under valgrind, this causes an error to be printed + * if the entire region is not defined. Otherwise valgrind only + * reports an error when an undefined value is used for a branch, or + * written out. + * + * Example: + * // Search for space, but make sure it's all initialized. + * if (memchr(memcheck(somebytes, bytes_len), ' ', bytes_len)) { + * printf("space was found!\n"); + * } + */ +#define memcheck(data, len) ((__typeof__((data)+0))memcheck_((data), (len))) +#else +#define memcheck(data, len) memcheck_((data), (len)) +#endif + +/** + * memtaint - mark a memory region unused + * @data: start of region + * @len: length in bytes + * + * This writes an "0xdeadbeef" eyecatcher repeatedly to the memory. + * When running under valgrind, it also tells valgrind that the memory is + * uninitialized, triggering valgrind errors if it is used for branches + * or written out (or passed to memcheck!) in future. + * + * Example: + * // We'll reuse this buffer later, but be sure we don't access it. + * memtaint(somebytes, bytes_len); + */ +void memtaint(void *data, size_t len); +#endif /* CCAN_MEM_H */ diff --git a/nostrdb/ccan/ccan/short_types/short_types.h b/nostrdb/ccan/ccan/short_types/short_types.h new file mode 100644 index 000000000..175377e9b --- /dev/null +++ b/nostrdb/ccan/ccan/short_types/short_types.h @@ -0,0 +1,35 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_SHORT_TYPES_H +#define CCAN_SHORT_TYPES_H +#include + +/** + * u64/s64/u32/s32/u16/s16/u8/s8 - short names for explicitly-sized types. + */ +typedef uint64_t u64; +typedef int64_t s64; +typedef uint32_t u32; +typedef int32_t s32; +typedef uint16_t u16; +typedef int16_t s16; +typedef uint8_t u8; +typedef int8_t s8; + +/* Whichever they include first, they get these definitions. */ +#ifdef CCAN_ENDIAN_H +/** + * be64/be32/be16 - 64/32/16 bit big-endian representation. + */ +typedef beint64_t be64; +typedef beint32_t be32; +typedef beint16_t be16; + +/** + * le64/le32/le16 - 64/32/16 bit little-endian representation. + */ +typedef leint64_t le64; +typedef leint32_t le32; +typedef leint16_t le16; +#endif + +#endif /* CCAN_SHORT_TYPES_H */ diff --git a/nostrdb/ccan/ccan/str/str.h b/nostrdb/ccan/ccan/str/str.h new file mode 100644 index 000000000..f391abdde --- /dev/null +++ b/nostrdb/ccan/ccan/str/str.h @@ -0,0 +1,228 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_STR_H +#define CCAN_STR_H +#include "../config.h" +#include +#include +#include +#include + +/** + * streq - Are two strings equal? + * @a: first string + * @b: first string + * + * This macro is arguably more readable than "!strcmp(a, b)". + * + * Example: + * if (streq(somestring, "")) + * printf("String is empty!\n"); + */ +#define streq(a,b) (strcmp((a),(b)) == 0) + +/** + * strstarts - Does this string start with this prefix? + * @str: string to test + * @prefix: prefix to look for at start of str + * + * Example: + * if (strstarts(somestring, "foo")) + * printf("String %s begins with 'foo'!\n", somestring); + */ +#define strstarts(str,prefix) (strncmp((str),(prefix),strlen(prefix)) == 0) + +/** + * strends - Does this string end with this postfix? + * @str: string to test + * @postfix: postfix to look for at end of str + * + * Example: + * if (strends(somestring, "foo")) + * printf("String %s end with 'foo'!\n", somestring); + */ +static inline bool strends(const char *str, const char *postfix) +{ + if (strlen(str) < strlen(postfix)) + return false; + + return streq(str + strlen(str) - strlen(postfix), postfix); +} + +/** + * stringify - Turn expression into a string literal + * @expr: any C expression + * + * Example: + * #define PRINT_COND_IF_FALSE(cond) \ + * ((cond) || printf("%s is false!", stringify(cond))) + */ +#define stringify(expr) stringify_1(expr) +/* Double-indirection required to stringify expansions */ +#define stringify_1(expr) #expr + +/** + * strcount - Count number of (non-overlapping) occurrences of a substring. + * @haystack: a C string + * @needle: a substring + * + * Example: + * assert(strcount("aaa aaa", "a") == 6); + * assert(strcount("aaa aaa", "ab") == 0); + * assert(strcount("aaa aaa", "aa") == 2); + */ +size_t strcount(const char *haystack, const char *needle); + +/** + * STR_MAX_CHARS - Maximum possible size of numeric string for this type. + * @type_or_expr: a pointer or integer type or expression. + * + * This provides enough space for a nul-terminated string which represents the + * largest possible value for the type or expression. + * + * Note: The implementation adds extra space so hex values or negative + * values will fit (eg. sprintf(... "%p"). ) + * + * Example: + * char str[STR_MAX_CHARS(int)]; + * + * sprintf(str, "%i", 7); + */ +#define STR_MAX_CHARS(type_or_expr) \ + ((sizeof(type_or_expr) * CHAR_BIT + 8) / 9 * 3 + 2 \ + + STR_MAX_CHARS_TCHECK_(type_or_expr)) + +#if HAVE_TYPEOF +/* Only a simple type can have 0 assigned, so test that. */ +#define STR_MAX_CHARS_TCHECK_(type_or_expr) \ + (sizeof(({ typeof(type_or_expr) x = 0; x; }))*0) +#else +#define STR_MAX_CHARS_TCHECK_(type_or_expr) 0 +#endif + +/** + * cisalnum - isalnum() which takes a char (and doesn't accept EOF) + * @c: a character + * + * Surprisingly, the standard ctype.h isalnum() takes an int, which + * must have the value of EOF (-1) or an unsigned char. This variant + * takes a real char, and doesn't accept EOF. + */ +static inline bool cisalnum(char c) +{ + return isalnum((unsigned char)c); +} +static inline bool cisalpha(char c) +{ + return isalpha((unsigned char)c); +} +static inline bool cisascii(char c) +{ + return isascii((unsigned char)c); +} +#if HAVE_ISBLANK +static inline bool cisblank(char c) +{ + return isblank((unsigned char)c); +} +#endif +static inline bool ciscntrl(char c) +{ + return iscntrl((unsigned char)c); +} +static inline bool cisdigit(char c) +{ + return isdigit((unsigned char)c); +} +static inline bool cisgraph(char c) +{ + return isgraph((unsigned char)c); +} +static inline bool cislower(char c) +{ + return islower((unsigned char)c); +} +static inline bool cisprint(char c) +{ + return isprint((unsigned char)c); +} +static inline bool cispunct(char c) +{ + return ispunct((unsigned char)c); +} +static inline bool cisspace(char c) +{ + return isspace((unsigned char)c); +} +static inline bool cisupper(char c) +{ + return isupper((unsigned char)c); +} +static inline bool cisxdigit(char c) +{ + return isxdigit((unsigned char)c); +} + +#include "str_debug.h" + +/* These checks force things out of line, hence they are under DEBUG. */ +#ifdef CCAN_STR_DEBUG +#include + +/* These are commonly misused: they take -1 or an *unsigned* char value. */ +#undef isalnum +#undef isalpha +#undef isascii +#undef isblank +#undef iscntrl +#undef isdigit +#undef isgraph +#undef islower +#undef isprint +#undef ispunct +#undef isspace +#undef isupper +#undef isxdigit + +/* You can use a char if char is unsigned. */ +#if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF +#define str_check_arg_(i) \ + ((i) + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(i), \ + char) \ + || (char)255 > 0)) +#else +#define str_check_arg_(i) (i) +#endif + +#define isalnum(i) str_isalnum(str_check_arg_(i)) +#define isalpha(i) str_isalpha(str_check_arg_(i)) +#define isascii(i) str_isascii(str_check_arg_(i)) +#if HAVE_ISBLANK +#define isblank(i) str_isblank(str_check_arg_(i)) +#endif +#define iscntrl(i) str_iscntrl(str_check_arg_(i)) +#define isdigit(i) str_isdigit(str_check_arg_(i)) +#define isgraph(i) str_isgraph(str_check_arg_(i)) +#define islower(i) str_islower(str_check_arg_(i)) +#define isprint(i) str_isprint(str_check_arg_(i)) +#define ispunct(i) str_ispunct(str_check_arg_(i)) +#define isspace(i) str_isspace(str_check_arg_(i)) +#define isupper(i) str_isupper(str_check_arg_(i)) +#define isxdigit(i) str_isxdigit(str_check_arg_(i)) + +#if HAVE_TYPEOF +/* With GNU magic, we can make const-respecting standard string functions. */ +#undef strstr +#undef strchr +#undef strrchr + +/* + 0 is needed to decay array into pointer. */ +#define strstr(haystack, needle) \ + ((typeof((haystack) + 0))str_strstr((haystack), (needle))) +#define strchr(haystack, c) \ + ((typeof((haystack) + 0))str_strchr((haystack), (c))) +#define strrchr(haystack, c) \ + ((typeof((haystack) + 0))str_strrchr((haystack), (c))) +#endif +#endif /* CCAN_STR_DEBUG */ + +#endif /* CCAN_STR_H */ diff --git a/nostrdb/ccan/ccan/structeq/structeq.h b/nostrdb/ccan/ccan/structeq/structeq.h new file mode 100644 index 000000000..bb7014651 --- /dev/null +++ b/nostrdb/ccan/ccan/structeq/structeq.h @@ -0,0 +1,46 @@ +/* MIT (BSD) license - see LICENSE file for details */ +#ifndef CCAN_STRUCTEQ_H +#define CCAN_STRUCTEQ_H +#include "build_assert.h" +#include "cppmagic.h" +#include +#include + +/** + * STRUCTEQ_DEF - define an ..._eq function to compare two structures. + * @sname: name of the structure, and function (_eq) to define. + * @padbytes: number of bytes of expected padding, or negative "max". + * @...: name of every member of the structure. + * + * This generates a single memcmp() call in the common case where the + * structure contains no padding. Since it can't tell the difference between + * padding and a missing member, @padbytes can be used to assert that + * there isn't any, or how many we expect. A negative number means + * "up to or equal to that amount of padding", as padding can be + * platform dependent. + */ +#define STRUCTEQ_DEF(sname, padbytes, ...) \ +static inline bool CPPMAGIC_GLUE2(sname, _eq)(const struct sname *_a, \ + const struct sname *_b) \ +{ \ + BUILD_ASSERT(((padbytes) < 0 && \ + CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ + __VA_ARGS__)) \ + - (padbytes) >= sizeof(*_a)) \ + || CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ + __VA_ARGS__)) \ + + (padbytes) == sizeof(*_a)); \ + if (CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, __VA_ARGS__)) \ + == sizeof(*_a)) \ + return memcmp(_a, _b, sizeof(*_a)) == 0; \ + else \ + return CPPMAGIC_JOIN(&&, \ + CPPMAGIC_MAP(STRUCTEQ_MEMBER_CMP_, \ + __VA_ARGS__)); \ +} + +/* Helpers */ +#define STRUCTEQ_MEMBER_SIZE_(m) sizeof((_a)->m) +#define STRUCTEQ_MEMBER_CMP_(m) memcmp(&_a->m, &_b->m, sizeof(_a->m)) == 0 + +#endif /* CCAN_STRUCTEQ_H */ diff --git a/nostrdb/ccan/ccan/take/take.c b/nostrdb/ccan/ccan/take/take.c new file mode 100644 index 000000000..3b59db081 --- /dev/null +++ b/nostrdb/ccan/ccan/take/take.c @@ -0,0 +1,126 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#include "take.h" +#include "likely.h" +#include +#include +#include + +static const void **takenarr; +static const char **labelarr; +static size_t max_taken, num_taken; +static size_t allocfail; +static void (*allocfailfn)(const void *p); + +void *take_(const void *p, const char *label) +{ + /* Overallocate: it's better than risking calloc returning NULL! */ + if (unlikely(label && !labelarr)) + labelarr = calloc(max_taken+1, sizeof(*labelarr)); + + if (unlikely(num_taken == max_taken)) { + const void **new; + + new = realloc(takenarr, sizeof(*takenarr) * (max_taken+1)); + if (unlikely(!new)) { + if (allocfailfn) { + allocfail++; + allocfailfn(p); + return NULL; + } + /* Otherwise we leak p. */ + return (void *)p; + } + takenarr = new; + /* Once labelarr is set, we maintain it. */ + if (labelarr) { + const char **labelarr_new; + labelarr_new = realloc(labelarr, + sizeof(*labelarr) * (max_taken+1)); + if (labelarr_new) { + labelarr = labelarr_new; + } else { + /* num_taken will be out of sync with the size of + * labelarr after realloc failure. + * Just pretend that we never had labelarr allocated. */ + free(labelarr); + labelarr = NULL; + } + } + max_taken++; + } + if (unlikely(labelarr)) + labelarr[num_taken] = label; + takenarr[num_taken++] = p; + + return (void *)p; +} + +static size_t find_taken(const void *p) +{ + size_t i; + + for (i = 0; i < num_taken; i++) { + if (takenarr[i] == p) + return i+1; + } + return 0; +} + +bool taken(const void *p) +{ + size_t i; + + if (!p && unlikely(allocfail)) { + allocfail--; + return true; + } + + i = find_taken(p); + if (!i) + return false; + + memmove(&takenarr[i-1], &takenarr[i], + (--num_taken - (i - 1))*sizeof(takenarr[0])); + return true; +} + +bool is_taken(const void *p) +{ + if (!p && unlikely(allocfail)) + return true; + + return find_taken(p) > 0; +} + +const char *taken_any(void) +{ + static char pointer_buf[32]; + + if (num_taken == 0) + return NULL; + + /* We're *allowed* to have some with labels, some without. */ + if (labelarr) { + size_t i; + for (i = 0; i < num_taken; i++) + if (labelarr[i]) + return labelarr[i]; + } + + sprintf(pointer_buf, "%p", takenarr[0]); + return pointer_buf; +} + +void take_cleanup(void) +{ + max_taken = num_taken = 0; + free(takenarr); + takenarr = NULL; + free(labelarr); + labelarr = NULL; +} + +void take_allocfail(void (*fn)(const void *p)) +{ + allocfailfn = fn; +} diff --git a/nostrdb/ccan/ccan/take/take.h b/nostrdb/ccan/ccan/take/take.h new file mode 100644 index 000000000..3de6f99de --- /dev/null +++ b/nostrdb/ccan/ccan/take/take.h @@ -0,0 +1,136 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_TAKE_H +#define CCAN_TAKE_H +#include "../config.h" +#include +#include "str.h" + +#ifdef CCAN_TAKE_DEBUG +#define TAKE_LABEL(p) __FILE__ ":" stringify(__LINE__) ":" stringify(p) +#else +#define TAKE_LABEL(p) NULL +#endif + +/** + * TAKES - annotate a formal parameter as being take()-able + * + * This doesn't do anything, but useful for documentation. + * + * Example: + * void print_string(const char *str TAKES); + * + */ +#define TAKES + +/** + * take - record a pointer to be consumed by the function its handed to. + * @p: the pointer to mark, or NULL. + * + * This marks a pointer object to be freed by the called function, + * which is extremely useful for chaining functions. It works on + * NULL, for pass-through error handling. + */ +#define take(p) (take_typeof(p) take_((p), TAKE_LABEL(p))) + +/** + * taken - check (and un-take) a pointer was passed with take() + * @p: the pointer to check. + * + * A function which accepts take() arguments uses this to see if it + * should own the pointer; it will be removed from the take list, so + * this only returns true once. + * + * Example: + * // Silly routine to add 1 + * static int *add_one(const int *num TAKES) + * { + * int *ret; + * if (taken(num)) + * ret = (int *)num; + * else + * ret = malloc(sizeof(int)); + * if (ret) + * *ret = (*num) + 1; + * return ret; + * } + */ +bool taken(const void *p); + +/** + * is_taken - check if a pointer was passed with take() + * @p: the pointer to check. + * + * This is like the above, but doesn't remove it from the taken list. + * + * Example: + * // Silly routine to add 1: doesn't handle taken args! + * static int *add_one_notake(const int *num) + * { + * int *ret = malloc(sizeof(int)); + * assert(!is_taken(num)); + * if (ret) + * *ret = (*num) + 1; + * return ret; + * } + */ +bool is_taken(const void *p); + +/** + * taken_any - are there any taken pointers? + * + * Mainly useful for debugging take() leaks. With CCAN_TAKE_DEBUG, returns + * the label where the pointer was passed to take(), otherwise returns + * a static char buffer with the pointer value in it. NULL if none are taken. + * + * Example: + * static void cleanup(void) + * { + * assert(!taken_any()); + * } + */ +const char *taken_any(void); + +/** + * take_cleanup - remove all taken pointers from list. + * + * This is useful in atexit() handlers for valgrind-style leak detection. + * + * Example: + * static void cleanup2(void) + * { + * take_cleanup(); + * } + */ +void take_cleanup(void); + +/** + * take_allocfail - set function to call if we can't reallocated taken array. + * @fn: the function. + * + * If this is not set, then if the array reallocation fails, the + * pointer won't be marked taken(). If @fn returns, it is expected to + * free the pointer; we return NULL from take() and the function handles + * it like any allocation failure. + * + * Example: + * static void free_on_fail(const void *p) + * { + * free((void *)p); + * } + * + * static void init(void) + * { + * take_allocfail(free_on_fail); + * } + */ +void take_allocfail(void (*fn)(const void *p)); + +/* Private functions */ +#if HAVE_TYPEOF +#define take_typeof(ptr) (__typeof__(ptr)) +#else +#define take_typeof(ptr) +#endif + +void *take_(const void *p, const char *label); +#endif /* CCAN_TAKE_H */ diff --git a/nostrdb/ccan/ccan/tal/str/str.c b/nostrdb/ccan/ccan/tal/str/str.c new file mode 100644 index 000000000..1fb66858e --- /dev/null +++ b/nostrdb/ccan/ccan/tal/str/str.c @@ -0,0 +1,315 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#include +#include +#include +#include +#include +#include "talstr.h" +#include +#include +#include +#include +#include +#include "str.h" + +char *tal_strdup_(const tal_t *ctx, const char *p, const char *label) +{ + /* We have to let through NULL for take(). */ + return tal_dup_arr_label(ctx, char, p, p ? strlen(p) + 1: 1, 0, label); +} + +char *tal_strndup_(const tal_t *ctx, const char *p, size_t n, const char *label) +{ + size_t len; + char *ret; + + /* We have to let through NULL for take(). */ + if (likely(p)) + len = strnlen(p, n); + else + len = n; + + ret = tal_dup_arr_label(ctx, char, p, len, 1, label); + if (ret) + ret[len] = '\0'; + return ret; +} + +char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt, ...) +{ + va_list ap; + char *ret; + + va_start(ap, fmt); + ret = tal_vfmt_(ctx, fmt, ap, label); + va_end(ap); + + return ret; +} + +static bool do_vfmt(char **buf, size_t off, const char *fmt, va_list ap) +{ + /* A decent guess to start. */ + size_t max = strlen(fmt) * 2 + 1; + bool ok; + + for (;;) { + va_list ap2; + int ret; + + if (!tal_resize(buf, off + max)) { + ok = false; + break; + } + + va_copy(ap2, ap); + ret = vsnprintf(*buf + off, max, fmt, ap2); + va_end(ap2); + + if (ret < max) { + ok = true; + /* Make sure tal_count() is correct! */ + tal_resize(buf, off + ret + 1); + break; + } + max *= 2; + } + + if (taken(fmt)) + tal_free(fmt); + return ok; +} + +char *tal_vfmt_(const tal_t *ctx, const char *fmt, va_list ap, const char *label) +{ + char *buf; + + if (!fmt && taken(fmt)) + return NULL; + + /* A decent guess to start. */ + buf = tal_arr_label(ctx, char, strlen(fmt) * 2, label); + if (!do_vfmt(&buf, 0, fmt, ap)) + buf = tal_free(buf); + return buf; +} + +bool tal_append_vfmt(char **baseptr, const char *fmt, va_list ap) +{ + if (!fmt && taken(fmt)) + return false; + + return do_vfmt(baseptr, strlen(*baseptr), fmt, ap); +} + +bool tal_append_fmt(char **baseptr, const char *fmt, ...) +{ + va_list ap; + bool ret; + + va_start(ap, fmt); + ret = tal_append_vfmt(baseptr, fmt, ap); + va_end(ap); + + return ret; +} + +char *tal_strcat_(const tal_t *ctx, const char *s1, const char *s2, + const char *label) +{ + size_t len1, len2; + char *ret; + + if (unlikely(!s2) && taken(s2)) { + if (taken(s1)) + tal_free(s1); + return NULL; + } + /* We have to let through NULL for take(). */ + len1 = s1 ? strlen(s1) : 0; + len2 = strlen(s2); + + ret = tal_dup_arr_label(ctx, char, s1, len1, len2 + 1, label); + if (likely(ret)) + memcpy(ret + len1, s2, len2 + 1); + + if (taken(s2)) + tal_free(s2); + return ret; +} + +char **tal_strsplit_(const tal_t *ctx, + const char *string, const char *delims, enum strsplit flags, + const char *label) +{ + char **parts, *str; + size_t max = 64, num = 0; + + parts = tal_arr(ctx, char *, max + 1); + if (unlikely(!parts)) { + if (taken(string)) + tal_free(string); + if (taken(delims)) + tal_free(delims); + return NULL; + } + str = tal_strdup(parts, string); + if (unlikely(!str)) + goto fail; + if (unlikely(!delims) && is_taken(delims)) + goto fail; + + if (flags == STR_NO_EMPTY) + str += strspn(str, delims); + + while (*str != '\0') { + size_t len = strcspn(str, delims), dlen; + + parts[num] = str; + dlen = strspn(str + len, delims); + parts[num][len] = '\0'; + if (flags == STR_EMPTY_OK && dlen) + dlen = 1; + str += len + dlen; + if (++num == max && !tal_resize(&parts, max*=2 + 1)) + goto fail; + } + parts[num] = NULL; + + /* Ensure that tal_count() is correct. */ + if (unlikely(!tal_resize(&parts, num+1))) + goto fail; + + if (taken(delims)) + tal_free(delims); + return parts; + +fail: + tal_free(parts); + if (taken(delims)) + tal_free(delims); + return NULL; +} + +char *tal_strjoin_(const tal_t *ctx, + char *strings[], const char *delim, enum strjoin flags, + const char *label) +{ + unsigned int i; + char *ret = NULL; + size_t totlen = 0, dlen; + + if (unlikely(!strings) && is_taken(strings)) + goto fail; + + if (unlikely(!delim) && is_taken(delim)) + goto fail; + + dlen = strlen(delim); + ret = tal_arr_label(ctx, char, dlen*2+1, label); + if (!ret) + goto fail; + + ret[0] = '\0'; + for (i = 0; strings[i]; i++) { + size_t len = strlen(strings[i]); + + if (flags == STR_NO_TRAIL && !strings[i+1]) + dlen = 0; + if (!tal_resize(&ret, totlen + len + dlen + 1)) + goto fail; + memcpy(ret + totlen, strings[i], len); + totlen += len; + memcpy(ret + totlen, delim, dlen); + totlen += dlen; + } + ret[totlen] = '\0'; + /* Make sure tal_count() is correct! */ + tal_resize(&ret, totlen+1); +out: + if (taken(strings)) + tal_free(strings); + if (taken(delim)) + tal_free(delim); + return ret; +fail: + ret = tal_free(ret); + goto out; +} + +static size_t count_open_braces(const char *string) +{ +#if 1 + size_t num = 0, esc = 0; + + while (*string) { + if (*string == '\\') + esc++; + else { + /* An odd number of \ means it's escaped. */ + if (*string == '(' && (esc & 1) == 0) + num++; + esc = 0; + } + string++; + } + return num; +#else + return strcount(string, "("); +#endif +} + +bool tal_strreg_(const tal_t *ctx, const char *string, const char *label, + const char *regex, ...) +{ + size_t nmatch = 1 + count_open_braces(regex); + regmatch_t matches[nmatch]; + regex_t r; + bool ret = false; + unsigned int i; + va_list ap; + + if (unlikely(!regex) && is_taken(regex)) + goto fail_no_re; + + if (regcomp(&r, regex, REG_EXTENDED) != 0) + goto fail_no_re; + + if (unlikely(!string) && is_taken(string)) + goto fail; + + if (regexec(&r, string, nmatch, matches, 0) != 0) + goto fail; + + ret = true; + va_start(ap, regex); + for (i = 1; i < nmatch; i++) { + char **arg = va_arg(ap, char **); + if (arg) { + /* eg. ([a-z])? can give "no match". */ + if (matches[i].rm_so == -1) + *arg = NULL; + else { + *arg = tal_strndup_(ctx, + string + matches[i].rm_so, + matches[i].rm_eo + - matches[i].rm_so, + label); + /* FIXME: If we fail, we set some and leak! */ + if (!*arg) { + ret = false; + break; + } + } + } + } + va_end(ap); +fail: + regfree(&r); +fail_no_re: + if (taken(regex)) + tal_free(regex); + if (taken(string)) + tal_free(string); + return ret; +} diff --git a/nostrdb/ccan/ccan/tal/str/str.h b/nostrdb/ccan/ccan/tal/str/str.h new file mode 100644 index 000000000..fbf53a86c --- /dev/null +++ b/nostrdb/ccan/ccan/tal/str/str.h @@ -0,0 +1,225 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#ifndef CCAN_STR_TAL_H +#define CCAN_STR_TAL_H +#ifdef TAL_USE_TALLOC +#include +#else +#include "tal.h" +#endif +#include +#include + +/** + * tal_strdup - duplicate a string + * @ctx: NULL, or tal allocated object to be parent. + * @p: the string to copy (can be take()). + * + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_strdup(ctx, p) tal_strdup_(ctx, p, TAL_LABEL(char, "[]")) +char *tal_strdup_(const tal_t *ctx, const char *p TAKES, const char *label); + +/** + * tal_strndup - duplicate a limited amount of a string. + * @ctx: NULL, or tal allocated object to be parent. + * @p: the string to copy (can be take()). + * @n: the maximum length to copy. + * + * Always gives a nul-terminated string, with strlen() <= @n. + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_strndup(ctx, p, n) tal_strndup_(ctx, p, n, TAL_LABEL(char, "[]")) +char *tal_strndup_(const tal_t *ctx, const char *p TAKES, size_t n, + const char *label); + +/** + * tal_fmt - allocate a formatted string + * @ctx: NULL, or tal allocated object to be parent. + * @fmt: the printf-style format (can be take()). + * + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_fmt(ctx, ...) \ + tal_fmt_(ctx, TAL_LABEL(char, "[]"), __VA_ARGS__) +char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt TAKES, + ...) PRINTF_FMT(3,4); + +/** + * tal_vfmt - allocate a formatted string (va_list version) + * @ctx: NULL, or tal allocated object to be parent. + * @fmt: the printf-style format (can be take()). + * @va: the va_list containing the format args. + * + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_vfmt(ctx, fmt, va) \ + tal_vfmt_(ctx, fmt, va, TAL_LABEL(char, "[]")) +char *tal_vfmt_(const tal_t *ctx, const char *fmt TAKES, va_list ap, + const char *label) + PRINTF_FMT(2,0); + +/** + * tal_append_fmt - append a formatted string to a talloc string. + * @baseptr: a pointer to the tal string to be appended to. + * @fmt: the printf-style format (can be take()). + * + * Returns false on allocation failure. + * Otherwise tal_count(*@baseptr) == strlen(*@baseptr) + 1. + */ +bool tal_append_fmt(char **baseptr, const char *fmt TAKES, ...) PRINTF_FMT(2,3); + +/** + * tal_append_vfmt - append a formatted string to a talloc string (va_list) + * @baseptr: a pointer to the tal string to be appended to. + * @fmt: the printf-style format (can be take()). + * @va: the va_list containing the format args. + * + * Returns false on allocation failure. + * Otherwise tal_count(*@baseptr) == strlen(*@baseptr) + 1. + */ +bool tal_append_vfmt(char **baseptr, const char *fmt TAKES, va_list ap); + +/** + * tal_strcat - join two strings together + * @ctx: NULL, or tal allocated object to be parent. + * @s1: the first string (can be take()). + * @s2: the second string (can be take()). + * + * The returned string will have tal_count() == strlen() + 1. + */ +#define tal_strcat(ctx, s1, s2) tal_strcat_(ctx, s1, s2, TAL_LABEL(char, "[]")) +char *tal_strcat_(const tal_t *ctx, const char *s1 TAKES, const char *s2 TAKES, + const char *label); + +enum strsplit { + STR_EMPTY_OK, + STR_NO_EMPTY +}; + +/** + * tal_strsplit - Split string into an array of substrings + * @ctx: the context to tal from (often NULL). + * @string: the string to split (can be take()). + * @delims: delimiters where lines should be split (can be take()). + * @flags: whether to include empty substrings. + * + * This function splits a single string into multiple strings. + * + * If @string is take(), the returned array will point into the + * mangled @string. + * + * Multiple delimiters result in empty substrings. By definition, no + * delimiters will appear in the substrings. + * + * The final char * in the array will be NULL, and tal_count() will + * return the number of elements plus 1 (for that NULL). + * + * Example: + * #include + * ... + * static unsigned int count_long_lines(const char *string) + * { + * char **lines; + * unsigned int i, long_lines = 0; + * + * // Can only fail on out-of-memory. + * lines = tal_strsplit(NULL, string, "\n", STR_NO_EMPTY); + * for (i = 0; lines[i] != NULL; i++) + * if (strlen(lines[i]) > 80) + * long_lines++; + * tal_free(lines); + * return long_lines; + * } + */ +#define tal_strsplit(ctx, string, delims, flag) \ + tal_strsplit_(ctx, string, delims, flag, TAL_LABEL(char *, "[]")) +char **tal_strsplit_(const tal_t *ctx, + const char *string TAKES, + const char *delims TAKES, + enum strsplit flag, + const char *label); + +enum strjoin { + STR_TRAIL, + STR_NO_TRAIL +}; + +/** + * tal_strjoin - Join an array of substrings into one long string + * @ctx: the context to tal from (often NULL). + * @strings: the NULL-terminated array of strings to join (can be take()) + * @delim: the delimiter to insert between the strings (can be take()) + * @flags: whether to add a delimieter to the end + * + * This function joins an array of strings into a single string. The + * return value is allocated using tal. Each string in @strings is + * followed by a copy of @delim. + * + * The returned string will have tal_count() == strlen() + 1. + * + * Example: + * // Append the string "--EOL" to each line. + * static char *append_to_all_lines(const char *string) + * { + * char **lines, *ret; + * + * lines = tal_strsplit(NULL, string, "\n", STR_EMPTY_OK); + * ret = tal_strjoin(NULL, lines, "-- EOL\n", STR_TRAIL); + * tal_free(lines); + * return ret; + * } + */ +#define tal_strjoin(ctx, strings, delim, flags) \ + tal_strjoin_(ctx, strings, delim, flags, TAL_LABEL(char, "[]")) +char *tal_strjoin_(const void *ctx, + char *strings[] TAKES, + const char *delim TAKES, + enum strjoin flags, + const char *label); + +/** + * tal_strreg - match/extract from a string via (extended) regular expressions. + * @ctx: the context to tal from (often NULL) + * @string: the string to try to match (can be take()) + * @regex: the regular expression to match (can be take()) + * ...: pointers to strings to allocate for subexpressions. + * + * Returns true if we matched, in which case any parenthesized + * expressions in @regex are allocated and placed in the char ** + * arguments following @regex. NULL arguments mean the match is not + * saved. The order of the strings is the order + * of opening braces in the expression: in the case of repeated + * expressions (eg "([a-z])*") the last one is saved, in the case of + * non-existent matches (eg "([a-z]*)?") the pointer is set to NULL. + * + * Allocation failures or malformed regular expressions return false. + * The allocated strings will have tal_count() == strlen() + 1. + * + * See Also: + * regcomp(3), regex(3). + * + * Example: + * // Given "My name is Rusty" outputs "Hello Rusty!\n" + * // Given "my first name is Rusty Russell" outputs "Hello Rusty Russell!\n" + * // Given "My name isnt Rusty Russell" outputs "Hello there!\n" + * int main(int argc, char *argv[]) + * { + * char *person, *input; + * + * (void)argc; + * // Join args and trim trailing space. + * input = tal_strjoin(NULL, argv+1, " ", STR_NO_TRAIL); + * if (tal_strreg(NULL, input, + * "[Mm]y (first )?name is ([A-Za-z ]+)", + * NULL, &person)) + * printf("Hello %s!\n", person); + * else + * printf("Hello there!\n"); + * return 0; + * } + */ +#define tal_strreg(ctx, string, ...) \ + tal_strreg_(ctx, string, TAL_LABEL(char, "[]"), __VA_ARGS__) +bool tal_strreg_(const void *ctx, const char *string TAKES, + const char *label, const char *regex, ...); +#endif /* CCAN_STR_TAL_H */ diff --git a/nostrdb/ccan/ccan/tal/tal.c b/nostrdb/ccan/ccan/tal/tal.c new file mode 100644 index 000000000..516b44049 --- /dev/null +++ b/nostrdb/ccan/ccan/tal/tal.c @@ -0,0 +1,972 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#include "tal.h" +#include "../compiler.h" +#include "list.h" +#include "alignof.h" + +#include +#include +#include +#include +#include +#include +#include + +//#define TAL_DEBUG 1 + +#define NOTIFY_IS_DESTRUCTOR 512 +#define NOTIFY_EXTRA_ARG 1024 + +/* This makes our parent_child ptr stand out for to_tal_hdr checks */ +#define TAL_PTR_OBFUSTICATOR ((intptr_t)0x1984200820142016ULL) + +/* 32-bit type field, first byte 0 in either endianness. */ +enum prop_type { + CHILDREN = 0x00c1d500, + NAME = 0x00111100, + NOTIFIER = 0x00071f00, +}; + +struct tal_hdr { + struct list_node list; + struct prop_hdr *prop; + /* XOR with TAL_PTR_OBFUSTICATOR */ + intptr_t parent_child; + size_t bytelen; +}; + +struct prop_hdr { + enum prop_type type; + struct prop_hdr *next; +}; + +struct children { + struct prop_hdr hdr; /* CHILDREN */ + struct tal_hdr *parent; + struct list_head children; /* Head of siblings. */ +}; + +struct name { + struct prop_hdr hdr; /* NAME */ + char name[]; +}; + +struct notifier { + struct prop_hdr hdr; /* NOTIFIER */ + enum tal_notify_type types; + union notifier_cb { + void (*notifyfn)(tal_t *, enum tal_notify_type, void *); + void (*destroy)(tal_t *); /* If NOTIFY_IS_DESTRUCTOR set */ + void (*destroy2)(tal_t *, void *); /* If NOTIFY_EXTRA_ARG */ + } u; +}; + +/* Extra arg */ +struct notifier_extra_arg { + struct notifier n; + void *arg; +}; + +#define EXTRA_ARG(n) (((struct notifier_extra_arg *)(n))->arg) + +static struct { + struct tal_hdr hdr; + struct children c; +} null_parent = { { { &null_parent.hdr.list, &null_parent.hdr.list }, + &null_parent.c.hdr, TAL_PTR_OBFUSTICATOR, 0 }, + { { CHILDREN, NULL }, + &null_parent.hdr, + { { &null_parent.c.children.n, + &null_parent.c.children.n } } + } +}; + + +static void *(*allocfn)(size_t size) = malloc; +static void *(*resizefn)(void *, size_t size) = realloc; +static void (*freefn)(void *) = free; +static void (*errorfn)(const char *msg) = (void *)abort; +/* Count on non-destrutor notifiers; often stays zero. */ +static size_t notifiers = 0; + +static inline void COLD call_error(const char *msg) +{ + errorfn(msg); +} + +static bool get_destroying_bit(intptr_t parent_child) +{ + return parent_child & 1; +} + +static void set_destroying_bit(intptr_t *parent_child) +{ + *parent_child |= 1; +} + +static struct children *ignore_destroying_bit(intptr_t parent_child) +{ + return (void *)((parent_child ^ TAL_PTR_OBFUSTICATOR) & ~(intptr_t)1); +} + +/* This means valgrind can see leaks. */ +void tal_cleanup(void) +{ + struct tal_hdr *i; + + while ((i = list_top(&null_parent.c.children, struct tal_hdr, list))) { + list_del(&i->list); + memset(i, 0, sizeof(*i)); + } + + /* Cleanup any taken pointers. */ + take_cleanup(); +} + +/* We carefully start all real properties with a zero byte. */ +static bool is_literal(const struct prop_hdr *prop) +{ + return ((char *)prop)[0] != 0; +} + +#ifndef NDEBUG +static const void *bounds_start, *bounds_end; + +static void update_bounds(const void *new, size_t size) +{ + if (unlikely(!bounds_start)) { + bounds_start = new; + bounds_end = (char *)new + size; + } else if (new < bounds_start) + bounds_start = new; + else if ((char *)new + size > (char *)bounds_end) + bounds_end = (char *)new + size; +} + +static bool in_bounds(const void *p) +{ + return !p + || (p >= (void *)&null_parent && p <= (void *)(&null_parent + 1)) + || (p >= bounds_start && p <= bounds_end); +} +#else +static void update_bounds(const void *new, size_t size) +{ +} + +static bool in_bounds(const void *p) +{ + return true; +} +#endif + +static void check_bounds(const void *p) +{ + if (!in_bounds(p)) + call_error("Not a valid header"); +} + +static struct tal_hdr *to_tal_hdr(const void *ctx) +{ + struct tal_hdr *t; + + t = (struct tal_hdr *)((char *)ctx - sizeof(struct tal_hdr)); + check_bounds(t); + check_bounds(ignore_destroying_bit(t->parent_child)); + check_bounds(t->list.next); + check_bounds(t->list.prev); + if (t->prop && !is_literal(t->prop)) + check_bounds(t->prop); + return t; +} + +static struct tal_hdr *to_tal_hdr_or_null(const void *ctx) +{ + if (!ctx) + return &null_parent.hdr; + return to_tal_hdr(ctx); +} + +static void *from_tal_hdr(const struct tal_hdr *hdr) +{ + return (void *)(hdr + 1); +} + +static void *from_tal_hdr_or_null(const struct tal_hdr *hdr) +{ + if (hdr == &null_parent.hdr) + return NULL; + return from_tal_hdr(hdr); +} + +#ifdef TAL_DEBUG +static struct tal_hdr *debug_tal(struct tal_hdr *tal) +{ + tal_check(from_tal_hdr_or_null(tal), "TAL_DEBUG "); + return tal; +} +#else +static struct tal_hdr *debug_tal(struct tal_hdr *tal) +{ + return tal; +} +#endif + +static void notify(const struct tal_hdr *ctx, + enum tal_notify_type type, const void *info, + int saved_errno) +{ + const struct prop_hdr *p; + + for (p = ctx->prop; p; p = p->next) { + struct notifier *n; + + if (is_literal(p)) + break; + if (p->type != NOTIFIER) + continue; + n = (struct notifier *)p; + if (n->types & type) { + errno = saved_errno; + if (n->types & NOTIFY_IS_DESTRUCTOR) { + /* Blatt this notifier in case it tries to + * tal_del_destructor() from inside */ + union notifier_cb cb = n->u; + /* It's a union, so this NULLs destroy2 too! */ + n->u.destroy = NULL; + if (n->types & NOTIFY_EXTRA_ARG) + cb.destroy2(from_tal_hdr(ctx), + EXTRA_ARG(n)); + else + cb.destroy(from_tal_hdr(ctx)); + } else + n->u.notifyfn(from_tal_hdr_or_null(ctx), type, + (void *)info); + } + } +} + +static void *allocate(size_t size) +{ + void *ret = allocfn(size); + if (!ret) + call_error("allocation failed"); + else + update_bounds(ret, size); + return ret; +} + +static struct prop_hdr **find_property_ptr(const struct tal_hdr *t, + enum prop_type type) +{ + struct prop_hdr **p; + + for (p = (struct prop_hdr **)&t->prop; *p; p = &(*p)->next) { + if (is_literal(*p)) { + if (type == NAME) + return p; + break; + } + if ((*p)->type == type) + return p; + } + return NULL; +} + +static void *find_property(const struct tal_hdr *parent, enum prop_type type) +{ + struct prop_hdr **p = find_property_ptr(parent, type); + + if (p) + return *p; + return NULL; +} + +static void init_property(struct prop_hdr *hdr, + struct tal_hdr *parent, + enum prop_type type) +{ + hdr->type = type; + hdr->next = parent->prop; + parent->prop = hdr; +} + +static struct notifier *add_notifier_property(struct tal_hdr *t, + enum tal_notify_type types, + void (*fn)(void *, + enum tal_notify_type, + void *), + void *extra_arg) +{ + struct notifier *prop; + + if (types & NOTIFY_EXTRA_ARG) + prop = allocate(sizeof(struct notifier_extra_arg)); + else + prop = allocate(sizeof(struct notifier)); + + if (prop) { + init_property(&prop->hdr, t, NOTIFIER); + prop->types = types; + prop->u.notifyfn = fn; + if (types & NOTIFY_EXTRA_ARG) + EXTRA_ARG(prop) = extra_arg; + } + return prop; +} + +static enum tal_notify_type del_notifier_property(struct tal_hdr *t, + void (*fn)(tal_t *, + enum tal_notify_type, + void *), + bool match_extra_arg, + void *extra_arg) +{ + struct prop_hdr **p; + + for (p = (struct prop_hdr **)&t->prop; *p; p = &(*p)->next) { + struct notifier *n; + enum tal_notify_type types; + + if (is_literal(*p)) + break; + if ((*p)->type != NOTIFIER) + continue; + n = (struct notifier *)*p; + if (n->u.notifyfn != fn) + continue; + + types = n->types; + if ((types & NOTIFY_EXTRA_ARG) + && match_extra_arg + && extra_arg != EXTRA_ARG(n)) + continue; + + *p = (*p)->next; + freefn(n); + return types & ~(NOTIFY_IS_DESTRUCTOR|NOTIFY_EXTRA_ARG); + } + return 0; +} + +static struct name *add_name_property(struct tal_hdr *t, const char *name) +{ + struct name *prop; + + prop = allocate(sizeof(*prop) + strlen(name) + 1); + if (prop) { + init_property(&prop->hdr, t, NAME); + strcpy(prop->name, name); + } + return prop; +} + +static struct children *add_child_property(struct tal_hdr *parent, + struct tal_hdr *child UNNEEDED) +{ + struct children *prop = allocate(sizeof(*prop)); + if (prop) { + init_property(&prop->hdr, parent, CHILDREN); + prop->parent = parent; + list_head_init(&prop->children); + } + return prop; +} + +static bool add_child(struct tal_hdr *parent, struct tal_hdr *child) +{ + struct children *children = find_property(parent, CHILDREN); + + if (!children) { + children = add_child_property(parent, child); + if (!children) + return false; + } + list_add(&children->children, &child->list); + child->parent_child = (intptr_t)children ^ TAL_PTR_OBFUSTICATOR; + return true; +} + +static void del_tree(struct tal_hdr *t, const tal_t *orig, int saved_errno) +{ + struct prop_hdr **prop, *p, *next; + + assert(!taken(from_tal_hdr(t))); + + /* Already being destroyed? Don't loop. */ + if (unlikely(get_destroying_bit(t->parent_child))) + return; + + set_destroying_bit(&t->parent_child); + + /* Call free notifiers. */ + notify(t, TAL_NOTIFY_FREE, (tal_t *)orig, saved_errno); + + /* Now free children and groups. */ + prop = find_property_ptr(t, CHILDREN); + if (prop) { + struct tal_hdr *i; + struct children *c = (struct children *)*prop; + + while ((i = list_top(&c->children, struct tal_hdr, list))) { + list_del(&i->list); + del_tree(i, orig, saved_errno); + } + } + + /* Finally free our properties. */ + for (p = t->prop; p && !is_literal(p); p = next) { + next = p->next; + freefn(p); + } + freefn(t); +} + +void *tal_alloc_(const tal_t *ctx, size_t size, bool clear, const char *label) +{ + struct tal_hdr *child, *parent = debug_tal(to_tal_hdr_or_null(ctx)); + + child = allocate(sizeof(struct tal_hdr) + size); + if (!child) + return NULL; + if (clear) + memset(from_tal_hdr(child), 0, size); + child->prop = (void *)label; + child->bytelen = size; + + if (!add_child(parent, child)) { + freefn(child); + return NULL; + } + debug_tal(parent); + if (notifiers) + notify(parent, TAL_NOTIFY_ADD_CHILD, from_tal_hdr(child), 0); + return from_tal_hdr(debug_tal(child)); +} + +static bool adjust_size(size_t *size, size_t count) +{ + const size_t extra = sizeof(struct tal_hdr); + + /* Multiplication wrap */ + if (count && unlikely(*size * count / *size != count)) + goto overflow; + + *size *= count; + + /* Make sure we don't wrap adding header. */ + if (*size + extra < extra) + goto overflow; + return true; +overflow: + call_error("allocation size overflow"); + return false; +} + +void *tal_alloc_arr_(const tal_t *ctx, size_t size, size_t count, bool clear, + const char *label) +{ + if (!adjust_size(&size, count)) + return NULL; + + return tal_alloc_(ctx, size, clear, label); +} + +void *tal_free(const tal_t *ctx) +{ + if (ctx) { + struct tal_hdr *t; + int saved_errno = errno; + t = debug_tal(to_tal_hdr(ctx)); + if (unlikely(get_destroying_bit(t->parent_child))) + return NULL; + if (notifiers) + notify(ignore_destroying_bit(t->parent_child)->parent, + TAL_NOTIFY_DEL_CHILD, ctx, saved_errno); + list_del(&t->list); + del_tree(t, ctx, saved_errno); + errno = saved_errno; + } + return NULL; +} + +void *tal_steal_(const tal_t *new_parent, const tal_t *ctx) +{ + if (ctx) { + struct tal_hdr *newpar, *t, *old_parent; + + newpar = debug_tal(to_tal_hdr_or_null(new_parent)); + t = debug_tal(to_tal_hdr(ctx)); + + /* Unlink it from old parent. */ + list_del(&t->list); + old_parent = ignore_destroying_bit(t->parent_child)->parent; + + if (unlikely(!add_child(newpar, t))) { + /* We can always add to old parent, because it has a + * children property already. */ + if (!add_child(old_parent, t)) + abort(); + return NULL; + } + debug_tal(newpar); + if (notifiers) + notify(t, TAL_NOTIFY_STEAL, new_parent, 0); + } + return (void *)ctx; +} + +bool tal_add_destructor_(const tal_t *ctx, void (*destroy)(void *me)) +{ + tal_t *t = debug_tal(to_tal_hdr(ctx)); + return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR, + (void *)destroy, NULL); +} + +bool tal_add_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), + void *arg) +{ + tal_t *t = debug_tal(to_tal_hdr(ctx)); + return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR + |NOTIFY_EXTRA_ARG, + (void *)destroy, arg); +} + +/* We could support notifiers with an extra arg, but we didn't add to API */ +bool tal_add_notifier_(const tal_t *ctx, enum tal_notify_type types, + void (*callback)(tal_t *, enum tal_notify_type, void *)) +{ + struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); + struct notifier *n; + + assert(types); + assert((types & ~(TAL_NOTIFY_FREE | TAL_NOTIFY_STEAL | TAL_NOTIFY_MOVE + | TAL_NOTIFY_RESIZE | TAL_NOTIFY_RENAME + | TAL_NOTIFY_ADD_CHILD | TAL_NOTIFY_DEL_CHILD + | TAL_NOTIFY_ADD_NOTIFIER + | TAL_NOTIFY_DEL_NOTIFIER)) == 0); + + /* Don't call notifier about itself: set types after! */ + n = add_notifier_property(t, 0, callback, NULL); + if (unlikely(!n)) + return false; + + if (notifiers) + notify(t, TAL_NOTIFY_ADD_NOTIFIER, callback, 0); + + n->types = types; + if (types != TAL_NOTIFY_FREE) + notifiers++; + return true; +} + +bool tal_del_notifier_(const tal_t *ctx, + void (*callback)(tal_t *, enum tal_notify_type, void *), + bool match_extra_arg, void *extra_arg) +{ + struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); + enum tal_notify_type types; + + types = del_notifier_property(t, callback, match_extra_arg, extra_arg); + if (types) { + notify(t, TAL_NOTIFY_DEL_NOTIFIER, callback, 0); + if (types != TAL_NOTIFY_FREE) + notifiers--; + return true; + } + return false; +} + +bool tal_del_destructor_(const tal_t *ctx, void (*destroy)(void *me)) +{ + return tal_del_notifier_(ctx, (void *)destroy, false, NULL); +} + +bool tal_del_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), + void *arg) +{ + return tal_del_notifier_(ctx, (void *)destroy, true, arg); +} + +bool tal_set_name_(tal_t *ctx, const char *name, bool literal) +{ + struct tal_hdr *t = debug_tal(to_tal_hdr(ctx)); + struct prop_hdr **prop = find_property_ptr(t, NAME); + + /* Get rid of any old name */ + if (prop) { + struct name *name = (struct name *)*prop; + if (is_literal(&name->hdr)) + *prop = NULL; + else { + *prop = name->hdr.next; + freefn(name); + } + } + + if (literal && name[0]) { + struct prop_hdr **p; + + /* Append literal. */ + for (p = &t->prop; *p && !is_literal(*p); p = &(*p)->next); + *p = (struct prop_hdr *)name; + } else if (!add_name_property(t, name)) + return false; + + debug_tal(t); + if (notifiers) + notify(t, TAL_NOTIFY_RENAME, name, 0); + return true; +} + +const char *tal_name(const tal_t *t) +{ + struct name *n; + + n = find_property(debug_tal(to_tal_hdr(t)), NAME); + if (!n) + return NULL; + + if (is_literal(&n->hdr)) + return (const char *)n; + return n->name; +} + +size_t tal_bytelen(const tal_t *ptr) +{ + /* NULL -> null_parent which has bytelen 0 */ + struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ptr)); + + return t->bytelen; +} + +/* Start one past first child: make stopping natural in circ. list. */ +static struct tal_hdr *first_child(struct tal_hdr *parent) +{ + struct children *child; + + child = find_property(parent, CHILDREN); + if (!child) + return NULL; + + return list_top(&child->children, struct tal_hdr, list); +} + +tal_t *tal_first(const tal_t *root) +{ + struct tal_hdr *c, *t = debug_tal(to_tal_hdr_or_null(root)); + + c = first_child(t); + if (!c) + return NULL; + return from_tal_hdr(c); +} + +tal_t *tal_next(const tal_t *prev) +{ + struct tal_hdr *next, *prevhdr = debug_tal(to_tal_hdr(prev)); + struct list_head *head; + + head = &ignore_destroying_bit(prevhdr->parent_child)->children; + next = list_next(head, prevhdr, list); + if (!next) + return NULL; + return from_tal_hdr(next); +} + +tal_t *tal_parent(const tal_t *ctx) +{ + struct tal_hdr *t; + + if (!ctx) + return NULL; + + t = debug_tal(to_tal_hdr(ctx)); + if (ignore_destroying_bit(t->parent_child)->parent == &null_parent.hdr) + return NULL; + return from_tal_hdr(ignore_destroying_bit(t->parent_child)->parent); +} + +bool tal_resize_(tal_t **ctxp, size_t size, size_t count, bool clear) +{ + struct tal_hdr *old_t, *t; + struct children *child; + + old_t = debug_tal(to_tal_hdr(*ctxp)); + + if (!adjust_size(&size, count)) + return false; + + t = resizefn(old_t, sizeof(struct tal_hdr) + size); + if (!t) { + call_error("Reallocation failure"); + return false; + } + + /* Clear between old end and new end. */ + if (clear && size > t->bytelen) { + char *old_end = (char *)(t + 1) + t->bytelen; + memset(old_end, 0, size - t->bytelen); + } + + /* Update length. */ + t->bytelen = size; + update_bounds(t, sizeof(struct tal_hdr) + size); + + /* If it didn't move, we're done! */ + if (t != old_t) { + /* Fix up linked list pointers. */ + t->list.next->prev = t->list.prev->next = &t->list; + + /* Copy take() property. */ + if (taken(from_tal_hdr(old_t))) + take(from_tal_hdr(t)); + + /* Fix up child property's parent pointer. */ + child = find_property(t, CHILDREN); + if (child) { + assert(child->parent == old_t); + child->parent = t; + } + *ctxp = from_tal_hdr(debug_tal(t)); + if (notifiers) + notify(t, TAL_NOTIFY_MOVE, from_tal_hdr(old_t), 0); + } + if (notifiers) + notify(t, TAL_NOTIFY_RESIZE, (void *)size, 0); + + return true; +} + +bool tal_expand_(tal_t **ctxp, const void *src, size_t size, size_t count) +{ + size_t old_len; + bool ret = false; + + old_len = debug_tal(to_tal_hdr(*ctxp))->bytelen; + + /* Check for additive overflow */ + if (old_len + count * size < old_len) { + call_error("dup size overflow"); + goto out; + } + + /* Don't point src inside thing we're expanding! */ + assert(src < *ctxp + || (char *)src >= (char *)(*ctxp) + old_len); + + if (!tal_resize_(ctxp, size, old_len/size + count, false)) + goto out; + + memcpy((char *)*ctxp + old_len, src, count * size); + ret = true; + +out: + if (taken(src)) + tal_free(src); + return ret; +} + +void *tal_dup_(const tal_t *ctx, const void *p, size_t size, + size_t n, size_t extra, bool nullok, const char *label) +{ + void *ret; + size_t nbytes = size; + + if (nullok && p == NULL) { + /* take(NULL) works. */ + (void)taken(p); + return NULL; + } + + if (!adjust_size(&nbytes, n)) { + if (taken(p)) + tal_free(p); + return NULL; + } + + /* Beware addition overflow! */ + if (n + extra < n) { + call_error("dup size overflow"); + if (taken(p)) + tal_free(p); + return NULL; + } + + if (taken(p)) { + if (unlikely(!p)) + return NULL; + if (unlikely(!tal_resize_((void **)&p, size, n + extra, false))) + return tal_free(p); + if (unlikely(!tal_steal(ctx, p))) + return tal_free(p); + return (void *)p; + } + + ret = tal_alloc_arr_(ctx, size, n + extra, false, label); + if (ret) + memcpy(ret, p, nbytes); + return ret; +} + +void *tal_dup_talarr_(const tal_t *ctx, const tal_t *src TAKES, const char *label) +{ + return tal_dup_(ctx, src, 1, tal_bytelen(src), 0, true, label); +} + +void tal_set_backend(void *(*alloc_fn)(size_t size), + void *(*resize_fn)(void *, size_t size), + void (*free_fn)(void *), + void (*error_fn)(const char *msg)) +{ + if (alloc_fn) + allocfn = alloc_fn; + if (resize_fn) + resizefn = resize_fn; + if (free_fn) + freefn = free_fn; + if (error_fn) + errorfn = error_fn; +} + +#ifdef CCAN_TAL_DEBUG +static void dump_node(unsigned int indent, const struct tal_hdr *t) +{ + unsigned int i; + const struct prop_hdr *p; + + for (i = 0; i < indent; i++) + fprintf(stderr, " "); + fprintf(stderr, "%p len=%zu", t, t->bytelen); + for (p = t->prop; p; p = p->next) { + struct children *c; + struct name *n; + struct notifier *no; + if (is_literal(p)) { + fprintf(stderr, " \"%s\"", (const char *)p); + break; + } + switch (p->type) { + case CHILDREN: + c = (struct children *)p; + fprintf(stderr, " CHILDREN(%p):parent=%p,children={%p,%p}", + p, c->parent, + c->children.n.prev, c->children.n.next); + break; + case NAME: + n = (struct name *)p; + fprintf(stderr, " NAME(%p):%s", p, n->name); + break; + case NOTIFIER: + no = (struct notifier *)p; + fprintf(stderr, " NOTIFIER(%p):fn=%p", p, no->u.notifyfn); + break; + default: + fprintf(stderr, " **UNKNOWN(%p):%i**", p, p->type); + } + } + fprintf(stderr, "\n"); +} + +static void tal_dump_(unsigned int level, const struct tal_hdr *t) +{ + struct children *children; + + dump_node(level, t); + + children = find_property(t, CHILDREN); + if (children) { + struct tal_hdr *i; + + list_for_each(&children->children, i, list) + tal_dump_(level + 1, i); + } +} + +void tal_dump(void) +{ + tal_dump_(0, &null_parent.hdr); +} +#endif /* CCAN_TAL_DEBUG */ + +#ifndef NDEBUG +static bool check_err(struct tal_hdr *t, const char *errorstr, + const char *errmsg) +{ + if (errorstr) { + /* Try not to malloc: it may be corrupted. */ + char msg[strlen(errorstr) + 20 + strlen(errmsg) + 1]; + sprintf(msg, "%s:%p %s", errorstr, from_tal_hdr(t), errmsg); + call_error(msg); + } + return false; +} + +static bool check_node(struct children *parent_child, + struct tal_hdr *t, const char *errorstr) +{ + struct prop_hdr *p; + struct name *name = NULL; + struct children *children = NULL; + + if (!in_bounds(t)) + return check_err(t, errorstr, "invalid pointer"); + + if (ignore_destroying_bit(t->parent_child) != parent_child) + return check_err(t, errorstr, "incorrect parent"); + + for (p = t->prop; p; p = p->next) { + if (is_literal(p)) { + if (name) + return check_err(t, errorstr, + "has extra literal"); + break; + } + if (!in_bounds(p)) + return check_err(t, errorstr, + "has bad property pointer"); + + switch (p->type) { + case CHILDREN: + if (children) + return check_err(t, errorstr, + "has two child nodes"); + children = (struct children *)p; + break; + case NOTIFIER: + break; + case NAME: + if (name) + return check_err(t, errorstr, + "has two names"); + name = (struct name *)p; + break; + default: + return check_err(t, errorstr, "has unknown property"); + } + } + if (children) { + struct tal_hdr *i; + + if (!list_check(&children->children, errorstr)) + return false; + list_for_each(&children->children, i, list) { + if (!check_node(children, i, errorstr)) + return false; + } + } + return true; +} + +bool tal_check(const tal_t *ctx, const char *errorstr) +{ + struct tal_hdr *t = to_tal_hdr_or_null(ctx); + + return check_node(ignore_destroying_bit(t->parent_child), t, errorstr); +} +#else /* NDEBUG */ +bool tal_check(const tal_t *ctx, const char *errorstr) +{ + return true; +} +#endif diff --git a/nostrdb/ccan/ccan/tal/tal.h b/nostrdb/ccan/ccan/tal/tal.h new file mode 100644 index 000000000..8daafa3d8 --- /dev/null +++ b/nostrdb/ccan/ccan/tal/tal.h @@ -0,0 +1,553 @@ +/* Licensed under BSD-MIT - see LICENSE file for details */ +#ifndef CCAN_TAL_H +#define CCAN_TAL_H +#include "../config.h" +#include "../compiler.h" +#include "likely.h" +#include "typesafe_cb.h" +#include "str.h" +#include "take.h" + +#include +#include +#include + +/** + * tal_t - convenient alias for void to mark tal pointers. + * + * Since any pointer can be a tal-allocated pointer, it's often + * useful to use this typedef to mark them explicitly. + */ +typedef void tal_t; + +/** + * tal - basic allocator function + * @ctx: NULL, or tal allocated object to be parent. + * @type: the type to allocate. + * + * Allocates a specific type, with a given parent context. The name + * of the object is a string of the type, but if CCAN_TAL_DEBUG is + * defined it also contains the file and line which allocated it. + * + * tal_count() of the return will be 1. + * + * Example: + * int *p = tal(NULL, int); + * *p = 1; + */ +#define tal(ctx, type) \ + tal_label(ctx, type, TAL_LABEL(type, "")) + +/** + * talz - zeroing allocator function + * @ctx: NULL, or tal allocated object to be parent. + * @type: the type to allocate. + * + * Equivalent to tal() followed by memset() to zero. + * + * Example: + * p = talz(NULL, int); + * assert(*p == 0); + */ +#define talz(ctx, type) \ + talz_label(ctx, type, TAL_LABEL(type, "")) + +/** + * tal_free - free a tal-allocated pointer. + * @p: NULL, or tal allocated object to free. + * + * This calls the destructors for p (if any), then does the same for all its + * children (recursively) before finally freeing the memory. It returns + * NULL, for convenience. + * + * Note: errno is preserved by this call, and also saved and restored + * for any destructors or notifiers. + * + * Example: + * p = tal_free(p); + */ +void *tal_free(const tal_t *p); + +/** + * tal_arr - allocate an array of objects. + * @ctx: NULL, or tal allocated object to be parent. + * @type: the type to allocate. + * @count: the number to allocate. + * + * tal_count() of the returned pointer will be @count. + * + * Example: + * p = tal_arr(NULL, int, 2); + * p[0] = 0; + * p[1] = 1; + */ +#define tal_arr(ctx, type, count) \ + tal_arr_label(ctx, type, count, TAL_LABEL(type, "[]")) + +/** + * tal_arrz - allocate an array of zeroed objects. + * @ctx: NULL, or tal allocated object to be parent. + * @type: the type to allocate. + * @count: the number to allocate. + * + * Equivalent to tal_arr() followed by memset() to zero. + * + * Example: + * p = tal_arrz(NULL, int, 2); + * assert(p[0] == 0 && p[1] == 0); + */ +#define tal_arrz(ctx, type, count) \ + tal_arrz_label(ctx, type, count, TAL_LABEL(type, "[]")) + +/** + * tal_resize - enlarge or reduce a tal object. + * @p: A pointer to the tal allocated array to resize. + * @count: the number to allocate. + * + * This returns true on success (and may move *@p), or false on failure. + * On success, tal_count() of *@p will be @count. + * + * Note: if *p is take(), it will still be take() upon return, even if it + * has been moved. + * + * Example: + * tal_resize(&p, 100); + */ +#define tal_resize(p, count) \ + tal_resize_((void **)(p), sizeof**(p), (count), false) + +/** + * tal_resizez - enlarge or reduce a tal object; zero out extra. + * @p: A pointer to the tal allocated array to resize. + * @count: the number to allocate. + * + * This returns true on success (and may move *@p), or false on failure. + * + * Example: + * tal_resizez(&p, 200); + */ +#define tal_resizez(p, count) \ + tal_resize_((void **)(p), sizeof**(p), (count), true) + +/** + * tal_steal - change the parent of a tal-allocated pointer. + * @ctx: The new parent. + * @ptr: The tal allocated object to move, or NULL. + * + * This may need to perform an allocation, in which case it may fail; thus + * it can return NULL, otherwise returns @ptr. If @ptr is NULL, this function does + * nothing. + */ +#if HAVE_STATEMENT_EXPR +/* Weird macro avoids gcc's 'warning: value computed is not used'. */ +#define tal_steal(ctx, ptr) \ + ({ (tal_typeof(ptr) tal_steal_((ctx),(ptr))); }) +#else +#define tal_steal(ctx, ptr) \ + (tal_typeof(ptr) tal_steal_((ctx),(ptr))) +#endif + +/** + * tal_add_destructor - add a callback function when this context is destroyed. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * + * This is a more convenient form of tal_add_notifier(@ptr, + * TAL_NOTIFY_FREE, ...), in that the function prototype takes only @ptr. + * + * Note that this can only fail if your allocfn fails and your errorfn returns. + */ +#define tal_add_destructor(ptr, function) \ + tal_add_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) + +/** + * tal_del_destructor - remove a destructor callback function. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * + * If @function has not been successfully added as a destructor, this returns + * false. Note that if we're inside the destructor call itself, this will + * return false. + */ +#define tal_del_destructor(ptr, function) \ + tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) + +/** + * tal_add_destructor2 - add a 2-arg callback function when context is destroyed. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * @arg: the extra argument to the function. + * + * Sometimes an extra argument is required for a destructor; this + * saves the extra argument internally to avoid the caller having to + * do an extra allocation. + * + * Note that this can only fail if your allocfn fails and your errorfn returns. + */ +#define tal_add_destructor2(ptr, function, arg) \ + tal_add_destructor2_((ptr), \ + typesafe_cb_cast(void (*)(tal_t *, void *), \ + void (*)(__typeof__(ptr), \ + __typeof__(arg)), \ + (function)), \ + (arg)) + +/** + * tal_del_destructor - remove a destructor callback function. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * + * If @function has not been successfully added as a destructor, this returns + * false. Note that if we're inside the destructor call itself, this will + * return false. + */ +#define tal_del_destructor(ptr, function) \ + tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) + +/** + * tal_del_destructor2 - remove 2-arg callback function. + * @ptr: The tal allocated object. + * @function: the function to call before it's freed. + * @arg: the extra argument to the function. + * + * If @function has not been successfully added as a destructor with + * @arg, this returns false. + */ +#define tal_del_destructor2(ptr, function, arg) \ + tal_del_destructor2_((ptr), \ + typesafe_cb_cast(void (*)(tal_t *, void *), \ + void (*)(__typeof__(ptr), \ + __typeof__(arg)), \ + (function)), \ + (arg)) +enum tal_notify_type { + TAL_NOTIFY_FREE = 1, + TAL_NOTIFY_STEAL = 2, + TAL_NOTIFY_MOVE = 4, + TAL_NOTIFY_RESIZE = 8, + TAL_NOTIFY_RENAME = 16, + TAL_NOTIFY_ADD_CHILD = 32, + TAL_NOTIFY_DEL_CHILD = 64, + TAL_NOTIFY_ADD_NOTIFIER = 128, + TAL_NOTIFY_DEL_NOTIFIER = 256 +}; + +/** + * tal_add_notifier - add a callback function when this context changes. + * @ptr: The tal allocated object, or NULL. + * @types: Bitwise OR of the types the callback is interested in. + * @callback: the function to call. + * + * Note that this can only fail if your allocfn fails and your errorfn + * returns. Also note that notifiers are not reliable in the case + * where an allocation fails, as they may be called before any + * allocation is actually done. + * + * TAL_NOTIFY_FREE is called when @ptr is freed, either directly or + * because an ancestor is freed: @info is the argument to tal_free(). + * It is exactly equivalent to a destructor, with more information. + * errno is set to the value it was at the call of tal_free(). + * + * TAL_NOTIFY_STEAL is called when @ptr's parent changes: @info is the + * new parent. + * + * TAL_NOTIFY_MOVE is called when @ptr is realloced (via tal_resize) + * and moved. In this case, @ptr arg here is the new memory, and + * @info is the old pointer. + * + * TAL_NOTIFY_RESIZE is called when @ptr is realloced via tal_resize: + * @info is the new size, in bytes. If the pointer has moved, + * TAL_NOTIFY_MOVE callbacks are called first. + * + * TAL_NOTIFY_ADD_CHILD/TAL_NOTIFY_DEL_CHILD are called when @ptr is + * the context for a tal() allocating call, or a direct child is + * tal_free()d: @info is the child. Note that TAL_NOTIFY_DEL_CHILD is + * not called when this context is tal_free()d: TAL_NOTIFY_FREE is + * considered sufficient for that case. + * + * TAL_NOTIFY_ADD_NOTIFIER/TAL_NOTIFIER_DEL_NOTIFIER are called when a + * notifier is added or removed (not for this notifier): @info is the + * callback. This is also called for tal_add_destructor and + * tal_del_destructor. + */ +#define tal_add_notifier(ptr, types, callback) \ + tal_add_notifier_((ptr), (types), \ + typesafe_cb_postargs(void, tal_t *, (callback), \ + (ptr), \ + enum tal_notify_type, void *)) + +/** + * tal_del_notifier - remove a notifier callback function. + * @ptr: The tal allocated object. + * @callback: the function to call. + */ +#define tal_del_notifier(ptr, callback) \ + tal_del_notifier_((ptr), \ + typesafe_cb_postargs(void, void *, (callback), \ + (ptr), \ + enum tal_notify_type, void *), \ + false, NULL) + +/** + * tal_set_name - attach a name to a tal pointer. + * @ptr: The tal allocated object. + * @name: The name to use. + * + * The name is copied, unless we're certain it's a string literal. + */ +#define tal_set_name(ptr, name) \ + tal_set_name_((ptr), (name), TAL_IS_LITERAL(name)) + +/** + * tal_name - get the name for a tal pointer. + * @ptr: The tal allocated object. + * + * Returns NULL if no name has been set. + */ +const char *tal_name(const tal_t *ptr); + +/** + * tal_count - get the count of objects in a tal object. + * @ptr: The tal allocated object (or NULL) + * + * Returns 0 if @ptr is NULL. Note that if the allocation was done as a + * different type to @ptr, the result may not match the @count argument + * (or implied 1) of that allocation! + */ +#define tal_count(p) (tal_bytelen(p) / sizeof(*p)) + +/** + * tal_bytelen - get the count of bytes in a tal object. + * @ptr: The tal allocated object (or NULL) + * + * Returns 0 if @ptr is NULL. + */ +size_t tal_bytelen(const tal_t *ptr); + +/** + * tal_first - get the first immediate tal object child. + * @root: The tal allocated object to start with, or NULL. + * + * Returns NULL if there are no children. + */ +tal_t *tal_first(const tal_t *root); + +/** + * tal_next - get the next immediate tal object child. + * @prev: The return value from tal_first or tal_next. + * + * Returns NULL if there are no more immediate children. This should be safe to + * call on an altering tree unless @prev is no longer valid. + */ +tal_t *tal_next(const tal_t *prev); + +/** + * tal_parent - get the parent of a tal object. + * @ctx: The tal allocated object. + * + * Returns the parent, which may be NULL. Returns NULL if @ctx is NULL. + */ +tal_t *tal_parent(const tal_t *ctx); + +/** + * tal_dup - duplicate an object. + * @ctx: The tal allocated object to be parent of the result (may be NULL). + * @type: the type (should match type of @p!) + * @p: the object to copy (or reparented if take()). Must not be NULL. + */ +#define tal_dup(ctx, type, p) \ + tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), false) + +/** + * tal_dup_or_null - duplicate an object, or just pass NULL. + * @ctx: The tal allocated object to be parent of the result (may be NULL). + * @type: the type (should match type of @p!) + * @p: the object to copy (or reparented if take()) + * + * if @p is NULL, just return NULL, otherwise to tal_dup(). + */ +#define tal_dup_or_null(ctx, type, p) \ + tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), true) + +/** + * tal_dup_arr - duplicate an array. + * @ctx: The tal allocated object to be parent of the result (may be NULL). + * @type: the type (should match type of @p!) + * @p: the array to copy (or resized & reparented if take()) + * @n: the number of sizeof(type) entries to copy. + * @extra: the number of extra sizeof(type) entries to allocate. + */ +#define tal_dup_arr(ctx, type, p, n, extra) \ + tal_dup_arr_label(ctx, type, p, n, extra, TAL_LABEL(type, "[]")) + + +/** + * tal_dup_arr - duplicate a tal array. + * @ctx: The tal allocated object to be parent of the result (may be NULL). + * @type: the type (should match type of @p!) + * @p: the tal array to copy (or resized & reparented if take()) + * + * The common case of duplicating an entire tal array. + */ +#define tal_dup_talarr(ctx, type, p) \ + ((type *)tal_dup_talarr_((ctx), tal_typechk_(p, type *), \ + TAL_LABEL(type, "[]"))) +/* Lower-level interfaces, where you want to supply your own label string. */ +#define tal_label(ctx, type, label) \ + ((type *)tal_alloc_((ctx), sizeof(type), false, label)) +#define talz_label(ctx, type, label) \ + ((type *)tal_alloc_((ctx), sizeof(type), true, label)) +#define tal_arr_label(ctx, type, count, label) \ + ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), false, label)) +#define tal_arrz_label(ctx, type, count, label) \ + ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), true, label)) +#define tal_dup_label(ctx, type, p, label, nullok) \ + ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ + sizeof(type), 1, 0, nullok, \ + label)) +#define tal_dup_arr_label(ctx, type, p, n, extra, label) \ + ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ + sizeof(type), (n), (extra), false, \ + label)) + +/** + * tal_set_backend - set the allocation or error functions to use + * @alloc_fn: allocator or NULL (default is malloc) + * @resize_fn: re-allocator or NULL (default is realloc) + * @free_fn: free function or NULL (default is free) + * @error_fn: called on errors or NULL (default is abort) + * + * The defaults are set up so tal functions never return NULL, but you + * can override error_fn to change that. error_fn can return, and is + * called if alloc_fn or resize_fn fail. + * + * If any parameter is NULL, that function is unchanged. + */ +void tal_set_backend(void *(*alloc_fn)(size_t size), + void *(*resize_fn)(void *, size_t size), + void (*free_fn)(void *), + void (*error_fn)(const char *msg)); + +/** + * tal_expand - expand a tal array with contents. + * @a1p: a pointer to the tal array to expand. + * @a2: the second array (can be take()). + * @num2: the number of elements in the second array. + * + * Note that *@a1 and @a2 should be the same type. tal_count(@a1) will + * be increased by @num2. + * + * Example: + * int *arr1 = tal_arrz(NULL, int, 2); + * int arr2[2] = { 1, 3 }; + * + * tal_expand(&arr1, arr2, 2); + * assert(tal_count(arr1) == 4); + * assert(arr1[2] == 1); + * assert(arr1[3] == 3); + */ +#define tal_expand(a1p, a2, num2) \ + tal_expand_((void **)(a1p), (a2), sizeof**(a1p), \ + (num2) + 0*sizeof(*(a1p) == (a2))) + +/** + * tal_cleanup - remove pointers from NULL node + * + * Internally, tal keeps a list of nodes allocated from @ctx NULL; this + * prevents valgrind from noticing memory leaks. This re-initializes + * that list to empty. + * + * It also calls take_cleanup() for you. + */ +void tal_cleanup(void); + + +/** + * tal_check - sanity check a tal context and its children. + * @ctx: a tal context, or NULL. + * @errorstr: a string to prepend calls to error_fn, or NULL. + * + * This sanity-checks a tal tree (unless NDEBUG is defined, in which case + * it simply returns true). If errorstr is not null, error_fn is called + * when a problem is found, otherwise it is not. + * + * See also: + * tal_set_backend() + */ +bool tal_check(const tal_t *ctx, const char *errorstr); + +#ifdef CCAN_TAL_DEBUG +/** + * tal_dump - dump entire tal tree to stderr. + * + * This is a helper for debugging tal itself, which dumps all the tal internal + * state. + */ +void tal_dump(void); +#endif + +/* Internal support functions */ +#ifndef TAL_LABEL +#ifdef CCAN_TAL_NO_LABELS +#define TAL_LABEL(type, arr) NULL +#else +#ifdef CCAN_TAL_DEBUG +#define TAL_LABEL(type, arr) \ + __FILE__ ":" stringify(__LINE__) ":" stringify(type) arr +#else +#define TAL_LABEL(type, arr) stringify(type) arr +#endif /* CCAN_TAL_DEBUG */ +#endif +#endif + +#if HAVE_BUILTIN_CONSTANT_P +#define TAL_IS_LITERAL(str) __builtin_constant_p(str) +#else +#define TAL_IS_LITERAL(str) (sizeof(&*(str)) != sizeof(char *)) +#endif + +bool tal_set_name_(tal_t *ctx, const char *name, bool literal); + +#if HAVE_TYPEOF +#define tal_typeof(ptr) (__typeof__(ptr)) +#if HAVE_STATEMENT_EXPR +/* Careful: ptr can be const foo *, ptype is foo *. Also, ptr could + * be an array, eg "hello". */ +#define tal_typechk_(ptr, ptype) ({ __typeof__((ptr)+0) _p = (ptype)(ptr); _p; }) +#else +#define tal_typechk_(ptr, ptype) (ptr) +#endif +#else /* !HAVE_TYPEOF */ +#define tal_typeof(ptr) +#define tal_typechk_(ptr, ptype) (ptr) +#endif + +void *tal_alloc_(const tal_t *ctx, size_t bytes, bool clear, const char *label); +void *tal_alloc_arr_(const tal_t *ctx, size_t bytes, size_t count, bool clear, + const char *label); + +void *tal_dup_(const tal_t *ctx, const void *p TAKES, size_t size, + size_t n, size_t extra, bool nullok, const char *label); +void *tal_dup_talarr_(const tal_t *ctx, const tal_t *src TAKES, + const char *label); + +tal_t *tal_steal_(const tal_t *new_parent, const tal_t *t); + +bool tal_resize_(tal_t **ctxp, size_t size, size_t count, bool clear); +bool tal_expand_(tal_t **ctxp, const void *src TAKES, size_t size, size_t count); + +bool tal_add_destructor_(const tal_t *ctx, void (*destroy)(void *me)); +bool tal_add_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), + void *arg); +bool tal_del_destructor_(const tal_t *ctx, void (*destroy)(void *me)); +bool tal_del_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), + void *arg); + +bool tal_add_notifier_(const tal_t *ctx, enum tal_notify_type types, + void (*notify)(tal_t *ctx, enum tal_notify_type, + void *info)); +bool tal_del_notifier_(const tal_t *ctx, + void (*notify)(tal_t *ctx, enum tal_notify_type, + void *info), + bool match_extra_arg, void *arg); +#endif /* CCAN_TAL_H */ diff --git a/nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h b/nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h new file mode 100644 index 000000000..acf346dd9 --- /dev/null +++ b/nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h @@ -0,0 +1,134 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_TYPESAFE_CB_H +#define CCAN_TYPESAFE_CB_H +#include "../config.h" + +#if HAVE_TYPEOF && HAVE_BUILTIN_CHOOSE_EXPR && HAVE_BUILTIN_TYPES_COMPATIBLE_P +/** + * typesafe_cb_cast - only cast an expression if it matches a given type + * @desttype: the type to cast to + * @oktype: the type we allow + * @expr: the expression to cast + * + * This macro is used to create functions which allow multiple types. + * The result of this macro is used somewhere that a @desttype type is + * expected: if @expr is exactly of type @oktype, then it will be + * cast to @desttype type, otherwise left alone. + * + * This macro can be used in static initializers. + * + * This is merely useful for warnings: if the compiler does not + * support the primitives required for typesafe_cb_cast(), it becomes an + * unconditional cast, and the @oktype argument is not used. In + * particular, this means that @oktype can be a type which uses the + * "typeof": it will not be evaluated if typeof is not supported. + * + * Example: + * // We can take either an unsigned long or a void *. + * void _set_some_value(void *val); + * #define set_some_value(e) \ + * _set_some_value(typesafe_cb_cast(void *, unsigned long, (e))) + */ +#define typesafe_cb_cast(desttype, oktype, expr) \ + __builtin_choose_expr( \ + __builtin_types_compatible_p(__typeof__(0?(expr):(expr)), \ + oktype), \ + (desttype)(expr), (expr)) +#else +#define typesafe_cb_cast(desttype, oktype, expr) ((desttype)(expr)) +#endif + +/** + * typesafe_cb_cast3 - only cast an expression if it matches given types + * @desttype: the type to cast to + * @ok1: the first type we allow + * @ok2: the second type we allow + * @ok3: the third type we allow + * @expr: the expression to cast + * + * This is a convenient wrapper for multiple typesafe_cb_cast() calls. + * You can chain them inside each other (ie. use typesafe_cb_cast() + * for expr) if you need more than 3 arguments. + * + * Example: + * // We can take either a long, unsigned long, void * or a const void *. + * void _set_some_value(void *val); + * #define set_some_value(expr) \ + * _set_some_value(typesafe_cb_cast3(void *,, \ + * long, unsigned long, const void *,\ + * (expr))) + */ +#define typesafe_cb_cast3(desttype, ok1, ok2, ok3, expr) \ + typesafe_cb_cast(desttype, ok1, \ + typesafe_cb_cast(desttype, ok2, \ + typesafe_cb_cast(desttype, ok3, \ + (expr)))) + +/** + * typesafe_cb - cast a callback function if it matches the arg + * @rtype: the return type of the callback function + * @atype: the (pointer) type which the callback function expects. + * @fn: the callback function to cast + * @arg: the (pointer) argument to hand to the callback function. + * + * If a callback function takes a single argument, this macro does + * appropriate casts to a function which takes a single atype argument if the + * callback provided matches the @arg. + * + * It is assumed that @arg is of pointer type: usually @arg is passed + * or assigned to a void * elsewhere anyway. + * + * Example: + * void _register_callback(void (*fn)(void *arg), void *arg); + * #define register_callback(fn, arg) \ + * _register_callback(typesafe_cb(void, (fn), void*, (arg)), (arg)) + */ +#define typesafe_cb(rtype, atype, fn, arg) \ + typesafe_cb_cast(rtype (*)(atype), \ + rtype (*)(__typeof__(arg)), \ + (fn)) + +/** + * typesafe_cb_preargs - cast a callback function if it matches the arg + * @rtype: the return type of the callback function + * @atype: the (pointer) type which the callback function expects. + * @fn: the callback function to cast + * @arg: the (pointer) argument to hand to the callback function. + * + * This is a version of typesafe_cb() for callbacks that take other arguments + * before the @arg. + * + * Example: + * void _register_callback(void (*fn)(int, void *arg), void *arg); + * #define register_callback(fn, arg) \ + * _register_callback(typesafe_cb_preargs(void, void *, \ + * (fn), (arg), int), \ + * (arg)) + */ +#define typesafe_cb_preargs(rtype, atype, fn, arg, ...) \ + typesafe_cb_cast(rtype (*)(__VA_ARGS__, atype), \ + rtype (*)(__VA_ARGS__, __typeof__(arg)), \ + (fn)) + +/** + * typesafe_cb_postargs - cast a callback function if it matches the arg + * @rtype: the return type of the callback function + * @atype: the (pointer) type which the callback function expects. + * @fn: the callback function to cast + * @arg: the (pointer) argument to hand to the callback function. + * + * This is a version of typesafe_cb() for callbacks that take other arguments + * after the @arg. + * + * Example: + * void _register_callback(void (*fn)(void *arg, int), void *arg); + * #define register_callback(fn, arg) \ + * _register_callback(typesafe_cb_postargs(void, (fn), void *, \ + * (arg), int), \ + * (arg)) + */ +#define typesafe_cb_postargs(rtype, atype, fn, arg, ...) \ + typesafe_cb_cast(rtype (*)(atype, __VA_ARGS__), \ + rtype (*)(__typeof__(arg), __VA_ARGS__), \ + (fn)) +#endif /* CCAN_CAST_IF_TYPE_H */ diff --git a/nostrdb/ccan/ccan/utf8/utf8.c b/nostrdb/ccan/ccan/utf8/utf8.c new file mode 100644 index 000000000..01a736862 --- /dev/null +++ b/nostrdb/ccan/ccan/utf8/utf8.c @@ -0,0 +1,199 @@ +/* MIT (BSD) license - see LICENSE file for details - taken from ccan. thanks rusty! */ + +#include "utf8.h" +#include +#include + +/* I loved this table, so I stole it: */ +/* + * Copyright (c) 2017 Christian Hansen + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +/* + * UTF-8 Encoding Form + * + * U+0000..U+007F 0xxxxxxx <= 7 bits + * U+0080..U+07FF 110xxxxx 10xxxxxx <= 11 bits + * U+0800..U+FFFF 1110xxxx 10xxxxxx 10xxxxxx <= 16 bits + * U+10000..U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx <= 21 bits + * + * + * U+0000..U+007F 00..7F + * N C0..C1 80..BF 1100000x 10xxxxxx + * U+0080..U+07FF C2..DF 80..BF + * N E0 80..9F 80..BF 11100000 100xxxxx + * U+0800..U+0FFF E0 A0..BF 80..BF + * U+1000..U+CFFF E1..EC 80..BF 80..BF + * U+D000..U+D7FF ED 80..9F 80..BF + * S ED A0..BF 80..BF 11101101 101xxxxx + * U+E000..U+FFFF EE..EF 80..BF 80..BF + * N F0 80..8F 80..BF 80..BF 11110000 1000xxxx + * U+10000..U+3FFFF F0 90..BF 80..BF 80..BF + * U+40000..U+FFFFF F1..F3 80..BF 80..BF 80..BF + * U+100000..U+10FFFF F4 80..8F 80..BF 80..BF 11110100 1000xxxx + * + * Legend: + * N = Non-shortest form + * S = Surrogates + */ +bool utf8_decode(struct utf8_state *utf8_state, char c) +{ + if (utf8_state->used_len == utf8_state->total_len) { + utf8_state->used_len = 1; + /* First character in sequence. */ + if (((unsigned char)c & 0x80) == 0) { + /* ASCII, easy. */ + if (c == 0) + goto bad_encoding; + utf8_state->total_len = 1; + utf8_state->c = c; + goto finished_decoding; + } else if (((unsigned char)c & 0xE0) == 0xC0) { + utf8_state->total_len = 2; + utf8_state->c = ((unsigned char)c & 0x1F); + return false; + } else if (((unsigned char)c & 0xF0) == 0xE0) { + utf8_state->total_len = 3; + utf8_state->c = ((unsigned char)c & 0x0F); + return false; + } else if (((unsigned char)c & 0xF8) == 0xF0) { + utf8_state->total_len = 4; + utf8_state->c = ((unsigned char)c & 0x07); + return false; + } + goto bad_encoding; + } + + if (((unsigned char)c & 0xC0) != 0x80) + goto bad_encoding; + + utf8_state->c <<= 6; + utf8_state->c |= ((unsigned char)c & 0x3F); + + utf8_state->used_len++; + if (utf8_state->used_len == utf8_state->total_len) + goto finished_decoding; + return false; + +finished_decoding: + if (utf8_state->c == 0 || utf8_state->c > 0x10FFFF) + errno = ERANGE; + /* The UTF-16 "surrogate range": illegal in UTF-8 */ + else if (utf8_state->total_len == 3 + && (utf8_state->c & 0xFFFFF800) == 0x0000D800) + errno = ERANGE; + else { + int min_bits; + switch (utf8_state->total_len) { + case 1: + min_bits = 0; + break; + case 2: + min_bits = 7; + break; + case 3: + min_bits = 11; + break; + case 4: + min_bits = 16; + break; + default: + abort(); + } + if ((utf8_state->c >> min_bits) == 0) + errno = EFBIG; + else + errno = 0; + } + return true; + +bad_encoding: + utf8_state->total_len = utf8_state->used_len; + errno = EINVAL; + return true; +} + +size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]) +{ + if ((point >> 7) == 0) { + if (point == 0) { + errno = ERANGE; + return 0; + } + /* 0xxxxxxx */ + dest[0] = point; + return 1; + } + + if ((point >> 11) == 0) { + /* 110xxxxx 10xxxxxx */ + dest[1] = 0x80 | (point & 0x3F); + dest[0] = 0xC0 | (point >> 6); + return 2; + } + + if ((point >> 16) == 0) { + if (point >= 0xD800 && point <= 0xDFFF) { + errno = ERANGE; + return 0; + } + /* 1110xxxx 10xxxxxx 10xxxxxx */ + dest[2] = 0x80 | (point & 0x3F); + dest[1] = 0x80 | ((point >> 6) & 0x3F); + dest[0] = 0xE0 | (point >> 12); + return 3; + } + + if (point > 0x10FFFF) { + errno = ERANGE; + return 0; + } + + /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ + dest[3] = 0x80 | (point & 0x3F); + dest[2] = 0x80 | ((point >> 6) & 0x3F); + dest[1] = 0x80 | ((point >> 12) & 0x3F); + dest[0] = 0xF0 | (point >> 18); + return 4; +} + +/* Check for valid UTF-8 */ +bool utf8_check(const void *vbuf, size_t buflen) +{ + const unsigned char *buf = vbuf; + struct utf8_state utf8_state = UTF8_STATE_INIT; + bool need_more = false; + + for (size_t i = 0; i < buflen; i++) { + if (!utf8_decode(&utf8_state, buf[i])) { + need_more = true; + continue; + } + need_more = false; + if (errno != 0) + return false; + } + return !need_more; +} + diff --git a/nostrdb/ccan/ccan/utf8/utf8.h b/nostrdb/ccan/ccan/utf8/utf8.h new file mode 100644 index 000000000..1321568ad --- /dev/null +++ b/nostrdb/ccan/ccan/utf8/utf8.h @@ -0,0 +1,57 @@ +/* MIT (BSD) license - see LICENSE file for details */ +#ifndef CCAN_UTF8_H +#define CCAN_UTF8_H +#include +#include +#include + +/* Unicode is limited to 21 bits. */ +#define UTF8_MAX_LEN 4 + +struct utf8_state { + /* How many characters we are expecting as part of this Unicode point */ + uint16_t total_len; + /* How many characters we've already seen. */ + uint16_t used_len; + /* Compound character, aka Unicode point. */ + uint32_t c; +}; + +#define UTF8_STATE_INIT { 0, 0, 0 } + +static inline void utf8_state_init(struct utf8_state *utf8_state) +{ + memset(utf8_state, 0, sizeof(*utf8_state)); +} + +/** + * utf8_decode - continue UTF8 decoding with this character. + * @utf8_state - initialized UTF8 state. + * @c - the character. + * + * Returns false if it needs another character to give results. + * Otherwise returns true, @utf8_state can be reused without initializeation, + * and sets errno: + * 0: success + * EINVAL: bad encoding (including a NUL character). + * EFBIG: not a minimal encoding. + * ERANGE: encoding of invalid character. + * + * You can extract the character from @utf8_state->c; @utf8_state->used_len + * indicates how many characters have been consumed. + */ +bool utf8_decode(struct utf8_state *utf8_state, char c); + +/** + * utf8_encode - encode a point into UTF8. + * @point - Unicode point to include. + * @dest - buffer to fill. + * + * Returns 0 if point was invalid, otherwise bytes of dest used. + * Sets errno to ERANGE if point was invalid. + */ +size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]); + +/* Check for valid UTF-8 */ +bool utf8_check(const void *vbuf, size_t buflen); +#endif /* CCAN_UTF8_H */ From 51aff0c1ba63b29f26f3f3b30694f1cfb8c88128 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 17 Aug 2024 14:57:06 +0930 Subject: [PATCH 134/146] nostrdb: bolt11: move utf8_check into local function. It isn't actually in the CCAN module (though it probably should be!). So it breaks when we update. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/ccan/ccan/utf8/utf8.c | 19 ------------------- nostrdb/ccan/ccan/utf8/utf8.h | 2 -- 2 files changed, 21 deletions(-) diff --git a/nostrdb/ccan/ccan/utf8/utf8.c b/nostrdb/ccan/ccan/utf8/utf8.c index 01a736862..c66b9ae45 100644 --- a/nostrdb/ccan/ccan/utf8/utf8.c +++ b/nostrdb/ccan/ccan/utf8/utf8.c @@ -178,22 +178,3 @@ size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]) return 4; } -/* Check for valid UTF-8 */ -bool utf8_check(const void *vbuf, size_t buflen) -{ - const unsigned char *buf = vbuf; - struct utf8_state utf8_state = UTF8_STATE_INIT; - bool need_more = false; - - for (size_t i = 0; i < buflen; i++) { - if (!utf8_decode(&utf8_state, buf[i])) { - need_more = true; - continue; - } - need_more = false; - if (errno != 0) - return false; - } - return !need_more; -} - diff --git a/nostrdb/ccan/ccan/utf8/utf8.h b/nostrdb/ccan/ccan/utf8/utf8.h index 1321568ad..3eac3a0ee 100644 --- a/nostrdb/ccan/ccan/utf8/utf8.h +++ b/nostrdb/ccan/ccan/utf8/utf8.h @@ -52,6 +52,4 @@ bool utf8_decode(struct utf8_state *utf8_state, char c); */ size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]); -/* Check for valid UTF-8 */ -bool utf8_check(const void *vbuf, size_t buflen); #endif /* CCAN_UTF8_H */ From 3e0719fd0687a9aac9b97c1bba399c98cbe64756 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 17 Aug 2024 14:57:12 +0930 Subject: [PATCH 135/146] nostrdb: Makefile: build using ccan/ versions of files. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/ccan/ccan/array_size/array_size.h | 2 +- nostrdb/ccan/ccan/container_of/container_of.h | 2 +- nostrdb/ccan/ccan/crypto/sha256/sha256.c | 4 ++-- nostrdb/ccan/ccan/list/list.h | 4 ++-- nostrdb/ccan/ccan/mem/mem.h | 2 +- nostrdb/ccan/ccan/structeq/structeq.h | 4 ++-- nostrdb/ccan/ccan/take/take.c | 2 +- nostrdb/ccan/ccan/tal/str/str.c | 1 - nostrdb/ccan/ccan/tal/str/str.h | 2 +- nostrdb/ccan/ccan/tal/tal.c | 6 +++--- nostrdb/ccan/ccan/tal/tal.h | 10 +++++----- 11 files changed, 19 insertions(+), 20 deletions(-) diff --git a/nostrdb/ccan/ccan/array_size/array_size.h b/nostrdb/ccan/ccan/array_size/array_size.h index 3f9494e8b..b35916334 100644 --- a/nostrdb/ccan/ccan/array_size/array_size.h +++ b/nostrdb/ccan/ccan/array_size/array_size.h @@ -2,7 +2,7 @@ #ifndef CCAN_ARRAY_SIZE_H #define CCAN_ARRAY_SIZE_H #include "../config.h" -#include "build_assert.h" +#include "ccan/build_assert/build_assert.h" /** * ARRAY_SIZE - get the number of elements in a visible array diff --git a/nostrdb/ccan/ccan/container_of/container_of.h b/nostrdb/ccan/ccan/container_of/container_of.h index b27d7f3da..de6d71444 100644 --- a/nostrdb/ccan/ccan/container_of/container_of.h +++ b/nostrdb/ccan/ccan/container_of/container_of.h @@ -4,7 +4,7 @@ #include #include "../config.h" -#include "check_type.h" +#include "ccan/check_type/check_type.h" /** * container_of - get pointer to enclosing structure diff --git a/nostrdb/ccan/ccan/crypto/sha256/sha256.c b/nostrdb/ccan/ccan/crypto/sha256/sha256.c index b869dea78..26e142cbe 100644 --- a/nostrdb/ccan/ccan/crypto/sha256/sha256.c +++ b/nostrdb/ccan/ccan/crypto/sha256/sha256.c @@ -7,8 +7,8 @@ * file COPYING or http://www.opensource.org/licenses/mit-license.php. */ #include "sha256.h" -#include "endian.h" -#include "compiler.h" +#include "ccan/endian/endian.h" +#include "ccan/compiler/compiler.h" #include #include #include diff --git a/nostrdb/ccan/ccan/list/list.h b/nostrdb/ccan/ccan/list/list.h index 4574e911c..4b7007ba0 100644 --- a/nostrdb/ccan/ccan/list/list.h +++ b/nostrdb/ccan/ccan/list/list.h @@ -5,8 +5,8 @@ #include #include #include "str.h" -#include "container_of.h" -#include "check_type.h" +#include "ccan/container_of/container_of.h" +#include "ccan/check_type/check_type.h" /** * struct list_node - an entry in a doubly-linked list diff --git a/nostrdb/ccan/ccan/mem/mem.h b/nostrdb/ccan/ccan/mem/mem.h index 9b8d01a38..d02ed8ae4 100644 --- a/nostrdb/ccan/ccan/mem/mem.h +++ b/nostrdb/ccan/ccan/mem/mem.h @@ -3,7 +3,7 @@ #define CCAN_MEM_H #include "../config.h" -#include "../compiler.h" +#include "ccan/compiler/compiler.h" #include #include diff --git a/nostrdb/ccan/ccan/structeq/structeq.h b/nostrdb/ccan/ccan/structeq/structeq.h index bb7014651..18619756f 100644 --- a/nostrdb/ccan/ccan/structeq/structeq.h +++ b/nostrdb/ccan/ccan/structeq/structeq.h @@ -1,8 +1,8 @@ /* MIT (BSD) license - see LICENSE file for details */ #ifndef CCAN_STRUCTEQ_H #define CCAN_STRUCTEQ_H -#include "build_assert.h" -#include "cppmagic.h" +#include "ccan/build_assert/build_assert.h" +#include "ccan/cppmagic/cppmagic.h" #include #include diff --git a/nostrdb/ccan/ccan/take/take.c b/nostrdb/ccan/ccan/take/take.c index 3b59db081..04bcc7ed6 100644 --- a/nostrdb/ccan/ccan/take/take.c +++ b/nostrdb/ccan/ccan/take/take.c @@ -1,6 +1,6 @@ /* CC0 (Public domain) - see LICENSE file for details */ #include "take.h" -#include "likely.h" +#include "ccan/likely/likely.h" #include #include #include diff --git a/nostrdb/ccan/ccan/tal/str/str.c b/nostrdb/ccan/ccan/tal/str/str.c index 1fb66858e..3ec0be72e 100644 --- a/nostrdb/ccan/ccan/tal/str/str.c +++ b/nostrdb/ccan/ccan/tal/str/str.c @@ -4,7 +4,6 @@ #include #include #include -#include "talstr.h" #include #include #include diff --git a/nostrdb/ccan/ccan/tal/str/str.h b/nostrdb/ccan/ccan/tal/str/str.h index fbf53a86c..56a0f22b2 100644 --- a/nostrdb/ccan/ccan/tal/str/str.h +++ b/nostrdb/ccan/ccan/tal/str/str.h @@ -4,7 +4,7 @@ #ifdef TAL_USE_TALLOC #include #else -#include "tal.h" +#include "ccan/tal/tal.h" #endif #include #include diff --git a/nostrdb/ccan/ccan/tal/tal.c b/nostrdb/ccan/ccan/tal/tal.c index 516b44049..c9c8e9f79 100644 --- a/nostrdb/ccan/ccan/tal/tal.c +++ b/nostrdb/ccan/ccan/tal/tal.c @@ -1,8 +1,8 @@ /* Licensed under BSD-MIT - see LICENSE file for details */ #include "tal.h" -#include "../compiler.h" -#include "list.h" -#include "alignof.h" +#include "ccan/compiler/compiler.h" +#include "ccan/list/list.h" +#include "ccan/alignof/alignof.h" #include #include diff --git a/nostrdb/ccan/ccan/tal/tal.h b/nostrdb/ccan/ccan/tal/tal.h index 8daafa3d8..6e7f12e5d 100644 --- a/nostrdb/ccan/ccan/tal/tal.h +++ b/nostrdb/ccan/ccan/tal/tal.h @@ -2,11 +2,11 @@ #ifndef CCAN_TAL_H #define CCAN_TAL_H #include "../config.h" -#include "../compiler.h" -#include "likely.h" -#include "typesafe_cb.h" -#include "str.h" -#include "take.h" +#include "ccan/compiler/compiler.h" +#include "ccan/likely/likely.h" +#include "ccan/typesafe_cb/typesafe_cb.h" +#include "ccan/str/str.h" +#include "ccan/take/take.h" #include #include From ae10ce4760b427fcd1c0a50a0ad30cc84b0e297f Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 17 Aug 2024 15:21:19 +0930 Subject: [PATCH 136/146] nostrdb: ccan: sync with normal versions. This is the version of CCAN which CLN was using at the time these were taken. Unfortunately lots of whitespace has been changed, but AFAICT no source changes. Here's the command I ran (with ../ccan checked out to 1ae4c432): ``` make update-ccan CCAN_NEW="alignof array_size build_assert check_type container_of cppmagic likely list mem short_types str structeq take tal tal/str typesafe_cb utf8 endian crypto/sha256" ``` Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/ccan/README | 2 +- nostrdb/ccan/ccan/alignof/LICENSE | 1 + nostrdb/ccan/ccan/alignof/_info | 51 + nostrdb/ccan/ccan/alignof/alignof.h | 2 +- nostrdb/ccan/ccan/array_size/LICENSE | 1 + nostrdb/ccan/ccan/array_size/_info | 46 + nostrdb/ccan/ccan/array_size/array_size.h | 10 +- nostrdb/ccan/ccan/build_assert/LICENSE | 1 + nostrdb/ccan/ccan/build_assert/_info | 49 + nostrdb/ccan/ccan/build_assert/build_assert.h | 26 +- nostrdb/ccan/ccan/check_type/LICENSE | 1 + nostrdb/ccan/ccan/check_type/_info | 33 + nostrdb/ccan/ccan/check_type/check_type.h | 36 +- nostrdb/ccan/ccan/compiler/LICENSE | 1 + nostrdb/ccan/ccan/compiler/_info | 64 + nostrdb/ccan/ccan/compiler/compiler.h | 86 +- nostrdb/ccan/ccan/container_of/LICENSE | 1 + nostrdb/ccan/ccan/container_of/_info | 65 + nostrdb/ccan/ccan/container_of/container_of.h | 130 +- nostrdb/ccan/ccan/cppmagic/LICENSE | 1 + nostrdb/ccan/ccan/cppmagic/_info | 30 + nostrdb/ccan/ccan/cppmagic/cppmagic.h | 184 +- nostrdb/ccan/ccan/crypto/sha256/LICENSE | 1 + nostrdb/ccan/ccan/crypto/sha256/_info | 61 + .../ccan/crypto/sha256/benchmarks/Makefile | 20 + .../sha256/benchmarks/double-sha-bench.c | 122 + .../benchmarks/open_software_license.txt | 32 + .../crypto/sha256/benchmarks/sha256_avx1.asm | 586 + .../sha256/benchmarks/sha256_avx2_rorx2.asm | 826 + .../sha256/benchmarks/sha256_avx2_rorx8.asm | 1507 + .../crypto/sha256/benchmarks/sha256_sse4.asm | 544 + nostrdb/ccan/ccan/crypto/sha256/sha256.c | 30 +- nostrdb/ccan/ccan/crypto/sha256/sha256.h | 10 +- nostrdb/ccan/ccan/endian/LICENSE | 1 + nostrdb/ccan/ccan/endian/_info | 55 + nostrdb/ccan/ccan/endian/endian.h | 10 +- nostrdb/ccan/ccan/htable/LICENSE | 1 + nostrdb/ccan/ccan/htable/_info | 118 + nostrdb/ccan/ccan/htable/htable.c | 491 + nostrdb/ccan/ccan/htable/htable.h | 290 + nostrdb/ccan/ccan/htable/htable_type.h | 188 + nostrdb/ccan/ccan/htable/tools/Makefile | 41 + nostrdb/ccan/ccan/htable/tools/density.c | 107 + nostrdb/ccan/ccan/htable/tools/hsearchspeed.c | 95 + nostrdb/ccan/ccan/htable/tools/speed.c | 370 + nostrdb/ccan/ccan/htable/tools/stringspeed.c | 240 + nostrdb/ccan/ccan/likely/LICENSE | 1 + nostrdb/ccan/ccan/likely/_info | 57 + nostrdb/ccan/ccan/likely/likely.c | 136 + nostrdb/ccan/ccan/likely/likely.h | 70 +- nostrdb/ccan/ccan/list/LICENSE | 1 + nostrdb/ccan/ccan/list/_info | 72 + nostrdb/ccan/ccan/list/list.c | 50 +- nostrdb/ccan/ccan/list/list.h | 556 +- nostrdb/ccan/ccan/mem/LICENSE | 1 + nostrdb/ccan/ccan/mem/_info | 30 + nostrdb/ccan/ccan/mem/mem.c | 148 +- nostrdb/ccan/ccan/mem/mem.h | 134 +- nostrdb/ccan/ccan/short_types/LICENSE | 1 + nostrdb/ccan/ccan/short_types/_info | 87 + nostrdb/ccan/ccan/str/LICENSE | 1 + nostrdb/ccan/ccan/str/_info | 52 + nostrdb/ccan/ccan/str/debug.c | 108 + nostrdb/ccan/ccan/str/str.c | 13 + nostrdb/ccan/ccan/str/str.h | 90 +- nostrdb/ccan/ccan/str/str_debug.h | 30 + nostrdb/ccan/ccan/structeq/LICENSE | 1 + nostrdb/ccan/ccan/structeq/_info | 57 + nostrdb/ccan/ccan/structeq/structeq.h | 38 +- nostrdb/ccan/ccan/take/LICENSE | 1 + nostrdb/ccan/ccan/take/_info | 61 + nostrdb/ccan/ccan/take/take.c | 136 +- nostrdb/ccan/ccan/take/take.h | 82 +- nostrdb/ccan/ccan/tal/LICENSE | 1 + nostrdb/ccan/ccan/tal/_info | 108 + nostrdb/ccan/ccan/tal/benchmark/Makefile | 26 + .../ccan/ccan/tal/benchmark/samba-allocs.c | 374 + nostrdb/ccan/ccan/tal/benchmark/speed.c | 125 + nostrdb/ccan/ccan/tal/benchmark/talloc.dump | 26137 ++++++++++++++++ nostrdb/ccan/ccan/tal/str/LICENSE | 1 + nostrdb/ccan/ccan/tal/str/_info | 61 + nostrdb/ccan/ccan/tal/str/str.c | 479 +- nostrdb/ccan/ccan/tal/str/str.h | 146 +- nostrdb/ccan/ccan/tal/tal.c | 1204 +- nostrdb/ccan/ccan/tal/tal.h | 243 +- nostrdb/ccan/ccan/typesafe_cb/LICENSE | 1 + nostrdb/ccan/ccan/typesafe_cb/_info | 151 + nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h | 92 +- nostrdb/ccan/ccan/utf8/LICENSE | 1 + nostrdb/ccan/ccan/utf8/_info | 48 + nostrdb/ccan/ccan/utf8/utf8.c | 220 +- nostrdb/ccan/ccan/utf8/utf8.h | 17 +- nostrdb/ccan/licenses/BSD-MIT | 17 + nostrdb/ccan/licenses/CC0 | 28 + nostrdb/ccan/licenses/LGPL-2.1 | 510 + nostrdb/ccan/licenses/LGPL-3 | 165 + 96 files changed, 36636 insertions(+), 2100 deletions(-) create mode 120000 nostrdb/ccan/ccan/alignof/LICENSE create mode 100644 nostrdb/ccan/ccan/alignof/_info create mode 120000 nostrdb/ccan/ccan/array_size/LICENSE create mode 100644 nostrdb/ccan/ccan/array_size/_info create mode 120000 nostrdb/ccan/ccan/build_assert/LICENSE create mode 100644 nostrdb/ccan/ccan/build_assert/_info create mode 120000 nostrdb/ccan/ccan/check_type/LICENSE create mode 100644 nostrdb/ccan/ccan/check_type/_info create mode 120000 nostrdb/ccan/ccan/compiler/LICENSE create mode 100644 nostrdb/ccan/ccan/compiler/_info create mode 120000 nostrdb/ccan/ccan/container_of/LICENSE create mode 100644 nostrdb/ccan/ccan/container_of/_info create mode 120000 nostrdb/ccan/ccan/cppmagic/LICENSE create mode 100644 nostrdb/ccan/ccan/cppmagic/_info create mode 120000 nostrdb/ccan/ccan/crypto/sha256/LICENSE create mode 100644 nostrdb/ccan/ccan/crypto/sha256/_info create mode 100644 nostrdb/ccan/ccan/crypto/sha256/benchmarks/Makefile create mode 100644 nostrdb/ccan/ccan/crypto/sha256/benchmarks/double-sha-bench.c create mode 100644 nostrdb/ccan/ccan/crypto/sha256/benchmarks/open_software_license.txt create mode 100644 nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx1.asm create mode 100644 nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx2_rorx2.asm create mode 100644 nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx2_rorx8.asm create mode 100644 nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_sse4.asm create mode 120000 nostrdb/ccan/ccan/endian/LICENSE create mode 100644 nostrdb/ccan/ccan/endian/_info create mode 120000 nostrdb/ccan/ccan/htable/LICENSE create mode 100644 nostrdb/ccan/ccan/htable/_info create mode 100644 nostrdb/ccan/ccan/htable/htable.c create mode 100644 nostrdb/ccan/ccan/htable/htable.h create mode 100644 nostrdb/ccan/ccan/htable/htable_type.h create mode 100644 nostrdb/ccan/ccan/htable/tools/Makefile create mode 100644 nostrdb/ccan/ccan/htable/tools/density.c create mode 100644 nostrdb/ccan/ccan/htable/tools/hsearchspeed.c create mode 100644 nostrdb/ccan/ccan/htable/tools/speed.c create mode 100644 nostrdb/ccan/ccan/htable/tools/stringspeed.c create mode 120000 nostrdb/ccan/ccan/likely/LICENSE create mode 100644 nostrdb/ccan/ccan/likely/_info create mode 100644 nostrdb/ccan/ccan/likely/likely.c create mode 120000 nostrdb/ccan/ccan/list/LICENSE create mode 100644 nostrdb/ccan/ccan/list/_info create mode 120000 nostrdb/ccan/ccan/mem/LICENSE create mode 100644 nostrdb/ccan/ccan/mem/_info create mode 120000 nostrdb/ccan/ccan/short_types/LICENSE create mode 100644 nostrdb/ccan/ccan/short_types/_info create mode 120000 nostrdb/ccan/ccan/str/LICENSE create mode 100644 nostrdb/ccan/ccan/str/_info create mode 100644 nostrdb/ccan/ccan/str/debug.c create mode 100644 nostrdb/ccan/ccan/str/str.c create mode 100644 nostrdb/ccan/ccan/str/str_debug.h create mode 120000 nostrdb/ccan/ccan/structeq/LICENSE create mode 100644 nostrdb/ccan/ccan/structeq/_info create mode 120000 nostrdb/ccan/ccan/take/LICENSE create mode 100644 nostrdb/ccan/ccan/take/_info create mode 120000 nostrdb/ccan/ccan/tal/LICENSE create mode 100644 nostrdb/ccan/ccan/tal/_info create mode 100644 nostrdb/ccan/ccan/tal/benchmark/Makefile create mode 100644 nostrdb/ccan/ccan/tal/benchmark/samba-allocs.c create mode 100644 nostrdb/ccan/ccan/tal/benchmark/speed.c create mode 100644 nostrdb/ccan/ccan/tal/benchmark/talloc.dump create mode 120000 nostrdb/ccan/ccan/tal/str/LICENSE create mode 100644 nostrdb/ccan/ccan/tal/str/_info create mode 120000 nostrdb/ccan/ccan/typesafe_cb/LICENSE create mode 100644 nostrdb/ccan/ccan/typesafe_cb/_info create mode 120000 nostrdb/ccan/ccan/utf8/LICENSE create mode 100644 nostrdb/ccan/ccan/utf8/_info create mode 100644 nostrdb/ccan/licenses/BSD-MIT create mode 100644 nostrdb/ccan/licenses/CC0 create mode 100644 nostrdb/ccan/licenses/LGPL-2.1 create mode 100644 nostrdb/ccan/licenses/LGPL-3 diff --git a/nostrdb/ccan/README b/nostrdb/ccan/README index edf83a03b..3d02379e6 100644 --- a/nostrdb/ccan/README +++ b/nostrdb/ccan/README @@ -2,4 +2,4 @@ CCAN imported from https://github.com/rustyrussell/ccan Use "make update-ccan" at top level to refresh from ../ccan. -CCAN version: unknown +CCAN version: init-2577-g1ae4c432 diff --git a/nostrdb/ccan/ccan/alignof/LICENSE b/nostrdb/ccan/ccan/alignof/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/alignof/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/alignof/_info b/nostrdb/ccan/ccan/alignof/_info new file mode 100644 index 000000000..ee2b7ad0f --- /dev/null +++ b/nostrdb/ccan/ccan/alignof/_info @@ -0,0 +1,51 @@ +#include "config.h" +#include +#include + +/** + * alignof - ALIGNOF() macro to determine alignment of a type. + * + * Many platforms have requirements that certain types must be aligned + * to certain address boundaries, such as ints needing to be on 4-byte + * boundaries. Attempting to access variables with incorrect + * alignment may cause performance loss or even program failure (eg. a + * bus signal). + * + * There are times which it's useful to be able to programatically + * access these requirements, such as for dynamic allocators. + * + * Example: + * #include + * #include + * #include + * + * // Output contains "ALIGNOF(char) == 1" + * // Will also print out whether an onstack char array can hold a long. + * int main(void) + * { + * char arr[sizeof(int)]; + * + * printf("ALIGNOF(char) == %zu\n", ALIGNOF(char)); + * if ((unsigned long)arr % ALIGNOF(int)) { + * printf("arr %p CANNOT hold an int\n", arr); + * exit(1); + * } else { + * printf("arr %p CAN hold an int\n", arr); + * exit(0); + * } + * } + * + * License: CC0 (Public domain) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/alignof/alignof.h b/nostrdb/ccan/ccan/alignof/alignof.h index 7cf7b5ccb..9a02f188a 100644 --- a/nostrdb/ccan/ccan/alignof/alignof.h +++ b/nostrdb/ccan/ccan/alignof/alignof.h @@ -1,7 +1,7 @@ /* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_ALIGNOF_H #define CCAN_ALIGNOF_H -#include "../config.h" +#include "config.h" /** * ALIGNOF - get the alignment of a type diff --git a/nostrdb/ccan/ccan/array_size/LICENSE b/nostrdb/ccan/ccan/array_size/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/array_size/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/array_size/_info b/nostrdb/ccan/ccan/array_size/_info new file mode 100644 index 000000000..69570f34c --- /dev/null +++ b/nostrdb/ccan/ccan/array_size/_info @@ -0,0 +1,46 @@ +#include "config.h" +#include +#include + +/** + * array_size - routine for safely deriving the size of a visible array. + * + * This provides a simple ARRAY_SIZE() macro, which (given a good compiler) + * will also break compile if you try to use it on a pointer. + * + * This can ensure your code is robust to changes, without needing a gratuitous + * macro or constant. + * + * Example: + * // Outputs "Initialized 32 values\n" + * #include + * #include + * #include + * + * // We currently use 32 random values. + * static unsigned int vals[32]; + * + * int main(void) + * { + * unsigned int i; + * for (i = 0; i < ARRAY_SIZE(vals); i++) + * vals[i] = random(); + * printf("Initialized %u values\n", i); + * return 0; + * } + * + * License: CC0 (Public domain) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/build_assert\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/array_size/array_size.h b/nostrdb/ccan/ccan/array_size/array_size.h index b35916334..0ca422a29 100644 --- a/nostrdb/ccan/ccan/array_size/array_size.h +++ b/nostrdb/ccan/ccan/array_size/array_size.h @@ -1,8 +1,8 @@ /* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_ARRAY_SIZE_H #define CCAN_ARRAY_SIZE_H -#include "../config.h" -#include "ccan/build_assert/build_assert.h" +#include "config.h" +#include /** * ARRAY_SIZE - get the number of elements in a visible array @@ -17,9 +17,9 @@ #if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF /* Two gcc extensions. * &a[0] degrades to a pointer: a different type from an array */ -#define _array_size_chk(arr) \ - BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(arr), \ - typeof(&(arr)[0]))) +#define _array_size_chk(arr) \ + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(arr), \ + typeof(&(arr)[0]))) #else #define _array_size_chk(arr) 0 #endif diff --git a/nostrdb/ccan/ccan/build_assert/LICENSE b/nostrdb/ccan/ccan/build_assert/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/build_assert/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/build_assert/_info b/nostrdb/ccan/ccan/build_assert/_info new file mode 100644 index 000000000..97ebe6c96 --- /dev/null +++ b/nostrdb/ccan/ccan/build_assert/_info @@ -0,0 +1,49 @@ +#include "config.h" +#include +#include + +/** + * build_assert - routines for build-time assertions + * + * This code provides routines which will cause compilation to fail should some + * assertion be untrue: such failures are preferable to run-time assertions, + * but much more limited since they can only depends on compile-time constants. + * + * These assertions are most useful when two parts of the code must be kept in + * sync: it is better to avoid such cases if possible, but seconds best is to + * detect invalid changes at build time. + * + * For example, a tricky piece of code might rely on a certain element being at + * the start of the structure. To ensure that future changes don't break it, + * you would catch such changes in your code like so: + * + * Example: + * #include + * #include + * + * struct foo { + * char string[5]; + * int x; + * }; + * + * static char *foo_string(struct foo *foo) + * { + * // This trick requires that the string be first in the structure + * BUILD_ASSERT(offsetof(struct foo, string) == 0); + * return (char *)foo; + * } + * + * License: CC0 (Public domain) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) + /* Nothing. */ + return 0; + + return 1; +} diff --git a/nostrdb/ccan/ccan/build_assert/build_assert.h b/nostrdb/ccan/ccan/build_assert/build_assert.h index 6df9dae7e..b9ecd8402 100644 --- a/nostrdb/ccan/ccan/build_assert/build_assert.h +++ b/nostrdb/ccan/ccan/build_assert/build_assert.h @@ -10,17 +10,17 @@ * by the compiler. This can only be used within a function. * * Example: - * #include - * ... - * static char *foo_to_char(struct foo *foo) - * { - * // This code needs string to be at start of foo. - * BUILD_ASSERT(offsetof(struct foo, string) == 0); - * return (char *)foo; - * } + * #include + * ... + * static char *foo_to_char(struct foo *foo) + * { + * // This code needs string to be at start of foo. + * BUILD_ASSERT(offsetof(struct foo, string) == 0); + * return (char *)foo; + * } */ #define BUILD_ASSERT(cond) \ - do { (void) sizeof(char [1 - 2*!(cond)]); } while(0) + do { (void) sizeof(char [1 - 2*!(cond)]); } while(0) /** * BUILD_ASSERT_OR_ZERO - assert a build-time dependency, as an expression. @@ -30,11 +30,11 @@ * by the compiler. This can be used in an expression: its value is "0". * * Example: - * #define foo_to_char(foo) \ - * ((char *)(foo) \ - * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0)) + * #define foo_to_char(foo) \ + * ((char *)(foo) \ + * + BUILD_ASSERT_OR_ZERO(offsetof(struct foo, string) == 0)) */ #define BUILD_ASSERT_OR_ZERO(cond) \ - (sizeof(char [1 - 2*!(cond)]) - 1) + (sizeof(char [1 - 2*!(cond)]) - 1) #endif /* CCAN_BUILD_ASSERT_H */ diff --git a/nostrdb/ccan/ccan/check_type/LICENSE b/nostrdb/ccan/ccan/check_type/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/check_type/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/check_type/_info b/nostrdb/ccan/ccan/check_type/_info new file mode 100644 index 000000000..cc4267349 --- /dev/null +++ b/nostrdb/ccan/ccan/check_type/_info @@ -0,0 +1,33 @@ +#include "config.h" +#include +#include + +/** + * check_type - routines for compile time type checking + * + * C has fairly weak typing: ints get automatically converted to longs, signed + * to unsigned, etc. There are some cases where this is best avoided, and + * these macros provide methods for evoking warnings (or build errors) when + * a precise type isn't used. + * + * On compilers which don't support typeof() these routines are less effective, + * since they have to use sizeof() which can only distiguish between types of + * different size. + * + * License: CC0 (Public domain) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { +#if !HAVE_TYPEOF + printf("ccan/build_assert\n"); +#endif + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/check_type/check_type.h b/nostrdb/ccan/ccan/check_type/check_type.h index 0492b56bc..837aef7b1 100644 --- a/nostrdb/ccan/ccan/check_type/check_type.h +++ b/nostrdb/ccan/ccan/check_type/check_type.h @@ -1,7 +1,7 @@ /* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_CHECK_TYPE_H #define CCAN_CHECK_TYPE_H -#include "../config.h" +#include "config.h" /** * check_type - issue a warning or build failure if type is not correct. @@ -18,9 +18,9 @@ * to compile if the sizes of the types are unequal (a less complete check). * * Example: - * // They should always pass a 64-bit value to _set_some_value! - * #define set_some_value(expr) \ - * _set_some_value((check_type((expr), uint64_t), (expr))) + * // They should always pass a 64-bit value to _set_some_value! + * #define set_some_value(expr) \ + * _set_some_value((check_type((expr), uint64_t), (expr))) */ /** @@ -38,27 +38,27 @@ * to compile if the sizes of the types are unequal (a less complete check). * * Example: - * // Do subtraction to get to enclosing type, but make sure that - * // pointer is of correct type for that member. - * #define container_of(mbr_ptr, encl_type, mbr) \ - * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \ - * ((encl_type *) \ - * ((char *)(mbr_ptr) - offsetof(encl_type, mbr)))) + * // Do subtraction to get to enclosing type, but make sure that + * // pointer is of correct type for that member. + * #define container_of(mbr_ptr, encl_type, mbr) \ + * (check_types_match((mbr_ptr), &((encl_type *)0)->mbr), \ + * ((encl_type *) \ + * ((char *)(mbr_ptr) - offsetof(encl_type, mbr)))) */ #if HAVE_TYPEOF -#define check_type(expr, type) \ - ((typeof(expr) *)0 != (type *)0) +#define check_type(expr, type) \ + ((typeof(expr) *)0 != (type *)0) -#define check_types_match(expr1, expr2) \ - ((typeof(expr1) *)0 != (typeof(expr2) *)0) +#define check_types_match(expr1, expr2) \ + ((typeof(expr1) *)0 != (typeof(expr2) *)0) #else #include /* Without typeof, we can only test the sizes. */ -#define check_type(expr, type) \ - BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type)) +#define check_type(expr, type) \ + BUILD_ASSERT_OR_ZERO(sizeof(expr) == sizeof(type)) -#define check_types_match(expr1, expr2) \ - BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2)) +#define check_types_match(expr1, expr2) \ + BUILD_ASSERT_OR_ZERO(sizeof(expr1) == sizeof(expr2)) #endif /* HAVE_TYPEOF */ #endif /* CCAN_CHECK_TYPE_H */ diff --git a/nostrdb/ccan/ccan/compiler/LICENSE b/nostrdb/ccan/ccan/compiler/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/compiler/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/compiler/_info b/nostrdb/ccan/ccan/compiler/_info new file mode 100644 index 000000000..12cb24757 --- /dev/null +++ b/nostrdb/ccan/ccan/compiler/_info @@ -0,0 +1,64 @@ +#include "config.h" +#include +#include + +/** + * compiler - macros for common compiler extensions + * + * Abstracts away some compiler hints. Currently these include: + * - COLD + * For functions not called in fast paths (aka. cold functions) + * - PRINTF_FMT + * For functions which take printf-style parameters. + * - CONST_FUNCTION + * For functions which return the same value for same parameters. + * - NEEDED + * For functions and variables which must be emitted even if unused. + * - UNNEEDED + * For functions and variables which need not be emitted if unused. + * - UNUSED + * For parameters which are not used. + * - IS_COMPILE_CONSTANT() + * For using different tradeoffs for compiletime vs runtime evaluation. + * + * License: CC0 (Public domain) + * Author: Rusty Russell + * + * Example: + * #include + * #include + * #include + * + * // Example of a (slow-path) logging function. + * static int log_threshold = 2; + * static void COLD PRINTF_FMT(2,3) + * logger(int level, const char *fmt, ...) + * { + * va_list ap; + * va_start(ap, fmt); + * if (level >= log_threshold) + * vfprintf(stderr, fmt, ap); + * va_end(ap); + * } + * + * int main(int argc, char *argv[] UNNEEDED) + * { + * if (argc != 1) { + * logger(3, "Don't want %i arguments!\n", argc-1); + * return 1; + * } + * return 0; + * } + */ +int main(int argc, char *argv[]) +{ + /* Expect exactly one argument */ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/compiler/compiler.h b/nostrdb/ccan/ccan/compiler/compiler.h index 36d141e40..562b29ec7 100644 --- a/nostrdb/ccan/ccan/compiler/compiler.h +++ b/nostrdb/ccan/ccan/compiler/compiler.h @@ -3,12 +3,6 @@ #define CCAN_COMPILER_H #include "config.h" -#if HAVE_UNALIGNED_ACCESS -#define alignment_ok(p, n) 1 -#else -#define alignment_ok(p, n) ((size_t)(p) % (n) == 0) -#endif - #ifndef COLD #if HAVE_ATTRIBUTE_COLD /** @@ -20,7 +14,7 @@ * Example: * static void COLD moan(const char *reason) * { - * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); + * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); * } */ #define COLD __attribute__((__cold__)) @@ -39,8 +33,8 @@ * Example: * static void NORETURN fail(const char *reason) * { - * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); - * exit(1); + * fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno)); + * exit(1); * } */ #define NORETURN __attribute__((__noreturn__)) @@ -62,7 +56,7 @@ * void PRINTF_FMT(2,3) my_printf(const char *prefix, const char *fmt, ...); */ #define PRINTF_FMT(nfmt, narg) \ - __attribute__((format(__printf__, nfmt, narg))) + __attribute__((format(__printf__, nfmt, narg))) #else #define PRINTF_FMT(nfmt, narg) #endif @@ -112,7 +106,7 @@ * // With some preprocessor options, this is unnecessary. * static UNNEEDED void add_to_counter(int add) * { - * counter += add; + * counter += add; * } */ #define UNNEEDED __attribute__((__unused__)) @@ -127,12 +121,12 @@ * the compiler that it must exist even if it (seems) unused. * * Example: - * // Even if this is unused, these are vital for debugging. - * static NEEDED int counter; - * static NEEDED void dump_counter(void) - * { - * printf("Counter is %i\n", counter); - * } + * // Even if this is unused, these are vital for debugging. + * static NEEDED int counter; + * static NEEDED void dump_counter(void) + * { + * printf("Counter is %i\n", counter); + * } */ #define NEEDED __attribute__((__used__)) #else @@ -150,11 +144,11 @@ * to the reader that it's deliberate. * * Example: - * // This is used as a callback, so needs to have this prototype. - * static int some_callback(void *unused UNUSED) - * { - * return 0; - * } + * // This is used as a callback, so needs to have this prototype. + * static int some_callback(void *unused UNUSED) + * { + * return 0; + * } */ #define UNUSED __attribute__((__unused__)) #endif @@ -184,28 +178,28 @@ * This can be done using the IS_COMPILE_CONSTANT() macro. * * Example: - * enum greek { ALPHA, BETA, GAMMA, DELTA, EPSILON }; - * - * // Out-of-line version. - * const char *greek_name(enum greek greek); - * - * // Inline version. - * static inline const char *_greek_name(enum greek greek) - * { - * switch (greek) { - * case ALPHA: return "alpha"; - * case BETA: return "beta"; - * case GAMMA: return "gamma"; - * case DELTA: return "delta"; - * case EPSILON: return "epsilon"; - * default: return "**INVALID**"; - * } - * } - * - * // Use inline if compiler knows answer. Otherwise call function - * // to avoid copies of the same code everywhere. - * #define greek_name(g) \ - * (IS_COMPILE_CONSTANT(greek) ? _greek_name(g) : greek_name(g)) + * enum greek { ALPHA, BETA, GAMMA, DELTA, EPSILON }; + * + * // Out-of-line version. + * const char *greek_name(enum greek greek); + * + * // Inline version. + * static inline const char *_greek_name(enum greek greek) + * { + * switch (greek) { + * case ALPHA: return "alpha"; + * case BETA: return "beta"; + * case GAMMA: return "gamma"; + * case DELTA: return "delta"; + * case EPSILON: return "epsilon"; + * default: return "**INVALID**"; + * } + * } + * + * // Use inline if compiler knows answer. Otherwise call function + * // to avoid copies of the same code everywhere. + * #define greek_name(g) \ + * (IS_COMPILE_CONSTANT(greek) ? _greek_name(g) : greek_name(g)) */ #define IS_COMPILE_CONSTANT(expr) __builtin_constant_p(expr) #else @@ -226,7 +220,7 @@ * // buf param may be freed by this; need return value! * static char *WARN_UNUSED_RESULT enlarge(char *buf, unsigned *size) * { - * return realloc(buf, (*size) *= 2); + * return realloc(buf, (*size) *= 2); * } */ #define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) @@ -313,7 +307,7 @@ * * Example: * if (cpu_supports("mmx")) - * printf("MMX support engaged!\n"); + * printf("MMX support engaged!\n"); */ #define cpu_supports(x) __builtin_cpu_supports(x) #else diff --git a/nostrdb/ccan/ccan/container_of/LICENSE b/nostrdb/ccan/ccan/container_of/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/container_of/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/container_of/_info b/nostrdb/ccan/ccan/container_of/_info new file mode 100644 index 000000000..b1160522e --- /dev/null +++ b/nostrdb/ccan/ccan/container_of/_info @@ -0,0 +1,65 @@ +#include "config.h" +#include +#include + +/** + * container_of - routine for upcasting + * + * It is often convenient to create code where the caller registers a pointer + * to a generic structure and a callback. The callback might know that the + * pointer points to within a larger structure, and container_of gives a + * convenient and fairly type-safe way of returning to the enclosing structure. + * + * This idiom is an alternative to providing a void * pointer for every + * callback. + * + * Example: + * #include + * #include + * + * struct timer { + * void *members; + * }; + * + * struct info { + * int my_stuff; + * struct timer timer; + * }; + * + * static void my_timer_callback(struct timer *timer) + * { + * struct info *info = container_of(timer, struct info, timer); + * printf("my_stuff is %u\n", info->my_stuff); + * } + * + * static void register_timer(struct timer *timer) + * { + * (void)timer; + * (void)my_timer_callback; + * //... + * } + * + * int main(void) + * { + * struct info info = { .my_stuff = 1 }; + * + * register_timer(&info.timer); + * // ... + * return 0; + * } + * + * License: CC0 (Public domain) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/check_type\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/container_of/container_of.h b/nostrdb/ccan/ccan/container_of/container_of.h index de6d71444..47a34d853 100644 --- a/nostrdb/ccan/ccan/container_of/container_of.h +++ b/nostrdb/ccan/ccan/container_of/container_of.h @@ -3,8 +3,8 @@ #define CCAN_CONTAINER_OF_H #include -#include "../config.h" -#include "ccan/check_type/check_type.h" +#include "config.h" +#include /** * container_of - get pointer to enclosing structure @@ -16,25 +16,25 @@ * subtraction to return the pointer to the enclosing type. * * Example: - * struct foo { - * int fielda, fieldb; - * // ... - * }; - * struct info { - * int some_other_field; - * struct foo my_foo; - * }; + * struct foo { + * int fielda, fieldb; + * // ... + * }; + * struct info { + * int some_other_field; + * struct foo my_foo; + * }; * - * static struct info *foo_to_info(struct foo *foo) - * { - * return container_of(foo, struct info, my_foo); - * } + * static struct info *foo_to_info(struct foo *foo) + * { + * return container_of(foo, struct info, my_foo); + * } */ -#define container_of(member_ptr, containing_type, member) \ - ((containing_type *) \ - ((char *)(member_ptr) \ - - container_off(containing_type, member)) \ - + check_types_match(*(member_ptr), ((containing_type *)0)->member)) +#define container_of(member_ptr, containing_type, member) \ + ((containing_type *) \ + ((char *)(member_ptr) \ + - container_off(containing_type, member)) \ + + check_types_match(*(member_ptr), ((containing_type *)0)->member)) /** @@ -48,29 +48,29 @@ * is given NULL, in which case it also returns NULL. * * Example: - * struct foo { - * int fielda, fieldb; - * // ... - * }; - * struct info { - * int some_other_field; - * struct foo my_foo; - * }; + * struct foo { + * int fielda, fieldb; + * // ... + * }; + * struct info { + * int some_other_field; + * struct foo my_foo; + * }; * - * static struct info *foo_to_info_allowing_null(struct foo *foo) - * { - * return container_of_or_null(foo, struct info, my_foo); - * } + * static struct info *foo_to_info_allowing_null(struct foo *foo) + * { + * return container_of_or_null(foo, struct info, my_foo); + * } */ static inline char *container_of_or_null_(void *member_ptr, size_t offset) { - return member_ptr ? (char *)member_ptr - offset : NULL; + return member_ptr ? (char *)member_ptr - offset : NULL; } -#define container_of_or_null(member_ptr, containing_type, member) \ - ((containing_type *) \ - container_of_or_null_(member_ptr, \ - container_off(containing_type, member)) \ - + check_types_match(*(member_ptr), ((containing_type *)0)->member)) +#define container_of_or_null(member_ptr, containing_type, member) \ + ((containing_type *) \ + container_of_or_null_(member_ptr, \ + container_off(containing_type, member)) \ + + check_types_match(*(member_ptr), ((containing_type *)0)->member)) /** * container_off - get offset to enclosing structure @@ -81,23 +81,23 @@ static inline char *container_of_or_null_(void *member_ptr, size_t offset) * typechecking and figures out the offset to the enclosing type. * * Example: - * struct foo { - * int fielda, fieldb; - * // ... - * }; - * struct info { - * int some_other_field; - * struct foo my_foo; - * }; + * struct foo { + * int fielda, fieldb; + * // ... + * }; + * struct info { + * int some_other_field; + * struct foo my_foo; + * }; * - * static struct info *foo_to_info(struct foo *foo) - * { - * size_t off = container_off(struct info, my_foo); - * return (void *)((char *)foo - off); - * } + * static struct info *foo_to_info(struct foo *foo) + * { + * size_t off = container_off(struct info, my_foo); + * return (void *)((char *)foo - off); + * } */ -#define container_off(containing_type, member) \ - offsetof(containing_type, member) +#define container_off(containing_type, member) \ + offsetof(containing_type, member) /** * container_of_var - get pointer to enclosing structure using a variable @@ -109,19 +109,19 @@ static inline char *container_of_or_null_(void *member_ptr, size_t offset) * subtraction to return the pointer to the enclosing type. * * Example: - * static struct info *foo_to_i(struct foo *foo) - * { - * struct info *i = container_of_var(foo, i, my_foo); - * return i; - * } + * static struct info *foo_to_i(struct foo *foo) + * { + * struct info *i = container_of_var(foo, i, my_foo); + * return i; + * } */ #if HAVE_TYPEOF #define container_of_var(member_ptr, container_var, member) \ - container_of(member_ptr, typeof(*container_var), member) + container_of(member_ptr, typeof(*container_var), member) #else -#define container_of_var(member_ptr, container_var, member) \ - ((void *)((char *)(member_ptr) - \ - container_off_var(container_var, member))) +#define container_of_var(member_ptr, container_var, member) \ + ((void *)((char *)(member_ptr) - \ + container_off_var(container_var, member))) #endif /** @@ -135,11 +135,11 @@ static inline char *container_of_or_null_(void *member_ptr, size_t offset) * */ #if HAVE_TYPEOF -#define container_off_var(var, member) \ - container_off(typeof(*var), member) +#define container_off_var(var, member) \ + container_off(typeof(*var), member) #else -#define container_off_var(var, member) \ - ((const char *)&(var)->member - (const char *)(var)) +#define container_off_var(var, member) \ + ((const char *)&(var)->member - (const char *)(var)) #endif #endif /* CCAN_CONTAINER_OF_H */ diff --git a/nostrdb/ccan/ccan/cppmagic/LICENSE b/nostrdb/ccan/ccan/cppmagic/LICENSE new file mode 120000 index 000000000..2354d1294 --- /dev/null +++ b/nostrdb/ccan/ccan/cppmagic/LICENSE @@ -0,0 +1 @@ +../../licenses/BSD-MIT \ No newline at end of file diff --git a/nostrdb/ccan/ccan/cppmagic/_info b/nostrdb/ccan/ccan/cppmagic/_info new file mode 100644 index 000000000..aad394b9b --- /dev/null +++ b/nostrdb/ccan/ccan/cppmagic/_info @@ -0,0 +1,30 @@ +#include "config.h" +#include +#include + +/** + * cppmagic - Abuse of the C preprocessor + * + * This contains a bunch of fancy macro techniques such as + * preprocessor-time evaluated conditionals and (quasi) recursion and + * iteration. + * + * It's based on these articles: + * - http://jhnet.co.uk/articles/cpp_magic + * - https://github.com/pfultz2/Cloak/wiki/C-Preprocessor-tricks,-tips,-and-idioms + * and code from the Boost C++ library. + * + * License: BSD-MIT + */ +int main(int argc, char *argv[]) +{ + /* Expect exactly one argument */ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/cppmagic/cppmagic.h b/nostrdb/ccan/ccan/cppmagic/cppmagic.h index fa8d70e24..f1f6868e5 100644 --- a/nostrdb/ccan/ccan/cppmagic/cppmagic.h +++ b/nostrdb/ccan/ccan/cppmagic/cppmagic.h @@ -10,93 +10,93 @@ /** * CPPMAGIC_STRINGIFY - convert arguments to a string literal */ -#define _CPPMAGIC_STRINGIFY(...) #__VA_ARGS__ -#define CPPMAGIC_STRINGIFY(...) _CPPMAGIC_STRINGIFY(__VA_ARGS__) +#define _CPPMAGIC_STRINGIFY(...) #__VA_ARGS__ +#define CPPMAGIC_STRINGIFY(...) _CPPMAGIC_STRINGIFY(__VA_ARGS__) /** * CPPMAGIC_GLUE2 - glue arguments together * * CPPMAGIC_GLUE2(@a_, @b_) - * expands to the expansion of @a_ followed immediately - * (combining tokens) by the expansion of @b_ + * expands to the expansion of @a_ followed immediately + * (combining tokens) by the expansion of @b_ */ -#define _CPPMAGIC_GLUE2(a_, b_) a_##b_ -#define CPPMAGIC_GLUE2(a_, b_) _CPPMAGIC_GLUE2(a_, b_) +#define _CPPMAGIC_GLUE2(a_, b_) a_##b_ +#define CPPMAGIC_GLUE2(a_, b_) _CPPMAGIC_GLUE2(a_, b_) /** * CPPMAGIC_1ST - return 1st argument * * CPPMAGIC_1ST(@a_, ...) - * expands to the expansion of @a_ + * expands to the expansion of @a_ */ -#define CPPMAGIC_1ST(a_, ...) a_ +#define CPPMAGIC_1ST(a_, ...) a_ /** * CPPMAGIC_2ND - return 2nd argument * * CPPMAGIC_2ST(@a_, @b_, ...) - * expands to the expansion of @b_ + * expands to the expansion of @b_ */ -#define CPPMAGIC_2ND(a_, b_, ...) b_ +#define CPPMAGIC_2ND(a_, b_, ...) b_ /** * CPPMAGIC_ISZERO - is argument '0' * * CPPMAGIC_ISZERO(@a) - * expands to '1' if @a is '0', otherwise expands to '0'. + * expands to '1' if @a is '0', otherwise expands to '0'. */ -#define _CPPMAGIC_ISPROBE(...) CPPMAGIC_2ND(__VA_ARGS__, 0) -#define _CPPMAGIC_PROBE() $, 1 -#define _CPPMAGIC_ISZERO_0 _CPPMAGIC_PROBE() -#define CPPMAGIC_ISZERO(a_) \ - _CPPMAGIC_ISPROBE(CPPMAGIC_GLUE2(_CPPMAGIC_ISZERO_, a_)) +#define _CPPMAGIC_ISPROBE(...) CPPMAGIC_2ND(__VA_ARGS__, 0) +#define _CPPMAGIC_PROBE() $, 1 +#define _CPPMAGIC_ISZERO_0 _CPPMAGIC_PROBE() +#define CPPMAGIC_ISZERO(a_) \ + _CPPMAGIC_ISPROBE(CPPMAGIC_GLUE2(_CPPMAGIC_ISZERO_, a_)) /** * CPPMAGIC_NONZERO - is argument not '0' * * CPPMAGIC_NONZERO(@a) - * expands to '0' if @a is '0', otherwise expands to '1'. + * expands to '0' if @a is '0', otherwise expands to '1'. */ -#define CPPMAGIC_NONZERO(a_) CPPMAGIC_ISZERO(CPPMAGIC_ISZERO(a_)) +#define CPPMAGIC_NONZERO(a_) CPPMAGIC_ISZERO(CPPMAGIC_ISZERO(a_)) /** * CPPMAGIC_NONEMPTY - does the macro have any arguments? * * CPPMAGIC_NONEMPTY() - * expands to '0' + * expands to '0' * CPPMAGIC_NONEMPTY(@a) * CPPMAGIC_NONEMPTY(@a, ...) - * expand to '1' + * expand to '1' */ -#define _CPPMAGIC_EOA() 0 -#define CPPMAGIC_NONEMPTY(...) \ - CPPMAGIC_NONZERO(CPPMAGIC_1ST(_CPPMAGIC_EOA __VA_ARGS__)()) +#define _CPPMAGIC_EOA() 0 +#define CPPMAGIC_NONEMPTY(...) \ + CPPMAGIC_NONZERO(CPPMAGIC_1ST(_CPPMAGIC_EOA __VA_ARGS__)()) /** * CPPMAGIC_ISEMPTY - does the macro have no arguments? * * CPPMAGIC_ISEMPTY() - * expands to '1' + * expands to '1' * CPPMAGIC_ISEMPTY(@a) * CPPMAGIC_ISEMPTY(@a, ...) - * expand to '0' + * expand to '0' */ -#define CPPMAGIC_ISEMPTY(...) \ - CPPMAGIC_ISZERO(CPPMAGIC_NONEMPTY(__VA_ARGS__)) +#define CPPMAGIC_ISEMPTY(...) \ + CPPMAGIC_ISZERO(CPPMAGIC_NONEMPTY(__VA_ARGS__)) /* * CPPMAGIC_IFELSE - preprocessor conditional * * CPPMAGIC_IFELSE(@cond)(@if)(@else) - * expands to @else if @cond is '0', otherwise expands to @if + * expands to @else if @cond is '0', otherwise expands to @if */ -#define _CPPMAGIC_IF_0(...) _CPPMAGIC_IF_0_ELSE -#define _CPPMAGIC_IF_1(...) __VA_ARGS__ _CPPMAGIC_IF_1_ELSE -#define _CPPMAGIC_IF_0_ELSE(...) __VA_ARGS__ +#define _CPPMAGIC_IF_0(...) _CPPMAGIC_IF_0_ELSE +#define _CPPMAGIC_IF_1(...) __VA_ARGS__ _CPPMAGIC_IF_1_ELSE +#define _CPPMAGIC_IF_0_ELSE(...) __VA_ARGS__ #define _CPPMAGIC_IF_1_ELSE(...) -#define _CPPMAGIC_IFELSE(cond_) CPPMAGIC_GLUE2(_CPPMAGIC_IF_, cond_) -#define CPPMAGIC_IFELSE(cond_) \ - _CPPMAGIC_IFELSE(CPPMAGIC_NONZERO(cond_)) +#define _CPPMAGIC_IFELSE(cond_) CPPMAGIC_GLUE2(_CPPMAGIC_IF_, cond_) +#define CPPMAGIC_IFELSE(cond_) \ + _CPPMAGIC_IFELSE(CPPMAGIC_NONZERO(cond_)) /** * CPPMAGIC_EVAL - force multiple expansion passes @@ -104,88 +104,88 @@ * Forces macros in the arguments to be expanded repeatedly (up to * 1024 times) even when CPP would usually stop expanding. */ -#define CPPMAGIC_EVAL1(...) __VA_ARGS__ -#define CPPMAGIC_EVAL2(...) \ - CPPMAGIC_EVAL1(CPPMAGIC_EVAL1(__VA_ARGS__)) -#define CPPMAGIC_EVAL4(...) \ - CPPMAGIC_EVAL2(CPPMAGIC_EVAL2(__VA_ARGS__)) -#define CPPMAGIC_EVAL8(...) \ - CPPMAGIC_EVAL4(CPPMAGIC_EVAL4(__VA_ARGS__)) -#define CPPMAGIC_EVAL16(...) \ - CPPMAGIC_EVAL8(CPPMAGIC_EVAL8(__VA_ARGS__)) -#define CPPMAGIC_EVAL32(...) \ - CPPMAGIC_EVAL16(CPPMAGIC_EVAL16(__VA_ARGS__)) -#define CPPMAGIC_EVAL64(...) \ - CPPMAGIC_EVAL32(CPPMAGIC_EVAL32(__VA_ARGS__)) -#define CPPMAGIC_EVAL128(...) \ - CPPMAGIC_EVAL64(CPPMAGIC_EVAL64(__VA_ARGS__)) -#define CPPMAGIC_EVAL256(...) \ - CPPMAGIC_EVAL128(CPPMAGIC_EVAL128(__VA_ARGS__)) -#define CPPMAGIC_EVAL512(...) \ - CPPMAGIC_EVAL256(CPPMAGIC_EVAL256(__VA_ARGS__)) -#define CPPMAGIC_EVAL1024(...) \ - CPPMAGIC_EVAL512(CPPMAGIC_EVAL512(__VA_ARGS__)) -#define CPPMAGIC_EVAL(...) CPPMAGIC_EVAL1024(__VA_ARGS__) +#define CPPMAGIC_EVAL1(...) __VA_ARGS__ +#define CPPMAGIC_EVAL2(...) \ + CPPMAGIC_EVAL1(CPPMAGIC_EVAL1(__VA_ARGS__)) +#define CPPMAGIC_EVAL4(...) \ + CPPMAGIC_EVAL2(CPPMAGIC_EVAL2(__VA_ARGS__)) +#define CPPMAGIC_EVAL8(...) \ + CPPMAGIC_EVAL4(CPPMAGIC_EVAL4(__VA_ARGS__)) +#define CPPMAGIC_EVAL16(...) \ + CPPMAGIC_EVAL8(CPPMAGIC_EVAL8(__VA_ARGS__)) +#define CPPMAGIC_EVAL32(...) \ + CPPMAGIC_EVAL16(CPPMAGIC_EVAL16(__VA_ARGS__)) +#define CPPMAGIC_EVAL64(...) \ + CPPMAGIC_EVAL32(CPPMAGIC_EVAL32(__VA_ARGS__)) +#define CPPMAGIC_EVAL128(...) \ + CPPMAGIC_EVAL64(CPPMAGIC_EVAL64(__VA_ARGS__)) +#define CPPMAGIC_EVAL256(...) \ + CPPMAGIC_EVAL128(CPPMAGIC_EVAL128(__VA_ARGS__)) +#define CPPMAGIC_EVAL512(...) \ + CPPMAGIC_EVAL256(CPPMAGIC_EVAL256(__VA_ARGS__)) +#define CPPMAGIC_EVAL1024(...) \ + CPPMAGIC_EVAL512(CPPMAGIC_EVAL512(__VA_ARGS__)) +#define CPPMAGIC_EVAL(...) CPPMAGIC_EVAL1024(__VA_ARGS__) /** * CPPMAGIC_DEFER1, CPPMAGIC_DEFER2 - defer expansion */ -#define CPPMAGIC_DEFER1(a_) a_ CPPMAGIC_NOTHING() -#define CPPMAGIC_DEFER2(a_) a_ CPPMAGIC_NOTHING CPPMAGIC_NOTHING()() +#define CPPMAGIC_DEFER1(a_) a_ CPPMAGIC_NOTHING() +#define CPPMAGIC_DEFER2(a_) a_ CPPMAGIC_NOTHING CPPMAGIC_NOTHING()() /** * CPPMAGIC_MAP - iterate another macro across arguments * @m: name of a one argument macro * * CPPMAGIC_MAP(@m, @a1, @a2, ... @an) - * expands to the expansion of @m(@a1) , @m(@a2) , ... , @m(@an) + * expands to the expansion of @m(@a1) , @m(@a2) , ... , @m(@an) */ -#define _CPPMAGIC_MAP_() _CPPMAGIC_MAP -#define _CPPMAGIC_MAP(m_, a_, ...) \ - m_(a_) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (, CPPMAGIC_DEFER2(_CPPMAGIC_MAP_)()(m_, __VA_ARGS__)) \ - () -#define CPPMAGIC_MAP(m_, ...) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (CPPMAGIC_EVAL(_CPPMAGIC_MAP(m_, __VA_ARGS__))) \ - () +#define _CPPMAGIC_MAP_() _CPPMAGIC_MAP +#define _CPPMAGIC_MAP(m_, a_, ...) \ + m_(a_) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (, CPPMAGIC_DEFER2(_CPPMAGIC_MAP_)()(m_, __VA_ARGS__)) \ + () +#define CPPMAGIC_MAP(m_, ...) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (CPPMAGIC_EVAL(_CPPMAGIC_MAP(m_, __VA_ARGS__))) \ + () /** * CPPMAGIC_2MAP - iterate another macro across pairs of arguments * @m: name of a two argument macro * * CPPMAGIC_2MAP(@m, @a1, @b1, @a2, @b2, ..., @an, @bn) - * expands to the expansion of - * @m(@a1, @b1) , @m(@a2, @b2) , ... , @m(@an, @bn) + * expands to the expansion of + * @m(@a1, @b1) , @m(@a2, @b2) , ... , @m(@an, @bn) */ -#define _CPPMAGIC_2MAP_() _CPPMAGIC_2MAP -#define _CPPMAGIC_2MAP(m_, a_, b_, ...) \ - m_(a_, b_) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (, CPPMAGIC_DEFER2(_CPPMAGIC_2MAP_)()(m_, __VA_ARGS__)) \ - () -#define CPPMAGIC_2MAP(m_, ...) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (CPPMAGIC_EVAL(_CPPMAGIC_2MAP(m_, __VA_ARGS__))) \ - () +#define _CPPMAGIC_2MAP_() _CPPMAGIC_2MAP +#define _CPPMAGIC_2MAP(m_, a_, b_, ...) \ + m_(a_, b_) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (, CPPMAGIC_DEFER2(_CPPMAGIC_2MAP_)()(m_, __VA_ARGS__)) \ + () +#define CPPMAGIC_2MAP(m_, ...) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (CPPMAGIC_EVAL(_CPPMAGIC_2MAP(m_, __VA_ARGS__))) \ + () /** * CPPMAGIC_JOIN - separate arguments with given delimiter * @d: delimiter * * CPPMAGIC_JOIN(@d, @a1, @a2, ..., @an) - * expands to the expansion of @a1 @d @a2 @d ... @d @an + * expands to the expansion of @a1 @d @a2 @d ... @d @an */ -#define _CPPMAGIC_JOIN_() _CPPMAGIC_JOIN -#define _CPPMAGIC_JOIN(d_, a_, ...) \ - a_ \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (d_ CPPMAGIC_DEFER2(_CPPMAGIC_JOIN_)()(d_, __VA_ARGS__)) \ - () -#define CPPMAGIC_JOIN(d_, ...) \ - CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ - (CPPMAGIC_EVAL(_CPPMAGIC_JOIN(d_, __VA_ARGS__))) \ - () +#define _CPPMAGIC_JOIN_() _CPPMAGIC_JOIN +#define _CPPMAGIC_JOIN(d_, a_, ...) \ + a_ \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (d_ CPPMAGIC_DEFER2(_CPPMAGIC_JOIN_)()(d_, __VA_ARGS__)) \ + () +#define CPPMAGIC_JOIN(d_, ...) \ + CPPMAGIC_IFELSE(CPPMAGIC_NONEMPTY(__VA_ARGS__)) \ + (CPPMAGIC_EVAL(_CPPMAGIC_JOIN(d_, __VA_ARGS__))) \ + () #endif /* CCAN_CPPMAGIC_H */ diff --git a/nostrdb/ccan/ccan/crypto/sha256/LICENSE b/nostrdb/ccan/ccan/crypto/sha256/LICENSE new file mode 120000 index 000000000..2b1feca54 --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/LICENSE @@ -0,0 +1 @@ +../../../licenses/BSD-MIT \ No newline at end of file diff --git a/nostrdb/ccan/ccan/crypto/sha256/_info b/nostrdb/ccan/ccan/crypto/sha256/_info new file mode 100644 index 000000000..4419508dd --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/_info @@ -0,0 +1,61 @@ +#include "config.h" +#include +#include + +/** + * crypto/sha256 - implementation of SHA-2 with 256 bit digest. + * + * This code is either a wrapper for openssl (if CCAN_CRYPTO_SHA256_USE_OPENSSL + * is defined) or an open-coded implementation based on Bitcoin's. + * + * License: BSD-MIT + * Maintainer: Rusty Russell + * + * Example: + * #include + * #include + * #include + * #include + * + * // Simple demonstration: idential strings will have the same hash, but + * // two different strings will not. + * int main(int argc, char *argv[]) + * { + * struct sha256 hash1, hash2; + * + * if (argc != 3) + * errx(1, "Usage: %s ", argv[0]); + * + * sha256(&hash1, argv[1], strlen(argv[1])); + * sha256(&hash2, argv[2], strlen(argv[2])); + * printf("Hash is %s\n", memcmp(&hash1, &hash2, sizeof(hash1)) + * ? "different" : "same"); + * return 0; + * } + */ +int main(int argc, char *argv[]) +{ + /* Expect exactly one argument */ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/compiler\n"); + printf("ccan/endian\n"); + return 0; + } + + if (strcmp(argv[1], "testdepends") == 0) { + printf("ccan/str/hex\n"); + return 0; + } + + if (strcmp(argv[1], "libs") == 0) { +#ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL + printf("crypto\n"); +#endif + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/crypto/sha256/benchmarks/Makefile b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/Makefile new file mode 100644 index 000000000..f1749ab5e --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/Makefile @@ -0,0 +1,20 @@ +CCANDIR := ../../../../ +CFLAGS := -Wall -I$(CCANDIR) -O3 -flto -DCCAN_USE_ORIGINAL=1 +LDFLAGS := -O3 -flto + +INTEL_OBJS := sha256_avx1.o sha256_avx2_rorx2.o sha256_avx2_rorx8.o sha256_sse4.o + +double-sha-bench: double-sha-bench.o ccan-time.o $(INTEL_OBJS) #ccan-crypto-sha256.o + +$(INTEL_OBJS): %.o : %.asm + +%.o : %.asm + yasm -f x64 -f elf64 -X gnu -g dwarf2 -D LINUX -o $@ $< + +clean: + rm -f *.o + +ccan-crypto-sha256.o: $(CCANDIR)/ccan/crypto/sha256/sha256.c + $(CC) $(CFLAGS) -c -o $@ $< +ccan-time.o: $(CCANDIR)/ccan/time/time.c + $(CC) $(CFLAGS) -c -o $@ $< diff --git a/nostrdb/ccan/ccan/crypto/sha256/benchmarks/double-sha-bench.c b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/double-sha-bench.c new file mode 100644 index 000000000..4478b1637 --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/double-sha-bench.c @@ -0,0 +1,122 @@ +/* Bitcoin does a lot of SHA of SHA. Benchmark that. */ +#include +#include +#include + +void sha256_avx(void *input_data, uint32_t digest[8], uint64_t num_blks); +void sha256_rorx(void *input_data, uint32_t digest[8], uint64_t num_blks); +void sha256_rorx_x8ms(void *input_data, uint32_t digest[8], uint64_t num_blks); +void sha256_sse4(void *input_data, uint32_t digest[8], uint64_t num_blks); + +int main(int argc, char *argv[]) +{ + struct timeabs start; + struct timerel diff; + size_t i, n; + union { + struct sha256 h; + uint32_t u32[16]; + uint8_t u8[64]; + } block; + + n = atoi(argv[1] ? argv[1] : "1000000"); + memset(&block, 0, sizeof(block)); + sha256(&block.h, &n, sizeof(n)); + + start = time_now(); + for (i = 0; i < n; i++) { + sha256(&block.h, &block.h, sizeof(block.h)); + } + diff = time_divide(time_between(time_now(), start), n); + printf("Normal gave %02x%02x%02x%02x%02x%02x... in %llu nsec\n", + block.h.u.u8[0], block.h.u.u8[1], block.h.u.u8[2], + block.h.u.u8[3], block.h.u.u8[4], block.h.u.u8[5], + (unsigned long long)time_to_nsec(diff)); + + /* Now, don't re-initialize every time; use Transform */ + memset(&block, 0, sizeof(block)); + sha256(&block.h, &n, sizeof(n)); + block.u8[sizeof(block.h)] = 0x80; + /* Size is 256 bits */ + block.u8[sizeof(block)-2] = 1; + + start = time_now(); + for (i = 0; i < n; i++) { + struct sha256_ctx ctx = SHA256_INIT; + size_t j; + Transform(ctx.s, block.u32); + for (j = 0; j < sizeof(ctx.s) / sizeof(ctx.s[0]); j++) + block.h.u.u32[j] = cpu_to_be32(ctx.s[j]); + } + diff = time_divide(time_between(time_now(), start), n); + printf("Transform gave %02x%02x%02x%02x%02x%02x... in %llu nsec\n", + block.h.u.u8[0], block.h.u.u8[1], block.h.u.u8[2], + block.h.u.u8[3], block.h.u.u8[4], block.h.u.u8[5], + (unsigned long long)time_to_nsec(diff)); + + /* Now, assembler variants */ + sha256(&block.h, &n, sizeof(n)); + + start = time_now(); + for (i = 0; i < n; i++) { + struct sha256_ctx ctx = SHA256_INIT; + size_t j; + sha256_rorx(block.u32, ctx.s, 1); + for (j = 0; j < sizeof(ctx.s) / sizeof(ctx.s[0]); j++) + block.h.u.u32[j] = cpu_to_be32(ctx.s[j]); + } + diff = time_divide(time_between(time_now(), start), n); + printf("Asm rorx for %02x%02x%02x%02x%02x%02x... is %llu nsec\n", + block.h.u.u8[0], block.h.u.u8[1], block.h.u.u8[2], + block.h.u.u8[3], block.h.u.u8[4], block.h.u.u8[5], + (unsigned long long)time_to_nsec(diff)); + + sha256(&block.h, &n, sizeof(n)); + + start = time_now(); + for (i = 0; i < n; i++) { + struct sha256_ctx ctx = SHA256_INIT; + size_t j; + sha256_sse4(block.u32, ctx.s, 1); + for (j = 0; j < sizeof(ctx.s) / sizeof(ctx.s[0]); j++) + block.h.u.u32[j] = cpu_to_be32(ctx.s[j]); + } + diff = time_divide(time_between(time_now(), start), n); + printf("Asm SSE4 for %02x%02x%02x%02x%02x%02x... is %llu nsec\n", + block.h.u.u8[0], block.h.u.u8[1], block.h.u.u8[2], + block.h.u.u8[3], block.h.u.u8[4], block.h.u.u8[5], + (unsigned long long)time_to_nsec(diff)); + + sha256(&block.h, &n, sizeof(n)); + start = time_now(); + for (i = 0; i < n; i++) { + struct sha256_ctx ctx = SHA256_INIT; + size_t j; + sha256_rorx_x8ms(block.u32, ctx.s, 1); + for (j = 0; j < sizeof(ctx.s) / sizeof(ctx.s[0]); j++) + block.h.u.u32[j] = cpu_to_be32(ctx.s[j]); + } + diff = time_divide(time_between(time_now(), start), n); + printf("Asm RORx-x8ms for %02x%02x%02x%02x%02x%02x... is %llu nsec\n", + block.h.u.u8[0], block.h.u.u8[1], block.h.u.u8[2], + block.h.u.u8[3], block.h.u.u8[4], block.h.u.u8[5], + (unsigned long long)time_to_nsec(diff)); + + sha256(&block.h, &n, sizeof(n)); + start = time_now(); + for (i = 0; i < n; i++) { + struct sha256_ctx ctx = SHA256_INIT; + size_t j; + sha256_avx(block.u32, ctx.s, 1); + for (j = 0; j < sizeof(ctx.s) / sizeof(ctx.s[0]); j++) + block.h.u.u32[j] = cpu_to_be32(ctx.s[j]); + } + diff = time_divide(time_between(time_now(), start), n); + printf("Asm AVX for %02x%02x%02x%02x%02x%02x... is %llu nsec\n", + block.h.u.u8[0], block.h.u.u8[1], block.h.u.u8[2], + block.h.u.u8[3], block.h.u.u8[4], block.h.u.u8[5], + (unsigned long long)time_to_nsec(diff)); + + return 0; +} + diff --git a/nostrdb/ccan/ccan/crypto/sha256/benchmarks/open_software_license.txt b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/open_software_license.txt new file mode 100644 index 000000000..bf0d71858 --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/open_software_license.txt @@ -0,0 +1,32 @@ +Copyright (c) 2012, Intel Corporation + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the + distribution. + +* Neither the name of the Intel Corporation nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + +THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx1.asm b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx1.asm new file mode 100644 index 000000000..11d322de9 --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx1.asm @@ -0,0 +1,586 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Copyright (c) 2012, Intel Corporation +; +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are +; met: +; +; * Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; * Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the +; distribution. +; +; * Neither the name of the Intel Corporation nor the names of its +; contributors may be used to endorse or promote products derived from +; this software without specific prior written permission. +; +; +; THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY +; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR +; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Example YASM command lines: +; Windows: yasm -Xvc -f x64 -rnasm -pnasm -o sha256_avx1.obj -g cv8 sha256_avx1.asm +; Linux: yasm -f x64 -f elf64 -X gnu -g dwarf2 -D LINUX -o sha256_avx1.o sha256_avx1.asm +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; This code is described in an Intel White-Paper: +; "Fast SHA-256 Implementations on Intel Architecture Processors" +; +; To find it, surf to http://www.intel.com/p/en_US/embedded +; and search for that title. +; The paper is expected to be released roughly at the end of April, 2012 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; This code schedules 1 blocks at a time, with 4 lanes per block +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%define VMOVDQ vmovdqu ;; assume buffers not aligned + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Define Macros + +; addm [mem], reg +; Add reg to mem using reg-mem add and store +%macro addm 2 + add %2, %1 + mov %1, %2 +%endm + +%macro MY_ROR 2 + shld %1,%1,(32-(%2)) +%endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; COPY_XMM_AND_BSWAP xmm, [mem], byte_flip_mask +; Load xmm with mem and byte swap each dword +%macro COPY_XMM_AND_BSWAP 3 + VMOVDQ %1, %2 + vpshufb %1, %1, %3 +%endmacro + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%define X0 xmm4 +%define X1 xmm5 +%define X2 xmm6 +%define X3 xmm7 + +%define XTMP0 xmm0 +%define XTMP1 xmm1 +%define XTMP2 xmm2 +%define XTMP3 xmm3 +%define XTMP4 xmm8 +%define XFER xmm9 +%define XTMP5 xmm11 + +%define SHUF_00BA xmm10 ; shuffle xBxA -> 00BA +%define SHUF_DC00 xmm12 ; shuffle xDxC -> DC00 +%define BYTE_FLIP_MASK xmm13 + +%ifdef LINUX +%define NUM_BLKS rdx ; 3rd arg +%define CTX rsi ; 2nd arg +%define INP rdi ; 1st arg + +%define SRND rdi ; clobbers INP +%define c ecx +%define d r8d +%define e edx +%else +%define NUM_BLKS r8 ; 3rd arg +%define CTX rdx ; 2nd arg +%define INP rcx ; 1st arg + +%define SRND rcx ; clobbers INP +%define c edi +%define d esi +%define e r8d + +%endif +%define TBL rbp +%define a eax +%define b ebx + +%define f r9d +%define g r10d +%define h r11d + +%define y0 r13d +%define y1 r14d +%define y2 r15d + + +_INP_END_SIZE equ 8 +_INP_SIZE equ 8 +_XFER_SIZE equ 8 +%ifdef LINUX +_XMM_SAVE_SIZE equ 0 +%else +_XMM_SAVE_SIZE equ 8*16 +%endif +; STACK_SIZE plus pushes must be an odd multiple of 8 +_ALIGN_SIZE equ 8 + +_INP_END equ 0 +_INP equ _INP_END + _INP_END_SIZE +_XFER equ _INP + _INP_SIZE +_XMM_SAVE equ _XFER + _XFER_SIZE + _ALIGN_SIZE +STACK_SIZE equ _XMM_SAVE + _XMM_SAVE_SIZE + +; rotate_Xs +; Rotate values of symbols X0...X3 +%macro rotate_Xs 0 +%xdefine X_ X0 +%xdefine X0 X1 +%xdefine X1 X2 +%xdefine X2 X3 +%xdefine X3 X_ +%endm + +; ROTATE_ARGS +; Rotate values of symbols a...h +%macro ROTATE_ARGS 0 +%xdefine TMP_ h +%xdefine h g +%xdefine g f +%xdefine f e +%xdefine e d +%xdefine d c +%xdefine c b +%xdefine b a +%xdefine a TMP_ +%endm + +%macro FOUR_ROUNDS_AND_SCHED 0 + ;; compute s0 four at a time and s1 two at a time + ;; compute W[-16] + W[-7] 4 at a time + ;vmovdqa XTMP0, X3 + mov y0, e ; y0 = e + MY_ROR y0, (25-11) ; y0 = e >> (25-11) + mov y1, a ; y1 = a + vpalignr XTMP0, X3, X2, 4 ; XTMP0 = W[-7] + MY_ROR y1, (22-13) ; y1 = a >> (22-13) + xor y0, e ; y0 = e ^ (e >> (25-11)) + mov y2, f ; y2 = f + MY_ROR y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + ;vmovdqa XTMP1, X1 + xor y1, a ; y1 = a ^ (a >> (22-13) + xor y2, g ; y2 = f^g + vpaddd XTMP0, XTMP0, X0 ; XTMP0 = W[-7] + W[-16] + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + and y2, e ; y2 = (f^g)&e + MY_ROR y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + ;; compute s0 + vpalignr XTMP1, X1, X0, 4 ; XTMP1 = W[-15] + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + MY_ROR y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + xor y2, g ; y2 = CH = ((f^g)&e)^g + + + MY_ROR y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + add y2, y0 ; y2 = S1 + CH + add y2, [rsp + _XFER + 0*4] ; y2 = k + w + S1 + CH + + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + + vpsrld XTMP2, XTMP1, 7 + + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + + vpslld XTMP3, XTMP1, (32-7) + + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + + vpor XTMP3, XTMP3, XTMP2 ; XTMP1 = W[-15] nostrdb: MY_ROR 7 + + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + +ROTATE_ARGS + + mov y0, e ; y0 = e + mov y1, a ; y1 = a + + + MY_ROR y0, (25-11) ; y0 = e >> (25-11) + xor y0, e ; y0 = e ^ (e >> (25-11)) + mov y2, f ; y2 = f + MY_ROR y1, (22-13) ; y1 = a >> (22-13) + + vpsrld XTMP2, XTMP1,18 + + xor y1, a ; y1 = a ^ (a >> (22-13) + MY_ROR y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + xor y2, g ; y2 = f^g + + vpsrld XTMP4, XTMP1, 3 ; XTMP4 = W[-15] nostrdb: >> 3 + + MY_ROR y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + and y2, e ; y2 = (f^g)&e + MY_ROR y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + + vpslld XTMP1, XTMP1, (32-18) + + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + xor y2, g ; y2 = CH = ((f^g)&e)^g + + vpxor XTMP3, XTMP3, XTMP1 + + add y2, y0 ; y2 = S1 + CH + add y2, [rsp + _XFER + 1*4] ; y2 = k + w + S1 + CH + MY_ROR y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + + vpxor XTMP3, XTMP3, XTMP2 ; XTMP1 = W[-15] nostrdb: MY_ROR 7 ^ W[-15] MY_ROR 18 + + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + + vpxor XTMP1, XTMP3, XTMP4 ; XTMP1 = s0 + + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + ;; compute low s1 + vpshufd XTMP2, X3, 11111010b ; XTMP2 = W[-2] {BBAA} + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + vpaddd XTMP0, XTMP0, XTMP1 ; XTMP0 = W[-16] + W[-7] + s0 + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + +ROTATE_ARGS + ;vmovdqa XTMP3, XTMP2 ; XTMP3 = W[-2] {BBAA} + + mov y0, e ; y0 = e + mov y1, a ; y1 = a + MY_ROR y0, (25-11) ; y0 = e >> (25-11) + + ;vmovdqa XTMP4, XTMP2 ; XTMP4 = W[-2] {BBAA} + + xor y0, e ; y0 = e ^ (e >> (25-11)) + MY_ROR y1, (22-13) ; y1 = a >> (22-13) + mov y2, f ; y2 = f + xor y1, a ; y1 = a ^ (a >> (22-13) + MY_ROR y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + + vpsrld XTMP4, XTMP2, 10 ; XTMP4 = W[-2] >> 10 {BBAA} + + xor y2, g ; y2 = f^g + + vpsrlq XTMP3, XTMP2, 19 ; XTMP3 = W[-2] MY_ROR 19 {xBxA} + + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + and y2, e ; y2 = (f^g)&e + + vpsrlq XTMP2, XTMP2, 17 ; XTMP2 = W[-2] MY_ROR 17 {xBxA} + + MY_ROR y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + xor y2, g ; y2 = CH = ((f^g)&e)^g + MY_ROR y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + vpxor XTMP2, XTMP2, XTMP3 + add y2, y0 ; y2 = S1 + CH + MY_ROR y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + add y2, [rsp + _XFER + 2*4] ; y2 = k + w + S1 + CH + vpxor XTMP4, XTMP4, XTMP2 ; XTMP4 = s1 {xBxA} + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + vpshufb XTMP4, XTMP4, SHUF_00BA ; XTMP4 = s1 {00BA} + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + vpaddd XTMP0, XTMP0, XTMP4 ; XTMP0 = {..., ..., W[1], W[0]} + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + ;; compute high s1 + vpshufd XTMP2, XTMP0, 01010000b ; XTMP2 = W[-2] {DDCC} + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + +ROTATE_ARGS + ;vmovdqa XTMP3, XTMP2 ; XTMP3 = W[-2] {DDCC} + mov y0, e ; y0 = e + MY_ROR y0, (25-11) ; y0 = e >> (25-11) + mov y1, a ; y1 = a + ;vmovdqa XTMP5, XTMP2 ; XTMP5 = W[-2] {DDCC} + MY_ROR y1, (22-13) ; y1 = a >> (22-13) + xor y0, e ; y0 = e ^ (e >> (25-11)) + mov y2, f ; y2 = f + MY_ROR y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + + vpsrld XTMP5, XTMP2, 10 ; XTMP5 = W[-2] >> 10 {DDCC} + + xor y1, a ; y1 = a ^ (a >> (22-13) + xor y2, g ; y2 = f^g + + vpsrlq XTMP3, XTMP2, 19 ; XTMP3 = W[-2] MY_ROR 19 {xDxC} + + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + and y2, e ; y2 = (f^g)&e + MY_ROR y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + + vpsrlq XTMP2, XTMP2, 17 ; XTMP2 = W[-2] MY_ROR 17 {xDxC} + + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + MY_ROR y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + xor y2, g ; y2 = CH = ((f^g)&e)^g + + vpxor XTMP2, XTMP2, XTMP3 + + MY_ROR y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + add y2, y0 ; y2 = S1 + CH + add y2, [rsp + _XFER + 3*4] ; y2 = k + w + S1 + CH + vpxor XTMP5, XTMP5, XTMP2 ; XTMP5 = s1 {xDxC} + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + vpshufb XTMP5, XTMP5, SHUF_DC00 ; XTMP5 = s1 {DC00} + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + vpaddd X0, XTMP5, XTMP0 ; X0 = {W[3], W[2], W[1], W[0]} + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + +ROTATE_ARGS +rotate_Xs +%endm + +;; input is [rsp + _XFER + %1 * 4] +%macro DO_ROUND 1 + mov y0, e ; y0 = e + MY_ROR y0, (25-11) ; y0 = e >> (25-11) + mov y1, a ; y1 = a + xor y0, e ; y0 = e ^ (e >> (25-11)) + MY_ROR y1, (22-13) ; y1 = a >> (22-13) + mov y2, f ; y2 = f + xor y1, a ; y1 = a ^ (a >> (22-13) + MY_ROR y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + xor y2, g ; y2 = f^g + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + MY_ROR y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + and y2, e ; y2 = (f^g)&e + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + MY_ROR y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + xor y2, g ; y2 = CH = ((f^g)&e)^g + add y2, y0 ; y2 = S1 + CH + MY_ROR y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + add y2, [rsp + _XFER + %1 * 4] ; y2 = k + w + S1 + CH + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + ROTATE_ARGS +%endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; void sha256_avx(void *input_data, UINT32 digest[8], UINT64 num_blks) +;; arg 1 : pointer to input data +;; arg 2 : pointer to digest +;; arg 3 : Num blocks +section .text +global sha256_avx +align 32 +sha256_avx: + push rbx +%ifndef LINUX + push rsi + push rdi +%endif + push rbp + push r13 + push r14 + push r15 + + sub rsp,STACK_SIZE +%ifndef LINUX + vmovdqa [rsp + _XMM_SAVE + 0*16],xmm6 + vmovdqa [rsp + _XMM_SAVE + 1*16],xmm7 + vmovdqa [rsp + _XMM_SAVE + 2*16],xmm8 + vmovdqa [rsp + _XMM_SAVE + 3*16],xmm9 + vmovdqa [rsp + _XMM_SAVE + 4*16],xmm10 + vmovdqa [rsp + _XMM_SAVE + 5*16],xmm11 + vmovdqa [rsp + _XMM_SAVE + 6*16],xmm12 + vmovdqa [rsp + _XMM_SAVE + 7*16],xmm13 +%endif + + shl NUM_BLKS, 6 ; convert to bytes + jz done_hash + add NUM_BLKS, INP ; pointer to end of data + mov [rsp + _INP_END], NUM_BLKS + + ;; load initial digest + mov a,[4*0 + CTX] + mov b,[4*1 + CTX] + mov c,[4*2 + CTX] + mov d,[4*3 + CTX] + mov e,[4*4 + CTX] + mov f,[4*5 + CTX] + mov g,[4*6 + CTX] + mov h,[4*7 + CTX] + + vmovdqa BYTE_FLIP_MASK, [PSHUFFLE_BYTE_FLIP_MASK wrt rip] + vmovdqa SHUF_00BA, [_SHUF_00BA wrt rip] + vmovdqa SHUF_DC00, [_SHUF_DC00 wrt rip] + +loop0: + lea TBL,[K256 wrt rip] + + ;; byte swap first 16 dwords + COPY_XMM_AND_BSWAP X0, [INP + 0*16], BYTE_FLIP_MASK + COPY_XMM_AND_BSWAP X1, [INP + 1*16], BYTE_FLIP_MASK + COPY_XMM_AND_BSWAP X2, [INP + 2*16], BYTE_FLIP_MASK + COPY_XMM_AND_BSWAP X3, [INP + 3*16], BYTE_FLIP_MASK + + mov [rsp + _INP], INP + + ;; schedule 48 input dwords, by doing 3 rounds of 16 each + mov SRND, 3 +align 16 +loop1: + vpaddd XFER, X0, [TBL + 0*16] + vmovdqa [rsp + _XFER], XFER + FOUR_ROUNDS_AND_SCHED + + vpaddd XFER, X0, [TBL + 1*16] + vmovdqa [rsp + _XFER], XFER + FOUR_ROUNDS_AND_SCHED + + vpaddd XFER, X0, [TBL + 2*16] + vmovdqa [rsp + _XFER], XFER + FOUR_ROUNDS_AND_SCHED + + vpaddd XFER, X0, [TBL + 3*16] + vmovdqa [rsp + _XFER], XFER + add TBL, 4*16 + FOUR_ROUNDS_AND_SCHED + + sub SRND, 1 + jne loop1 + + mov SRND, 2 +loop2: + vpaddd XFER, X0, [TBL + 0*16] + vmovdqa [rsp + _XFER], XFER + DO_ROUND 0 + DO_ROUND 1 + DO_ROUND 2 + DO_ROUND 3 + + vpaddd XFER, X1, [TBL + 1*16] + vmovdqa [rsp + _XFER], XFER + add TBL, 2*16 + DO_ROUND 0 + DO_ROUND 1 + DO_ROUND 2 + DO_ROUND 3 + + vmovdqa X0, X2 + vmovdqa X1, X3 + + sub SRND, 1 + jne loop2 + + + addm [4*0 + CTX],a + addm [4*1 + CTX],b + addm [4*2 + CTX],c + addm [4*3 + CTX],d + addm [4*4 + CTX],e + addm [4*5 + CTX],f + addm [4*6 + CTX],g + addm [4*7 + CTX],h + + mov INP, [rsp + _INP] + add INP, 64 + cmp INP, [rsp + _INP_END] + jne loop0 + +done_hash: +%ifndef LINUX + vmovdqa xmm6,[rsp + _XMM_SAVE + 0*16] + vmovdqa xmm7,[rsp + _XMM_SAVE + 1*16] + vmovdqa xmm8,[rsp + _XMM_SAVE + 2*16] + vmovdqa xmm9,[rsp + _XMM_SAVE + 3*16] + vmovdqa xmm10,[rsp + _XMM_SAVE + 4*16] + vmovdqa xmm11,[rsp + _XMM_SAVE + 5*16] + vmovdqa xmm12,[rsp + _XMM_SAVE + 6*16] + vmovdqa xmm13,[rsp + _XMM_SAVE + 7*16] +%endif + + + add rsp, STACK_SIZE + + pop r15 + pop r14 + pop r13 + pop rbp +%ifndef LINUX + pop rdi + pop rsi +%endif + pop rbx + + ret + + +section .data +align 64 +K256: + dd 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + dd 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + dd 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + dd 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + dd 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + dd 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + dd 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + dd 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + dd 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + dd 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + dd 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + dd 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + dd 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + dd 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + dd 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + dd 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + +PSHUFFLE_BYTE_FLIP_MASK: ddq 0x0c0d0e0f08090a0b0405060700010203 + +; shuffle xBxA -> 00BA +_SHUF_00BA: ddq 0xFFFFFFFFFFFFFFFF0b0a090803020100 + +; shuffle xDxC -> DC00 +_SHUF_DC00: ddq 0x0b0a090803020100FFFFFFFFFFFFFFFF diff --git a/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx2_rorx2.asm b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx2_rorx2.asm new file mode 100644 index 000000000..8bcbca6b0 --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx2_rorx2.asm @@ -0,0 +1,826 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Copyright (c) 2012, Intel Corporation +; +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are +; met: +; +; * Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; * Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the +; distribution. +; +; * Neither the name of the Intel Corporation nor the names of its +; contributors may be used to endorse or promote products derived from +; this software without specific prior written permission. +; +; +; THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY +; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR +; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Example YASM command lines: +; Windows: yasm -Xvc -f x64 -rnasm -pnasm -o sha256_avx2_rorx2.obj -g cv8 sha256_avx2_rorx2.asm +; Linux: yasm -f x64 -f elf64 -X gnu -g dwarf2 -D LINUX -o sha256_avx2_rorx2.o sha256_avx2_rorx2.asm +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; This code is described in an Intel White-Paper: +; "Fast SHA-256 Implementations on Intel Architecture Processors" +; +; To find it, surf to http://www.intel.com/p/en_US/embedded +; and search for that title. +; The paper is expected to be released roughly at the end of April, 2012 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; This code schedules 2 blocks at a time, with 4 lanes per block +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%define VMOVDQ vmovdqu ;; assume buffers not aligned + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Define Macros + +; addm [mem], reg +; Add reg to mem using reg-mem add and store +%macro addm 2 + add %2, %1 + mov %1, %2 +%endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%define X0 ymm4 +%define X1 ymm5 +%define X2 ymm6 +%define X3 ymm7 + +; XMM versions of above +%define XWORD0 xmm4 +%define XWORD1 xmm5 +%define XWORD2 xmm6 +%define XWORD3 xmm7 + +%define XTMP0 ymm0 +%define XTMP1 ymm1 +%define XTMP2 ymm2 +%define XTMP3 ymm3 +%define XTMP4 ymm8 +%define XFER ymm9 +%define XTMP5 ymm11 + +%define SHUF_00BA ymm10 ; shuffle xBxA -> 00BA +%define SHUF_DC00 ymm12 ; shuffle xDxC -> DC00 +%define BYTE_FLIP_MASK ymm13 + +%define X_BYTE_FLIP_MASK xmm13 ; XMM version of BYTE_FLIP_MASK + +%ifdef LINUX +%define NUM_BLKS rdx ; 3rd arg +%define CTX rsi ; 2nd arg +%define INP rdi ; 1st arg +%define c ecx +%define d r8d +%define e edx ; clobbers NUM_BLKS +%define y3 edi ; clobbers INP +%else +%define NUM_BLKS r8 ; 3rd arg +%define CTX rdx ; 2nd arg +%define INP rcx ; 1st arg +%define c edi +%define d esi +%define e r8d ; clobbers NUM_BLKS +%define y3 ecx ; clobbers INP + +%endif + + +%define TBL rbp +%define SRND CTX ; SRND is same register as CTX + +%define a eax +%define b ebx +%define f r9d +%define g r10d +%define h r11d +%define old_h r11d + +%define T1 r12d +%define y0 r13d +%define y1 r14d +%define y2 r15d + + +_XFER_SIZE equ 2*64*4 ; 2 blocks, 64 rounds, 4 bytes/round +%ifdef LINUX +_XMM_SAVE_SIZE equ 0 +%else +_XMM_SAVE_SIZE equ 8*16 +%endif +_INP_END_SIZE equ 8 +_INP_SIZE equ 8 +_CTX_SIZE equ 8 +_RSP_SIZE equ 8 + +_XFER equ 0 +_XMM_SAVE equ _XFER + _XFER_SIZE +_INP_END equ _XMM_SAVE + _XMM_SAVE_SIZE +_INP equ _INP_END + _INP_END_SIZE +_CTX equ _INP + _INP_SIZE +_RSP equ _CTX + _CTX_SIZE +STACK_SIZE equ _RSP + _RSP_SIZE + +; rotate_Xs +; Rotate values of symbols X0...X3 +%macro rotate_Xs 0 +%xdefine X_ X0 +%xdefine X0 X1 +%xdefine X1 X2 +%xdefine X2 X3 +%xdefine X3 X_ +%endm + +; ROTATE_ARGS +; Rotate values of symbols a...h +%macro ROTATE_ARGS 0 +%xdefine old_h h +%xdefine TMP_ h +%xdefine h g +%xdefine g f +%xdefine f e +%xdefine e d +%xdefine d c +%xdefine c b +%xdefine b a +%xdefine a TMP_ +%endm + +%macro FOUR_ROUNDS_AND_SCHED 1 +%define %%XFER %1 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov y3, a ; y3 = a ; MAJA + rorx y0, e, 25 ; y0 = e >> 25 ; S1A + rorx y1, e, 11 ; y1 = e >> 11 ; S1B + + add h, dword[%%XFER+0*4] ; h = k + w + h ; -- + or y3, c ; y3 = a|c ; MAJA + vpalignr XTMP0, X3, X2, 4 ; XTMP0 = W[-7] + mov y2, f ; y2 = f ; CH + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ; S1 + xor y2, g ; y2 = f^g ; CH + vpaddd XTMP0, XTMP0, X0 ; XTMP0 = W[-7] + W[-16]; y1 = (e >> 6) ; S1 + rorx y1, e, 6 ; y1 = (e >> 6) ; S1 + + and y2, e ; y2 = (f^g)&e ; CH + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx y1, a, 22 ; y1 = a >> 22 ; S0A + add d, h ; d = k + w + h + d ; -- + + and y3, b ; y3 = (a|c)&b ; MAJA + vpalignr XTMP1, X1, X0, 4 ; XTMP1 = W[-15] + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + + xor y2, g ; y2 = CH = ((f^g)&e)^g ; CH + vpsrld XTMP2, XTMP1, 7 + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and T1, c ; T1 = a&c ; MAJB + + add y2, y0 ; y2 = S1 + CH ; -- + vpslld XTMP3, XTMP1, (32-7) + or y3, T1 ; y3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, y1 ; h = k + w + h + S0 ; -- + + add d, y2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + vpor XTMP3, XTMP3, XTMP2 ; XTMP3 = W[-15] nostrdb: ror 7 + + vpsrld XTMP2, XTMP1,18 + add h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + add h, y3 ; h = t1 + S0 + MAJ ; -- + + +ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + + mov y3, a ; y3 = a ; MAJA + rorx y0, e, 25 ; y0 = e >> 25 ; S1A + rorx y1, e, 11 ; y1 = e >> 11 ; S1B + add h, dword[%%XFER+1*4] ; h = k + w + h ; -- + or y3, c ; y3 = a|c ; MAJA + + + vpsrld XTMP4, XTMP1, 3 ; XTMP4 = W[-15] nostrdb: >> 3 + mov y2, f ; y2 = f ; CH + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ; S1 + xor y2, g ; y2 = f^g ; CH + + + rorx y1, e, 6 ; y1 = (e >> 6) ; S1 + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx y1, a, 22 ; y1 = a >> 22 ; S0A + and y2, e ; y2 = (f^g)&e ; CH + add d, h ; d = k + w + h + d ; -- + + vpslld XTMP1, XTMP1, (32-18) + and y3, b ; y3 = (a|c)&b ; MAJA + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ; S0 + + vpxor XTMP3, XTMP3, XTMP1 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + xor y2, g ; y2 = CH = ((f^g)&e)^g ; CH + + vpxor XTMP3, XTMP3, XTMP2 ; XTMP3 = W[-15] nostrdb: ror 7 ^ W[-15] ror 18 + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and T1, c ; T1 = a&c ; MAJB + add y2, y0 ; y2 = S1 + CH ; -- + + vpxor XTMP1, XTMP3, XTMP4 ; XTMP1 = s0 + vpshufd XTMP2, X3, 11111010b ; XTMP2 = W[-2] {BBAA} + or y3, T1 ; y3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, y1 ; h = k + w + h + S0 ; -- + + vpaddd XTMP0, XTMP0, XTMP1 ; XTMP0 = W[-16] + W[-7] + s0 + add d, y2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + add h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + add h, y3 ; h = t1 + S0 + MAJ ; -- + + vpsrld XTMP4, XTMP2, 10 ; XTMP4 = W[-2] >> 10 {BBAA} + + +ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov y3, a ; y3 = a ; MAJA + rorx y0, e, 25 ; y0 = e >> 25 ; S1A + add h, [%%XFER+2*4] ; h = k + w + h ; -- + + vpsrlq XTMP3, XTMP2, 19 ; XTMP3 = W[-2] ror 19 {xBxA} + rorx y1, e, 11 ; y1 = e >> 11 ; S1B + or y3, c ; y3 = a|c ; MAJA + mov y2, f ; y2 = f ; CH + xor y2, g ; y2 = f^g ; CH + + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ; S1 + vpsrlq XTMP2, XTMP2, 17 ; XTMP2 = W[-2] ror 17 {xBxA} + and y2, e ; y2 = (f^g)&e ; CH + + rorx y1, e, 6 ; y1 = (e >> 6) ; S1 + vpxor XTMP2, XTMP2, XTMP3 + add d, h ; d = k + w + h + d ; -- + and y3, b ; y3 = (a|c)&b ; MAJA + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx y1, a, 22 ; y1 = a >> 22 ; S0A + vpxor XTMP4, XTMP4, XTMP2 ; XTMP4 = s1 {xBxA} + xor y2, g ; y2 = CH = ((f^g)&e)^g ; CH + + vpshufb XTMP4, XTMP4, SHUF_00BA ; XTMP4 = s1 {00BA} + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + vpaddd XTMP0, XTMP0, XTMP4 ; XTMP0 = {..., ..., W[1], W[0]} + + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and T1, c ; T1 = a&c ; MAJB + add y2, y0 ; y2 = S1 + CH ; -- + vpshufd XTMP2, XTMP0, 01010000b ; XTMP2 = W[-2] {DDCC} + + or y3, T1 ; y3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, y1 ; h = k + w + h + S0 ; -- + add d, y2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + add h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + + add h, y3 ; h = t1 + S0 + MAJ ; -- + + +ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov y3, a ; y3 = a ; MAJA + rorx y0, e, 25 ; y0 = e >> 25 ; S1A + rorx y1, e, 11 ; y1 = e >> 11 ; S1B + add h, dword[%%XFER+3*4] ; h = k + w + h ; -- + or y3, c ; y3 = a|c ; MAJA + + + vpsrld XTMP5, XTMP2, 10 ; XTMP5 = W[-2] >> 10 {DDCC} + mov y2, f ; y2 = f ; CH + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ; S1 + xor y2, g ; y2 = f^g ; CH + + + vpsrlq XTMP3, XTMP2, 19 ; XTMP3 = W[-2] ror 19 {xDxC} + rorx y1, e, 6 ; y1 = (e >> 6) ; S1 + and y2, e ; y2 = (f^g)&e ; CH + add d, h ; d = k + w + h + d ; -- + and y3, b ; y3 = (a|c)&b ; MAJA + + vpsrlq XTMP2, XTMP2, 17 ; XTMP2 = W[-2] ror 17 {xDxC} + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + xor y2, g ; y2 = CH = ((f^g)&e)^g ; CH + + vpxor XTMP2, XTMP2, XTMP3 + rorx y1, a, 22 ; y1 = a >> 22 ; S0A + add y2, y0 ; y2 = S1 + CH ; -- + + vpxor XTMP5, XTMP5, XTMP2 ; XTMP5 = s1 {xDxC} + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ; S0 + add d, y2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + vpshufb XTMP5, XTMP5, SHUF_DC00 ; XTMP5 = s1 {DC00} + + vpaddd X0, XTMP5, XTMP0 ; X0 = {W[3], W[2], W[1], W[0]} + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and T1, c ; T1 = a&c ; MAJB + or y3, T1 ; y3 = MAJ = (a|c)&b)|(a&c) ; MAJ + + add h, y1 ; h = k + w + h + S0 ; -- + add h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + add h, y3 ; h = t1 + S0 + MAJ ; -- + +ROTATE_ARGS +rotate_Xs +%endm + +%macro DO_4ROUNDS 1 +%define %%XFER %1 +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov y2, f ; y2 = f ; CH + rorx y0, e, 25 ; y0 = e >> 25 ; S1A + rorx y1, e, 11 ; y1 = e >> 11 ; S1B + xor y2, g ; y2 = f^g ; CH + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ; S1 + rorx y1, e, 6 ; y1 = (e >> 6) ; S1 + and y2, e ; y2 = (f^g)&e ; CH + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor y2, g ; y2 = CH = ((f^g)&e)^g ; CH + rorx y1, a, 22 ; y1 = a >> 22 ; S0A + mov y3, a ; y3 = a ; MAJA + + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[%%XFER + 4*0] ; h = k + w + h ; -- + or y3, c ; y3 = a|c ; MAJA + + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and y3, b ; y3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add y2, y0 ; y2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or y3, T1 ; y3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, y1 ; h = k + w + h + S0 ; -- + + add d, y2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + + ;add h, y3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;; + + add old_h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + mov y2, f ; y2 = f ; CH + rorx y0, e, 25 ; y0 = e >> 25 ; S1A + rorx y1, e, 11 ; y1 = e >> 11 ; S1B + xor y2, g ; y2 = f^g ; CH + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ; S1 + rorx y1, e, 6 ; y1 = (e >> 6) ; S1 + and y2, e ; y2 = (f^g)&e ; CH + add old_h, y3 ; h = t1 + S0 + MAJ ; -- + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor y2, g ; y2 = CH = ((f^g)&e)^g ; CH + rorx y1, a, 22 ; y1 = a >> 22 ; S0A + mov y3, a ; y3 = a ; MAJA + + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[%%XFER + 4*1] ; h = k + w + h ; -- + or y3, c ; y3 = a|c ; MAJA + + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and y3, b ; y3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add y2, y0 ; y2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or y3, T1 ; y3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, y1 ; h = k + w + h + S0 ; -- + + add d, y2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + + ;add h, y3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + add old_h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + mov y2, f ; y2 = f ; CH + rorx y0, e, 25 ; y0 = e >> 25 ; S1A + rorx y1, e, 11 ; y1 = e >> 11 ; S1B + xor y2, g ; y2 = f^g ; CH + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ; S1 + rorx y1, e, 6 ; y1 = (e >> 6) ; S1 + and y2, e ; y2 = (f^g)&e ; CH + add old_h, y3 ; h = t1 + S0 + MAJ ; -- + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor y2, g ; y2 = CH = ((f^g)&e)^g ; CH + rorx y1, a, 22 ; y1 = a >> 22 ; S0A + mov y3, a ; y3 = a ; MAJA + + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[%%XFER + 4*2] ; h = k + w + h ; -- + or y3, c ; y3 = a|c ; MAJA + + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and y3, b ; y3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add y2, y0 ; y2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or y3, T1 ; y3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, y1 ; h = k + w + h + S0 ; -- + + add d, y2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + + ;add h, y3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 3 ;;;;;;;;;;;;;;;;;;;;;;;;;;; + + add old_h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + mov y2, f ; y2 = f ; CH + rorx y0, e, 25 ; y0 = e >> 25 ; S1A + rorx y1, e, 11 ; y1 = e >> 11 ; S1B + xor y2, g ; y2 = f^g ; CH + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ; S1 + rorx y1, e, 6 ; y1 = (e >> 6) ; S1 + and y2, e ; y2 = (f^g)&e ; CH + add old_h, y3 ; h = t1 + S0 + MAJ ; -- + + xor y0, y1 ; y0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor y2, g ; y2 = CH = ((f^g)&e)^g ; CH + rorx y1, a, 22 ; y1 = a >> 22 ; S0A + mov y3, a ; y3 = a ; MAJA + + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[%%XFER + 4*3] ; h = k + w + h ; -- + or y3, c ; y3 = a|c ; MAJA + + xor y1, T1 ; y1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and y3, b ; y3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add y2, y0 ; y2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or y3, T1 ; y3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, y1 ; h = k + w + h + S0 ; -- + + add d, y2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + add h, y2 ; h = k + w + h + S0 + S1 + CH = t1 + S0; -- + + add h, y3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + +%endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; void sha256_rorx(void *input_data, UINT32 digest[8], UINT64 num_blks) +;; arg 1 : pointer to input data +;; arg 2 : pointer to digest +;; arg 3 : Num blocks +section .text +global sha256_rorx +align 32 +sha256_rorx: + push rbx +%ifndef LINUX + push rsi + push rdi +%endif + push rbp + push r12 + push r13 + push r14 + push r15 + + mov rax, rsp + sub rsp,STACK_SIZE + and rsp, -32 + mov [rsp + _RSP], rax + +%ifndef LINUX + vmovdqa [rsp + _XMM_SAVE + 0*16],xmm6 + vmovdqa [rsp + _XMM_SAVE + 1*16],xmm7 + vmovdqa [rsp + _XMM_SAVE + 2*16],xmm8 + vmovdqa [rsp + _XMM_SAVE + 3*16],xmm9 + vmovdqa [rsp + _XMM_SAVE + 4*16],xmm10 + vmovdqa [rsp + _XMM_SAVE + 5*16],xmm11 + vmovdqa [rsp + _XMM_SAVE + 6*16],xmm12 + vmovdqa [rsp + _XMM_SAVE + 7*16],xmm13 +%endif + + shl NUM_BLKS, 6 ; convert to bytes + jz done_hash + lea NUM_BLKS, [NUM_BLKS + INP - 64] ; pointer to last block + mov [rsp + _INP_END], NUM_BLKS + + cmp INP, NUM_BLKS + je only_one_block + + ;; load initial digest + mov a,[4*0 + CTX] + mov b,[4*1 + CTX] + mov c,[4*2 + CTX] + mov d,[4*3 + CTX] + mov e,[4*4 + CTX] + mov f,[4*5 + CTX] + mov g,[4*6 + CTX] + mov h,[4*7 + CTX] + + vmovdqa BYTE_FLIP_MASK, [PSHUFFLE_BYTE_FLIP_MASK wrt rip] + vmovdqa SHUF_00BA, [_SHUF_00BA wrt rip] + vmovdqa SHUF_DC00, [_SHUF_DC00 wrt rip] + + mov [rsp + _CTX], CTX + +loop0: + lea TBL,[K256 wrt rip] + + ;; Load first 16 dwords from two blocks + VMOVDQ XTMP0, [INP + 0*32] + VMOVDQ XTMP1, [INP + 1*32] + VMOVDQ XTMP2, [INP + 2*32] + VMOVDQ XTMP3, [INP + 3*32] + + ;; byte swap data + vpshufb XTMP0, XTMP0, BYTE_FLIP_MASK + vpshufb XTMP1, XTMP1, BYTE_FLIP_MASK + vpshufb XTMP2, XTMP2, BYTE_FLIP_MASK + vpshufb XTMP3, XTMP3, BYTE_FLIP_MASK + + ;; transpose data into high/low halves + vperm2i128 X0, XTMP0, XTMP2, 0x20 + vperm2i128 X1, XTMP0, XTMP2, 0x31 + vperm2i128 X2, XTMP1, XTMP3, 0x20 + vperm2i128 X3, XTMP1, XTMP3, 0x31 + +last_block_enter: + add INP, 64 + mov [rsp + _INP], INP + + ;; schedule 48 input dwords, by doing 3 rounds of 12 each + xor SRND, SRND + +align 16 +loop1: + vpaddd XFER, X0, [TBL + SRND + 0*32] + vmovdqa [rsp + _XFER + SRND + 0*32], XFER + FOUR_ROUNDS_AND_SCHED rsp + _XFER + SRND + 0*32 + + vpaddd XFER, X0, [TBL + SRND + 1*32] + vmovdqa [rsp + _XFER + SRND + 1*32], XFER + FOUR_ROUNDS_AND_SCHED rsp + _XFER + SRND + 1*32 + + vpaddd XFER, X0, [TBL + SRND + 2*32] + vmovdqa [rsp + _XFER + SRND + 2*32], XFER + FOUR_ROUNDS_AND_SCHED rsp + _XFER + SRND + 2*32 + + vpaddd XFER, X0, [TBL + SRND + 3*32] + vmovdqa [rsp + _XFER + SRND + 3*32], XFER + FOUR_ROUNDS_AND_SCHED rsp + _XFER + SRND + 3*32 + + add SRND, 4*32 + cmp SRND, 3 * 4*32 + jb loop1 + +loop2: + ;; Do last 16 rounds with no scheduling + vpaddd XFER, X0, [TBL + SRND + 0*32] + vmovdqa [rsp + _XFER + SRND + 0*32], XFER + DO_4ROUNDS rsp + _XFER + SRND + 0*32 + vpaddd XFER, X1, [TBL + SRND + 1*32] + vmovdqa [rsp + _XFER + SRND + 1*32], XFER + DO_4ROUNDS rsp + _XFER + SRND + 1*32 + add SRND, 2*32 + + vmovdqa X0, X2 + vmovdqa X1, X3 + + cmp SRND, 4 * 4*32 + jb loop2 + + mov CTX, [rsp + _CTX] + mov INP, [rsp + _INP] + + addm [4*0 + CTX],a + addm [4*1 + CTX],b + addm [4*2 + CTX],c + addm [4*3 + CTX],d + addm [4*4 + CTX],e + addm [4*5 + CTX],f + addm [4*6 + CTX],g + addm [4*7 + CTX],h + + cmp INP, [rsp + _INP_END] + ja done_hash + + ;;;; Do second block using previously scheduled results + xor SRND, SRND +align 16 +loop3: + DO_4ROUNDS rsp + _XFER + SRND + 0*32 + 16 + DO_4ROUNDS rsp + _XFER + SRND + 1*32 + 16 + add SRND, 2*32 + cmp SRND, 4 * 4*32 + jb loop3 + + mov CTX, [rsp + _CTX] + mov INP, [rsp + _INP] + add INP, 64 + + addm [4*0 + CTX],a + addm [4*1 + CTX],b + addm [4*2 + CTX],c + addm [4*3 + CTX],d + addm [4*4 + CTX],e + addm [4*5 + CTX],f + addm [4*6 + CTX],g + addm [4*7 + CTX],h + + cmp INP, [rsp + _INP_END] + jb loop0 + ja done_hash + +do_last_block: + ;;;; do last block + lea TBL,[K256 wrt rip] + + VMOVDQ XWORD0, [INP + 0*16] + VMOVDQ XWORD1, [INP + 1*16] + VMOVDQ XWORD2, [INP + 2*16] + VMOVDQ XWORD3, [INP + 3*16] + + vpshufb XWORD0, XWORD0, X_BYTE_FLIP_MASK + vpshufb XWORD1, XWORD1, X_BYTE_FLIP_MASK + vpshufb XWORD2, XWORD2, X_BYTE_FLIP_MASK + vpshufb XWORD3, XWORD3, X_BYTE_FLIP_MASK + + jmp last_block_enter + +only_one_block: + + ;; load initial digest + mov a,[4*0 + CTX] + mov b,[4*1 + CTX] + mov c,[4*2 + CTX] + mov d,[4*3 + CTX] + mov e,[4*4 + CTX] + mov f,[4*5 + CTX] + mov g,[4*6 + CTX] + mov h,[4*7 + CTX] + + vmovdqa BYTE_FLIP_MASK, [PSHUFFLE_BYTE_FLIP_MASK wrt rip] + vmovdqa SHUF_00BA, [_SHUF_00BA wrt rip] + vmovdqa SHUF_DC00, [_SHUF_DC00 wrt rip] + + mov [rsp + _CTX], CTX + jmp do_last_block + +done_hash: +%ifndef LINUX + vmovdqa xmm6,[rsp + _XMM_SAVE + 0*16] + vmovdqa xmm7,[rsp + _XMM_SAVE + 1*16] + vmovdqa xmm8,[rsp + _XMM_SAVE + 2*16] + vmovdqa xmm9,[rsp + _XMM_SAVE + 3*16] + vmovdqa xmm10,[rsp + _XMM_SAVE + 4*16] + vmovdqa xmm11,[rsp + _XMM_SAVE + 5*16] + vmovdqa xmm12,[rsp + _XMM_SAVE + 6*16] + vmovdqa xmm13,[rsp + _XMM_SAVE + 7*16] +%endif + + mov rsp, [rsp + _RSP] + + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp +%ifndef LINUX + pop rdi + pop rsi +%endif + pop rbx + + ret + +section .data +align 64 +K256: + dd 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + dd 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + dd 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + dd 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + dd 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + dd 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + dd 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + dd 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + dd 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + dd 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + dd 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + dd 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + dd 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + dd 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + dd 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + dd 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + dd 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + dd 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + dd 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + dd 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + dd 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + dd 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + dd 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + dd 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + dd 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + dd 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + dd 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + dd 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + dd 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + dd 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + dd 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + dd 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + +PSHUFFLE_BYTE_FLIP_MASK: + ddq 0x0c0d0e0f08090a0b0405060700010203,0x0c0d0e0f08090a0b0405060700010203 + +; shuffle xBxA -> 00BA +_SHUF_00BA: + ddq 0xFFFFFFFFFFFFFFFF0b0a090803020100,0xFFFFFFFFFFFFFFFF0b0a090803020100 + +; shuffle xDxC -> DC00 +_SHUF_DC00: + ddq 0x0b0a090803020100FFFFFFFFFFFFFFFF,0x0b0a090803020100FFFFFFFFFFFFFFFF diff --git a/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx2_rorx8.asm b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx2_rorx8.asm new file mode 100644 index 000000000..5d34107b6 --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_avx2_rorx8.asm @@ -0,0 +1,1507 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Copyright (c) 2012, Intel Corporation +; +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are +; met: +; +; * Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; * Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the +; distribution. +; +; * Neither the name of the Intel Corporation nor the names of its +; contributors may be used to endorse or promote products derived from +; this software without specific prior written permission. +; +; +; THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY +; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR +; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Example YASM command lines: +; Windows: yasm -Xvc -f x64 -rnasm -pnasm -o sha256_avx2_rorx8.obj -g cv8 sha256_avx2_rorx8.asm +; Linux: yasm -f x64 -f elf64 -X gnu -g dwarf2 -D LINUX -o sha256_avx2_rorx8.o sha256_avx2_rorx8.asm +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; This code is described in an Intel White-Paper: +; "Fast SHA-256 Implementations on Intel Architecture Processors" +; +; To find it, surf to http://www.intel.com/p/en_US/embedded +; and search for that title. +; The paper is expected to be released roughly at the end of April, 2012 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; This code schedules 8 blocks at a time, with 1 lane per block +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Define Macros + +%macro addm 2 + add %2, %1 + mov %1, %2 +%endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%define TT0 ymm0 +%define TT1 ymm1 +%define TT2 ymm2 +%define TT3 ymm3 +%define TT4 ymm4 +%define TT5 ymm5 +%define TT6 ymm6 +%define TT7 ymm7 +%define TTMP1 ymm8 +%define TTMP2 ymm9 +%define TTMP3 ymm10 +%define TTMP4 ymm11 +%define TTMP5 ymm12 + +%ifdef LINUX +%define INP rdi ; 1st arg +%define CTX rsi ; 2nd arg +%define NUM_BLKS rdx ; 3rd arg +%define c ecx +%define d r8d +%define e edx ; dword version of NUM_BLKS +%define z3 edi ; dword version of INP +%else +%define INP rcx ; 1st arg +%define CTX rdx ; 2nd arg +%define NUM_BLKS r8 ; 3rd arg +%define c edi +%define d esi +%define e r8d ; dword version of NUM_BLKS +%define z3 ecx ; dword version of INP +%endif + +%define IDX rbp +%define TBL CTX + + +%define a eax +%define b ebx +%define f r9d +%define g r10d +%define h r11d +%xdefine old_h h + +%define T1 r12d +%define z0 r13d +%define z1 r14d +%define z1q r14 +%define z2 r15d + +_EXTRA_SIZE equ 32 +_KTMSG_SIZE equ 16*32 ; Second 3/4 of KTMSG overlaps TMSG +_TMSG_SIZE equ 64*32 +%ifdef LINUX +_XMM_SAVE_SIZE equ 0 +%else +_XMM_SAVE_SIZE equ 7*16 +%endif +_INP_END_SIZE equ 8 +_INP_SIZE equ 8 +_RND_SIZE equ 8 +_CTX_SIZE equ 8 +_IDX_LIMIT_SIZE equ 8 +_RSP_SIZE equ 8 + +;; KTMSG must overlap TMSG such that the second 3/4 of KTMSG overlaps the +;; first 3/4 of TMSG. (We onl need 16 words of TMSG at any time.) +_KTMSG equ _EXTRA_SIZE +_TMSG equ _KTMSG + _KTMSG_SIZE +_XMM_SAVE equ _TMSG + _TMSG_SIZE +_INP_END equ _XMM_SAVE + _XMM_SAVE_SIZE +_INP equ _INP_END + _INP_END_SIZE +_RND equ _INP + _INP_SIZE +_CTX equ _RND + _RND_SIZE +_IDX_LIMIT equ _CTX + _CTX_SIZE +_RSP equ _IDX_LIMIT + _IDX_LIMIT_SIZE +STACK_SIZE equ _RSP + _RSP_SIZE + +%macro ROTATE_ARGS 0 +%xdefine old_h h +%xdefine TMP_ h +%xdefine h g +%xdefine g f +%xdefine f e +%xdefine e d +%xdefine d c +%xdefine c b +%xdefine b a +%xdefine a TMP_ +%endm + +; PRORD reg, imm, tmp +%macro PRORD 3 +%define %%reg %1 +%define %%imm %2 +%define %%tmp %3 + vpslld %%tmp, %%reg, (32-(%%imm)) + vpsrld %%reg, %%reg, %%imm + vpor %%reg, %%reg, %%tmp +%endmacro + +; non-destructive +; PRORD_nd reg, imm, tmp, src +%macro PRORD_nd 4 +%define %%reg %1 +%define %%imm %2 +%define %%tmp %3 +%define %%src %4 + vpslld %%tmp, %%src, (32-(%%imm)) + vpsrld %%reg, %%src, %%imm + vpor %%reg, %%reg, %%tmp +%endmacro + +; PRORD dst/src, amt +%macro PRORD 2 + PRORD %1, %2, TTMP5 +%endmacro + +; PRORD_nd dst, src, amt +%macro PRORD_nd 3 + PRORD_nd %1, %3, TTMP5, %2 +%endmacro + +; TRANSPOSE8 r0, r1, r2, r3, r4, r5, r6, r7, t0, t1 +; "transpose" data in {r0...r7} using temps {t0...t1} +; Input looks like: {r0 r1 r2 r3 r4 r5 r6 r7} +; r0 = {a7 a6 a5 a4 a3 a2 a1 a0} +; r1 = {b7 b6 b5 b4 b3 b2 b1 b0} +; r2 = {c7 c6 c5 c4 c3 c2 c1 c0} +; r3 = {d7 d6 d5 d4 d3 d2 d1 d0} +; r4 = {e7 e6 e5 e4 e3 e2 e1 e0} +; r5 = {f7 f6 f5 f4 f3 f2 f1 f0} +; r6 = {g7 g6 g5 g4 g3 g2 g1 g0} +; r7 = {h7 h6 h5 h4 h3 h2 h1 h0} +; +; Output looks like: {r0 r1 r2 r3 r4 r5 r6 r7} +; r0 = {h0 g0 f0 e0 d0 c0 b0 a0} +; r1 = {h1 g1 f1 e1 d1 c1 b1 a1} +; r2 = {h2 g2 f2 e2 d2 c2 b2 a2} +; r3 = {h3 g3 f3 e3 d3 c3 b3 a3} +; r4 = {h4 g4 f4 e4 d4 c4 b4 a4} +; r5 = {h5 g5 f5 e5 d5 c5 b5 a5} +; r6 = {h6 g6 f6 e6 d6 c6 b6 a6} +; r7 = {h7 g7 f7 e7 d7 c7 b7 a7} +; +%macro TRANSPOSE8 10 +%define %%r0 %1 +%define %%r1 %2 +%define %%r2 %3 +%define %%r3 %4 +%define %%r4 %5 +%define %%r5 %6 +%define %%r6 %7 +%define %%r7 %8 +%define %%t0 %9 +%define %%t1 %10 + ; process top half (r0..r3) {a...d} + vshufps %%t0, %%r0, %%r1, 0x44 ; t0 = {b5 b4 a5 a4 b1 b0 a1 a0} + vshufps %%r0, %%r0, %%r1, 0xEE ; r0 = {b7 b6 a7 a6 b3 b2 a3 a2} + vshufps %%t1, %%r2, %%r3, 0x44 ; t1 = {d5 d4 c5 c4 d1 d0 c1 c0} + vshufps %%r2, %%r2, %%r3, 0xEE ; r2 = {d7 d6 c7 c6 d3 d2 c3 c2} + vshufps %%r3, %%t0, %%t1, 0xDD ; r3 = {d5 c5 b5 a5 d1 c1 b1 a1} + vshufps %%r1, %%r0, %%r2, 0x88 ; r1 = {d6 c6 b6 a6 d2 c2 b2 a2} + vshufps %%r0, %%r0, %%r2, 0xDD ; r0 = {d7 c7 b7 a7 d3 c3 b3 a3} + vshufps %%t0, %%t0, %%t1, 0x88 ; t0 = {d4 c4 b4 a4 d0 c0 b0 a0} + + ; use r2 in place of t0 + ; process bottom half (r4..r7) {e...h} + vshufps %%r2, %%r4, %%r5, 0x44 ; r2 = {f5 f4 e5 e4 f1 f0 e1 e0} + vshufps %%r4, %%r4, %%r5, 0xEE ; r4 = {f7 f6 e7 e6 f3 f2 e3 e2} + vshufps %%t1, %%r6, %%r7, 0x44 ; t1 = {h5 h4 g5 g4 h1 h0 g1 g0} + vshufps %%r6, %%r6, %%r7, 0xEE ; r6 = {h7 h6 g7 g6 h3 h2 g3 g2} + vshufps %%r7, %%r2, %%t1, 0xDD ; r7 = {h5 g5 f5 e5 h1 g1 f1 e1} + vshufps %%r5, %%r4, %%r6, 0x88 ; r5 = {h6 g6 f6 e6 h2 g2 f2 e2} + vshufps %%r4, %%r4, %%r6, 0xDD ; r4 = {h7 g7 f7 e7 h3 g3 f3 e3} + vshufps %%t1, %%r2, %%t1, 0x88 ; t1 = {h4 g4 f4 e4 h0 g0 f0 e0} + + vperm2f128 %%r6, %%r5, %%r1, 0x13 ; h6...a6 + vperm2f128 %%r2, %%r5, %%r1, 0x02 ; h2...a2 + vperm2f128 %%r5, %%r7, %%r3, 0x13 ; h5...a5 + vperm2f128 %%r1, %%r7, %%r3, 0x02 ; h1...a1 + vperm2f128 %%r7, %%r4, %%r0, 0x13 ; h7...a7 + vperm2f128 %%r3, %%r4, %%r0, 0x02 ; h3...a3 + vperm2f128 %%r4, %%t1, %%t0, 0x13 ; h4...a4 + vperm2f128 %%r0, %%t1, %%t0, 0x02 ; h0...a0 +%endmacro + +%macro SHA256_X8MS_8RNDS 0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%assign i 0 + + vmovdqa TT0, [rsp + _TMSG + IDX + 32*(i+1)] ;; TT0 = Load W[i-15] + vmovdqa TTMP2,[rsp + _TMSG + IDX + 32*(i+14)] ;; TTMP2 = Load W[i-2] + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + PRORD_nd TTMP1,TT0,7 ;; TTMP1 = W[i-15] nostrdb: ror 7 + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + vpsrld TT0,TT0,3 ;; TT0 = W[i-15] nostrdb: shr 3 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*0] ; h = k + w + h + + + or z3, c ; z3 = a|c ; MAJA + + vpxor TT0,TT0,TTMP1 ;; TT0 = (W[i-15] nostrdb: ror 7) xor (W[i-15] shr 3) + PRORD TTMP1,18-7 ;; TTMP1 = W[i-15] nostrdb: ror 18 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + vpxor TT0,TTMP1,TT0 ;; TT0 = s0 + PRORD_nd TTMP1,TTMP2,17 ;; TTMP1 = W[i-2] ror 17 + vpsrld TTMP2,TTMP2,10 ;; TTMP2 = W[i-2] shr 25 + vpxor TTMP2,TTMP1,TTMP2 ;; TTMP2 = (W[i-2] ror 17) xor (W[i-2] shr 25) + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + PRORD TTMP1,19-17 ;; TTMP1 = W[i-2] ror 19 + vpxor TTMP1,TTMP1,TTMP2 ;; TTMP1 = s1 + vpaddd TT0,TT0,TTMP1 ;; TT0 = s0 + s1 + vpaddd TT0,TT0,[rsp + _TMSG + IDX + 32*(i+9)] ;; add W[i-7] + vpaddd TT0,TT0,[rsp + _TMSG + IDX + 32*(i+0)] ;; add W[i-16] + vmovdqa [rsp + _TMSG + IDX + 16*32 + i*32], TT0 ;; Save TT0 to stack + vpaddd TT0, TT0, [TBL + IDX + (i+16)*32] + vmovdqa [rsp + _KTMSG + IDX + 16*32 + i*32], TT0 ;; Save TT0 to stack + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%assign i (i+1) + + vmovdqa TT1, [rsp + _TMSG + IDX + 32*(i+1)] ;; TT1 = Load W[i-15] + vmovdqa TTMP4,[rsp + _TMSG + IDX + 32*(i+14)] ;; TTMP4 = Load W[i-2] + + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + PRORD_nd TTMP3,TT1,7 ;; TTMP3 = W[i-15] nostrdb: ror 7 + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + vpsrld TT1,TT1,3 ;; TT1 = W[i-15] nostrdb: shr 3 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*1] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + vpxor TT1,TT1,TTMP3 ;; TT1 = (W[i-15] nostrdb: ror 7) xor (W[i-15] shr 3) + PRORD TTMP3,18-7 ;; TTMP3 = W[i-15] nostrdb: ror 18 + vpxor TT1,TTMP3,TT1 ;; TT1 = s0 + PRORD_nd TTMP3,TTMP4,17 ;; TTMP3 = W[i-2] ror 17 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + vpsrld TTMP4,TTMP4,10 ;; TTMP4 = W[i-2] shr 25 + vpxor TTMP4,TTMP3,TTMP4 ;; TTMP4 = (W[i-2] ror 17) xor (W[i-2] shr 25) + PRORD TTMP3,19-17 ;; TTMP3 = W[i-2] ror 19 + vpxor TTMP3,TTMP3,TTMP4 ;; TTMP3 = s1 + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + vpaddd TT1,TT1,TTMP3 ;; TT1 = s0 + s1 + vpaddd TT1,TT1,[rsp + _TMSG + IDX + 32*(i+9)] ;; add W[i-7] + vpaddd TT1,TT1,[rsp + _TMSG + IDX + 32*(i+0)] ;; add W[i-16] + vmovdqa [rsp + _TMSG + IDX + 16*32 + i*32], TT1 ;; Save TT1 to stack + vpaddd TT1, TT1, [TBL + IDX + (i+16)*32] + vmovdqa [rsp + _KTMSG + IDX + 16*32 + i*32], TT1 ;; Save TT1 to stack + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%assign i (i+1) + + vmovdqa TT2, [rsp + _TMSG + IDX + 32*(i+1)] ;; TT2 = Load W[i-15] + vmovdqa TTMP2,[rsp + _TMSG + IDX + 32*(i+14)] ;; TTMP2 = Load W[i-2] + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + PRORD_nd TTMP1,TT2,7 ;; TTMP1 = W[i-15] nostrdb: ror 7 + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + vpsrld TT2,TT2,3 ;; TT2 = W[i-15] nostrdb: shr 3 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*2] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + vpxor TT2,TT2,TTMP1 ;; TT2 = (W[i-15] nostrdb: ror 7) xor (W[i-15] shr 3) + PRORD TTMP1,18-7 ;; TTMP1 = W[i-15] nostrdb: ror 18 + vpxor TT2,TTMP1,TT2 ;; TT2 = s0 + PRORD_nd TTMP1,TTMP2,17 ;; TTMP1 = W[i-2] ror 17 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + vpsrld TTMP2,TTMP2,10 ;; TTMP2 = W[i-2] shr 25 + vpxor TTMP2,TTMP1,TTMP2 ;; TTMP2 = (W[i-2] ror 17) xor (W[i-2] shr 25) + PRORD TTMP1,19-17 ;; TTMP1 = W[i-2] ror 19 + vpxor TTMP1,TTMP1,TTMP2 ;; TTMP1 = s1 + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + vpaddd TT2,TT2,TTMP1 ;; TT2 = s0 + s1 + vpaddd TT2,TT2,[rsp + _TMSG + IDX + 32*(i+9)] ;; add W[i-7] + vpaddd TT2,TT2,[rsp + _TMSG + IDX + 32*(i+0)] ;; add W[i-16] + vmovdqa [rsp + _TMSG + IDX + 16*32 + i*32], TT2 ;; Save TT2 to stack + vpaddd TT2, TT2, [TBL + IDX + (i+16)*32] + vmovdqa [rsp + _KTMSG + IDX + 16*32 + i*32], TT2 ;; Save TT2 to stack + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + + ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%assign i (i+1) + + vmovdqa TT3, [rsp + _TMSG + IDX + 32*(i+1)] ;; TT3 = Load W[i-15] + vmovdqa TTMP4,[rsp + _TMSG + IDX + 32*(i+14)] ;; TTMP4 = Load W[i-2] + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + PRORD_nd TTMP3,TT3,7 ;; TTMP3 = W[i-15] nostrdb: ror 7 + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + vpsrld TT3,TT3,3 ;; TT3 = W[i-15] nostrdb: shr 3 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*3] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + vpxor TT3,TT3,TTMP3 ;; TT3 = (W[i-15] nostrdb: ror 7) xor (W[i-15] shr 3) + PRORD TTMP3,18-7 ;; TTMP3 = W[i-15] nostrdb: ror 18 + vpxor TT3,TTMP3,TT3 ;; TT3 = s0 + PRORD_nd TTMP3,TTMP4,17 ;; TTMP3 = W[i-2] ror 17 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + vpsrld TTMP4,TTMP4,10 ;; TTMP4 = W[i-2] shr 25 + vpxor TTMP4,TTMP3,TTMP4 ;; TTMP4 = (W[i-2] ror 17) xor (W[i-2] shr 25) + PRORD TTMP3,19-17 ;; TTMP3 = W[i-2] ror 19 + vpxor TTMP3,TTMP3,TTMP4 ;; TTMP3 = s1 + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + vpaddd TT3,TT3,TTMP3 ;; TT3 = s0 + s1 + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + vpaddd TT3,TT3,[rsp + _TMSG + IDX + 32*(i+9)] ;; add W[i-7] + vpaddd TT3,TT3,[rsp + _TMSG + IDX + 32*(i+0)] ;; add W[i-16] + vmovdqa [rsp + _TMSG + IDX + 16*32 + i*32], TT3 ;; Save TT3 to stack + vpaddd TT3, TT3, [TBL + IDX + (i+16)*32] + vmovdqa [rsp + _KTMSG + IDX + 16*32 + i*32], TT3 ;; Save TT3 to stack + + add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%assign i (i+1) + + vmovdqa TT4, [rsp + _TMSG + IDX + 32*(i+1)] ;; TT4 = Load W[i-15] + vmovdqa TTMP2,[rsp + _TMSG + IDX + 32*(i+14)] ;; TTMP2 = Load W[i-2] + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + PRORD_nd TTMP1,TT4,7 ;; TTMP1 = W[i-15] nostrdb: ror 7 + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + vpsrld TT4,TT4,3 ;; TT4 = W[i-15] nostrdb: shr 3 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*4] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + vpxor TT4,TT4,TTMP1 ;; TT4 = (W[i-15] nostrdb: ror 7) xor (W[i-15] shr 3) + PRORD TTMP1,18-7 ;; TTMP1 = W[i-15] nostrdb: ror 18 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + vpxor TT4,TTMP1,TT4 ;; TT4 = s0 + PRORD_nd TTMP1,TTMP2,17 ;; TTMP1 = W[i-2] ror 17 + vpsrld TTMP2,TTMP2,10 ;; TTMP2 = W[i-2] shr 25 + vpxor TTMP2,TTMP1,TTMP2 ;; TTMP2 = (W[i-2] ror 17) xor (W[i-2] shr 25) + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + PRORD TTMP1,19-17 ;; TTMP1 = W[i-2] ror 19 + vpxor TTMP1,TTMP1,TTMP2 ;; TTMP1 = s1 + vpaddd TT4,TT4,TTMP1 ;; TT4 = s0 + s1 + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + vpaddd TT4,TT4,[rsp + _TMSG + IDX + 32*(i+9)] ;; add W[i-7] + vpaddd TT4,TT4,[rsp + _TMSG + IDX + 32*(i+0)] ;; add W[i-16] + vmovdqa [rsp + _TMSG + IDX + 16*32 + i*32], TT4 ;; Save TT4 to stack + vpaddd TT4, TT4, [TBL + IDX + (i+16)*32] + vmovdqa [rsp + _KTMSG + IDX + 16*32 + i*32], TT4 ;; Save TT4 to stack + + ROTATE_ARGS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%assign i (i+1) + + vmovdqa TT5, [rsp + _TMSG + IDX + 32*(i+1)] ;; TT5 = Load W[i-15] + vmovdqa TTMP4,[rsp + _TMSG + IDX + 32*(i+14)] ;; TTMP4 = Load W[i-2] + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + PRORD_nd TTMP3,TT5,7 ;; TTMP3 = W[i-15] nostrdb: ror 7 + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + vpsrld TT5,TT5,3 ;; TT5 = W[i-15] nostrdb: shr 3 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*5] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + vpxor TT5,TT5,TTMP3 ;; TT5 = (W[i-15] nostrdb: ror 7) xor (W[i-15] shr 3) + PRORD TTMP3,18-7 ;; TTMP3 = W[i-15] nostrdb: ror 18 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + vpxor TT5,TTMP3,TT5 ;; TT5 = s0 + PRORD_nd TTMP3,TTMP4,17 ;; TTMP3 = W[i-2] ror 17 + vpsrld TTMP4,TTMP4,10 ;; TTMP4 = W[i-2] shr 25 + vpxor TTMP4,TTMP3,TTMP4 ;; TTMP4 = (W[i-2] ror 17) xor (W[i-2] shr 25) + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + PRORD TTMP3,19-17 ;; TTMP3 = W[i-2] ror 19 + vpxor TTMP3,TTMP3,TTMP4 ;; TTMP3 = s1 + vpaddd TT5,TT5,TTMP3 ;; TT5 = s0 + s1 + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + vpaddd TT5,TT5,[rsp + _TMSG + IDX + 32*(i+9)] ;; add W[i-7] + vpaddd TT5,TT5,[rsp + _TMSG + IDX + 32*(i+0)] ;; add W[i-16] + vmovdqa [rsp + _TMSG + IDX + 16*32 + i*32], TT5 ;; Save TT5 to stack + vpaddd TT5, TT5, [TBL + IDX + (i+16)*32] + vmovdqa [rsp + _KTMSG + IDX + 16*32 + i*32], TT5 ;; Save TT5 to stack + + ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%assign i (i+1) + + vmovdqa TT6, [rsp + _TMSG + IDX + 32*(i+1)] ;; TT6 = Load W[i-15] + vmovdqa TTMP2,[rsp + _TMSG + IDX + 32*(i+14)] ;; TTMP2 = Load W[i-2] + + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + PRORD_nd TTMP1,TT6,7 ;; TTMP1 = W[i-15] nostrdb: ror 7 + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + vpsrld TT6,TT6,3 ;; TT6 = W[i-15] nostrdb: shr 3 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*6] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + vpxor TT6,TT6,TTMP1 ;; TT6 = (W[i-15] nostrdb: ror 7) xor (W[i-15] shr 3) + PRORD TTMP1,18-7 ;; TTMP1 = W[i-15] nostrdb: ror 18 + vpxor TT6,TTMP1,TT6 ;; TT6 = s0 + PRORD_nd TTMP1,TTMP2,17 ;; TTMP1 = W[i-2] ror 17 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + vpsrld TTMP2,TTMP2,10 ;; TTMP2 = W[i-2] shr 25 + vpxor TTMP2,TTMP1,TTMP2 ;; TTMP2 = (W[i-2] ror 17) xor (W[i-2] shr 25) + PRORD TTMP1,19-17 ;; TTMP1 = W[i-2] ror 19 + vpxor TTMP1,TTMP1,TTMP2 ;; TTMP1 = s1 + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + vpaddd TT6,TT6,TTMP1 ;; TT6 = s0 + s1 + vpaddd TT6,TT6,[rsp + _TMSG + IDX + 32*(i+9)] ;; add W[i-7] + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + vpaddd TT6,TT6,[rsp + _TMSG + IDX + 32*(i+0)] ;; add W[i-16] + vmovdqa [rsp + _TMSG + IDX + 16*32 + i*32], TT6 ;; Save TT6 to stack + vpaddd TT6, TT6, [TBL + IDX + (i+16)*32] + vmovdqa [rsp + _KTMSG + IDX + 16*32 + i*32], TT6 ;; Save TT6 to stack + + ROTATE_ARGS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%assign i (i+1) + + vmovdqa TT7, [rsp + _TMSG + IDX + 32*(i+1)] ;; TT7 = Load W[i-15] + vmovdqa TTMP4,[rsp + _TMSG + IDX + 32*(i+14)] ;; TTMP4 = Load W[i-2] + + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + PRORD_nd TTMP3,TT7,7 ;; TTMP3 = W[i-15] nostrdb: ror 7 + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + + vpsrld TT7,TT7,3 ;; TT7 = W[i-15] nostrdb: shr 3 + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + vpxor TT7,TT7,TTMP3 ;; TT7 = (W[i-15] nostrdb: ror 7) xor (W[i-15] shr 3) + PRORD TTMP3,18-7 ;; TTMP3 = W[i-15] nostrdb: ror 18 + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*7] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + vpxor TT7,TTMP3,TT7 ;; TT7 = s0 + PRORD_nd TTMP3,TTMP4,17 ;; TTMP3 = W[i-2] ror 17 + vpsrld TTMP4,TTMP4,10 ;; TTMP4 = W[i-2] shr 25 + vpxor TTMP4,TTMP3,TTMP4 ;; TTMP4 = (W[i-2] ror 17) xor (W[i-2] shr 25) + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + PRORD TTMP3,19-17 ;; TTMP3 = W[i-2] ror 19 + vpxor TTMP3,TTMP3,TTMP4 ;; TTMP3 = s1 + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + vpaddd TT7,TT7,TTMP3 ;; TT7 = s0 + s1 + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + vpaddd TT7,TT7,[rsp + _TMSG + IDX + 32*(i+9)] ;; add W[i-7] + add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + vpaddd TT7,TT7,[rsp + _TMSG + IDX + 32*(i+0)] ;; add W[i-16] + add h, z3 ; h = t1 + S0 + MAJ ; -- + + vmovdqa [rsp + _TMSG + IDX + 16*32 + i*32], TT7 ;; Save TT7 to stack + vpaddd TT7, TT7, [TBL + IDX + (i+16)*32] + vmovdqa [rsp + _KTMSG + IDX + 16*32 + i*32], TT7 ;; Save TT7 to stack + ROTATE_ARGS + + +%endm + +%macro DO_8ROUNDS 0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*0] ; h = k + w + h + + or z3, c ; z3 = a|c ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*1] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*2] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*3] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 4 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*4] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*5] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 6 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*6] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + ;add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + ;add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; RND N + 7 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + add old_h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + mov z2, f ; z2 = f ; CH + rorx z0, e, 25 ; z0 = e >> 25 ; S1A + rorx z1, e, 11 ; z1 = e >> 11 ; S1B + xor z2, g ; z2 = f^g ; CH + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ; S1 + rorx z1, e, 6 ; z1 = (e >> 6) ; S1 + and z2, e ; z2 = (f^g)&e ; CH + add old_h, z3 ; h = t1 + S0 + MAJ ; -- + + + xor z0, z1 ; z0 = (e>>25) ^ (e>>11) ^ (e>>6) ; S1 + rorx T1, a, 13 ; T1 = a >> 13 ; S0B + xor z2, g ; z2 = CH = ((f^g)&e)^g ; CH + rorx z1, a, 22 ; z1 = a >> 22 ; S0A + mov z3, a ; z3 = a ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ; S0 + rorx T1, a, 2 ; T1 = (a >> 2) ; S0 + add h, dword[rsp + _KTMSG + IDX + 32*7] ; h = k + w + h + or z3, c ; z3 = a|c ; MAJA + + xor z1, T1 ; z1 = (a>>22) ^ (a>>13) ^ (a>>2) ; S0 + mov T1, a ; T1 = a ; MAJB + and z3, b ; z3 = (a|c)&b ; MAJA + and T1, c ; T1 = a&c ; MAJB + add z2, z0 ; z2 = S1 + CH ; -- + + + add d, h ; d = k + w + h + d ; -- + or z3, T1 ; z3 = MAJ = (a|c)&b)|(a&c) ; MAJ + add h, z1 ; h = k + w + h + S0 ; -- + + add d, z2 ; d = k + w + h + d + S1 + CH = d + t1 ; -- + + + add h, z2 ; h = k + w + h + S0 + S1 + CH = t1 + S0 ; -- + + add h, z3 ; h = t1 + S0 + MAJ ; -- + + ROTATE_ARGS + + +%endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; void sha256_rorx_x8ms(void *input_data, UINT32 digest[8], UINT64 num_blks) +;; arg 1 : pointer to input data +;; arg 2 : pointer to digest +;; arg 3 : Num blocks +section .text +global sha256_rorx_x8ms +align 32 +sha256_rorx_x8ms: + push rbx +%ifndef LINUX + push rsi + push rdi +%endif + push rbp + push r12 + push r13 + push r14 + push r15 + + mov rax, rsp + sub rsp,STACK_SIZE + and rsp,-32 + mov [rsp + _RSP], rax + + mov qword [rsp + _IDX_LIMIT], 32 + +%ifndef LINUX + vmovdqa [rsp + _XMM_SAVE + 0*16],xmm6 + vmovdqa [rsp + _XMM_SAVE + 1*16],xmm7 + vmovdqa [rsp + _XMM_SAVE + 2*16],xmm8 + vmovdqa [rsp + _XMM_SAVE + 3*16],xmm9 + vmovdqa [rsp + _XMM_SAVE + 4*16],xmm10 + vmovdqa [rsp + _XMM_SAVE + 5*16],xmm11 + vmovdqa [rsp + _XMM_SAVE + 6*16],xmm12 +%endif + + shl NUM_BLKS, 6 ; convert to bytes + jz done_hash + lea NUM_BLKS, [NUM_BLKS + INP - 8*64] + mov [rsp + _INP_END], NUM_BLKS + mov [rsp + _CTX], CTX + + cmp NUM_BLKS, INP + jb less_than_8_blocks + + ;; load initial digest + mov a,[4*0 + CTX] + mov b,[4*1 + CTX] + mov c,[4*2 + CTX] + mov d,[4*3 + CTX] + mov e,[4*4 + CTX] + mov f,[4*5 + CTX] + mov g,[4*6 + CTX] + mov h,[4*7 + CTX] + + +eight_blocks_loop: + +align 32 + + lea TBL,[K256_SIMD wrt rip] + + vmovdqa TTMP3, [PSHUFFLE_BYTE_FLIP_MASK wrt rip] +;; Load 8 blocks of message and transpose and save to stack +%assign i 0 +%rep 2 + vmovups TT0,[INP+0*64+i*32] + vpshufb TT0, TT0, TTMP3 + vmovups TT1,[INP+1*64+i*32] + vpshufb TT1, TT1, TTMP3 + vmovups TT2,[INP+2*64+i*32] + vpshufb TT2, TT2, TTMP3 + vmovups TT3,[INP+3*64+i*32] + vpshufb TT3, TT3, TTMP3 + vmovups TT4,[INP+4*64+i*32] + vpshufb TT4, TT4, TTMP3 + vmovups TT5,[INP+5*64+i*32] + vpshufb TT5, TT5, TTMP3 + vmovups TT6,[INP+6*64+i*32] + vpshufb TT6, TT6, TTMP3 + vmovups TT7,[INP+7*64+i*32] + vpshufb TT7, TT7, TTMP3 + + TRANSPOSE8 TT0, TT1, TT2, TT3, TT4, TT5, TT6, TT7, TTMP1, TTMP2 + + vmovdqa [rsp + _TMSG + 0*32 + i*8*32], TT0 + vpaddd TT0, TT0, [TBL + 0*32 + i*8*32] + vmovdqa [rsp + _KTMSG + 0*32 + i*8*32], TT0 + + vmovdqa [rsp + _TMSG + 1*32 + i*8*32], TT1 + vpaddd TT1, TT1, [TBL + 1*32 + i*8*32] + vmovdqa [rsp + _KTMSG + 1*32 + i*8*32], TT1 + + vmovdqa [rsp + _TMSG + 2*32 + i*8*32], TT2 + vpaddd TT2, TT2, [TBL + 2*32 + i*8*32] + vmovdqa [rsp + _KTMSG + 2*32 + i*8*32], TT2 + + vmovdqa [rsp + _TMSG + 3*32 + i*8*32], TT3 + vpaddd TT3, TT3, [TBL + 3*32 + i*8*32] + vmovdqa [rsp + _KTMSG + 3*32 + i*8*32], TT3 + + vmovdqa [rsp + _TMSG + 4*32 + i*8*32], TT4 + vpaddd TT4, TT4, [TBL + 4*32 + i*8*32] + vmovdqa [rsp + _KTMSG + 4*32 + i*8*32], TT4 + + vmovdqa [rsp + _TMSG + 5*32 + i*8*32], TT5 + vpaddd TT5, TT5, [TBL + 5*32 + i*8*32] + vmovdqa [rsp + _KTMSG + 5*32 + i*8*32], TT5 + + vmovdqa [rsp + _TMSG + 6*32 + i*8*32], TT6 + vpaddd TT6, TT6, [TBL + 6*32 + i*8*32] + vmovdqa [rsp + _KTMSG + 6*32 + i*8*32], TT6 + + vmovdqa [rsp + _TMSG + 7*32 + i*8*32], TT7 + vpaddd TT7, TT7, [TBL + 7*32 + i*8*32] + vmovdqa [rsp + _KTMSG + 7*32 + i*8*32], TT7 + + +%assign i (i+1) +%endrep + +after_load: + + ;; Save Input Msg pointer to stack + add INP, 8*64 + mov [rsp + _INP], INP + + ;; Initialize Msg Index to Zero + xor IDX, IDX + +sha256_x8ms_8rnds_loop: + + ;; Perform Message Scheduling of the next 8 rounds (from round 17 to 64) + ;; Also perform compress function for first block from round 1 to 16. + SHA256_X8MS_8RNDS + + + ;; Check how many rounds have been performed + add IDX, 8*32 + cmp IDX, 6 * 8*32 + jne sha256_x8ms_8rnds_loop + + mov CTX, [rsp + _CTX] + +compress_block_loop: + + ;; Perform 8 rounds of compression + DO_8ROUNDS + + add IDX, 8*32 + cmp IDX, 8 * 8*32 + jb compress_block_loop + + ;; Update the State when block compression has been completed + addm [4*0 + CTX],a + addm [4*1 + CTX],b + addm [4*2 + CTX],c + addm [4*3 + CTX],d + addm [4*4 + CTX],e + addm [4*5 + CTX],f + addm [4*6 + CTX],g + addm [4*7 + CTX],h + + sub IDX, (8 * 8*32) - 4 + + + ;; Check if the 8th block has been compressed + cmp IDX, [rsp + _IDX_LIMIT] + jne compress_block_loop + + ;; Check if the last set of 8 blocks has been processed + mov INP, [rsp + _INP] + cmp INP, [rsp + _INP_END] + jbe eight_blocks_loop + +near_end_of_page: + mov z1q, [rsp + _INP_END] + sub z1q, INP + ; z1q is minus number of NULL blocks left out of 8 + cmp z1q, -(8*64) + jle done_hash + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + ; z1q is -1...-7 (*64) meaning we need to process 7...1 more blocks + add INP, z1q + + lea TBL,[K256_SIMD wrt rip] + sar z1q, 4 ; convert to blks * 4 + + vmovdqa TTMP3, [PSHUFFLE_BYTE_FLIP_MASK wrt rip] +;; Load 8 blocks of message and transpose and save to stack +%assign i 0 +%rep 2 + vmovups TT0,[INP+0*64+i*32] + vpshufb TT0, TT0, TTMP3 + vmovups TT1,[INP+1*64+i*32] + vpshufb TT1, TT1, TTMP3 + vmovups TT2,[INP+2*64+i*32] + vpshufb TT2, TT2, TTMP3 + vmovups TT3,[INP+3*64+i*32] + vpshufb TT3, TT3, TTMP3 + vmovups TT4,[INP+4*64+i*32] + vpshufb TT4, TT4, TTMP3 + vmovups TT5,[INP+5*64+i*32] + vpshufb TT5, TT5, TTMP3 + vmovups TT6,[INP+6*64+i*32] + vpshufb TT6, TT6, TTMP3 + vmovups TT7,[INP+7*64+i*32] + vpshufb TT7, TT7, TTMP3 + + TRANSPOSE8 TT0, TT1, TT2, TT3, TT4, TT5, TT6, TT7, TTMP1, TTMP2 + + vmovdqu [rsp + z1q + _TMSG + 0*32 + i*8*32], TT0 + vpaddd TT0, TT0, [TBL + 0*32 + i*8*32] + vmovdqu [rsp + z1q + _KTMSG + 0*32 + i*8*32], TT0 + + vmovdqu [rsp + z1q + _TMSG + 1*32 + i*8*32], TT1 + vpaddd TT1, TT1, [TBL + 1*32 + i*8*32] + vmovdqu [rsp + z1q + _KTMSG + 1*32 + i*8*32], TT1 + + vmovdqu [rsp + z1q + _TMSG + 2*32 + i*8*32], TT2 + vpaddd TT2, TT2, [TBL + 2*32 + i*8*32] + vmovdqu [rsp + z1q + _KTMSG + 2*32 + i*8*32], TT2 + + vmovdqu [rsp + z1q + _TMSG + 3*32 + i*8*32], TT3 + vpaddd TT3, TT3, [TBL + 3*32 + i*8*32] + vmovdqu [rsp + z1q + _KTMSG + 3*32 + i*8*32], TT3 + + vmovdqu [rsp + z1q + _TMSG + 4*32 + i*8*32], TT4 + vpaddd TT4, TT4, [TBL + 4*32 + i*8*32] + vmovdqu [rsp + z1q + _KTMSG + 4*32 + i*8*32], TT4 + + vmovdqu [rsp + z1q + _TMSG + 5*32 + i*8*32], TT5 + vpaddd TT5, TT5, [TBL + 5*32 + i*8*32] + vmovdqu [rsp + z1q + _KTMSG + 5*32 + i*8*32], TT5 + + vmovdqu [rsp + z1q + _TMSG + 6*32 + i*8*32], TT6 + vpaddd TT6, TT6, [TBL + 6*32 + i*8*32] + vmovdqu [rsp + z1q + _KTMSG + 6*32 + i*8*32], TT6 + + vmovdqu [rsp + z1q + _TMSG + 7*32 + i*8*32], TT7 + vpaddd TT7, TT7, [TBL + 7*32 + i*8*32] + vmovdqu [rsp + z1q + _KTMSG + 7*32 + i*8*32], TT7 + +%assign i (i+1) +%endrep + + add z1q, 4*8 ; z1q = 4 * (number of blocks to proc) + mov [rsp + _IDX_LIMIT], z1q + + jmp after_load + + +less_than_8_blocks: + ;; load initial digest + mov a,[4*0 + CTX] + mov b,[4*1 + CTX] + mov c,[4*2 + CTX] + mov d,[4*3 + CTX] + mov e,[4*4 + CTX] + mov f,[4*5 + CTX] + mov g,[4*6 + CTX] + mov h,[4*7 + CTX] + + mov z1q, INP + and z1q, 4095 ; offset into page + cmp z1q, 4096 - (8*64) + ja near_end_of_page + +near_start_of_page: + mov z1q, [rsp + _INP_END] + sub z1q, INP + sar z1q, 4 ; convert to blks * 4 + add z1q, 4*8 ; z1q = 4 * (number of blocks to proc) + mov [rsp + _IDX_LIMIT], z1q + jmp eight_blocks_loop + +done_hash: +%ifndef LINUX + vmovdqa xmm6,[rsp + _XMM_SAVE + 0*16] + vmovdqa xmm7,[rsp + _XMM_SAVE + 1*16] + vmovdqa xmm8,[rsp + _XMM_SAVE + 2*16] + vmovdqa xmm9,[rsp + _XMM_SAVE + 3*16] + vmovdqa xmm10,[rsp + _XMM_SAVE + 4*16] + vmovdqa xmm11,[rsp + _XMM_SAVE + 5*16] + vmovdqa xmm12,[rsp + _XMM_SAVE + 6*16] +%endif + + mov rsp, [rsp + _RSP] + + pop r15 + pop r14 + pop r13 + pop r12 + pop rbp +%ifndef LINUX + pop rdi + pop rsi +%endif + pop rbx + + ret + +section .data +align 64 +K256_SIMD: + ddq 0x428a2f98428a2f98428a2f98428a2f98,0x428a2f98428a2f98428a2f98428a2f98 + ddq 0x71374491713744917137449171374491,0x71374491713744917137449171374491 + ddq 0xb5c0fbcfb5c0fbcfb5c0fbcfb5c0fbcf,0xb5c0fbcfb5c0fbcfb5c0fbcfb5c0fbcf + ddq 0xe9b5dba5e9b5dba5e9b5dba5e9b5dba5,0xe9b5dba5e9b5dba5e9b5dba5e9b5dba5 + ddq 0x3956c25b3956c25b3956c25b3956c25b,0x3956c25b3956c25b3956c25b3956c25b + ddq 0x59f111f159f111f159f111f159f111f1,0x59f111f159f111f159f111f159f111f1 + ddq 0x923f82a4923f82a4923f82a4923f82a4,0x923f82a4923f82a4923f82a4923f82a4 + ddq 0xab1c5ed5ab1c5ed5ab1c5ed5ab1c5ed5,0xab1c5ed5ab1c5ed5ab1c5ed5ab1c5ed5 + ddq 0xd807aa98d807aa98d807aa98d807aa98,0xd807aa98d807aa98d807aa98d807aa98 + ddq 0x12835b0112835b0112835b0112835b01,0x12835b0112835b0112835b0112835b01 + ddq 0x243185be243185be243185be243185be,0x243185be243185be243185be243185be + ddq 0x550c7dc3550c7dc3550c7dc3550c7dc3,0x550c7dc3550c7dc3550c7dc3550c7dc3 + ddq 0x72be5d7472be5d7472be5d7472be5d74,0x72be5d7472be5d7472be5d7472be5d74 + ddq 0x80deb1fe80deb1fe80deb1fe80deb1fe,0x80deb1fe80deb1fe80deb1fe80deb1fe + ddq 0x9bdc06a79bdc06a79bdc06a79bdc06a7,0x9bdc06a79bdc06a79bdc06a79bdc06a7 + ddq 0xc19bf174c19bf174c19bf174c19bf174,0xc19bf174c19bf174c19bf174c19bf174 + ddq 0xe49b69c1e49b69c1e49b69c1e49b69c1,0xe49b69c1e49b69c1e49b69c1e49b69c1 + ddq 0xefbe4786efbe4786efbe4786efbe4786,0xefbe4786efbe4786efbe4786efbe4786 + ddq 0x0fc19dc60fc19dc60fc19dc60fc19dc6,0x0fc19dc60fc19dc60fc19dc60fc19dc6 + ddq 0x240ca1cc240ca1cc240ca1cc240ca1cc,0x240ca1cc240ca1cc240ca1cc240ca1cc + ddq 0x2de92c6f2de92c6f2de92c6f2de92c6f,0x2de92c6f2de92c6f2de92c6f2de92c6f + ddq 0x4a7484aa4a7484aa4a7484aa4a7484aa,0x4a7484aa4a7484aa4a7484aa4a7484aa + ddq 0x5cb0a9dc5cb0a9dc5cb0a9dc5cb0a9dc,0x5cb0a9dc5cb0a9dc5cb0a9dc5cb0a9dc + ddq 0x76f988da76f988da76f988da76f988da,0x76f988da76f988da76f988da76f988da + ddq 0x983e5152983e5152983e5152983e5152,0x983e5152983e5152983e5152983e5152 + ddq 0xa831c66da831c66da831c66da831c66d,0xa831c66da831c66da831c66da831c66d + ddq 0xb00327c8b00327c8b00327c8b00327c8,0xb00327c8b00327c8b00327c8b00327c8 + ddq 0xbf597fc7bf597fc7bf597fc7bf597fc7,0xbf597fc7bf597fc7bf597fc7bf597fc7 + ddq 0xc6e00bf3c6e00bf3c6e00bf3c6e00bf3,0xc6e00bf3c6e00bf3c6e00bf3c6e00bf3 + ddq 0xd5a79147d5a79147d5a79147d5a79147,0xd5a79147d5a79147d5a79147d5a79147 + ddq 0x06ca635106ca635106ca635106ca6351,0x06ca635106ca635106ca635106ca6351 + ddq 0x14292967142929671429296714292967,0x14292967142929671429296714292967 + ddq 0x27b70a8527b70a8527b70a8527b70a85,0x27b70a8527b70a8527b70a8527b70a85 + ddq 0x2e1b21382e1b21382e1b21382e1b2138,0x2e1b21382e1b21382e1b21382e1b2138 + ddq 0x4d2c6dfc4d2c6dfc4d2c6dfc4d2c6dfc,0x4d2c6dfc4d2c6dfc4d2c6dfc4d2c6dfc + ddq 0x53380d1353380d1353380d1353380d13,0x53380d1353380d1353380d1353380d13 + ddq 0x650a7354650a7354650a7354650a7354,0x650a7354650a7354650a7354650a7354 + ddq 0x766a0abb766a0abb766a0abb766a0abb,0x766a0abb766a0abb766a0abb766a0abb + ddq 0x81c2c92e81c2c92e81c2c92e81c2c92e,0x81c2c92e81c2c92e81c2c92e81c2c92e + ddq 0x92722c8592722c8592722c8592722c85,0x92722c8592722c8592722c8592722c85 + ddq 0xa2bfe8a1a2bfe8a1a2bfe8a1a2bfe8a1,0xa2bfe8a1a2bfe8a1a2bfe8a1a2bfe8a1 + ddq 0xa81a664ba81a664ba81a664ba81a664b,0xa81a664ba81a664ba81a664ba81a664b + ddq 0xc24b8b70c24b8b70c24b8b70c24b8b70,0xc24b8b70c24b8b70c24b8b70c24b8b70 + ddq 0xc76c51a3c76c51a3c76c51a3c76c51a3,0xc76c51a3c76c51a3c76c51a3c76c51a3 + ddq 0xd192e819d192e819d192e819d192e819,0xd192e819d192e819d192e819d192e819 + ddq 0xd6990624d6990624d6990624d6990624,0xd6990624d6990624d6990624d6990624 + ddq 0xf40e3585f40e3585f40e3585f40e3585,0xf40e3585f40e3585f40e3585f40e3585 + ddq 0x106aa070106aa070106aa070106aa070,0x106aa070106aa070106aa070106aa070 + ddq 0x19a4c11619a4c11619a4c11619a4c116,0x19a4c11619a4c11619a4c11619a4c116 + ddq 0x1e376c081e376c081e376c081e376c08,0x1e376c081e376c081e376c081e376c08 + ddq 0x2748774c2748774c2748774c2748774c,0x2748774c2748774c2748774c2748774c + ddq 0x34b0bcb534b0bcb534b0bcb534b0bcb5,0x34b0bcb534b0bcb534b0bcb534b0bcb5 + ddq 0x391c0cb3391c0cb3391c0cb3391c0cb3,0x391c0cb3391c0cb3391c0cb3391c0cb3 + ddq 0x4ed8aa4a4ed8aa4a4ed8aa4a4ed8aa4a,0x4ed8aa4a4ed8aa4a4ed8aa4a4ed8aa4a + ddq 0x5b9cca4f5b9cca4f5b9cca4f5b9cca4f,0x5b9cca4f5b9cca4f5b9cca4f5b9cca4f + ddq 0x682e6ff3682e6ff3682e6ff3682e6ff3,0x682e6ff3682e6ff3682e6ff3682e6ff3 + ddq 0x748f82ee748f82ee748f82ee748f82ee,0x748f82ee748f82ee748f82ee748f82ee + ddq 0x78a5636f78a5636f78a5636f78a5636f,0x78a5636f78a5636f78a5636f78a5636f + ddq 0x84c8781484c8781484c8781484c87814,0x84c8781484c8781484c8781484c87814 + ddq 0x8cc702088cc702088cc702088cc70208,0x8cc702088cc702088cc702088cc70208 + ddq 0x90befffa90befffa90befffa90befffa,0x90befffa90befffa90befffa90befffa + ddq 0xa4506ceba4506ceba4506ceba4506ceb,0xa4506ceba4506ceba4506ceba4506ceb + ddq 0xbef9a3f7bef9a3f7bef9a3f7bef9a3f7,0xbef9a3f7bef9a3f7bef9a3f7bef9a3f7 + ddq 0xc67178f2c67178f2c67178f2c67178f2,0xc67178f2c67178f2c67178f2c67178f2 + +PSHUFFLE_BYTE_FLIP_MASK: ddq 0x0c0d0e0f08090a0b0405060700010203 + ddq 0x0c0d0e0f08090a0b0405060700010203 diff --git a/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_sse4.asm b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_sse4.asm new file mode 100644 index 000000000..ce5ad57d3 --- /dev/null +++ b/nostrdb/ccan/ccan/crypto/sha256/benchmarks/sha256_sse4.asm @@ -0,0 +1,544 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Copyright (c) 2012, Intel Corporation +; +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are +; met: +; +; * Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; * Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in the +; documentation and/or other materials provided with the +; distribution. +; +; * Neither the name of the Intel Corporation nor the names of its +; contributors may be used to endorse or promote products derived from +; this software without specific prior written permission. +; +; +; THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION "AS IS" AND ANY +; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +; IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR +; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +; EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Example YASM command lines: +; Windows: yasm -Xvc -f x64 -rnasm -pnasm -o sha256_sse4.obj -g cv8 sha256_sse4.asm +; Linux: yasm -f x64 -f elf64 -X gnu -g dwarf2 -D LINUX -o sha256_sse4.o sha256_sse4.asm +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; This code is described in an Intel White-Paper: +; "Fast SHA-256 Implementations on Intel Architecture Processors" +; +; To find it, surf to http://www.intel.com/p/en_US/embedded +; and search for that title. +; The paper is expected to be released roughly at the end of April, 2012 +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; This code schedules 1 blocks at a time, with 4 lanes per block +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%define MOVDQ movdqu ;; assume buffers not aligned + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Define Macros + +; addm [mem], reg +; Add reg to mem using reg-mem add and store +%macro addm 2 + add %2, %1 + mov %1, %2 +%endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; COPY_XMM_AND_BSWAP xmm, [mem], byte_flip_mask +; Load xmm with mem and byte swap each dword +%macro COPY_XMM_AND_BSWAP 3 + MOVDQ %1, %2 + pshufb %1, %3 +%endmacro + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +%define X0 xmm4 +%define X1 xmm5 +%define X2 xmm6 +%define X3 xmm7 + +%define XTMP0 xmm0 +%define XTMP1 xmm1 +%define XTMP2 xmm2 +%define XTMP3 xmm3 +%define XTMP4 xmm8 +%define XFER xmm9 + +%define SHUF_00BA xmm10 ; shuffle xBxA -> 00BA +%define SHUF_DC00 xmm11 ; shuffle xDxC -> DC00 +%define BYTE_FLIP_MASK xmm12 + +%ifdef LINUX +%define NUM_BLKS rdx ; 3rd arg +%define CTX rsi ; 2nd arg +%define INP rdi ; 1st arg + +%define SRND rdi ; clobbers INP +%define c ecx +%define d r8d +%define e edx +%else +%define NUM_BLKS r8 ; 3rd arg +%define CTX rdx ; 2nd arg +%define INP rcx ; 1st arg + +%define SRND rcx ; clobbers INP +%define c edi +%define d esi +%define e r8d + +%endif +%define TBL rbp +%define a eax +%define b ebx + +%define f r9d +%define g r10d +%define h r11d + +%define y0 r13d +%define y1 r14d +%define y2 r15d + + + +_INP_END_SIZE equ 8 +_INP_SIZE equ 8 +_XFER_SIZE equ 8 +%ifdef LINUX +_XMM_SAVE_SIZE equ 0 +%else +_XMM_SAVE_SIZE equ 7*16 +%endif +; STACK_SIZE plus pushes must be an odd multiple of 8 +_ALIGN_SIZE equ 8 + +_INP_END equ 0 +_INP equ _INP_END + _INP_END_SIZE +_XFER equ _INP + _INP_SIZE +_XMM_SAVE equ _XFER + _XFER_SIZE + _ALIGN_SIZE +STACK_SIZE equ _XMM_SAVE + _XMM_SAVE_SIZE + +; rotate_Xs +; Rotate values of symbols X0...X3 +%macro rotate_Xs 0 +%xdefine X_ X0 +%xdefine X0 X1 +%xdefine X1 X2 +%xdefine X2 X3 +%xdefine X3 X_ +%endm + +; ROTATE_ARGS +; Rotate values of symbols a...h +%macro ROTATE_ARGS 0 +%xdefine TMP_ h +%xdefine h g +%xdefine g f +%xdefine f e +%xdefine e d +%xdefine d c +%xdefine c b +%xdefine b a +%xdefine a TMP_ +%endm + +%macro FOUR_ROUNDS_AND_SCHED 0 + ;; compute s0 four at a time and s1 two at a time + ;; compute W[-16] + W[-7] 4 at a time + movdqa XTMP0, X3 + mov y0, e ; y0 = e + ror y0, (25-11) ; y0 = e >> (25-11) + mov y1, a ; y1 = a + palignr XTMP0, X2, 4 ; XTMP0 = W[-7] + ror y1, (22-13) ; y1 = a >> (22-13) + xor y0, e ; y0 = e ^ (e >> (25-11)) + mov y2, f ; y2 = f + ror y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + movdqa XTMP1, X1 + xor y1, a ; y1 = a ^ (a >> (22-13) + xor y2, g ; y2 = f^g + paddd XTMP0, X0 ; XTMP0 = W[-7] + W[-16] + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + and y2, e ; y2 = (f^g)&e + ror y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + ;; compute s0 + palignr XTMP1, X0, 4 ; XTMP1 = W[-15] + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + ror y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + xor y2, g ; y2 = CH = ((f^g)&e)^g + movdqa XTMP2, XTMP1 ; XTMP2 = W[-15] + ror y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + add y2, y0 ; y2 = S1 + CH + add y2, [rsp + _XFER + 0*4] ; y2 = k + w + S1 + CH + movdqa XTMP3, XTMP1 ; XTMP3 = W[-15] + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + pslld XTMP1, (32-7) + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + psrld XTMP2, 7 + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + por XTMP1, XTMP2 ; XTMP1 = W[-15] nostrdb: ror 7 + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + +ROTATE_ARGS + movdqa XTMP2, XTMP3 ; XTMP2 = W[-15] + mov y0, e ; y0 = e + mov y1, a ; y1 = a + movdqa XTMP4, XTMP3 ; XTMP4 = W[-15] + ror y0, (25-11) ; y0 = e >> (25-11) + xor y0, e ; y0 = e ^ (e >> (25-11)) + mov y2, f ; y2 = f + ror y1, (22-13) ; y1 = a >> (22-13) + pslld XTMP3, (32-18) + xor y1, a ; y1 = a ^ (a >> (22-13) + ror y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + xor y2, g ; y2 = f^g + psrld XTMP2, 18 + ror y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + and y2, e ; y2 = (f^g)&e + ror y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + pxor XTMP1, XTMP3 + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + xor y2, g ; y2 = CH = ((f^g)&e)^g + psrld XTMP4, 3 ; XTMP4 = W[-15] nostrdb: >> 3 + add y2, y0 ; y2 = S1 + CH + add y2, [rsp + _XFER + 1*4] ; y2 = k + w + S1 + CH + ror y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + pxor XTMP1, XTMP2 ; XTMP1 = W[-15] nostrdb: ror 7 ^ W[-15] ror 18 + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + pxor XTMP1, XTMP4 ; XTMP1 = s0 + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + ;; compute low s1 + pshufd XTMP2, X3, 11111010b ; XTMP2 = W[-2] {BBAA} + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + paddd XTMP0, XTMP1 ; XTMP0 = W[-16] + W[-7] + s0 + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + +ROTATE_ARGS + movdqa XTMP3, XTMP2 ; XTMP3 = W[-2] {BBAA} + mov y0, e ; y0 = e + mov y1, a ; y1 = a + ror y0, (25-11) ; y0 = e >> (25-11) + movdqa XTMP4, XTMP2 ; XTMP4 = W[-2] {BBAA} + xor y0, e ; y0 = e ^ (e >> (25-11)) + ror y1, (22-13) ; y1 = a >> (22-13) + mov y2, f ; y2 = f + xor y1, a ; y1 = a ^ (a >> (22-13) + ror y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + psrlq XTMP2, 17 ; XTMP2 = W[-2] ror 17 {xBxA} + xor y2, g ; y2 = f^g + psrlq XTMP3, 19 ; XTMP3 = W[-2] ror 19 {xBxA} + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + and y2, e ; y2 = (f^g)&e + psrld XTMP4, 10 ; XTMP4 = W[-2] >> 10 {BBAA} + ror y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + xor y2, g ; y2 = CH = ((f^g)&e)^g + ror y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + pxor XTMP2, XTMP3 + add y2, y0 ; y2 = S1 + CH + ror y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + add y2, [rsp + _XFER + 2*4] ; y2 = k + w + S1 + CH + pxor XTMP4, XTMP2 ; XTMP4 = s1 {xBxA} + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + pshufb XTMP4, SHUF_00BA ; XTMP4 = s1 {00BA} + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + paddd XTMP0, XTMP4 ; XTMP0 = {..., ..., W[1], W[0]} + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + ;; compute high s1 + pshufd XTMP2, XTMP0, 01010000b ; XTMP2 = W[-2] {DDCC} + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + +ROTATE_ARGS + movdqa XTMP3, XTMP2 ; XTMP3 = W[-2] {DDCC} + mov y0, e ; y0 = e + ror y0, (25-11) ; y0 = e >> (25-11) + mov y1, a ; y1 = a + movdqa X0, XTMP2 ; X0 = W[-2] {DDCC} + ror y1, (22-13) ; y1 = a >> (22-13) + xor y0, e ; y0 = e ^ (e >> (25-11)) + mov y2, f ; y2 = f + ror y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + psrlq XTMP2, 17 ; XTMP2 = W[-2] ror 17 {xDxC} + xor y1, a ; y1 = a ^ (a >> (22-13) + xor y2, g ; y2 = f^g + psrlq XTMP3, 19 ; XTMP3 = W[-2] ror 19 {xDxC} + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + and y2, e ; y2 = (f^g)&e + ror y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + psrld X0, 10 ; X0 = W[-2] >> 10 {DDCC} + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + ror y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + xor y2, g ; y2 = CH = ((f^g)&e)^g + pxor XTMP2, XTMP3 + ror y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + add y2, y0 ; y2 = S1 + CH + add y2, [rsp + _XFER + 3*4] ; y2 = k + w + S1 + CH + pxor X0, XTMP2 ; X0 = s1 {xDxC} + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + pshufb X0, SHUF_DC00 ; X0 = s1 {DC00} + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + paddd X0, XTMP0 ; X0 = {W[3], W[2], W[1], W[0]} + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + +ROTATE_ARGS +rotate_Xs +%endm + +;; input is [rsp + _XFER + %1 * 4] +%macro DO_ROUND 1 + mov y0, e ; y0 = e + ror y0, (25-11) ; y0 = e >> (25-11) + mov y1, a ; y1 = a + xor y0, e ; y0 = e ^ (e >> (25-11)) + ror y1, (22-13) ; y1 = a >> (22-13) + mov y2, f ; y2 = f + xor y1, a ; y1 = a ^ (a >> (22-13) + ror y0, (11-6) ; y0 = (e >> (11-6)) ^ (e >> (25-6)) + xor y2, g ; y2 = f^g + xor y0, e ; y0 = e ^ (e >> (11-6)) ^ (e >> (25-6)) + ror y1, (13-2) ; y1 = (a >> (13-2)) ^ (a >> (22-2)) + and y2, e ; y2 = (f^g)&e + xor y1, a ; y1 = a ^ (a >> (13-2)) ^ (a >> (22-2)) + ror y0, 6 ; y0 = S1 = (e>>6) & (e>>11) ^ (e>>25) + xor y2, g ; y2 = CH = ((f^g)&e)^g + add y2, y0 ; y2 = S1 + CH + ror y1, 2 ; y1 = S0 = (a>>2) ^ (a>>13) ^ (a>>22) + add y2, [rsp + _XFER + %1 * 4] ; y2 = k + w + S1 + CH + mov y0, a ; y0 = a + add h, y2 ; h = h + S1 + CH + k + w + mov y2, a ; y2 = a + or y0, c ; y0 = a|c + add d, h ; d = d + h + S1 + CH + k + w + and y2, c ; y2 = a&c + and y0, b ; y0 = (a|c)&b + add h, y1 ; h = h + S1 + CH + k + w + S0 + or y0, y2 ; y0 = MAJ = (a|c)&b)|(a&c) + add h, y0 ; h = h + S1 + CH + k + w + S0 + MAJ + ROTATE_ARGS +%endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; void sha256_sse4(void *input_data, UINT32 digest[8], UINT64 num_blks) +;; arg 1 : pointer to input data +;; arg 2 : pointer to digest +;; arg 3 : Num blocks +section .text +global sha256_sse4 +align 32 +sha256_sse4: + push rbx +%ifndef LINUX + push rsi + push rdi +%endif + push rbp + push r13 + push r14 + push r15 + + sub rsp,STACK_SIZE +%ifndef LINUX + movdqa [rsp + _XMM_SAVE + 0*16],xmm6 + movdqa [rsp + _XMM_SAVE + 1*16],xmm7 + movdqa [rsp + _XMM_SAVE + 2*16],xmm8 + movdqa [rsp + _XMM_SAVE + 3*16],xmm9 + movdqa [rsp + _XMM_SAVE + 4*16],xmm10 + movdqa [rsp + _XMM_SAVE + 5*16],xmm11 + movdqa [rsp + _XMM_SAVE + 6*16],xmm12 +%endif + + shl NUM_BLKS, 6 ; convert to bytes + jz done_hash + add NUM_BLKS, INP ; pointer to end of data + mov [rsp + _INP_END], NUM_BLKS + + ;; load initial digest + mov a,[4*0 + CTX] + mov b,[4*1 + CTX] + mov c,[4*2 + CTX] + mov d,[4*3 + CTX] + mov e,[4*4 + CTX] + mov f,[4*5 + CTX] + mov g,[4*6 + CTX] + mov h,[4*7 + CTX] + + movdqa BYTE_FLIP_MASK, [PSHUFFLE_BYTE_FLIP_MASK wrt rip] + movdqa SHUF_00BA, [_SHUF_00BA wrt rip] + movdqa SHUF_DC00, [_SHUF_DC00 wrt rip] + +loop0: + lea TBL,[K256 wrt rip] + + ;; byte swap first 16 dwords + COPY_XMM_AND_BSWAP X0, [INP + 0*16], BYTE_FLIP_MASK + COPY_XMM_AND_BSWAP X1, [INP + 1*16], BYTE_FLIP_MASK + COPY_XMM_AND_BSWAP X2, [INP + 2*16], BYTE_FLIP_MASK + COPY_XMM_AND_BSWAP X3, [INP + 3*16], BYTE_FLIP_MASK + + mov [rsp + _INP], INP + + ;; schedule 48 input dwords, by doing 3 rounds of 16 each + mov SRND, 3 +align 16 +loop1: + movdqa XFER, [TBL + 0*16] + paddd XFER, X0 + movdqa [rsp + _XFER], XFER + FOUR_ROUNDS_AND_SCHED + + movdqa XFER, [TBL + 1*16] + paddd XFER, X0 + movdqa [rsp + _XFER], XFER + FOUR_ROUNDS_AND_SCHED + + movdqa XFER, [TBL + 2*16] + paddd XFER, X0 + movdqa [rsp + _XFER], XFER + FOUR_ROUNDS_AND_SCHED + + movdqa XFER, [TBL + 3*16] + paddd XFER, X0 + movdqa [rsp + _XFER], XFER + add TBL, 4*16 + FOUR_ROUNDS_AND_SCHED + + sub SRND, 1 + jne loop1 + + mov SRND, 2 +loop2: + paddd X0, [TBL + 0*16] + movdqa [rsp + _XFER], X0 + DO_ROUND 0 + DO_ROUND 1 + DO_ROUND 2 + DO_ROUND 3 + paddd X1, [TBL + 1*16] + movdqa [rsp + _XFER], X1 + add TBL, 2*16 + DO_ROUND 0 + DO_ROUND 1 + DO_ROUND 2 + DO_ROUND 3 + + movdqa X0, X2 + movdqa X1, X3 + + sub SRND, 1 + jne loop2 + + addm [4*0 + CTX],a + addm [4*1 + CTX],b + addm [4*2 + CTX],c + addm [4*3 + CTX],d + addm [4*4 + CTX],e + addm [4*5 + CTX],f + addm [4*6 + CTX],g + addm [4*7 + CTX],h + + mov INP, [rsp + _INP] + add INP, 64 + cmp INP, [rsp + _INP_END] + jne loop0 + +done_hash: +%ifndef LINUX + movdqa xmm6,[rsp + _XMM_SAVE + 0*16] + movdqa xmm7,[rsp + _XMM_SAVE + 1*16] + movdqa xmm8,[rsp + _XMM_SAVE + 2*16] + movdqa xmm9,[rsp + _XMM_SAVE + 3*16] + movdqa xmm10,[rsp + _XMM_SAVE + 4*16] + movdqa xmm11,[rsp + _XMM_SAVE + 5*16] + movdqa xmm12,[rsp + _XMM_SAVE + 6*16] +%endif + + add rsp, STACK_SIZE + + pop r15 + pop r14 + pop r13 + pop rbp +%ifndef LINUX + pop rdi + pop rsi +%endif + pop rbx + + ret + + +section .data +align 64 +K256: + dd 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 + dd 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 + dd 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 + dd 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 + dd 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc + dd 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da + dd 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 + dd 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 + dd 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 + dd 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 + dd 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 + dd 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 + dd 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 + dd 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 + dd 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 + dd 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 + +PSHUFFLE_BYTE_FLIP_MASK: ddq 0x0c0d0e0f08090a0b0405060700010203 + +; shuffle xBxA -> 00BA +_SHUF_00BA: ddq 0xFFFFFFFFFFFFFFFF0b0a090803020100 + +; shuffle xDxC -> DC00 +_SHUF_DC00: ddq 0x0b0a090803020100FFFFFFFFFFFFFFFF diff --git a/nostrdb/ccan/ccan/crypto/sha256/sha256.c b/nostrdb/ccan/ccan/crypto/sha256/sha256.c index 26e142cbe..3ba31e415 100644 --- a/nostrdb/ccan/ccan/crypto/sha256/sha256.c +++ b/nostrdb/ccan/ccan/crypto/sha256/sha256.c @@ -6,9 +6,9 @@ * Distributed under the MIT software license, see the accompanying * file COPYING or http://www.opensource.org/licenses/mit-license.php. */ -#include "sha256.h" -#include "ccan/endian/endian.h" -#include "ccan/compiler/compiler.h" +#include +#include +#include #include #include #include @@ -22,7 +22,7 @@ static void invalidate_sha256(struct sha256_ctx *ctx) #endif } -static void check_sha256(struct sha256_ctx *ctx) +static void check_sha256(struct sha256_ctx *ctx UNUSED) { #ifdef CCAN_CRYPTO_SHA256_USE_OPENSSL assert(ctx->c.md_len != 0); @@ -167,6 +167,14 @@ static void Transform(uint32_t *s, const uint32_t *chunk) s[7] += h; } +static bool alignment_ok(const void *p UNUSED, size_t n UNUSED) +{ +#if HAVE_UNALIGNED_ACCESS + return true; +#else + return ((size_t)p % n == 0); +#endif +} static void add(struct sha256_ctx *ctx, const void *p, size_t len) { @@ -195,7 +203,7 @@ static void add(struct sha256_ctx *ctx, const void *p, size_t len) data += 64; len -= 64; } - + if (len) { /* Fill the buffer with what remains. */ memcpy(ctx->buf.u8 + bufsize, data, len); @@ -240,7 +248,7 @@ void sha256(struct sha256 *sha, const void *p, size_t size) sha256_update(&ctx, p, size); sha256_done(&ctx, sha); } - + void sha256_u8(struct sha256_ctx *ctx, uint8_t v) { sha256_update(ctx, &v, sizeof(v)); @@ -267,13 +275,13 @@ void sha256_le16(struct sha256_ctx *ctx, uint16_t v) leint16_t lev = cpu_to_le16(v); sha256_update(ctx, &lev, sizeof(lev)); } - + void sha256_le32(struct sha256_ctx *ctx, uint32_t v) { leint32_t lev = cpu_to_le32(v); sha256_update(ctx, &lev, sizeof(lev)); } - + void sha256_le64(struct sha256_ctx *ctx, uint64_t v) { leint64_t lev = cpu_to_le64(v); @@ -286,17 +294,15 @@ void sha256_be16(struct sha256_ctx *ctx, uint16_t v) beint16_t bev = cpu_to_be16(v); sha256_update(ctx, &bev, sizeof(bev)); } - + void sha256_be32(struct sha256_ctx *ctx, uint32_t v) { beint32_t bev = cpu_to_be32(v); sha256_update(ctx, &bev, sizeof(bev)); } - + void sha256_be64(struct sha256_ctx *ctx, uint64_t v) { beint64_t bev = cpu_to_be64(v); sha256_update(ctx, &bev, sizeof(bev)); } - - diff --git a/nostrdb/ccan/ccan/crypto/sha256/sha256.h b/nostrdb/ccan/ccan/crypto/sha256/sha256.h index 2a9283120..9a310b956 100644 --- a/nostrdb/ccan/ccan/crypto/sha256/sha256.h +++ b/nostrdb/ccan/ccan/crypto/sha256/sha256.h @@ -1,14 +1,7 @@ - #ifndef CCAN_CRYPTO_SHA256_H #define CCAN_CRYPTO_SHA256_H - - -/** Output length for `wally_sha256` */ -#define SHA256_LEN 32 - - /* BSD-MIT - see LICENSE file for details */ -/* #include "config.h" */ +#include "config.h" #include #include @@ -151,5 +144,4 @@ void sha256_le64(struct sha256_ctx *ctx, uint64_t v); void sha256_be16(struct sha256_ctx *ctx, uint16_t v); void sha256_be32(struct sha256_ctx *ctx, uint32_t v); void sha256_be64(struct sha256_ctx *ctx, uint64_t v); - #endif /* CCAN_CRYPTO_SHA256_H */ diff --git a/nostrdb/ccan/ccan/endian/LICENSE b/nostrdb/ccan/ccan/endian/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/endian/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/endian/_info b/nostrdb/ccan/ccan/endian/_info new file mode 100644 index 000000000..efe5a8bbd --- /dev/null +++ b/nostrdb/ccan/ccan/endian/_info @@ -0,0 +1,55 @@ +#include "config.h" +#include +#include + +/** + * endian - endian conversion macros for simple types + * + * Portable protocols (such as on-disk formats, or network protocols) + * are often defined to be a particular endian: little-endian (least + * significant bytes first) or big-endian (most significant bytes + * first). + * + * Similarly, some CPUs lay out values in memory in little-endian + * order (most commonly, Intel's 8086 and derivatives), or big-endian + * order (almost everyone else). + * + * This module provides conversion routines, inspired by the linux kernel. + * It also provides leint32_t, beint32_t etc typedefs, which are annotated for + * the sparse checker. + * + * Example: + * #include + * #include + * #include + * + * // + * int main(int argc, char *argv[]) + * { + * uint32_t value; + * + * if (argc != 2) + * errx(1, "Usage: %s ", argv[0]); + * + * value = atoi(argv[1]); + * printf("native: %08x\n", value); + * printf("little-endian: %08x\n", cpu_to_le32(value)); + * printf("big-endian: %08x\n", cpu_to_be32(value)); + * printf("byte-reversed: %08x\n", bswap_32(value)); + * exit(0); + * } + * + * License: License: CC0 (Public domain) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) + /* Nothing */ + return 0; + + return 1; +} diff --git a/nostrdb/ccan/ccan/endian/endian.h b/nostrdb/ccan/ccan/endian/endian.h index 6bfc09f2d..3753f4900 100644 --- a/nostrdb/ccan/ccan/endian/endian.h +++ b/nostrdb/ccan/ccan/endian/endian.h @@ -1,10 +1,8 @@ -/* CC0 (Public domain) */ +/* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_ENDIAN_H #define CCAN_ENDIAN_H #include - #include "config.h" -#include "cursor.h" /** * BSWAP_16 - reverse bytes in a constant uint16_t value. @@ -346,6 +344,8 @@ static inline uint16_t be16_to_cpu(beint16_t be_val) return BE16_TO_CPU(be_val); } +/* Whichever they include first, they get these definitions. */ +#ifdef CCAN_SHORT_TYPES_H /** * be64/be32/be16 - 64/32/16 bit big-endian representation. */ @@ -359,7 +359,5 @@ typedef beint16_t be16; typedef leint64_t le64; typedef leint32_t le32; typedef leint16_t le16; - - +#endif #endif /* CCAN_ENDIAN_H */ - diff --git a/nostrdb/ccan/ccan/htable/LICENSE b/nostrdb/ccan/ccan/htable/LICENSE new file mode 120000 index 000000000..dc314ecac --- /dev/null +++ b/nostrdb/ccan/ccan/htable/LICENSE @@ -0,0 +1 @@ +../../licenses/LGPL-2.1 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/htable/_info b/nostrdb/ccan/ccan/htable/_info new file mode 100644 index 000000000..ea11beb44 --- /dev/null +++ b/nostrdb/ccan/ccan/htable/_info @@ -0,0 +1,118 @@ +#include "config.h" +#include +#include + +/** + * htable - hash table routines + * + * A hash table is an efficient structure for looking up keys. This version + * grows with usage and allows efficient deletion. + * + * Example: + * #include + * #include + * #include + * #include + * #include + * + * struct name_to_digit { + * const char *name; + * unsigned int val; + * }; + * + * static struct name_to_digit map[] = { + * { "zero", 0}, + * { "one", 1 }, + * { "two", 2 }, + * { "three", 3 }, + * { "four", 4 }, + * { "five", 5 }, + * { "six", 6 }, + * { "seven", 7 }, + * { "eight", 8 }, + * { "nine", 9 } + * }; + * + * // Wrapper for rehash function pointer. + * static size_t rehash(const void *e, void *unused) + * { + * (void)unused; + * return hash_string(((struct name_to_digit *)e)->name); + * } + * + * // Comparison function. + * static bool nameeq(const void *e, void *string) + * { + * return strcmp(((struct name_to_digit *)e)->name, string) == 0; + * } + * + * // We let them add their own aliases, eg. --alias=v=5 + * static void add_alias(struct htable *ht, const char *alias) + * { + * char *eq, *name; + * struct name_to_digit *n; + * + * n = malloc(sizeof(*n)); + * n->name = name = strdup(alias); + * + * eq = strchr(name, '='); + * if (!eq || ((n->val = atoi(eq+1)) == 0 && !strcmp(eq+1, "0"))) + * errx(1, "Usage: --alias=="); + * *eq = '\0'; + * htable_add(ht, hash_string(n->name), n); + * } + * + * int main(int argc, char *argv[]) + * { + * struct htable ht; + * int i; + * unsigned long val; + * + * if (argc < 2) + * errx(1, "Usage: %s [--alias==]... ...", + * argv[0]); + * + * // Create and populate hash table. + * htable_init(&ht, rehash, NULL); + * for (i = 0; i < (int)(sizeof(map)/sizeof(map[0])); i++) + * htable_add(&ht, hash_string(map[i].name), &map[i]); + * + * // Add any aliases to the hash table. + * for (i = 1; i < argc; i++) { + * if (!strncmp(argv[i], "--alias=", strlen("--alias="))) + * add_alias(&ht, argv[i] + strlen("--alias=")); + * else + * break; + * } + * + * // Find the other args in the hash table. + * for (val = 0; i < argc; i++) { + * struct name_to_digit *n; + * n = htable_get(&ht, hash_string(argv[i]), + * nameeq, argv[i]); + * if (!n) + * errx(1, "Invalid digit name %s", argv[i]); + * // Append it to the value we are building up. + * val *= 10; + * val += n->val; + * } + * printf("%lu\n", val); + * return 0; + * } + * + * License: LGPL (v2.1 or any later version) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/compiler\n"); + printf("ccan/str\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/htable/htable.c b/nostrdb/ccan/ccan/htable/htable.c new file mode 100644 index 000000000..f631ffebf --- /dev/null +++ b/nostrdb/ccan/ccan/htable/htable.c @@ -0,0 +1,491 @@ +/* Licensed under LGPLv2+ - see LICENSE file for details */ +#include +#include +#include +#include +#include +#include +#include +#include + +/* We use 0x1 as deleted marker. */ +#define HTABLE_DELETED (0x1) + +/* perfect_bitnum 63 means there's no perfect bitnum */ +#define NO_PERFECT_BIT (sizeof(uintptr_t) * CHAR_BIT - 1) + +static void *htable_default_alloc(struct htable *ht, size_t len) +{ + return calloc(len, 1); +} + +static void htable_default_free(struct htable *ht, void *p) +{ + free(p); +} + +static void *(*htable_alloc)(struct htable *, size_t) = htable_default_alloc; +static void (*htable_free)(struct htable *, void *) = htable_default_free; + +void htable_set_allocator(void *(*alloc)(struct htable *, size_t len), + void (*free)(struct htable *, void *p)) +{ + if (!alloc) + alloc = htable_default_alloc; + if (!free) + free = htable_default_free; + htable_alloc = alloc; + htable_free = free; +} + +/* We clear out the bits which are always the same, and put metadata there. */ +static inline uintptr_t get_extra_ptr_bits(const struct htable *ht, + uintptr_t e) +{ + return e & ht->common_mask; +} + +static inline void *get_raw_ptr(const struct htable *ht, uintptr_t e) +{ + return (void *)((e & ~ht->common_mask) | ht->common_bits); +} + +static inline uintptr_t make_hval(const struct htable *ht, + const void *p, uintptr_t bits) +{ + return ((uintptr_t)p & ~ht->common_mask) | bits; +} + +static inline bool entry_is_valid(uintptr_t e) +{ + return e > HTABLE_DELETED; +} + +static inline uintptr_t ht_perfect_mask(const struct htable *ht) +{ + return (uintptr_t)2 << ht->perfect_bitnum; +} + +static inline uintptr_t get_hash_ptr_bits(const struct htable *ht, + size_t hash) +{ + /* Shuffling the extra bits (as specified in mask) down the + * end is quite expensive. But the lower bits are redundant, so + * we fold the value first. */ + return (hash ^ (hash >> ht->bits)) + & ht->common_mask & ~ht_perfect_mask(ht); +} + +void htable_init(struct htable *ht, + size_t (*rehash)(const void *elem, void *priv), void *priv) +{ + struct htable empty = HTABLE_INITIALIZER(empty, NULL, NULL); + *ht = empty; + ht->rehash = rehash; + ht->priv = priv; + ht->table = &ht->common_bits; +} + +/* Fill to 87.5% */ +static inline size_t ht_max(const struct htable *ht) +{ + return ((size_t)7 << ht->bits) / 8; +} + +/* Clean deleted if we're full, and more than 12.5% deleted */ +static inline size_t ht_max_deleted(const struct htable *ht) +{ + return ((size_t)1 << ht->bits) / 8; +} + +bool htable_init_sized(struct htable *ht, + size_t (*rehash)(const void *, void *), + void *priv, size_t expect) +{ + htable_init(ht, rehash, priv); + + /* Don't go insane with sizing. */ + for (ht->bits = 1; ht_max(ht) < expect; ht->bits++) { + if (ht->bits == 30) + break; + } + + ht->table = htable_alloc(ht, sizeof(size_t) << ht->bits); + if (!ht->table) { + ht->table = &ht->common_bits; + return false; + } + (void)htable_debug(ht, HTABLE_LOC); + return true; +} + +void htable_clear(struct htable *ht) +{ + if (ht->table != &ht->common_bits) + htable_free(ht, (void *)ht->table); + htable_init(ht, ht->rehash, ht->priv); +} + +bool htable_copy_(struct htable *dst, const struct htable *src) +{ + uintptr_t *htable = htable_alloc(dst, sizeof(size_t) << src->bits); + + if (!htable) + return false; + + *dst = *src; + dst->table = htable; + memcpy(dst->table, src->table, sizeof(size_t) << src->bits); + return true; +} + +static size_t hash_bucket(const struct htable *ht, size_t h) +{ + return h & ((1 << ht->bits)-1); +} + +static void *htable_val(const struct htable *ht, + struct htable_iter *i, size_t hash, uintptr_t perfect) +{ + uintptr_t h2 = get_hash_ptr_bits(ht, hash) | perfect; + + while (ht->table[i->off]) { + if (ht->table[i->off] != HTABLE_DELETED) { + if (get_extra_ptr_bits(ht, ht->table[i->off]) == h2) + return get_raw_ptr(ht, ht->table[i->off]); + } + i->off = (i->off + 1) & ((1 << ht->bits)-1); + h2 &= ~perfect; + } + return NULL; +} + +void *htable_firstval_(const struct htable *ht, + struct htable_iter *i, size_t hash) +{ + i->off = hash_bucket(ht, hash); + return htable_val(ht, i, hash, ht_perfect_mask(ht)); +} + +void *htable_nextval_(const struct htable *ht, + struct htable_iter *i, size_t hash) +{ + i->off = (i->off + 1) & ((1 << ht->bits)-1); + return htable_val(ht, i, hash, 0); +} + +void *htable_first_(const struct htable *ht, struct htable_iter *i) +{ + for (i->off = 0; i->off < (size_t)1 << ht->bits; i->off++) { + if (entry_is_valid(ht->table[i->off])) + return get_raw_ptr(ht, ht->table[i->off]); + } + return NULL; +} + +void *htable_next_(const struct htable *ht, struct htable_iter *i) +{ + for (i->off++; i->off < (size_t)1 << ht->bits; i->off++) { + if (entry_is_valid(ht->table[i->off])) + return get_raw_ptr(ht, ht->table[i->off]); + } + return NULL; +} + +void *htable_prev_(const struct htable *ht, struct htable_iter *i) +{ + for (;;) { + if (!i->off) + return NULL; + i->off--; + if (entry_is_valid(ht->table[i->off])) + return get_raw_ptr(ht, ht->table[i->off]); + } +} + +/* Another bit currently in mask needs to be exposed, so that a bucket with p in + * it won't appear invalid */ +static COLD void unset_another_common_bit(struct htable *ht, + uintptr_t *maskdiff, + const void *p) +{ + size_t i; + + for (i = sizeof(uintptr_t) * CHAR_BIT - 1; i > 0; i--) { + if (((uintptr_t)p & ((uintptr_t)1 << i)) + && ht->common_mask & ~*maskdiff & ((uintptr_t)1 << i)) + break; + } + /* There must have been one, right? */ + assert(i > 0); + + *maskdiff |= ((uintptr_t)1 << i); +} + +/* We want to change the common mask: this fixes up the table */ +static COLD void fixup_table_common(struct htable *ht, uintptr_t maskdiff) +{ + size_t i; + uintptr_t bitsdiff; + +again: + bitsdiff = ht->common_bits & maskdiff; + + for (i = 0; i < (size_t)1 << ht->bits; i++) { + uintptr_t e; + if (!entry_is_valid(e = ht->table[i])) + continue; + + /* Clear the bits no longer in the mask, set them as + * expected. */ + e &= ~maskdiff; + e |= bitsdiff; + /* If this made it invalid, restart with more exposed */ + if (!entry_is_valid(e)) { + unset_another_common_bit(ht, &maskdiff, get_raw_ptr(ht, e)); + goto again; + } + ht->table[i] = e; + } + + /* Take away those bits from our mask, bits and perfect bit. */ + ht->common_mask &= ~maskdiff; + ht->common_bits &= ~maskdiff; + if (ht_perfect_mask(ht) & maskdiff) + ht->perfect_bitnum = NO_PERFECT_BIT; +} + +/* Limited recursion */ +static void ht_add(struct htable *ht, const void *new, size_t h); + +/* We tried to add this entry, but it looked invalid! We need to + * let another pointer bit through mask */ +static COLD void update_common_fix_invalid(struct htable *ht, const void *p, size_t h) +{ + uintptr_t maskdiff; + + assert(ht->elems != 0); + + maskdiff = 0; + unset_another_common_bit(ht, &maskdiff, p); + fixup_table_common(ht, maskdiff); + + /* Now won't recurse */ + ht_add(ht, p, h); +} + +/* This does not expand the hash table, that's up to caller. */ +static void ht_add(struct htable *ht, const void *new, size_t h) +{ + size_t i; + uintptr_t perfect = ht_perfect_mask(ht); + + i = hash_bucket(ht, h); + + while (entry_is_valid(ht->table[i])) { + perfect = 0; + i = (i + 1) & ((1 << ht->bits)-1); + } + ht->table[i] = make_hval(ht, new, get_hash_ptr_bits(ht, h)|perfect); + if (!entry_is_valid(ht->table[i])) + update_common_fix_invalid(ht, new, h); +} + +static COLD bool double_table(struct htable *ht) +{ + unsigned int i; + size_t oldnum = (size_t)1 << ht->bits; + uintptr_t *oldtable, e; + + oldtable = ht->table; + ht->table = htable_alloc(ht, sizeof(size_t) << (ht->bits+1)); + if (!ht->table) { + ht->table = oldtable; + return false; + } + ht->bits++; + + /* If we lost our "perfect bit", get it back now. */ + if (ht->perfect_bitnum == NO_PERFECT_BIT && ht->common_mask) { + for (i = 0; i < sizeof(ht->common_mask) * CHAR_BIT; i++) { + if (ht->common_mask & ((size_t)2 << i)) { + ht->perfect_bitnum = i; + break; + } + } + } + + if (oldtable != &ht->common_bits) { + for (i = 0; i < oldnum; i++) { + if (entry_is_valid(e = oldtable[i])) { + void *p = get_raw_ptr(ht, e); + ht_add(ht, p, ht->rehash(p, ht->priv)); + } + } + htable_free(ht, oldtable); + } + ht->deleted = 0; + + (void)htable_debug(ht, HTABLE_LOC); + return true; +} + +static COLD void rehash_table(struct htable *ht) +{ + size_t start, i; + uintptr_t e, perfect = ht_perfect_mask(ht); + + /* Beware wrap cases: we need to start from first empty bucket. */ + for (start = 0; ht->table[start]; start++); + + for (i = 0; i < (size_t)1 << ht->bits; i++) { + size_t h = (i + start) & ((1 << ht->bits)-1); + e = ht->table[h]; + if (!e) + continue; + if (e == HTABLE_DELETED) + ht->table[h] = 0; + else if (!(e & perfect)) { + void *p = get_raw_ptr(ht, e); + ht->table[h] = 0; + ht_add(ht, p, ht->rehash(p, ht->priv)); + } + } + ht->deleted = 0; + (void)htable_debug(ht, HTABLE_LOC); +} + +/* We stole some bits, now we need to put them back... */ +static COLD void update_common(struct htable *ht, const void *p) +{ + uintptr_t maskdiff; + + if (ht->elems == 0) { + ht->common_mask = -1; + ht->common_bits = ((uintptr_t)p & ht->common_mask); + ht->perfect_bitnum = 0; + (void)htable_debug(ht, HTABLE_LOC); + return; + } + + /* Find bits which are unequal to old common set. */ + maskdiff = ht->common_bits ^ ((uintptr_t)p & ht->common_mask); + + fixup_table_common(ht, maskdiff); + (void)htable_debug(ht, HTABLE_LOC); +} + +bool htable_add_(struct htable *ht, size_t hash, const void *p) +{ + /* Cannot insert NULL, or (void *)1. */ + assert(p); + assert(entry_is_valid((uintptr_t)p)); + + /* Getting too full? */ + if (ht->elems+1 + ht->deleted > ht_max(ht)) { + /* If we're more than 1/8 deleted, clean those, + * otherwise double table size. */ + if (ht->deleted > ht_max_deleted(ht)) + rehash_table(ht); + else if (!double_table(ht)) + return false; + } + if (((uintptr_t)p & ht->common_mask) != ht->common_bits) + update_common(ht, p); + + ht_add(ht, p, hash); + ht->elems++; + return true; +} + +bool htable_del_(struct htable *ht, size_t h, const void *p) +{ + struct htable_iter i; + void *c; + + for (c = htable_firstval(ht,&i,h); c; c = htable_nextval(ht,&i,h)) { + if (c == p) { + htable_delval(ht, &i); + return true; + } + } + return false; +} + +void htable_delval_(struct htable *ht, struct htable_iter *i) +{ + assert(i->off < (size_t)1 << ht->bits); + assert(entry_is_valid(ht->table[i->off])); + + ht->elems--; + /* Cheap test: if the next bucket is empty, don't need delete marker */ + if (ht->table[hash_bucket(ht, i->off+1)] != 0) { + ht->table[i->off] = HTABLE_DELETED; + ht->deleted++; + } else + ht->table[i->off] = 0; +} + +void *htable_pick_(const struct htable *ht, size_t seed, struct htable_iter *i) +{ + void *e; + struct htable_iter unwanted; + + if (!i) + i = &unwanted; + i->off = seed % ((size_t)1 << ht->bits); + e = htable_next(ht, i); + if (!e) + e = htable_first(ht, i); + return e; +} + +struct htable *htable_check(const struct htable *ht, const char *abortstr) +{ + void *p; + struct htable_iter i; + size_t n = 0; + + /* Use non-DEBUG versions here, to avoid infinite recursion with + * CCAN_HTABLE_DEBUG! */ + for (p = htable_first_(ht, &i); p; p = htable_next_(ht, &i)) { + struct htable_iter i2; + void *c; + size_t h = ht->rehash(p, ht->priv); + bool found = false; + + n++; + + /* Open-code htable_get to avoid CCAN_HTABLE_DEBUG */ + for (c = htable_firstval_(ht, &i2, h); + c; + c = htable_nextval_(ht, &i2, h)) { + if (c == p) { + found = true; + break; + } + } + + if (!found) { + if (abortstr) { + fprintf(stderr, + "%s: element %p in position %zu" + " cannot find itself\n", + abortstr, p, i.off); + abort(); + } + return NULL; + } + } + if (n != ht->elems) { + if (abortstr) { + fprintf(stderr, + "%s: found %zu elems, expected %zu\n", + abortstr, n, ht->elems); + abort(); + } + return NULL; + } + + return (struct htable *)ht; +} diff --git a/nostrdb/ccan/ccan/htable/htable.h b/nostrdb/ccan/ccan/htable/htable.h new file mode 100644 index 000000000..faaf541bd --- /dev/null +++ b/nostrdb/ccan/ccan/htable/htable.h @@ -0,0 +1,290 @@ +/* Licensed under LGPLv2+ - see LICENSE file for details */ +#ifndef CCAN_HTABLE_H +#define CCAN_HTABLE_H +#include "config.h" +#include +#include +#include +#include + +/* Define CCAN_HTABLE_DEBUG for expensive debugging checks on each call. */ +#define HTABLE_LOC __FILE__ ":" stringify(__LINE__) +#ifdef CCAN_HTABLE_DEBUG +#define htable_debug(h, loc) htable_check((h), loc) +#else +#define htable_debug(h, loc) ((void)loc, h) +#endif + +/** + * struct htable - private definition of a htable. + * + * It's exposed here so you can put it in your structures and so we can + * supply inline functions. + */ +struct htable { + size_t (*rehash)(const void *elem, void *priv); + void *priv; + unsigned int bits, perfect_bitnum; + size_t elems, deleted; + /* These are the bits which are the same in all pointers. */ + uintptr_t common_mask, common_bits; + uintptr_t *table; +}; + +/** + * HTABLE_INITIALIZER - static initialization for a hash table. + * @name: name of this htable. + * @rehash: hash function to use for rehashing. + * @priv: private argument to @rehash function. + * + * This is useful for setting up static and global hash tables. + * + * Example: + * // For simplicity's sake, say hash value is contents of elem. + * static size_t rehash(const void *elem, void *unused) + * { + * (void)unused; + * return *(size_t *)elem; + * } + * static struct htable ht = HTABLE_INITIALIZER(ht, rehash, NULL); + */ +#define HTABLE_INITIALIZER(name, rehash, priv) \ + { rehash, priv, 0, 0, 0, 0, -1, 0, &name.common_bits } + +/** + * htable_init - initialize an empty hash table. + * @ht: the hash table to initialize + * @rehash: hash function to use for rehashing. + * @priv: private argument to @rehash function. + */ +void htable_init(struct htable *ht, + size_t (*rehash)(const void *elem, void *priv), void *priv); + +/** + * htable_init_sized - initialize an empty hash table of given size. + * @ht: the hash table to initialize + * @rehash: hash function to use for rehashing. + * @priv: private argument to @rehash function. + * @size: the number of element. + * + * If this returns false, @ht is still usable, but may need to do reallocation + * upon an add. If this returns true, it will not need to reallocate within + * @size htable_adds. + */ +bool htable_init_sized(struct htable *ht, + size_t (*rehash)(const void *elem, void *priv), + void *priv, size_t size); + +/** + * htable_count - count number of entries in a hash table. + * @ht: the hash table + */ +static inline size_t htable_count(const struct htable *ht) +{ + return ht->elems; +} + +/** + * htable_clear - empty a hash table. + * @ht: the hash table to clear + * + * This doesn't do anything to any pointers left in it. + */ +void htable_clear(struct htable *ht); + + +/** + * htable_check - check hash table for consistency + * @ht: the htable + * @abortstr: the location to print on aborting, or NULL. + * + * Because hash tables have redundant information, consistency checking that + * each element is in the correct location can be done. This is useful as a + * debugging check. If @abortstr is non-NULL, that will be printed in a + * diagnostic if the htable is inconsistent, and the function will abort. + * + * Returns the htable if it is consistent, NULL if not (it can never return + * NULL if @abortstr is set). + */ +struct htable *htable_check(const struct htable *ht, const char *abortstr); + +/** + * htable_copy - duplicate a hash table. + * @dst: the hash table to overwrite + * @src: the hash table to copy + * + * Only fails on out-of-memory. + * + * Equivalent to (but faster than): + * if (!htable_init_sized(dst, src->rehash, src->priv, 1U << src->bits)) + * return false; + * v = htable_first(src, &i); + * while (v) { + * htable_add(dst, v); + * v = htable_next(src, i); + * } + * return true; + */ +#define htable_copy(dst, src) htable_copy_(dst, htable_debug(src, HTABLE_LOC)) +bool htable_copy_(struct htable *dst, const struct htable *src); + +/** + * htable_add - add a pointer into a hash table. + * @ht: the htable + * @hash: the hash value of the object + * @p: the non-NULL pointer (also cannot be (void *)1). + * + * Also note that this can only fail due to allocation failure. Otherwise, it + * returns true. + */ +#define htable_add(ht, hash, p) \ + htable_add_(htable_debug(ht, HTABLE_LOC), hash, p) +bool htable_add_(struct htable *ht, size_t hash, const void *p); + +/** + * htable_del - remove a pointer from a hash table + * @ht: the htable + * @hash: the hash value of the object + * @p: the pointer + * + * Returns true if the pointer was found (and deleted). + */ +#define htable_del(ht, hash, p) \ + htable_del_(htable_debug(ht, HTABLE_LOC), hash, p) +bool htable_del_(struct htable *ht, size_t hash, const void *p); + +/** + * struct htable_iter - iterator or htable_first or htable_firstval etc. + * + * This refers to a location inside the hashtable. + */ +struct htable_iter { + size_t off; +}; + +/** + * htable_firstval - find a candidate for a given hash value + * @htable: the hashtable + * @i: the struct htable_iter to initialize + * @hash: the hash value + * + * You'll need to check the value is what you want; returns NULL if none. + * See Also: + * htable_delval() + */ +#define htable_firstval(htable, i, hash) \ + htable_firstval_(htable_debug(htable, HTABLE_LOC), i, hash) + +void *htable_firstval_(const struct htable *htable, + struct htable_iter *i, size_t hash); + +/** + * htable_nextval - find another candidate for a given hash value + * @htable: the hashtable + * @i: the struct htable_iter to initialize + * @hash: the hash value + * + * You'll need to check the value is what you want; returns NULL if no more. + */ +#define htable_nextval(htable, i, hash) \ + htable_nextval_(htable_debug(htable, HTABLE_LOC), i, hash) +void *htable_nextval_(const struct htable *htable, + struct htable_iter *i, size_t hash); + +/** + * htable_get - find an entry in the hash table + * @ht: the hashtable + * @h: the hash value of the entry + * @cmp: the comparison function + * @ptr: the pointer to hand to the comparison function. + * + * Convenient inline wrapper for htable_firstval/htable_nextval loop. + */ +static inline void *htable_get(const struct htable *ht, + size_t h, + bool (*cmp)(const void *candidate, void *ptr), + const void *ptr) +{ + struct htable_iter i; + void *c; + + for (c = htable_firstval(ht,&i,h); c; c = htable_nextval(ht,&i,h)) { + if (cmp(c, (void *)ptr)) + return c; + } + return NULL; +} + +/** + * htable_first - find an entry in the hash table + * @ht: the hashtable + * @i: the struct htable_iter to initialize + * + * Get an entry in the hashtable; NULL if empty. + */ +#define htable_first(htable, i) \ + htable_first_(htable_debug(htable, HTABLE_LOC), i) +void *htable_first_(const struct htable *htable, struct htable_iter *i); + +/** + * htable_next - find another entry in the hash table + * @ht: the hashtable + * @i: the struct htable_iter to use + * + * Get another entry in the hashtable; NULL if all done. + * This is usually used after htable_first or prior non-NULL htable_next. + */ +#define htable_next(htable, i) \ + htable_next_(htable_debug(htable, HTABLE_LOC), i) +void *htable_next_(const struct htable *htable, struct htable_iter *i); + +/** + * htable_prev - find the previous entry in the hash table + * @ht: the hashtable + * @i: the struct htable_iter to use + * + * Get previous entry in the hashtable; NULL if all done. + * + * "previous" here only means the item that would have been returned by + * htable_next() before the item it returned most recently. + * + * This is usually used in the middle of (or after) a htable_next iteration and + * to "unwind" actions taken. + */ +#define htable_prev(htable, i) \ + htable_prev_(htable_debug(htable, HTABLE_LOC), i) +void *htable_prev_(const struct htable *htable, struct htable_iter *i); + +/** + * htable_delval - remove an iterated pointer from a hash table + * @ht: the htable + * @i: the htable_iter + * + * Usually used to delete a hash entry after it has been found with + * htable_firstval etc. + */ +#define htable_delval(htable, i) \ + htable_delval_(htable_debug(htable, HTABLE_LOC), i) +void htable_delval_(struct htable *ht, struct htable_iter *i); + +/** + * htable_pick - set iterator to a random valid entry. + * @ht: the htable + * @seed: a random number to use. + * @i: the htable_iter which is output (or NULL). + * + * Usually used with htable_delval to delete a random entry. Returns + * NULL iff the table is empty, otherwise a random entry. + */ +#define htable_pick(htable, seed, i) \ + htable_pick_(htable_debug(htable, HTABLE_LOC), seed, i) +void *htable_pick_(const struct htable *ht, size_t seed, struct htable_iter *i); + +/** + * htable_set_allocator - set calloc/free functions. + * @alloc: allocator to use, must zero memory! + * @free: unallocator to use (@p is NULL or a return from @alloc) + */ +void htable_set_allocator(void *(*alloc)(struct htable *, size_t len), + void (*free)(struct htable *, void *p)); +#endif /* CCAN_HTABLE_H */ diff --git a/nostrdb/ccan/ccan/htable/htable_type.h b/nostrdb/ccan/ccan/htable/htable_type.h new file mode 100644 index 000000000..0aacb7f33 --- /dev/null +++ b/nostrdb/ccan/ccan/htable/htable_type.h @@ -0,0 +1,188 @@ +/* Licensed under LGPLv2+ - see LICENSE file for details */ +#ifndef CCAN_HTABLE_TYPE_H +#define CCAN_HTABLE_TYPE_H +#include +#include +#include "config.h" + +/** + * HTABLE_DEFINE_TYPE - create a set of htable ops for a type + * @type: a type whose pointers will be values in the hash. + * @keyof: a function/macro to extract a key: @keyof(const type *elem) + * @hashfn: a hash function for a @key: size_t @hashfn(const *) + * @eqfn: an equality function keys: bool @eqfn(const type *, const *) + * @prefix: a prefix for all the functions to define (of form _*) + * + * NULL values may not be placed into the hash table. + * + * This defines the type hashtable type and an iterator type: + * struct ; + * struct _iter; + * + * It also defines initialization and freeing functions: + * void _init(struct *); + * bool _init_sized(struct *, size_t); + * void _clear(struct *); + * bool _copy(struct *dst, const struct *src); + * + * Count entries: + * size_t _count(const struct *ht); + * + * Add function only fails if we run out of memory: + * bool _add(struct *ht, const *e); + * + * Delete and delete-by key return true if it was in the set: + * bool _del(struct *ht, const *e); + * bool _delkey(struct *ht, const *k); + * + * Delete by iterator: + * bool _delval(struct *ht, struct _iter *i); + * + * Find and return the (first) matching element, or NULL: + * type *_get(const struct @name *ht, const *k); + * + * Find and return all matching elements, or NULL: + * type *_getfirst(const struct @name *ht, const *k, + * struct _iter *i); + * type *_getnext(const struct @name *ht, const *k, + * struct _iter *i); + * + * Iteration over hashtable is also supported: + * type *_first(const struct *ht, struct _iter *i); + * type *_next(const struct *ht, struct _iter *i); + * type *_prev(const struct *ht, struct _iter *i); + * type *_pick(const struct *ht, size_t seed, + * struct _iter *i); + * It's currently safe to iterate over a changing hashtable, but you might + * miss an element. Iteration isn't very efficient, either. + * + * You can use HTABLE_INITIALIZER like so: + * struct ht = { HTABLE_INITIALIZER(ht.raw, _hash, NULL) }; + */ +#define HTABLE_DEFINE_TYPE(type, keyof, hashfn, eqfn, name) \ + struct name { struct htable raw; }; \ + struct name##_iter { struct htable_iter i; }; \ + static inline size_t name##_hash(const void *elem, void *priv) \ + { \ + (void)priv; \ + return hashfn(keyof((const type *)elem)); \ + } \ + static inline UNNEEDED void name##_init(struct name *ht) \ + { \ + htable_init(&ht->raw, name##_hash, NULL); \ + } \ + static inline UNNEEDED bool name##_init_sized(struct name *ht, \ + size_t s) \ + { \ + return htable_init_sized(&ht->raw, name##_hash, NULL, s); \ + } \ + static inline UNNEEDED size_t name##_count(const struct name *ht) \ + { \ + return htable_count(&ht->raw); \ + } \ + static inline UNNEEDED void name##_clear(struct name *ht) \ + { \ + htable_clear(&ht->raw); \ + } \ + static inline UNNEEDED bool name##_copy(struct name *dst, \ + const struct name *src) \ + { \ + return htable_copy(&dst->raw, &src->raw); \ + } \ + static inline bool name##_add(struct name *ht, const type *elem) \ + { \ + return htable_add(&ht->raw, hashfn(keyof(elem)), elem); \ + } \ + static inline UNNEEDED bool name##_del(struct name *ht, \ + const type *elem) \ + { \ + return htable_del(&ht->raw, hashfn(keyof(elem)), elem); \ + } \ + static inline UNNEEDED type *name##_get(const struct name *ht, \ + const HTABLE_KTYPE(keyof, type) k) \ + { \ + struct htable_iter i; \ + size_t h = hashfn(k); \ + void *c; \ + \ + for (c = htable_firstval(&ht->raw,&i,h); \ + c; \ + c = htable_nextval(&ht->raw,&i,h)) { \ + if (eqfn(c, k)) \ + return c; \ + } \ + return NULL; \ + } \ + static inline UNNEEDED type *name##_getmatch_(const struct name *ht, \ + const HTABLE_KTYPE(keyof, type) k, \ + size_t h, \ + type *v, \ + struct name##_iter *iter) \ + { \ + while (v) { \ + if (eqfn(v, k)) \ + break; \ + v = htable_nextval(&ht->raw, &iter->i, h); \ + } \ + return v; \ + } \ + static inline UNNEEDED type *name##_getfirst(const struct name *ht, \ + const HTABLE_KTYPE(keyof, type) k, \ + struct name##_iter *iter) \ + { \ + size_t h = hashfn(k); \ + type *v = htable_firstval(&ht->raw, &iter->i, h); \ + return name##_getmatch_(ht, k, h, v, iter); \ + } \ + static inline UNNEEDED type *name##_getnext(const struct name *ht, \ + const HTABLE_KTYPE(keyof, type) k, \ + struct name##_iter *iter) \ + { \ + size_t h = hashfn(k); \ + type *v = htable_nextval(&ht->raw, &iter->i, h); \ + return name##_getmatch_(ht, k, h, v, iter); \ + } \ + static inline UNNEEDED bool name##_delkey(struct name *ht, \ + const HTABLE_KTYPE(keyof, type) k) \ + { \ + type *elem = name##_get(ht, k); \ + if (elem) \ + return name##_del(ht, elem); \ + return false; \ + } \ + static inline UNNEEDED void name##_delval(struct name *ht, \ + struct name##_iter *iter) \ + { \ + htable_delval(&ht->raw, &iter->i); \ + } \ + static inline UNNEEDED type *name##_pick(const struct name *ht, \ + size_t seed, \ + struct name##_iter *iter) \ + { \ + return htable_pick(&ht->raw, seed, iter ? &iter->i : NULL); \ + } \ + static inline UNNEEDED type *name##_first(const struct name *ht, \ + struct name##_iter *iter) \ + { \ + return htable_first(&ht->raw, &iter->i); \ + } \ + static inline UNNEEDED type *name##_next(const struct name *ht, \ + struct name##_iter *iter) \ + { \ + return htable_next(&ht->raw, &iter->i); \ + } \ + static inline UNNEEDED type *name##_prev(const struct name *ht, \ + struct name##_iter *iter) \ + { \ + return htable_prev(&ht->raw, &iter->i); \ + } + +#if HAVE_TYPEOF +#define HTABLE_KTYPE(keyof, type) typeof(keyof((const type *)NULL)) +#else +/* Assumes keys are a pointer: if not, override. */ +#ifndef HTABLE_KTYPE +#define HTABLE_KTYPE(keyof, type) void * +#endif +#endif +#endif /* CCAN_HTABLE_TYPE_H */ diff --git a/nostrdb/ccan/ccan/htable/tools/Makefile b/nostrdb/ccan/ccan/htable/tools/Makefile new file mode 100644 index 000000000..c8a428a75 --- /dev/null +++ b/nostrdb/ccan/ccan/htable/tools/Makefile @@ -0,0 +1,41 @@ +CCANDIR=../../.. +CFLAGS=-Wall -Werror -O3 -I$(CCANDIR) +#CFLAGS=-Wall -Werror -g -I$(CCANDIR) + +CCAN_OBJS:=ccan-tal.o ccan-tal-str.o ccan-tal-grab_file.o ccan-take.o ccan-time.o ccan-str.o ccan-noerr.o ccan-list.o + +all: speed stringspeed hsearchspeed density + +speed: speed.o hash.o $(CCAN_OBJS) +density: density.o hash.o $(CCAN_OBJS) + +speed.o: speed.c ../htable.h ../htable.c + +hash.o: ../../hash/hash.c + $(CC) $(CFLAGS) -c -o $@ $< + +stringspeed: stringspeed.o hash.o $(CCAN_OBJS) + +stringspeed.o: speed.c ../htable.h ../htable.c + +hsearchspeed: hsearchspeed.o $(CCAN_OBJS) + +clean: + rm -f stringspeed speed hsearchspeed *.o + +ccan-tal.o: $(CCANDIR)/ccan/tal/tal.c + $(CC) $(CFLAGS) -c -o $@ $< +ccan-tal-str.o: $(CCANDIR)/ccan/tal/str/str.c + $(CC) $(CFLAGS) -c -o $@ $< +ccan-take.o: $(CCANDIR)/ccan/take/take.c + $(CC) $(CFLAGS) -c -o $@ $< +ccan-tal-grab_file.o: $(CCANDIR)/ccan/tal/grab_file/grab_file.c + $(CC) $(CFLAGS) -c -o $@ $< +ccan-time.o: $(CCANDIR)/ccan/time/time.c + $(CC) $(CFLAGS) -c -o $@ $< +ccan-list.o: $(CCANDIR)/ccan/list/list.c + $(CC) $(CFLAGS) -c -o $@ $< +ccan-str.o: $(CCANDIR)/ccan/str/str.c + $(CC) $(CFLAGS) -c -o $@ $< +ccan-noerr.o: $(CCANDIR)/ccan/noerr/noerr.c + $(CC) $(CFLAGS) -c -o $@ $< diff --git a/nostrdb/ccan/ccan/htable/tools/density.c b/nostrdb/ccan/ccan/htable/tools/density.c new file mode 100644 index 000000000..5f7400b9e --- /dev/null +++ b/nostrdb/ccan/ccan/htable/tools/density.c @@ -0,0 +1,107 @@ +/* Density measurements for hashtables. */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* We don't actually hash objects: we put values in as if they were ptrs */ +static uintptr_t key(const ptrint_t *obj) +{ + return ptr2int(obj); +} + +static size_t hash_uintptr(uintptr_t key) +{ + return hashl(&key, 1, 0); +} + +static bool cmp(const ptrint_t *p, uintptr_t k) +{ + return key(p) == k; +} + +HTABLE_DEFINE_TYPE(ptrint_t, key, hash_uintptr, cmp, htable_ptrint); + +/* Nanoseconds per operation */ +static size_t normalize(const struct timeabs *start, + const struct timeabs *stop, + unsigned int num) +{ + return time_to_nsec(time_divide(time_between(*stop, *start), num)); +} + +static size_t average_run(const struct htable_ptrint *ht, size_t count, size_t *longest) +{ + size_t i, total = 0; + + *longest = 0; + for (i = 0; i < count; i++) { + size_t h = hash_uintptr(i + 2); + size_t run = 1; + + while (get_raw_ptr(&ht->raw, ht->raw.table[h % ((size_t)1 << ht->raw.bits)]) != int2ptr(i + 2)) { + h++; + run++; + } + total += run; + if (run > *longest) + *longest = run; + } + return total / count; +} + +int main(int argc, char *argv[]) +{ + unsigned int i; + size_t num; + struct timeabs start, stop; + struct htable_ptrint ht; + + if (argc != 2) + errx(1, "Usage: density "); + + num = atoi(argv[1]); + + printf("Total buckets, buckets used, nanoseconds search time per element, avg run, longest run\n"); + for (i = 1; i <= 99; i++) { + uintptr_t j; + struct htable_ptrint_iter it; + size_t count, avg_run, longest_run; + ptrint_t *p; + + htable_ptrint_init_sized(&ht, num * 3 / 4); + assert((1 << ht.raw.bits) == num); + + /* Can't put 0 or 1 in the hash table: multiply by a prime. */ + for (j = 0; j < num * i / 100; j++) { + htable_ptrint_add(&ht, int2ptr(j + 2)); + /* stop it from doubling! */ + ht.raw.elems = num / 2; + } + /* Must not have changed! */ + assert((1 << ht.raw.bits) == num); + + /* Clean cache */ + count = 0; + for (p = htable_ptrint_first(&ht, &it); p; p = htable_ptrint_next(&ht, &it)) + count++; + assert(count == num * i / 100); + start = time_now(); + for (j = 0; j < count; j++) + assert(htable_ptrint_get(&ht, j + 2)); + stop = time_now(); + avg_run = average_run(&ht, count, &longest_run); + printf("%zu,%zu,%zu,%zu,%zu\n", + num, count, normalize(&start, &stop, count), avg_run, longest_run); + fflush(stdout); + htable_ptrint_clear(&ht); + } + + return 0; +} diff --git a/nostrdb/ccan/ccan/htable/tools/hsearchspeed.c b/nostrdb/ccan/ccan/htable/tools/hsearchspeed.c new file mode 100644 index 000000000..88280114f --- /dev/null +++ b/nostrdb/ccan/ccan/htable/tools/hsearchspeed.c @@ -0,0 +1,95 @@ +/* Simple speed tests for a hash of strings using hsearch */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* Nanoseconds per operation */ +static size_t normalize(const struct timeabs *start, + const struct timeabs *stop, + unsigned int num) +{ + return time_to_nsec(time_divide(time_between(*stop, *start), num)); +} + +int main(int argc, char *argv[]) +{ + size_t i, j, num; + struct timeabs start, stop; + char **w; + ENTRY *words, *misswords; + + w = tal_strsplit(NULL, grab_file(NULL, + argv[1] ? argv[1] : "/usr/share/dict/words"), "\n", STR_NO_EMPTY); + num = tal_count(w) - 1; + printf("%zu words\n", num); + + hcreate(num+num/3); + + words = tal_arr(w, ENTRY, num); + for (i = 0; i < num; i++) { + words[i].key = w[i]; + words[i].data = words[i].key; + } + + /* Append and prepend last char for miss testing. */ + misswords = tal_arr(w, ENTRY, num); + for (i = 0; i < num; i++) { + char lastc; + if (strlen(w[i])) + lastc = w[i][strlen(w[i])-1]; + else + lastc = 'z'; + misswords[i].key = tal_fmt(misswords, "%c%s%c%c", + lastc, w[i], lastc, lastc); + } + + printf("#01: Initial insert: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + hsearch(words[i], ENTER); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#02: Initial lookup (match): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + if (hsearch(words[i], FIND)->data != words[i].data) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#03: Initial lookup (miss): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) { + if (hsearch(misswords[i], FIND)) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + /* Lookups in order are very cache-friendly for judy; try random */ + printf("#04: Initial lookup (random): "); + fflush(stdout); + start = time_now(); + for (i = 0, j = 0; i < num; i++, j = (j + 10007) % num) + if (hsearch(words[i], FIND)->data != words[i].data) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + return 0; +} diff --git a/nostrdb/ccan/ccan/htable/tools/speed.c b/nostrdb/ccan/ccan/htable/tools/speed.c new file mode 100644 index 000000000..e185b6f69 --- /dev/null +++ b/nostrdb/ccan/ccan/htable/tools/speed.c @@ -0,0 +1,370 @@ +/* Simple speed tests for hashtables. */ +#include +#include +#include +#include +#include +#include +#include +#include + +static size_t hashcount; +struct object { + /* The key. */ + unsigned int key; + + /* Some contents. Doubles as consistency check. */ + struct object *self; +}; + +static const unsigned int *objkey(const struct object *obj) +{ + return &obj->key; +} + +static size_t hash_obj(const unsigned int *key) +{ + hashcount++; + return hashl(key, 1, 0); +} + +static bool cmp(const struct object *object, const unsigned int *key) +{ + return object->key == *key; +} + +HTABLE_DEFINE_TYPE(struct object, objkey, hash_obj, cmp, htable_obj); + +static unsigned int popcount(unsigned long val) +{ +#if HAVE_BUILTIN_POPCOUNTL + return __builtin_popcountl(val); +#else + if (sizeof(long) == sizeof(u64)) { + u64 v = val; + v = (v & 0x5555555555555555ULL) + + ((v >> 1) & 0x5555555555555555ULL); + v = (v & 0x3333333333333333ULL) + + ((v >> 1) & 0x3333333333333333ULL); + v = (v & 0x0F0F0F0F0F0F0F0FULL) + + ((v >> 1) & 0x0F0F0F0F0F0F0F0FULL); + v = (v & 0x00FF00FF00FF00FFULL) + + ((v >> 1) & 0x00FF00FF00FF00FFULL); + v = (v & 0x0000FFFF0000FFFFULL) + + ((v >> 1) & 0x0000FFFF0000FFFFULL); + v = (v & 0x00000000FFFFFFFFULL) + + ((v >> 1) & 0x00000000FFFFFFFFULL); + return v; + } + val = (val & 0x55555555ULL) + ((val >> 1) & 0x55555555ULL); + val = (val & 0x33333333ULL) + ((val >> 1) & 0x33333333ULL); + val = (val & 0x0F0F0F0FULL) + ((val >> 1) & 0x0F0F0F0FULL); + val = (val & 0x00FF00FFULL) + ((val >> 1) & 0x00FF00FFULL); + val = (val & 0x0000FFFFULL) + ((val >> 1) & 0x0000FFFFULL); + return val; +#endif +} + +static size_t perfect(const struct htable *ht) +{ + size_t i, placed_perfect = 0; + + for (i = 0; i < ((size_t)1 << ht->bits); i++) { + if (!entry_is_valid(ht->table[i])) + continue; + if (hash_bucket(ht, ht->rehash(get_raw_ptr(ht, ht->table[i]), + ht->priv)) == i) { + assert((ht->table[i] & ht_perfect_mask(ht)) + == ht_perfect_mask(ht)); + placed_perfect++; + } + } + return placed_perfect; +} + +static size_t count_deleted(const struct htable *ht) +{ + size_t i, delete_markers = 0; + + for (i = 0; i < ((size_t)1 << ht->bits); i++) { + if (ht->table[i] == HTABLE_DELETED) + delete_markers++; + } + return delete_markers; +} + +/* Nanoseconds per operation */ +static size_t normalize(const struct timeabs *start, + const struct timeabs *stop, + unsigned int num) +{ + return time_to_nsec(time_divide(time_between(*stop, *start), num)); +} + +static size_t worst_run(struct htable *ht, size_t *deleted) +{ + size_t longest = 0, len = 0, this_del = 0, i; + + *deleted = 0; + /* This doesn't take into account end-wrap, but gives an idea. */ + for (i = 0; i < ((size_t)1 << ht->bits); i++) { + if (ht->table[i]) { + len++; + if (ht->table[i] == HTABLE_DELETED) + this_del++; + } else { + if (len > longest) { + longest = len; + *deleted = this_del; + } + len = 0; + this_del = 0; + } + } + return longest; +} + +int main(int argc, char *argv[]) +{ + struct object *objs; + unsigned int i, j; + size_t num, deleted; + struct timeabs start, stop; + struct htable_obj ht; + bool make_dumb = false; + + if (argv[1] && strcmp(argv[1], "--dumb") == 0) { + argv++; + make_dumb = true; + } + num = argv[1] ? atoi(argv[1]) : 1000000; + objs = calloc(num, sizeof(objs[0])); + + for (i = 0; i < num; i++) { + objs[i].key = i; + objs[i].self = &objs[i]; + } + + htable_obj_init(&ht); + + printf("Initial insert: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + htable_obj_add(&ht, objs[i].self); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + printf("Details: hash size %u, mask bits %u, perfect %.0f%%\n", + 1U << ht.raw.bits, popcount(ht.raw.common_mask), + perfect(&ht.raw) * 100.0 / ht.raw.elems); + + if (make_dumb) { + /* Screw with mask, to hobble us. */ + update_common(&ht.raw, (void *)~ht.raw.common_bits); + printf("Details: DUMB MODE: mask bits %u\n", + popcount(ht.raw.common_mask)); + } + + printf("Initial lookup (match): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + if (htable_obj_get(&ht, &i)->self != objs[i].self) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("Initial lookup (miss): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) { + unsigned int n = i + num; + if (htable_obj_get(&ht, &n)) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + /* Lookups in order are very cache-friendly for judy; try random */ + printf("Initial lookup (random): "); + fflush(stdout); + start = time_now(); + for (i = 0, j = 0; i < num; i++, j = (j + 10007) % num) + if (htable_obj_get(&ht, &j)->self != &objs[j]) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + hashcount = 0; + printf("Initial delete all: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + if (!htable_obj_del(&ht, objs[i].self)) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + printf("Details: rehashes %zu\n", hashcount); + + printf("Initial re-inserting: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + htable_obj_add(&ht, objs[i].self); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + hashcount = 0; + printf("Deleting first half: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i+=2) + if (!htable_obj_del(&ht, objs[i].self)) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("Details: rehashes %zu, delete markers %zu\n", + hashcount, count_deleted(&ht.raw)); + + printf("Adding (a different) half: "); + fflush(stdout); + + for (i = 0; i < num; i+=2) + objs[i].key = num+i; + + start = time_now(); + for (i = 0; i < num; i+=2) + htable_obj_add(&ht, objs[i].self); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("Details: delete markers %zu, perfect %.0f%%\n", + count_deleted(&ht.raw), perfect(&ht.raw) * 100.0 / ht.raw.elems); + + printf("Lookup after half-change (match): "); + fflush(stdout); + start = time_now(); + for (i = 1; i < num; i+=2) + if (htable_obj_get(&ht, &i)->self != objs[i].self) + abort(); + for (i = 0; i < num; i+=2) { + unsigned int n = i + num; + if (htable_obj_get(&ht, &n)->self != objs[i].self) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("Lookup after half-change (miss): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) { + unsigned int n = i + num * 2; + if (htable_obj_get(&ht, &n)) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + /* Hashtables with delete markers can fill with markers over time. + * so do some changes to see how it operates in long-term. */ + for (i = 0; i < 5; i++) { + if (i == 0) { + /* We don't measure this: jmap is different. */ + printf("Details: initial churn\n"); + } else { + printf("Churning %s time: ", + i == 1 ? "second" + : i == 2 ? "third" + : i == 3 ? "fourth" + : "fifth"); + fflush(stdout); + } + start = time_now(); + for (j = 0; j < num; j++) { + if (!htable_obj_del(&ht, &objs[j])) + abort(); + objs[j].key = num*i+j; + if (!htable_obj_add(&ht, &objs[j])) + abort(); + } + stop = time_now(); + if (i != 0) + printf(" %zu ns\n", normalize(&start, &stop, num)); + } + + /* Spread out the keys more to try to make it harder. */ + printf("Details: reinserting with spread\n"); + for (i = 0; i < num; i++) { + if (!htable_obj_del(&ht, objs[i].self)) + abort(); + objs[i].key = num * 5 + i * 9; + if (!htable_obj_add(&ht, objs[i].self)) + abort(); + } + printf("Details: delete markers %zu, perfect %.0f%%\n", + count_deleted(&ht.raw), perfect(&ht.raw) * 100.0 / ht.raw.elems); + i = worst_run(&ht.raw, &deleted); + printf("Details: worst run %u (%zu deleted)\n", i, deleted); + + printf("Lookup after churn & spread (match): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) { + unsigned int n = num * 5 + i * 9; + if (htable_obj_get(&ht, &n)->self != objs[i].self) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("Lookup after churn & spread (miss): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) { + unsigned int n = num * (5 + 9) + i * 9; + if (htable_obj_get(&ht, &n)) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("Lookup after churn & spread (random): "); + fflush(stdout); + start = time_now(); + for (i = 0, j = 0; i < num; i++, j = (j + 10007) % num) { + unsigned int n = num * 5 + j * 9; + if (htable_obj_get(&ht, &n)->self != &objs[j]) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + hashcount = 0; + printf("Deleting half after churn & spread: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i+=2) + if (!htable_obj_del(&ht, objs[i].self)) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("Adding (a different) half after churn & spread: "); + fflush(stdout); + + for (i = 0; i < num; i+=2) + objs[i].key = num*6+i*9; + + start = time_now(); + for (i = 0; i < num; i+=2) + htable_obj_add(&ht, objs[i].self); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("Details: delete markers %zu, perfect %.0f%%\n", + count_deleted(&ht.raw), perfect(&ht.raw) * 100.0 / ht.raw.elems); + + return 0; +} diff --git a/nostrdb/ccan/ccan/htable/tools/stringspeed.c b/nostrdb/ccan/ccan/htable/tools/stringspeed.c new file mode 100644 index 000000000..c6ca10f52 --- /dev/null +++ b/nostrdb/ccan/ccan/htable/tools/stringspeed.c @@ -0,0 +1,240 @@ +/* Simple speed tests for a hash of strings. */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static size_t hashcount; + +static const char *strkey(const char *str) +{ + return str; +} + +static size_t hash_str(const char *key) +{ + hashcount++; + return hash(key, strlen(key), 0); +} + +static bool cmp(const char *obj, const char *key) +{ + return strcmp(obj, key) == 0; +} + +HTABLE_DEFINE_TYPE(char, strkey, hash_str, cmp, htable_str); + +/* Nanoseconds per operation */ +static size_t normalize(const struct timeabs *start, + const struct timeabs *stop, + unsigned int num) +{ + return time_to_nsec(time_divide(time_between(*stop, *start), num)); +} + +int main(int argc, char *argv[]) +{ + size_t i, j, num; + struct timeabs start, stop; + struct htable_str ht; + char **words, **misswords; + + words = tal_strsplit(NULL, grab_file(NULL, + argv[1] ? argv[1] : "/usr/share/dict/words"), "\n", + STR_NO_EMPTY); + htable_str_init(&ht); + num = tal_count(words) - 1; + /* Note that on my system, num is just > 98304, where we double! */ + printf("%zu words\n", num); + + /* Append and prepend last char for miss testing. */ + misswords = tal_arr(words, char *, num); + for (i = 0; i < num; i++) { + char lastc; + if (strlen(words[i])) + lastc = words[i][strlen(words[i])-1]; + else + lastc = 'z'; + misswords[i] = tal_fmt(misswords, "%c%s%c%c", + lastc, words[i], lastc, lastc); + } + + printf("#01: Initial insert: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + htable_str_add(&ht, words[i]); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("Bytes allocated: %zu\n", + sizeof(ht.raw.table[0]) << ht.raw.bits); + + printf("#02: Initial lookup (match): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + if (htable_str_get(&ht, words[i]) != words[i]) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#03: Initial lookup (miss): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) { + if (htable_str_get(&ht, misswords[i])) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + /* Lookups in order are very cache-friendly for judy; try random */ + printf("#04: Initial lookup (random): "); + fflush(stdout); + start = time_now(); + for (i = 0, j = 0; i < num; i++, j = (j + 10007) % num) + if (htable_str_get(&ht, words[j]) != words[j]) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + hashcount = 0; + printf("#05: Initial delete all: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + if (!htable_str_del(&ht, words[i])) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#06: Initial re-inserting: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + htable_str_add(&ht, words[i]); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + hashcount = 0; + printf("#07: Deleting first half: "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i+=2) + if (!htable_str_del(&ht, words[i])) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#08: Adding (a different) half: "); + fflush(stdout); + + start = time_now(); + for (i = 0; i < num; i+=2) + htable_str_add(&ht, misswords[i]); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#09: Lookup after half-change (match): "); + fflush(stdout); + start = time_now(); + for (i = 1; i < num; i+=2) + if (htable_str_get(&ht, words[i]) != words[i]) + abort(); + for (i = 0; i < num; i+=2) { + if (htable_str_get(&ht, misswords[i]) != misswords[i]) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#10: Lookup after half-change (miss): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i+=2) + if (htable_str_get(&ht, words[i])) + abort(); + for (i = 1; i < num; i+=2) { + if (htable_str_get(&ht, misswords[i])) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + /* Hashtables with delete markers can fill with markers over time. + * so do some changes to see how it operates in long-term. */ + printf("#11: Churn 1: "); + start = time_now(); + for (j = 0; j < num; j+=2) { + if (!htable_str_del(&ht, misswords[j])) + abort(); + if (!htable_str_add(&ht, words[j])) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#12: Churn 2: "); + start = time_now(); + for (j = 1; j < num; j+=2) { + if (!htable_str_del(&ht, words[j])) + abort(); + if (!htable_str_add(&ht, misswords[j])) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#13: Churn 3: "); + start = time_now(); + for (j = 1; j < num; j+=2) { + if (!htable_str_del(&ht, misswords[j])) + abort(); + if (!htable_str_add(&ht, words[j])) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + /* Now it's back to normal... */ + printf("#14: Post-Churn lookup (match): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) + if (htable_str_get(&ht, words[i]) != words[i]) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + printf("#15: Post-Churn lookup (miss): "); + fflush(stdout); + start = time_now(); + for (i = 0; i < num; i++) { + if (htable_str_get(&ht, misswords[i])) + abort(); + } + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + /* Lookups in order are very cache-friendly for judy; try random */ + printf("#16: Post-Churn lookup (random): "); + fflush(stdout); + start = time_now(); + for (i = 0, j = 0; i < num; i++, j = (j + 10007) % num) + if (htable_str_get(&ht, words[j]) != words[j]) + abort(); + stop = time_now(); + printf(" %zu ns\n", normalize(&start, &stop, num)); + + return 0; +} diff --git a/nostrdb/ccan/ccan/likely/LICENSE b/nostrdb/ccan/ccan/likely/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/likely/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/likely/_info b/nostrdb/ccan/ccan/likely/_info new file mode 100644 index 000000000..095ed2f7b --- /dev/null +++ b/nostrdb/ccan/ccan/likely/_info @@ -0,0 +1,57 @@ +#include "config.h" +#include +#include + +/** + * likely - macros for annotating likely/unlikely branches in the code + * + * Inspired by Andi Kleen's macros for the Linux Kernel, these macros + * help you annotate rare paths in your code for the convenience of the + * compiler and the reader. + * + * With CCAN_LIKELY_DEBUG defined, it provides statistics for each + * likely()/unlikely() call (but note that this requires LGPL dependencies). + * + * License: CC0 (Public domain) + * Author: Rusty Russell + * + * Example: + * #include + * #include + * + * int main(int argc, char *argv[]) + * { + * // This example is silly: the compiler knows exit() is unlikely. + * if (unlikely(argc == 1)) { + * fprintf(stderr, "Usage: %s ...\n", argv[0]); + * return 1; + * } + * for (argc++; argv[argc]; argc++) + * printf("%s\n", argv[argc]); + * return 0; + * } + */ +int main(int argc, char *argv[]) +{ + /* Expect exactly one argument */ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { +#ifdef CCAN_LIKELY_DEBUG + printf("ccan/str\n"); + printf("ccan/htable\n"); + printf("ccan/hash\n"); +#endif + return 0; + } + if (strcmp(argv[1], "testdepends") == 0) { +#ifndef CCAN_LIKELY_DEBUG + printf("ccan/str\n"); + printf("ccan/htable\n"); + printf("ccan/hash\n"); +#endif + return 0; + } + return 1; +} diff --git a/nostrdb/ccan/ccan/likely/likely.c b/nostrdb/ccan/ccan/likely/likely.c new file mode 100644 index 000000000..83e8d6fbe --- /dev/null +++ b/nostrdb/ccan/ccan/likely/likely.c @@ -0,0 +1,136 @@ +/* CC0 (Public domain) - see LICENSE file for details. */ +#ifdef CCAN_LIKELY_DEBUG +#include +#include +#include +#include +#include +struct trace { + const char *condstr; + const char *file; + unsigned int line; + bool expect; + unsigned long count, right; +}; + +static size_t hash_trace(const struct trace *trace) +{ + return hash(trace->condstr, strlen(trace->condstr), + hash(trace->file, strlen(trace->file), + trace->line + trace->expect)); +} + +static bool trace_eq(const struct trace *t1, const struct trace *t2) +{ + return t1->condstr == t2->condstr + && t1->file == t2->file + && t1->line == t2->line + && t1->expect == t2->expect; +} + +/* struct thash */ +HTABLE_DEFINE_TYPE(struct trace, (const struct trace *), hash_trace, trace_eq, + thash); + +static struct thash htable += { HTABLE_INITIALIZER(htable.raw, thash_hash, NULL) }; + +static void init_trace(struct trace *trace, + const char *condstr, const char *file, unsigned int line, + bool expect) +{ + trace->condstr = condstr; + trace->file = file; + trace->line = line; + trace->expect = expect; + trace->count = trace->right = 0; +} + +static struct trace *add_trace(const struct trace *t) +{ + struct trace *trace = malloc(sizeof(*trace)); + *trace = *t; + thash_add(&htable, trace); + return trace; +} + +long _likely_trace(bool cond, bool expect, + const char *condstr, + const char *file, unsigned int line) +{ + struct trace *p, trace; + + init_trace(&trace, condstr, file, line, expect); + p = thash_get(&htable, &trace); + if (!p) + p = add_trace(&trace); + + p->count++; + if (cond == expect) + p->right++; + + return cond; +} + +static double right_ratio(const struct trace *t) +{ + return (double)t->right / t->count; +} + +char *likely_stats(unsigned int min_hits, unsigned int percent) +{ + struct trace *worst; + double worst_ratio; + struct thash_iter i; + char *ret; + struct trace *t; + + worst = NULL; + worst_ratio = 2; + + /* This is O(n), but it's not likely called that often. */ + for (t = thash_first(&htable, &i); t; t = thash_next(&htable, &i)) { + if (t->count >= min_hits) { + if (right_ratio(t) < worst_ratio) { + worst = t; + worst_ratio = right_ratio(t); + } + } + } + + if (worst_ratio * 100 > percent) + return NULL; + + ret = malloc(strlen(worst->condstr) + + strlen(worst->file) + + sizeof(long int) * 8 + + sizeof("%s:%u:%slikely(%s) correct %u%% (%lu/%lu)")); + sprintf(ret, "%s:%u:%slikely(%s) correct %u%% (%lu/%lu)", + worst->file, worst->line, + worst->expect ? "" : "un", worst->condstr, + (unsigned)(worst_ratio * 100), + worst->right, worst->count); + + thash_del(&htable, worst); + free(worst); + + return ret; +} + +void likely_stats_reset(void) +{ + struct thash_iter i; + struct trace *t; + + /* This is a bit better than O(n^2), but we have to loop since + * first/next during delete is unreliable. */ + while ((t = thash_first(&htable, &i)) != NULL) { + for (; t; t = thash_next(&htable, &i)) { + thash_del(&htable, t); + free(t); + } + } + + thash_clear(&htable); +} +#endif /*CCAN_LIKELY_DEBUG*/ diff --git a/nostrdb/ccan/ccan/likely/likely.h b/nostrdb/ccan/ccan/likely/likely.h index 3a2f18e6f..a8f003d72 100644 --- a/nostrdb/ccan/ccan/likely/likely.h +++ b/nostrdb/ccan/ccan/likely/likely.h @@ -1,7 +1,7 @@ /* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_LIKELY_H #define CCAN_LIKELY_H -#include "../config.h" +#include "config.h" #include #ifndef CCAN_LIKELY_DEBUG @@ -17,17 +17,17 @@ * 99%; marginal cases should not be marked either way. * * See Also: - * unlikely(), likely_stats() + * unlikely(), likely_stats() * * Example: - * // Returns false if we overflow. - * static inline bool inc_int(unsigned int *val) - * { - * (*val)++; - * if (likely(*val)) - * return true; - * return false; - * } + * // Returns false if we overflow. + * static inline bool inc_int(unsigned int *val) + * { + * (*val)++; + * if (likely(*val)) + * return true; + * return false; + * } */ #define likely(cond) __builtin_expect(!!(cond), 1) @@ -39,37 +39,33 @@ * code path and optimize appropriately; see likely() above. * * See Also: - * likely(), likely_stats(), COLD (compiler.h) + * likely(), likely_stats(), COLD (compiler.h) * * Example: - * // Prints a warning if we overflow. - * static inline void inc_int(unsigned int *val) - * { - * (*val)++; - * if (unlikely(*val == 0)) - * fprintf(stderr, "Overflow!"); - * } + * // Prints a warning if we overflow. + * static inline void inc_int(unsigned int *val) + * { + * (*val)++; + * if (unlikely(*val == 0)) + * fprintf(stderr, "Overflow!"); + * } */ #define unlikely(cond) __builtin_expect(!!(cond), 0) #else -#ifndef likely #define likely(cond) (!!(cond)) -#endif -#ifndef unlikely #define unlikely(cond) (!!(cond)) #endif -#endif #else /* CCAN_LIKELY_DEBUG versions */ #include #define likely(cond) \ - (_likely_trace(!!(cond), 1, stringify(cond), __FILE__, __LINE__)) + (_likely_trace(!!(cond), 1, stringify(cond), __FILE__, __LINE__)) #define unlikely(cond) \ - (_likely_trace(!!(cond), 0, stringify(cond), __FILE__, __LINE__)) + (_likely_trace(!!(cond), 0, stringify(cond), __FILE__, __LINE__)) long _likely_trace(bool cond, bool expect, - const char *condstr, - const char *file, unsigned int line); + const char *condstr, + const char *file, unsigned int line); /** * likely_stats - return description of abused likely()/unlikely() * @min_hits: minimum number of hits @@ -90,18 +86,18 @@ long _likely_trace(bool cond, bool expect, * return the next-worst likely()/unlikely() usage. * * Example: - * // Print every place hit more than twice which was wrong > 5%. - * static void report_stats(void) - * { - * #ifdef CCAN_LIKELY_DEBUG - * const char *bad; + * // Print every place hit more than twice which was wrong > 5%. + * static void report_stats(void) + * { + * #ifdef CCAN_LIKELY_DEBUG + * const char *bad; * - * while ((bad = likely_stats(2, 95)) != NULL) { - * printf("Suspicious likely: %s", bad); - * free(bad); - * } - * #endif - * } + * while ((bad = likely_stats(2, 95)) != NULL) { + * printf("Suspicious likely: %s", bad); + * free(bad); + * } + * #endif + * } */ char *likely_stats(unsigned int min_hits, unsigned int percent); diff --git a/nostrdb/ccan/ccan/list/LICENSE b/nostrdb/ccan/ccan/list/LICENSE new file mode 120000 index 000000000..2354d1294 --- /dev/null +++ b/nostrdb/ccan/ccan/list/LICENSE @@ -0,0 +1 @@ +../../licenses/BSD-MIT \ No newline at end of file diff --git a/nostrdb/ccan/ccan/list/_info b/nostrdb/ccan/ccan/list/_info new file mode 100644 index 000000000..c4f3e2a0a --- /dev/null +++ b/nostrdb/ccan/ccan/list/_info @@ -0,0 +1,72 @@ +#include "config.h" +#include +#include + +/** + * list - double linked list routines + * + * The list header contains routines for manipulating double linked lists. + * It defines two types: struct list_head used for anchoring lists, and + * struct list_node which is usually embedded in the structure which is placed + * in the list. + * + * Example: + * #include + * #include + * #include + * #include + * + * struct parent { + * const char *name; + * struct list_head children; + * unsigned int num_children; + * }; + * + * struct child { + * const char *name; + * struct list_node list; + * }; + * + * int main(int argc, char *argv[]) + * { + * struct parent p; + * struct child *c; + * int i; + * + * if (argc < 2) + * errx(1, "Usage: %s parent children...", argv[0]); + * + * p.name = argv[1]; + * list_head_init(&p.children); + * p.num_children = 0; + * for (i = 2; i < argc; i++) { + * c = malloc(sizeof(*c)); + * c->name = argv[i]; + * list_add(&p.children, &c->list); + * p.num_children++; + * } + * + * printf("%s has %u children:", p.name, p.num_children); + * list_for_each(&p.children, c, list) + * printf("%s ", c->name); + * printf("\n"); + * return 0; + * } + * + * License: BSD-MIT + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/str\n"); + printf("ccan/container_of\n"); + printf("ccan/check_type\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/list/list.c b/nostrdb/ccan/ccan/list/list.c index c9ee35c70..2717fa3f1 100644 --- a/nostrdb/ccan/ccan/list/list.c +++ b/nostrdb/ccan/ccan/list/list.c @@ -4,40 +4,40 @@ #include "list.h" static void *corrupt(const char *abortstr, - const struct list_node *head, - const struct list_node *node, - unsigned int count) + const struct list_node *head, + const struct list_node *node, + unsigned int count) { - if (abortstr) { - fprintf(stderr, - "%s: prev corrupt in node %p (%u) of %p\n", - abortstr, node, count, head); - abort(); - } - return NULL; + if (abortstr) { + fprintf(stderr, + "%s: prev corrupt in node %p (%u) of %p\n", + abortstr, node, count, head); + abort(); + } + return NULL; } struct list_node *list_check_node(const struct list_node *node, - const char *abortstr) + const char *abortstr) { - const struct list_node *p, *n; - int count = 0; + const struct list_node *p, *n; + int count = 0; - for (p = node, n = node->next; n != node; p = n, n = n->next) { - count++; - if (n->prev != p) - return corrupt(abortstr, node, n, count); - } - /* Check prev on head node. */ - if (node->prev != p) - return corrupt(abortstr, node, node, 0); + for (p = node, n = node->next; n != node; p = n, n = n->next) { + count++; + if (n->prev != p) + return corrupt(abortstr, node, n, count); + } + /* Check prev on head node. */ + if (node->prev != p) + return corrupt(abortstr, node, node, 0); - return (struct list_node *)node; + return (struct list_node *)node; } struct list_head *list_check(const struct list_head *h, const char *abortstr) { - if (!list_check_node(&h->n, abortstr)) - return NULL; - return (struct list_head *)h; + if (!list_check_node(&h->n, abortstr)) + return NULL; + return (struct list_head *)h; } diff --git a/nostrdb/ccan/ccan/list/list.h b/nostrdb/ccan/ccan/list/list.h index 4b7007ba0..a15321c59 100644 --- a/nostrdb/ccan/ccan/list/list.h +++ b/nostrdb/ccan/ccan/list/list.h @@ -4,9 +4,9 @@ //#define CCAN_LIST_DEBUG 1 #include #include -#include "str.h" -#include "ccan/container_of/container_of.h" -#include "ccan/check_type/check_type.h" +#include +#include +#include /** * struct list_node - an entry in a doubly-linked list @@ -15,15 +15,15 @@ * * This is used as an entry in a linked list. * Example: - * struct child { - * const char *name; - * // Linked list of all us children. - * struct list_node list; - * }; + * struct child { + * const char *name; + * // Linked list of all us children. + * struct list_node list; + * }; */ struct list_node { - struct list_node *next, *prev; + struct list_node *next, *prev; }; /** @@ -32,15 +32,15 @@ struct list_node * * This is used as the head of a linked list. * Example: - * struct parent { - * const char *name; - * struct list_head children; - * unsigned int num_children; - * }; + * struct parent { + * const char *name; + * struct list_head children; + * unsigned int num_children; + * }; */ struct list_head { - struct list_node n; + struct list_node n; }; /** @@ -59,15 +59,15 @@ struct list_head * See also: list_check_node() * * Example: - * static void dump_parent(struct parent *p) - * { - * struct child *c; + * static void dump_parent(struct parent *p) + * { + * struct child *c; * - * printf("%s (%u children):\n", p->name, p->num_children); - * list_check(&p->children, "bad child list"); - * list_for_each(&p->children, c, list) - * printf(" -> %s\n", c->name); - * } + * printf("%s (%u children):\n", p->name, p->num_children); + * list_check(&p->children, "bad child list"); + * list_for_each(&p->children, c, list) + * printf(" -> %s\n", c->name); + * } */ struct list_head *list_check(const struct list_head *h, const char *abortstr); @@ -81,14 +81,14 @@ struct list_head *list_check(const struct list_head *h, const char *abortstr); * See also: list_check() * * Example: - * static void dump_child(const struct child *c) - * { - * list_check_node(&c->list, "bad child list"); - * printf("%s\n", c->name); - * } + * static void dump_child(const struct child *c) + * { + * list_check_node(&c->list, "bad child list"); + * printf("%s\n", c->name); + * } */ struct list_node *list_check_node(const struct list_node *n, - const char *abortstr); + const char *abortstr); #define LIST_LOC __FILE__ ":" stringify(__LINE__) #ifdef CCAN_LIST_DEBUG @@ -106,10 +106,10 @@ struct list_node *list_check_node(const struct list_node *n, * Explicit initializer for an empty list. * * See also: - * LIST_HEAD, list_head_init() + * LIST_HEAD, list_head_init() * * Example: - * static struct list_head my_list = LIST_HEAD_INIT(my_list); + * static struct list_head my_list = LIST_HEAD_INIT(my_list); */ #define LIST_HEAD_INIT(name) { { &(name).n, &(name).n } } @@ -121,28 +121,28 @@ struct list_node *list_check_node(const struct list_node *n, * list. It can be prepended by "static" to define a static list_head. * * See also: - * LIST_HEAD_INIT, list_head_init() + * LIST_HEAD_INIT, list_head_init() * * Example: - * static LIST_HEAD(my_global_list); + * static LIST_HEAD(my_global_list); */ #define LIST_HEAD(name) \ - struct list_head name = LIST_HEAD_INIT(name) + struct list_head name = LIST_HEAD_INIT(name) /** * list_head_init - initialize a list_head * @h: the list_head to set to the empty list * * Example: - * ... - * struct parent *parent = malloc(sizeof(*parent)); + * ... + * struct parent *parent = malloc(sizeof(*parent)); * - * list_head_init(&parent->children); - * parent->num_children = 0; + * list_head_init(&parent->children); + * parent->num_children = 0; */ static inline void list_head_init(struct list_head *h) { - h->n.next = h->n.prev = &h->n; + h->n.next = h->n.prev = &h->n; } /** @@ -154,7 +154,7 @@ static inline void list_head_init(struct list_head *h) */ static inline void list_node_init(struct list_node *n) { - n->next = n->prev = n; + n->next = n->prev = n; } /** @@ -167,24 +167,24 @@ static inline void list_node_init(struct list_node *n) * The new list_node does not need to be initialized; it will be overwritten. * * Example: - * struct child c1, c2, c3; - * LIST_HEAD(h); + * struct child c1, c2, c3; + * LIST_HEAD(h); * - * list_add_tail(&h, &c1.list); - * list_add_tail(&h, &c3.list); - * list_add_after(&h, &c1.list, &c2.list); + * list_add_tail(&h, &c1.list); + * list_add_tail(&h, &c3.list); + * list_add_after(&h, &c1.list, &c2.list); */ #define list_add_after(h, p, n) list_add_after_(h, p, n, LIST_LOC) static inline void list_add_after_(struct list_head *h, - struct list_node *p, - struct list_node *n, - const char *abortstr) + struct list_node *p, + struct list_node *n, + const char *abortstr) { - n->next = p->next; - n->prev = p; - p->next->prev = n; - p->next = n; - (void)list_debug(h, abortstr); + n->next = p->next; + n->prev = p; + p->next->prev = n; + p->next = n; + (void)list_debug(h, abortstr); } /** @@ -194,18 +194,18 @@ static inline void list_add_after_(struct list_head *h, * * The list_node does not need to be initialized; it will be overwritten. * Example: - * struct child *child = malloc(sizeof(*child)); + * struct child *child = malloc(sizeof(*child)); * - * child->name = "marvin"; - * list_add(&parent->children, &child->list); - * parent->num_children++; + * child->name = "marvin"; + * list_add(&parent->children, &child->list); + * parent->num_children++; */ #define list_add(h, n) list_add_(h, n, LIST_LOC) static inline void list_add_(struct list_head *h, - struct list_node *n, - const char *abortstr) + struct list_node *n, + const char *abortstr) { - list_add_after_(h, &h->n, n, abortstr); + list_add_after_(h, &h->n, n, abortstr); } /** @@ -218,22 +218,22 @@ static inline void list_add_(struct list_head *h, * The new list_node does not need to be initialized; it will be overwritten. * * Example: - * list_head_init(&h); - * list_add_tail(&h, &c1.list); - * list_add_tail(&h, &c3.list); - * list_add_before(&h, &c3.list, &c2.list); + * list_head_init(&h); + * list_add_tail(&h, &c1.list); + * list_add_tail(&h, &c3.list); + * list_add_before(&h, &c3.list, &c2.list); */ #define list_add_before(h, p, n) list_add_before_(h, p, n, LIST_LOC) static inline void list_add_before_(struct list_head *h, - struct list_node *p, - struct list_node *n, - const char *abortstr) + struct list_node *p, + struct list_node *n, + const char *abortstr) { - n->next = p; - n->prev = p->prev; - p->prev->next = n; - p->prev = n; - (void)list_debug(h, abortstr); + n->next = p; + n->prev = p->prev; + p->prev->next = n; + p->prev = n; + (void)list_debug(h, abortstr); } /** @@ -243,15 +243,15 @@ static inline void list_add_before_(struct list_head *h, * * The list_node does not need to be initialized; it will be overwritten. * Example: - * list_add_tail(&parent->children, &child->list); - * parent->num_children++; + * list_add_tail(&parent->children, &child->list); + * parent->num_children++; */ #define list_add_tail(h, n) list_add_tail_(h, n, LIST_LOC) static inline void list_add_tail_(struct list_head *h, - struct list_node *n, - const char *abortstr) + struct list_node *n, + const char *abortstr) { - list_add_before_(h, &h->n, n, abortstr); + list_add_before_(h, &h->n, n, abortstr); } /** @@ -261,13 +261,13 @@ static inline void list_add_tail_(struct list_head *h, * If the list is empty, returns true. * * Example: - * assert(list_empty(&parent->children) == (parent->num_children == 0)); + * assert(list_empty(&parent->children) == (parent->num_children == 0)); */ #define list_empty(h) list_empty_(h, LIST_LOC) static inline bool list_empty_(const struct list_head *h, const char* abortstr) { - (void)list_debug(h, abortstr); - return h->n.next == &h->n; + (void)list_debug(h, abortstr); + return h->n.next == &h->n; } /** @@ -280,14 +280,14 @@ static inline bool list_empty_(const struct list_head *h, const char* abortstr) * know what you're doing. * * Example: - * assert(list_empty_nodebug(&parent->children) == (parent->num_children == 0)); + * assert(list_empty_nodebug(&parent->children) == (parent->num_children == 0)); */ #ifndef CCAN_LIST_DEBUG #define list_empty_nodebug(h) list_empty(h) #else static inline bool list_empty_nodebug(const struct list_head *h) { - return h->n.next == &h->n; + return h->n.next == &h->n; } #endif @@ -303,7 +303,7 @@ static inline bool list_empty_nodebug(const struct list_head *h) */ static inline bool list_empty_nocheck(const struct list_head *h) { - return h->n.next == &h->n; + return h->n.next == &h->n; } /** @@ -314,21 +314,21 @@ static inline bool list_empty_nocheck(const struct list_head *h) * another list, but not deleted again. * * See also: - * list_del_from(), list_del_init() + * list_del_from(), list_del_init() * * Example: - * list_del(&child->list); - * parent->num_children--; + * list_del(&child->list); + * parent->num_children--; */ #define list_del(n) list_del_(n, LIST_LOC) static inline void list_del_(struct list_node *n, const char* abortstr) { - (void)list_debug_node(n, abortstr); - n->next->prev = n->prev; - n->prev->next = n->next; + (void)list_debug_node(n, abortstr); + n->next->prev = n->prev; + n->prev->next = n->next; #ifdef CCAN_LIST_DEBUG - /* Catch use-after-del. */ - n->next = n->prev = NULL; + /* Catch use-after-del. */ + n->next = n->prev = NULL; #endif } @@ -340,17 +340,17 @@ static inline void list_del_(struct list_node *n, const char* abortstr) * which can be useful in some cases. * * See also: - * list_del_from(), list_del() + * list_del_from(), list_del() * * Example: - * list_del_init(&child->list); - * parent->num_children--; + * list_del_init(&child->list); + * parent->num_children--; */ #define list_del_init(n) list_del_init_(n, LIST_LOC) static inline void list_del_init_(struct list_node *n, const char *abortstr) { - list_del_(n, abortstr); - list_node_init(n); + list_del_(n, abortstr); + list_node_init(n); } /** @@ -364,23 +364,23 @@ static inline void list_del_init_(struct list_node *n, const char *abortstr) * See also: list_del() * * Example: - * list_del_from(&parent->children, &child->list); - * parent->num_children--; + * list_del_from(&parent->children, &child->list); + * parent->num_children--; */ static inline void list_del_from(struct list_head *h, struct list_node *n) { #ifdef CCAN_LIST_DEBUG - { - /* Thorough check: make sure it was in list! */ - struct list_node *i; - for (i = h->n.next; i != n; i = i->next) - assert(i != &h->n); - } + { + /* Thorough check: make sure it was in list! */ + struct list_node *i; + for (i = h->n.next; i != n; i = i->next) + assert(i != &h->n); + } #endif /* CCAN_LIST_DEBUG */ - /* Quick test that catches a surprising number of bugs. */ - assert(!list_empty(h)); - list_del(n); + /* Quick test that catches a surprising number of bugs. */ + assert(!list_empty(h)); + list_del(n); } /** @@ -392,27 +392,27 @@ static inline void list_del_from(struct list_head *h, struct list_node *n) * another list, but not deleted/swapped again. * * See also: - * list_del() + * list_del() * * Example: - * struct child x1, x2; - * LIST_HEAD(xh); + * struct child x1, x2; + * LIST_HEAD(xh); * - * list_add(&xh, &x1.list); - * list_swap(&x1.list, &x2.list); + * list_add(&xh, &x1.list); + * list_swap(&x1.list, &x2.list); */ #define list_swap(o, n) list_swap_(o, n, LIST_LOC) static inline void list_swap_(struct list_node *o, - struct list_node *n, - const char* abortstr) + struct list_node *n, + const char* abortstr) { - (void)list_debug_node(o, abortstr); - *n = *o; - n->next->prev = n; - n->prev->next = n; + (void)list_debug_node(o, abortstr); + *n = *o; + n->next->prev = n; + n->prev->next = n; #ifdef CCAN_LIST_DEBUG - /* Catch use-after-del. */ - o->next = o->prev = NULL; + /* Catch use-after-del. */ + o->next = o->prev = NULL; #endif } @@ -423,11 +423,11 @@ static inline void list_swap_(struct list_node *o, * @member: the list_node member of the type * * Example: - * // First list entry is children.next; convert back to child. - * child = list_entry(parent->children.n.next, struct child, list); + * // First list entry is children.next; convert back to child. + * child = list_entry(parent->children.n.next, struct child, list); * * See Also: - * list_top(), list_for_each() + * list_top(), list_for_each() */ #define list_entry(n, type, member) container_of(n, type, member) @@ -440,19 +440,19 @@ static inline void list_swap_(struct list_node *o, * If the list is empty, returns NULL. * * Example: - * struct child *first; - * first = list_top(&parent->children, struct child, list); - * if (!first) - * printf("Empty list!\n"); + * struct child *first; + * first = list_top(&parent->children, struct child, list); + * if (!first) + * printf("Empty list!\n"); */ -#define list_top(h, type, member) \ - ((type *)list_top_((h), list_off_(type, member))) +#define list_top(h, type, member) \ + ((type *)list_top_((h), list_off_(type, member))) static inline const void *list_top_(const struct list_head *h, size_t off) { - if (list_empty(h)) - return NULL; - return (const char *)h->n.next - off; + if (list_empty(h)) + return NULL; + return (const char *)h->n.next - off; } /** @@ -464,23 +464,23 @@ static inline const void *list_top_(const struct list_head *h, size_t off) * If the list is empty, returns NULL. * * Example: - * struct child *one; - * one = list_pop(&parent->children, struct child, list); - * if (!one) - * printf("Empty list!\n"); + * struct child *one; + * one = list_pop(&parent->children, struct child, list); + * if (!one) + * printf("Empty list!\n"); */ -#define list_pop(h, type, member) \ - ((type *)list_pop_((h), list_off_(type, member))) +#define list_pop(h, type, member) \ + ((type *)list_pop_((h), list_off_(type, member))) static inline const void *list_pop_(const struct list_head *h, size_t off) { - struct list_node *n; + struct list_node *n; - if (list_empty(h)) - return NULL; - n = h->n.next; - list_del(n); - return (const char *)n - off; + if (list_empty(h)) + return NULL; + n = h->n.next; + list_del(n); + return (const char *)n - off; } /** @@ -492,19 +492,19 @@ static inline const void *list_pop_(const struct list_head *h, size_t off) * If the list is empty, returns NULL. * * Example: - * struct child *last; - * last = list_tail(&parent->children, struct child, list); - * if (!last) - * printf("Empty list!\n"); + * struct child *last; + * last = list_tail(&parent->children, struct child, list); + * if (!last) + * printf("Empty list!\n"); */ #define list_tail(h, type, member) \ - ((type *)list_tail_((h), list_off_(type, member))) + ((type *)list_tail_((h), list_off_(type, member))) static inline const void *list_tail_(const struct list_head *h, size_t off) { - if (list_empty(h)) - return NULL; - return (const char *)h->n.prev - off; + if (list_empty(h)) + return NULL; + return (const char *)h->n.prev - off; } /** @@ -517,11 +517,11 @@ static inline const void *list_tail_(const struct list_head *h, size_t off) * a for loop, so you can break and continue as normal. * * Example: - * list_for_each(&parent->children, child, list) - * printf("Name: %s\n", child->name); + * list_for_each(&parent->children, child, list) + * printf("Name: %s\n", child->name); */ -#define list_for_each(h, i, member) \ - list_for_each_off(h, i, list_off_var_(i, member)) +#define list_for_each(h, i, member) \ + list_for_each_off(h, i, list_off_var_(i, member)) /** * list_for_each_rev - iterate through a list backwards. @@ -533,11 +533,11 @@ static inline const void *list_tail_(const struct list_head *h, size_t off) * a for loop, so you can break and continue as normal. * * Example: - * list_for_each_rev(&parent->children, child, list) - * printf("Name: %s\n", child->name); + * list_for_each_rev(&parent->children, child, list) + * printf("Name: %s\n", child->name); */ -#define list_for_each_rev(h, i, member) \ - list_for_each_rev_off(h, i, list_off_var_(i, member)) +#define list_for_each_rev(h, i, member) \ + list_for_each_rev_off(h, i, list_off_var_(i, member)) /** * list_for_each_rev_safe - iterate through a list backwards, @@ -553,13 +553,13 @@ static inline const void *list_tail_(const struct list_head *h, size_t off) * from the list. * * Example: - * struct child *next; - * list_for_each_rev_safe(&parent->children, child, next, list) { - * printf("Name: %s\n", child->name); - * } + * struct child *next; + * list_for_each_rev_safe(&parent->children, child, next, list) { + * printf("Name: %s\n", child->name); + * } */ -#define list_for_each_rev_safe(h, i, nxt, member) \ - list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member)) +#define list_for_each_rev_safe(h, i, nxt, member) \ + list_for_each_rev_safe_off(h, i, nxt, list_off_var_(i, member)) /** * list_for_each_safe - iterate through a list, maybe during deletion @@ -573,13 +573,13 @@ static inline const void *list_tail_(const struct list_head *h, size_t off) * @nxt is used to hold the next element, so you can delete @i from the list. * * Example: - * list_for_each_safe(&parent->children, child, next, list) { - * list_del(&child->list); - * parent->num_children--; - * } + * list_for_each_safe(&parent->children, child, next, list) { + * list_del(&child->list); + * parent->num_children--; + * } */ -#define list_for_each_safe(h, i, nxt, member) \ - list_for_each_safe_off(h, i, nxt, list_off_var_(i, member)) +#define list_for_each_safe(h, i, nxt, member) \ + list_for_each_safe_off(h, i, nxt, list_off_var_(i, member)) /** * list_next - get the next entry in a list @@ -590,16 +590,16 @@ static inline const void *list_tail_(const struct list_head *h, size_t off) * If @i was the last entry in the list, returns NULL. * * Example: - * struct child *second; - * second = list_next(&parent->children, first, list); - * if (!second) - * printf("No second child!\n"); + * struct child *second; + * second = list_next(&parent->children, first, list); + * if (!second) + * printf("No second child!\n"); */ -#define list_next(h, i, member) \ - ((list_typeof(i))list_entry_or_null(list_debug(h, \ - __FILE__ ":" stringify(__LINE__)), \ - (i)->member.next, \ - list_off_var_((i), member))) +#define list_next(h, i, member) \ + ((list_typeof(i))list_entry_or_null(list_debug(h, \ + __FILE__ ":" stringify(__LINE__)), \ + (i)->member.next, \ + list_off_var_((i), member))) /** * list_prev - get the previous entry in a list @@ -610,15 +610,15 @@ static inline const void *list_tail_(const struct list_head *h, size_t off) * If @i was the first entry in the list, returns NULL. * * Example: - * first = list_prev(&parent->children, second, list); - * if (!first) - * printf("Can't go back to first child?!\n"); + * first = list_prev(&parent->children, second, list); + * if (!first) + * printf("Can't go back to first child?!\n"); */ -#define list_prev(h, i, member) \ - ((list_typeof(i))list_entry_or_null(list_debug(h, \ - __FILE__ ":" stringify(__LINE__)), \ - (i)->member.prev, \ - list_off_var_((i), member))) +#define list_prev(h, i, member) \ + ((list_typeof(i))list_entry_or_null(list_debug(h, \ + __FILE__ ":" stringify(__LINE__)), \ + (i)->member.prev, \ + list_off_var_((i), member))) /** * list_append_list - empty one list onto the end of another. @@ -629,30 +629,30 @@ static inline const void *list_tail_(const struct list_head *h, size_t off) * @to. After this @from will be empty. * * Example: - * struct list_head adopter; + * struct list_head adopter; * - * list_append_list(&adopter, &parent->children); - * assert(list_empty(&parent->children)); - * parent->num_children = 0; + * list_append_list(&adopter, &parent->children); + * assert(list_empty(&parent->children)); + * parent->num_children = 0; */ -#define list_append_list(t, f) list_append_list_(t, f, \ - __FILE__ ":" stringify(__LINE__)) +#define list_append_list(t, f) list_append_list_(t, f, \ + __FILE__ ":" stringify(__LINE__)) static inline void list_append_list_(struct list_head *to, - struct list_head *from, - const char *abortstr) + struct list_head *from, + const char *abortstr) { - struct list_node *from_tail = list_debug(from, abortstr)->n.prev; - struct list_node *to_tail = list_debug(to, abortstr)->n.prev; - - /* Sew in head and entire list. */ - to->n.prev = from_tail; - from_tail->next = &to->n; - to_tail->next = &from->n; - from->n.prev = to_tail; - - /* Now remove head. */ - list_del(&from->n); - list_head_init(from); + struct list_node *from_tail = list_debug(from, abortstr)->n.prev; + struct list_node *to_tail = list_debug(to, abortstr)->n.prev; + + /* Sew in head and entire list. */ + to->n.prev = from_tail; + from_tail->next = &to->n; + to_tail->next = &from->n; + from->n.prev = to_tail; + + /* Now remove head. */ + list_del(&from->n); + list_head_init(from); } /** @@ -664,46 +664,46 @@ static inline void list_append_list_(struct list_head *to, * of @to. After this @from will be empty. * * Example: - * list_prepend_list(&adopter, &parent->children); - * assert(list_empty(&parent->children)); - * parent->num_children = 0; + * list_prepend_list(&adopter, &parent->children); + * assert(list_empty(&parent->children)); + * parent->num_children = 0; */ #define list_prepend_list(t, f) list_prepend_list_(t, f, LIST_LOC) static inline void list_prepend_list_(struct list_head *to, - struct list_head *from, - const char *abortstr) + struct list_head *from, + const char *abortstr) { - struct list_node *from_tail = list_debug(from, abortstr)->n.prev; - struct list_node *to_head = list_debug(to, abortstr)->n.next; - - /* Sew in head and entire list. */ - to->n.next = &from->n; - from->n.prev = &to->n; - to_head->prev = from_tail; - from_tail->next = to_head; - - /* Now remove head. */ - list_del(&from->n); - list_head_init(from); + struct list_node *from_tail = list_debug(from, abortstr)->n.prev; + struct list_node *to_head = list_debug(to, abortstr)->n.next; + + /* Sew in head and entire list. */ + to->n.next = &from->n; + from->n.prev = &to->n; + to_head->prev = from_tail; + from_tail->next = to_head; + + /* Now remove head. */ + list_del(&from->n); + list_head_init(from); } /* internal macros, do not use directly */ -#define list_for_each_off_dir_(h, i, off, dir) \ - for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ - (off)); \ - list_node_from_off_((void *)i, (off)) != &(h)->n; \ - i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, \ - (off))) - -#define list_for_each_safe_off_dir_(h, i, nxt, off, dir) \ - for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ - (off)), \ - nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ - (off)); \ - list_node_from_off_(i, (off)) != &(h)->n; \ - i = nxt, \ - nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ - (off))) +#define list_for_each_off_dir_(h, i, off, dir) \ + for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ + (off)); \ + list_node_from_off_((void *)i, (off)) != &(h)->n; \ + i = list_node_to_off_(list_node_from_off_((void *)i, (off))->dir, \ + (off))) + +#define list_for_each_safe_off_dir_(h, i, nxt, off, dir) \ + for (i = list_node_to_off_(list_debug(h, LIST_LOC)->n.dir, \ + (off)), \ + nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ + (off)); \ + list_node_from_off_(i, (off)) != &(h)->n; \ + i = nxt, \ + nxt = list_node_to_off_(list_node_from_off_(i, (off))->dir, \ + (off))) /** * list_for_each_off - iterate through a list of memory regions. @@ -730,12 +730,12 @@ static inline void list_prepend_list_(struct list_head *to, * @i. * * Example: - * list_for_each_off(&parent->children, child, - * offsetof(struct child, list)) - * printf("Name: %s\n", child->name); + * list_for_each_off(&parent->children, child, + * offsetof(struct child, list)) + * printf("Name: %s\n", child->name); */ #define list_for_each_off(h, i, off) \ - list_for_each_off_dir_((h),(i),(off),next) + list_for_each_off_dir_((h),(i),(off),next) /** * list_for_each_rev_off - iterate through a list of memory regions backwards @@ -746,7 +746,7 @@ static inline void list_prepend_list_(struct list_head *to, * See list_for_each_off for details */ #define list_for_each_rev_off(h, i, off) \ - list_for_each_off_dir_((h),(i),(off),prev) + list_for_each_off_dir_((h),(i),(off),prev) /** * list_for_each_safe_off - iterate through a list of memory regions, maybe @@ -760,12 +760,12 @@ static inline void list_prepend_list_(struct list_head *to, * descriptions. * * Example: - * list_for_each_safe_off(&parent->children, child, - * next, offsetof(struct child, list)) - * printf("Name: %s\n", child->name); + * list_for_each_safe_off(&parent->children, child, + * next, offsetof(struct child, list)) + * printf("Name: %s\n", child->name); */ #define list_for_each_safe_off(h, i, nxt, off) \ - list_for_each_safe_off_dir_((h),(i),(nxt),(off),next) + list_for_each_safe_off_dir_((h),(i),(nxt),(off),next) /** * list_for_each_rev_safe_off - iterate backwards through a list of @@ -779,50 +779,50 @@ static inline void list_prepend_list_(struct list_head *to, * descriptions. * * Example: - * list_for_each_rev_safe_off(&parent->children, child, - * next, offsetof(struct child, list)) - * printf("Name: %s\n", child->name); + * list_for_each_rev_safe_off(&parent->children, child, + * next, offsetof(struct child, list)) + * printf("Name: %s\n", child->name); */ #define list_for_each_rev_safe_off(h, i, nxt, off) \ - list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev) + list_for_each_safe_off_dir_((h),(i),(nxt),(off),prev) /* Other -off variants. */ -#define list_entry_off(n, type, off) \ - ((type *)list_node_from_off_((n), (off))) +#define list_entry_off(n, type, off) \ + ((type *)list_node_from_off_((n), (off))) -#define list_head_off(h, type, off) \ - ((type *)list_head_off((h), (off))) +#define list_head_off(h, type, off) \ + ((type *)list_head_off((h), (off))) -#define list_tail_off(h, type, off) \ - ((type *)list_tail_((h), (off))) +#define list_tail_off(h, type, off) \ + ((type *)list_tail_((h), (off))) #define list_add_off(h, n, off) \ - list_add((h), list_node_from_off_((n), (off))) + list_add((h), list_node_from_off_((n), (off))) #define list_del_off(n, off) \ - list_del(list_node_from_off_((n), (off))) + list_del(list_node_from_off_((n), (off))) -#define list_del_from_off(h, n, off) \ - list_del_from(h, list_node_from_off_((n), (off))) +#define list_del_from_off(h, n, off) \ + list_del_from(h, list_node_from_off_((n), (off))) /* Offset helper functions so we only single-evaluate. */ static inline void *list_node_to_off_(struct list_node *node, size_t off) { - return (void *)((char *)node - off); + return (void *)((char *)node - off); } static inline struct list_node *list_node_from_off_(void *ptr, size_t off) { - return (struct list_node *)((char *)ptr + off); + return (struct list_node *)((char *)ptr + off); } /* Get the offset of the member, but make sure it's a list_node. */ -#define list_off_(type, member) \ - (container_off(type, member) + \ - check_type(((type *)0)->member, struct list_node)) +#define list_off_(type, member) \ + (container_off(type, member) + \ + check_type(((type *)0)->member, struct list_node)) -#define list_off_var_(var, member) \ - (container_off_var(var, member) + \ - check_type(var->member, struct list_node)) +#define list_off_var_(var, member) \ + (container_off_var(var, member) + \ + check_type(var->member, struct list_node)) #if HAVE_TYPEOF #define list_typeof(var) typeof(var) @@ -832,11 +832,11 @@ static inline struct list_node *list_node_from_off_(void *ptr, size_t off) /* Returns member, or NULL if at end of list. */ static inline void *list_entry_or_null(const struct list_head *h, - const struct list_node *n, - size_t off) + const struct list_node *n, + size_t off) { - if (n == &h->n) - return NULL; - return (char *)n - off; + if (n == &h->n) + return NULL; + return (char *)n - off; } #endif /* CCAN_LIST_H */ diff --git a/nostrdb/ccan/ccan/mem/LICENSE b/nostrdb/ccan/ccan/mem/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/mem/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/mem/_info b/nostrdb/ccan/ccan/mem/_info new file mode 100644 index 000000000..b95a5754c --- /dev/null +++ b/nostrdb/ccan/ccan/mem/_info @@ -0,0 +1,30 @@ +#include "config.h" +#include +#include + +/** + * mem - Provide mem*() functions if missing from C library + * + * This code implements some string.h mem*() functions if they're not + * already available in the C library. Functions included are: + * memmem() + * + * License: CC0 + */ +int main(int argc, char *argv[]) +{ + /* Expect exactly one argument */ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/compiler"); + return 0; + } + + if (strcmp(argv[1], "testdepends") == 0) { + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/mem/mem.c b/nostrdb/ccan/ccan/mem/mem.c index 150f06164..13027a2a7 100644 --- a/nostrdb/ccan/ccan/mem/mem.c +++ b/nostrdb/ccan/ccan/mem/mem.c @@ -4,125 +4,125 @@ #include #include -#include "mem.h" +#include #if !HAVE_MEMMEM void *memmem(const void *haystack, size_t haystacklen, - const void *needle, size_t needlelen) + const void *needle, size_t needlelen) { - const char *p; + const char *p; - if (needlelen > haystacklen) - return NULL; + if (needlelen > haystacklen) + return NULL; - p = haystack; + p = haystack; - for (p = haystack; - (p + needlelen) <= ((const char *)haystack + haystacklen); - p++) - if (memcmp(p, needle, needlelen) == 0) - return (void *)p; + for (p = haystack; + (p + needlelen) <= ((const char *)haystack + haystacklen); + p++) + if (memcmp(p, needle, needlelen) == 0) + return (void *)p; - return NULL; + return NULL; } #endif #if !HAVE_MEMRCHR void *memrchr(const void *s, int c, size_t n) { - unsigned char *p = (unsigned char *)s; + unsigned char *p = (unsigned char *)s; - while (n) { - if (p[n-1] == c) - return p + n - 1; - n--; - } + while (n) { + if (p[n-1] == c) + return p + n - 1; + n--; + } - return NULL; + return NULL; } #endif void *mempbrkm(const void *data_, size_t len, const void *accept_, size_t accept_len) { - const char *data = data_, *accept = accept_; - size_t i, j; - - for (i = 0; i < len; i++) - for (j = 0; j < accept_len; j++) - if (accept[j] == data[i]) - return (void *)&data[i]; - return NULL; + const char *data = data_, *accept = accept_; + size_t i, j; + + for (i = 0; i < len; i++) + for (j = 0; j < accept_len; j++) + if (accept[j] == data[i]) + return (void *)&data[i]; + return NULL; } void *memcchr(void const *data, int c, size_t data_len) { - char const *p = data; - size_t i; + char const *p = data; + size_t i; - for (i = 0; i < data_len; i++) - if (p[i] != c) - return (void *)&p[i]; + for (i = 0; i < data_len; i++) + if (p[i] != c) + return (void *)&p[i]; - return NULL; + return NULL; } -#define MEMSWAP_TMP_SIZE 256 +#define MEMSWAP_TMP_SIZE 256 void memswap(void *a, void *b, size_t n) { - char *ap = a; - char *bp = b; - char tmp[MEMSWAP_TMP_SIZE]; + char *ap = a; + char *bp = b; + char tmp[MEMSWAP_TMP_SIZE]; - assert(!memoverlaps(a, n, b, n)); + assert(!memoverlaps(a, n, b, n)); - while (n) { - size_t m = n > MEMSWAP_TMP_SIZE ? MEMSWAP_TMP_SIZE : n; + while (n) { + size_t m = n > MEMSWAP_TMP_SIZE ? MEMSWAP_TMP_SIZE : n; - memcpy(tmp, bp, m); - memcpy(bp, ap, m); - memcpy(ap, tmp, m); + memcpy(tmp, bp, m); + memcpy(bp, ap, m); + memcpy(ap, tmp, m); - ap += m; - bp += m; - n -= m; - } + ap += m; + bp += m; + n -= m; + } } bool memeqzero(const void *data, size_t length) { - const unsigned char *p = data; - size_t len; - - /* Check first 16 bytes manually */ - for (len = 0; len < 16; len++) { - if (!length) - return true; - if (*p) - return false; - p++; - length--; - } - - /* Now we know that's zero, memcmp with self. */ - return memcmp(data, p, length) == 0; + const unsigned char *p = data; + size_t len; + + /* Check first 16 bytes manually */ + for (len = 0; len < 16; len++) { + if (!length) + return true; + if (*p) + return false; + p++; + length--; + } + + /* Now we know that's zero, memcmp with self. */ + return memcmp(data, p, length) == 0; } void memtaint(void *data, size_t len) { - /* Using 16 bytes is a bit quicker than 4 */ - const unsigned tainter[] - = { 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef }; - char *p = data; - - while (len >= sizeof(tainter)) { - memcpy(p, tainter, sizeof(tainter)); - p += sizeof(tainter); - len -= sizeof(tainter); - } - memcpy(p, tainter, len); + /* Using 16 bytes is a bit quicker than 4 */ + const unsigned tainter[] + = { 0xdeadbeef, 0xdeadbeef, 0xdeadbeef, 0xdeadbeef }; + char *p = data; + + while (len >= sizeof(tainter)) { + memcpy(p, tainter, sizeof(tainter)); + p += sizeof(tainter); + len -= sizeof(tainter); + } + memcpy(p, tainter, len); #if HAVE_VALGRIND_MEMCHECK_H - VALGRIND_MAKE_MEM_UNDEFINED(data, len); + VALGRIND_MAKE_MEM_UNDEFINED(data, len); #endif } diff --git a/nostrdb/ccan/ccan/mem/mem.h b/nostrdb/ccan/ccan/mem/mem.h index d02ed8ae4..20286dcbe 100644 --- a/nostrdb/ccan/ccan/mem/mem.h +++ b/nostrdb/ccan/ccan/mem/mem.h @@ -2,8 +2,8 @@ #ifndef CCAN_MEM_H #define CCAN_MEM_H -#include "../config.h" -#include "ccan/compiler/compiler.h" +#include "config.h" +#include #include #include @@ -11,7 +11,7 @@ #if !HAVE_MEMMEM PURE_FUNCTION void *memmem(const void *haystack, size_t haystacklen, - const void *needle, size_t needlelen); + const void *needle, size_t needlelen); #endif #if !HAVE_MEMRCHR @@ -30,14 +30,14 @@ void *memrchr(const void *s, int c, size_t n); * @accept, or NULL if no such byte is found. * * Example: - * char otherbytes[] = "Hello \0world"; - * size_t otherbytes_len = sizeof(otherbytes) - 1; - * char *r = mempbrkm(otherbytes, otherbytes_len, "\0b", 2); - * if (r) { - * printf("Found %c\n", *r); - * } else { - * printf("Nada\n"); - * } + * char otherbytes[] = "Hello \0world"; + * size_t otherbytes_len = sizeof(otherbytes) - 1; + * char *r = mempbrkm(otherbytes, otherbytes_len, "\0b", 2); + * if (r) { + * printf("Found %c\n", *r); + * } else { + * printf("Nada\n"); + * } * */ PURE_FUNCTION @@ -54,21 +54,21 @@ void *mempbrkm(const void *data, size_t len, const void *accept, size_t accept_l * * Example: * - * r = mempbrk(otherbytes, otherbytes_len, "abcde"); - * if (r) { - * printf("Found %c\n", *r); - * } else { - * printf("Nada\n"); - * } + * r = mempbrk(otherbytes, otherbytes_len, "abcde"); + * if (r) { + * printf("Found %c\n", *r); + * } else { + * printf("Nada\n"); + * } */ PURE_FUNCTION static inline char *mempbrk(const void *data, size_t len, const char *accept) { - return mempbrkm(data, len, accept, strlen(accept)); + return mempbrkm(data, len, accept, strlen(accept)); } /** - * memcchr - scan memory until a character does _not_ match + * memcchr - scan memory until a character does _not_ match @c * @data: pointer to memory to scan * @data_len: length of data * @c: character to scan for @@ -79,12 +79,12 @@ static inline char *mempbrk(const void *data, size_t len, const char *accept) * @data is @c, returns NULL. * * Example: - * char somebytes[] = "HI By\0e"; - * size_t bytes_len = sizeof(somebytes) - 1; - * r = memcchr(somebytes, ' ', bytes_len); - * if (r) { - * printf("Found %c after trimming spaces\n", *r); - * } + * char somebytes[] = "HI By\0e"; + * size_t bytes_len = sizeof(somebytes) - 1; + * r = memcchr(somebytes, ' ', bytes_len); + * if (r) { + * printf("Found %c after trimming spaces\n", *r); + * } */ PURE_FUNCTION void *memcchr(void const *data, int c, size_t data_len); @@ -97,14 +97,14 @@ void *memcchr(void const *data, int c, size_t data_len); * @bl: bytes in second array * * Example: - * if (memeq(somebytes, bytes_len, otherbytes, otherbytes_len)) { - * printf("memory blocks are the same!\n"); - * } + * if (memeq(somebytes, bytes_len, otherbytes, otherbytes_len)) { + * printf("memory blocks are the same!\n"); + * } */ PURE_FUNCTION static inline bool memeq(const void *a, size_t al, const void *b, size_t bl) { - return al == bl && !memcmp(a, b, bl); + return al == bl && (al == 0 || !memcmp(a, b, bl)); } /** @@ -117,17 +117,17 @@ static inline bool memeq(const void *a, size_t al, const void *b, size_t bl) * Returns true if @data starts with @prefix, otherwise return false. * * Example: - * if (memstarts(somebytes, bytes_len, otherbytes, otherbytes_len)) { - * printf("somebytes starts with otherbytes!\n"); - * } + * if (memstarts(somebytes, bytes_len, otherbytes, otherbytes_len)) { + * printf("somebytes starts with otherbytes!\n"); + * } */ PURE_FUNCTION static inline bool memstarts(void const *data, size_t data_len, - void const *prefix, size_t prefix_len) + void const *prefix, size_t prefix_len) { - if (prefix_len > data_len) - return false; - return memeq(data, prefix_len, prefix, prefix_len); + if (prefix_len > data_len) + return false; + return memeq(data, prefix_len, prefix, prefix_len); } /** @@ -139,14 +139,14 @@ static inline bool memstarts(void const *data, size_t data_len, * The '\0' byte is ignored when checking if @bytes == @string. * * Example: - * if (memeqstr(somebytes, bytes_len, "foo")) { - * printf("somebytes == 'foo'!\n"); - * } + * if (memeqstr(somebytes, bytes_len, "foo")) { + * printf("somebytes == 'foo'!\n"); + * } */ PURE_FUNCTION static inline bool memeqstr(const void *data, size_t length, const char *string) { - return memeq(data, length, string, strlen(string)); + return memeq(data, length, string, strlen(string)); } /** @@ -155,9 +155,9 @@ static inline bool memeqstr(const void *data, size_t length, const char *string) * @length: length of @data in bytes * * Example: - * if (memeqzero(somebytes, bytes_len)) { - * printf("somebytes == 0!\n"); - * } + * if (memeqzero(somebytes, bytes_len)) { + * printf("somebytes == 0!\n"); + * } */ PURE_FUNCTION bool memeqzero(const void *data, size_t length); @@ -169,14 +169,14 @@ bool memeqzero(const void *data, size_t length); * @s: string prefix * * Example: - * if (memstarts_str(somebytes, bytes_len, "It")) { - * printf("somebytes starts with 'It'\n"); - * } + * if (memstarts_str(somebytes, bytes_len, "It")) { + * printf("somebytes starts with 'It'\n"); + * } */ PURE_FUNCTION static inline bool memstarts_str(const void *a, size_t al, const char *s) { - return memstarts(a, al, s, strlen(s)); + return memstarts(a, al, s, strlen(s)); } /** @@ -192,8 +192,8 @@ static inline bool memstarts_str(const void *a, size_t al, const char *s) PURE_FUNCTION static inline bool memends(const void *s, size_t s_len, const void *suffix, size_t suffix_len) { - return (s_len >= suffix_len) && (memcmp((const char *)s + s_len - suffix_len, - suffix, suffix_len) == 0); + return (s_len >= suffix_len) && (memcmp((const char *)s + s_len - suffix_len, + suffix, suffix_len) == 0); } /** @@ -203,14 +203,14 @@ static inline bool memends(const void *s, size_t s_len, const void *suffix, size * @s: string suffix * * Example: - * if (memends_str(somebytes, bytes_len, "It")) { - * printf("somebytes ends with with 'It'\n"); - * } + * if (memends_str(somebytes, bytes_len, "It")) { + * printf("somebytes ends with with 'It'\n"); + * } */ PURE_FUNCTION static inline bool memends_str(const void *a, size_t al, const char *s) { - return memends(a, al, s, strlen(s)); + return memends(a, al, s, strlen(s)); } /** @@ -222,12 +222,12 @@ static inline bool memends_str(const void *a, size_t al, const char *s) */ CONST_FUNCTION static inline bool memoverlaps(const void *a_, size_t al, - const void *b_, size_t bl) + const void *b_, size_t bl) { - const char *a = a_; - const char *b = b_; + const char *a = a_; + const char *b = b_; - return (a < (b + bl)) && (b < (a + al)); + return (a < (b + bl)) && (b < (a + al)); } /* @@ -244,14 +244,14 @@ void memswap(void *a, void *b, size_t n); #include static inline void *memcheck_(const void *data, size_t len) { - VALGRIND_CHECK_MEM_IS_DEFINED(data, len); - return (void *)data; + VALGRIND_CHECK_MEM_IS_DEFINED(data, len); + return (void *)data; } #else static inline void *memcheck_(const void *data, size_t len) { - (void)len; - return (void *)data; + (void)len; + return (void *)data; } #endif @@ -267,10 +267,10 @@ static inline void *memcheck_(const void *data, size_t len) * written out. * * Example: - * // Search for space, but make sure it's all initialized. - * if (memchr(memcheck(somebytes, bytes_len), ' ', bytes_len)) { - * printf("space was found!\n"); - * } + * // Search for space, but make sure it's all initialized. + * if (memchr(memcheck(somebytes, bytes_len), ' ', bytes_len)) { + * printf("space was found!\n"); + * } */ #define memcheck(data, len) ((__typeof__((data)+0))memcheck_((data), (len))) #else @@ -288,8 +288,8 @@ static inline void *memcheck_(const void *data, size_t len) * or written out (or passed to memcheck!) in future. * * Example: - * // We'll reuse this buffer later, but be sure we don't access it. - * memtaint(somebytes, bytes_len); + * // We'll reuse this buffer later, but be sure we don't access it. + * memtaint(somebytes, bytes_len); */ void memtaint(void *data, size_t len); #endif /* CCAN_MEM_H */ diff --git a/nostrdb/ccan/ccan/short_types/LICENSE b/nostrdb/ccan/ccan/short_types/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/short_types/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/short_types/_info b/nostrdb/ccan/ccan/short_types/_info new file mode 100644 index 000000000..909e4e3ae --- /dev/null +++ b/nostrdb/ccan/ccan/short_types/_info @@ -0,0 +1,87 @@ +#include "config.h" +#include +#include + +/** + * short_types - shorter names for standard integer types + * + * "C is a Spartan language, and so should your naming be." + * -- Linus Torvalds + * + * The short_types header provides for convenient abbreviations for the + * posixly-damned uint32_t types. If ccan/endian/endian.h is included, + * it also provides be32/le32 for explicitly annotating types of specific + * endian. + * + * Include this header, if only to stop people using these identifiers + * for other things! + * + * Example: + * #include + * #include + * #include + * #include + * + * // Print nonsensical numerical comparison of POSIX vs. short_types. + * #define stringify_1(x) #x + * #define stringify(x) stringify_1(x) + * + * static void evaluate(size_t size, const char *posix, const char *sht, + * unsigned int *posix_total, unsigned int *sht_total, + * unsigned int *size_total) + * { + * printf("\t%ssigned %s: POSIX %zu%%, short %zu%%\n", + * sht[0] == 'u' ? "un" : "", + * sht+1, + * strlen(posix)*100 / size, + * strlen(sht)*100 / size); + * *posix_total += strlen(posix); + * *sht_total += strlen(sht); + * *size_total += size; + * } + * + * #define EVALUATE(psx, short, pt, st, t) \ + * evaluate(sizeof(psx), stringify(psx), stringify(sht), pt, st, t) + * + * int main(void) + * { + * unsigned int posix_total = 0, sht_total = 0, size_total = 0; + * + * printf("Comparing size of type vs size of name:\n"); + * + * EVALUATE(uint8_t, u8, &posix_total, &sht_total, &size_total); + * EVALUATE(int8_t, s8, &posix_total, &sht_total, &size_total); + * EVALUATE(uint16_t, u16, &posix_total, &sht_total, &size_total); + * EVALUATE(int16_t, s16, &posix_total, &sht_total, &size_total); + * EVALUATE(uint32_t, u32, &posix_total, &sht_total, &size_total); + * EVALUATE(int32_t, s32, &posix_total, &sht_total, &size_total); + * EVALUATE(uint64_t, u64, &posix_total, &sht_total, &size_total); + * EVALUATE(int64_t, s64, &posix_total, &sht_total, &size_total); + * + * printf("Conclusion:\n" + * "\tPOSIX is %u%% LESS efficient than binary.\n" + * "\tshort_types.h is %u%% MORE efficient than binary.\n", + * (posix_total - size_total) * 100 / size_total, + * (size_total - sht_total) * 100 / size_total); + * return 0; + * } + * + * License: CC0 (Public domain) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + return 0; + } + + if (strcmp(argv[1], "testdepends") == 0) { + printf("ccan/endian\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/str/LICENSE b/nostrdb/ccan/ccan/str/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/str/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/str/_info b/nostrdb/ccan/ccan/str/_info new file mode 100644 index 000000000..b579525fa --- /dev/null +++ b/nostrdb/ccan/ccan/str/_info @@ -0,0 +1,52 @@ +#include "config.h" +#include +#include + +/** + * str - string helper routines + * + * This is a grab bag of functions for string operations, designed to enhance + * the standard string.h. + * + * Note that if you define CCAN_STR_DEBUG, you will get extra compile + * checks on common misuses of the following functions (they will now + * be out-of-line, so there is a runtime penalty!). + * + * strstr, strchr, strrchr: + * Return const char * if first argument is const (gcc only). + * + * isalnum, isalpha, isascii, isblank, iscntrl, isdigit, isgraph, + * islower, isprint, ispunct, isspace, isupper, isxdigit: + * Static and runtime check that input is EOF or an *unsigned* + * char, as per C standard (really!). + * + * Example: + * #include + * #include + * + * int main(int argc, char *argv[]) + * { + * if (argc > 1 && streq(argv[1], "--verbose")) + * printf("verbose set\n"); + * if (argc > 1 && strstarts(argv[1], "--")) + * printf("Some option set\n"); + * if (argc > 1 && strends(argv[1], "cow-powers")) + * printf("Magic option set\n"); + * return 0; + * } + * + * License: CC0 (Public domain) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/build_assert\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/str/debug.c b/nostrdb/ccan/ccan/str/debug.c new file mode 100644 index 000000000..8c519442d --- /dev/null +++ b/nostrdb/ccan/ccan/str/debug.c @@ -0,0 +1,108 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#include "config.h" +#include +#include +#include +#include + +#ifdef CCAN_STR_DEBUG +/* Because we mug the real ones with macros, we need our own wrappers. */ +int str_isalnum(int i) +{ + assert(i >= -1 && i < 256); + return isalnum(i); +} + +int str_isalpha(int i) +{ + assert(i >= -1 && i < 256); + return isalpha(i); +} + +int str_isascii(int i) +{ + assert(i >= -1 && i < 256); + return isascii(i); +} + +#if HAVE_ISBLANK +int str_isblank(int i) +{ + assert(i >= -1 && i < 256); + return isblank(i); +} +#endif + +int str_iscntrl(int i) +{ + assert(i >= -1 && i < 256); + return iscntrl(i); +} + +int str_isdigit(int i) +{ + assert(i >= -1 && i < 256); + return isdigit(i); +} + +int str_isgraph(int i) +{ + assert(i >= -1 && i < 256); + return isgraph(i); +} + +int str_islower(int i) +{ + assert(i >= -1 && i < 256); + return islower(i); +} + +int str_isprint(int i) +{ + assert(i >= -1 && i < 256); + return isprint(i); +} + +int str_ispunct(int i) +{ + assert(i >= -1 && i < 256); + return ispunct(i); +} + +int str_isspace(int i) +{ + assert(i >= -1 && i < 256); + return isspace(i); +} + +int str_isupper(int i) +{ + assert(i >= -1 && i < 256); + return isupper(i); +} + +int str_isxdigit(int i) +{ + assert(i >= -1 && i < 256); + return isxdigit(i); +} + +#undef strstr +#undef strchr +#undef strrchr + +char *str_strstr(const char *haystack, const char *needle) +{ + return strstr(haystack, needle); +} + +char *str_strchr(const char *haystack, int c) +{ + return strchr(haystack, c); +} + +char *str_strrchr(const char *haystack, int c) +{ + return strrchr(haystack, c); +} +#endif diff --git a/nostrdb/ccan/ccan/str/str.c b/nostrdb/ccan/ccan/str/str.c new file mode 100644 index 000000000..a9245c174 --- /dev/null +++ b/nostrdb/ccan/ccan/str/str.c @@ -0,0 +1,13 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#include + +size_t strcount(const char *haystack, const char *needle) +{ + size_t i = 0, nlen = strlen(needle); + + while ((haystack = strstr(haystack, needle)) != NULL) { + i++; + haystack += nlen; + } + return i; +} diff --git a/nostrdb/ccan/ccan/str/str.h b/nostrdb/ccan/ccan/str/str.h index f391abdde..d919b84d4 100644 --- a/nostrdb/ccan/ccan/str/str.h +++ b/nostrdb/ccan/ccan/str/str.h @@ -1,7 +1,7 @@ /* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_STR_H #define CCAN_STR_H -#include "../config.h" +#include "config.h" #include #include #include @@ -15,8 +15,8 @@ * This macro is arguably more readable than "!strcmp(a, b)". * * Example: - * if (streq(somestring, "")) - * printf("String is empty!\n"); + * if (streq(somestring, "")) + * printf("String is empty!\n"); */ #define streq(a,b) (strcmp((a),(b)) == 0) @@ -26,8 +26,8 @@ * @prefix: prefix to look for at start of str * * Example: - * if (strstarts(somestring, "foo")) - * printf("String %s begins with 'foo'!\n", somestring); + * if (strstarts(somestring, "foo")) + * printf("String %s begins with 'foo'!\n", somestring); */ #define strstarts(str,prefix) (strncmp((str),(prefix),strlen(prefix)) == 0) @@ -37,15 +37,15 @@ * @postfix: postfix to look for at end of str * * Example: - * if (strends(somestring, "foo")) - * printf("String %s end with 'foo'!\n", somestring); + * if (strends(somestring, "foo")) + * printf("String %s end with 'foo'!\n", somestring); */ static inline bool strends(const char *str, const char *postfix) { - if (strlen(str) < strlen(postfix)) - return false; + if (strlen(str) < strlen(postfix)) + return false; - return streq(str + strlen(str) - strlen(postfix), postfix); + return streq(str + strlen(str) - strlen(postfix), postfix); } /** @@ -53,12 +53,12 @@ static inline bool strends(const char *str, const char *postfix) * @expr: any C expression * * Example: - * #define PRINT_COND_IF_FALSE(cond) \ - * ((cond) || printf("%s is false!", stringify(cond))) + * #define PRINT_COND_IF_FALSE(cond) \ + * ((cond) || printf("%s is false!", stringify(cond))) */ -#define stringify(expr) stringify_1(expr) +#define stringify(expr) stringify_1(expr) /* Double-indirection required to stringify expansions */ -#define stringify_1(expr) #expr +#define stringify_1(expr) #expr /** * strcount - Count number of (non-overlapping) occurrences of a substring. @@ -83,18 +83,18 @@ size_t strcount(const char *haystack, const char *needle); * values will fit (eg. sprintf(... "%p"). ) * * Example: - * char str[STR_MAX_CHARS(int)]; + * char str[STR_MAX_CHARS(int)]; * - * sprintf(str, "%i", 7); + * sprintf(str, "%i", 7); */ -#define STR_MAX_CHARS(type_or_expr) \ - ((sizeof(type_or_expr) * CHAR_BIT + 8) / 9 * 3 + 2 \ - + STR_MAX_CHARS_TCHECK_(type_or_expr)) +#define STR_MAX_CHARS(type_or_expr) \ + ((sizeof(type_or_expr) * CHAR_BIT + 8) / 9 * 3 + 2 \ + + STR_MAX_CHARS_TCHECK_(type_or_expr)) #if HAVE_TYPEOF /* Only a simple type can have 0 assigned, so test that. */ -#define STR_MAX_CHARS_TCHECK_(type_or_expr) \ - (sizeof(({ typeof(type_or_expr) x = 0; x; }))*0) +#define STR_MAX_CHARS_TCHECK_(type_or_expr) \ + (sizeof(({ typeof(type_or_expr) x = 0; x; }))*0) #else #define STR_MAX_CHARS_TCHECK_(type_or_expr) 0 #endif @@ -109,60 +109,60 @@ size_t strcount(const char *haystack, const char *needle); */ static inline bool cisalnum(char c) { - return isalnum((unsigned char)c); + return isalnum((unsigned char)c); } static inline bool cisalpha(char c) { - return isalpha((unsigned char)c); + return isalpha((unsigned char)c); } static inline bool cisascii(char c) { - return isascii((unsigned char)c); + return isascii((unsigned char)c); } #if HAVE_ISBLANK static inline bool cisblank(char c) { - return isblank((unsigned char)c); + return isblank((unsigned char)c); } #endif static inline bool ciscntrl(char c) { - return iscntrl((unsigned char)c); + return iscntrl((unsigned char)c); } static inline bool cisdigit(char c) { - return isdigit((unsigned char)c); + return isdigit((unsigned char)c); } static inline bool cisgraph(char c) { - return isgraph((unsigned char)c); + return isgraph((unsigned char)c); } static inline bool cislower(char c) { - return islower((unsigned char)c); + return islower((unsigned char)c); } static inline bool cisprint(char c) { - return isprint((unsigned char)c); + return isprint((unsigned char)c); } static inline bool cispunct(char c) { - return ispunct((unsigned char)c); + return ispunct((unsigned char)c); } static inline bool cisspace(char c) { - return isspace((unsigned char)c); + return isspace((unsigned char)c); } static inline bool cisupper(char c) { - return isupper((unsigned char)c); + return isupper((unsigned char)c); } static inline bool cisxdigit(char c) { - return isxdigit((unsigned char)c); + return isxdigit((unsigned char)c); } -#include "str_debug.h" +#include /* These checks force things out of line, hence they are under DEBUG. */ #ifdef CCAN_STR_DEBUG @@ -185,10 +185,10 @@ static inline bool cisxdigit(char c) /* You can use a char if char is unsigned. */ #if HAVE_BUILTIN_TYPES_COMPATIBLE_P && HAVE_TYPEOF -#define str_check_arg_(i) \ - ((i) + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(i), \ - char) \ - || (char)255 > 0)) +#define str_check_arg_(i) \ + ((i) + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(i), \ + char) \ + || (char)255 > 0)) #else #define str_check_arg_(i) (i) #endif @@ -216,12 +216,12 @@ static inline bool cisxdigit(char c) #undef strrchr /* + 0 is needed to decay array into pointer. */ -#define strstr(haystack, needle) \ - ((typeof((haystack) + 0))str_strstr((haystack), (needle))) -#define strchr(haystack, c) \ - ((typeof((haystack) + 0))str_strchr((haystack), (c))) -#define strrchr(haystack, c) \ - ((typeof((haystack) + 0))str_strrchr((haystack), (c))) +#define strstr(haystack, needle) \ + ((typeof((haystack) + 0))str_strstr((haystack), (needle))) +#define strchr(haystack, c) \ + ((typeof((haystack) + 0))str_strchr((haystack), (c))) +#define strrchr(haystack, c) \ + ((typeof((haystack) + 0))str_strrchr((haystack), (c))) #endif #endif /* CCAN_STR_DEBUG */ diff --git a/nostrdb/ccan/ccan/str/str_debug.h b/nostrdb/ccan/ccan/str/str_debug.h new file mode 100644 index 000000000..92c10c41c --- /dev/null +++ b/nostrdb/ccan/ccan/str/str_debug.h @@ -0,0 +1,30 @@ +/* CC0 (Public domain) - see LICENSE file for details */ +#ifndef CCAN_STR_DEBUG_H +#define CCAN_STR_DEBUG_H + +/* #define CCAN_STR_DEBUG 1 */ + +#ifdef CCAN_STR_DEBUG +/* Because we mug the real ones with macros, we need our own wrappers. */ +int str_isalnum(int i); +int str_isalpha(int i); +int str_isascii(int i); +#if HAVE_ISBLANK +int str_isblank(int i); +#endif +int str_iscntrl(int i); +int str_isdigit(int i); +int str_isgraph(int i); +int str_islower(int i); +int str_isprint(int i); +int str_ispunct(int i); +int str_isspace(int i); +int str_isupper(int i); +int str_isxdigit(int i); + +char *str_strstr(const char *haystack, const char *needle); +char *str_strchr(const char *s, int c); +char *str_strrchr(const char *s, int c); +#endif /* CCAN_STR_DEBUG */ + +#endif /* CCAN_STR_DEBUG_H */ diff --git a/nostrdb/ccan/ccan/structeq/LICENSE b/nostrdb/ccan/ccan/structeq/LICENSE new file mode 120000 index 000000000..2354d1294 --- /dev/null +++ b/nostrdb/ccan/ccan/structeq/LICENSE @@ -0,0 +1 @@ +../../licenses/BSD-MIT \ No newline at end of file diff --git a/nostrdb/ccan/ccan/structeq/_info b/nostrdb/ccan/ccan/structeq/_info new file mode 100644 index 000000000..1ac8d56dd --- /dev/null +++ b/nostrdb/ccan/ccan/structeq/_info @@ -0,0 +1,57 @@ +#include "config.h" +#include +#include + +/** + * structeq - bitwise comparison of structs. + * + * This is a replacement for memcmp, which checks the argument types are the + * same, and takes into account padding in the structure. When there is no + * padding, it becomes a memcmp at compile time (assuming a + * constant-optimizing compiler). + * + * License: BSD-MIT + * Author: Rusty Russell + * + * Example: + * #include + * #include + * #include + * + * struct mydata { + * int start, end; + * }; + * // Defines mydata_eq(a, b) + * STRUCTEQ_DEF(mydata, 0, start, end); + * + * int main(void) + * { + * struct mydata a, b; + * + * a.start = 100; + * a.end = 101; + * + * // They are equal. + * assert(mydata_eq(&a, &b)); + * + * b.end++; + * // Now they are not. + * assert(!mydata_eq(&a, &b)); + * + * return 0; + * } + */ +int main(int argc, char *argv[]) +{ + /* Expect exactly one argument */ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/build_assert\n"); + printf("ccan/cppmagic\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/structeq/structeq.h b/nostrdb/ccan/ccan/structeq/structeq.h index 18619756f..81799539c 100644 --- a/nostrdb/ccan/ccan/structeq/structeq.h +++ b/nostrdb/ccan/ccan/structeq/structeq.h @@ -1,8 +1,8 @@ /* MIT (BSD) license - see LICENSE file for details */ #ifndef CCAN_STRUCTEQ_H #define CCAN_STRUCTEQ_H -#include "ccan/build_assert/build_assert.h" -#include "ccan/cppmagic/cppmagic.h" +#include +#include #include #include @@ -19,24 +19,24 @@ * "up to or equal to that amount of padding", as padding can be * platform dependent. */ -#define STRUCTEQ_DEF(sname, padbytes, ...) \ +#define STRUCTEQ_DEF(sname, padbytes, ...) \ static inline bool CPPMAGIC_GLUE2(sname, _eq)(const struct sname *_a, \ - const struct sname *_b) \ -{ \ - BUILD_ASSERT(((padbytes) < 0 && \ - CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ - __VA_ARGS__)) \ - - (padbytes) >= sizeof(*_a)) \ - || CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ - __VA_ARGS__)) \ - + (padbytes) == sizeof(*_a)); \ - if (CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, __VA_ARGS__)) \ - == sizeof(*_a)) \ - return memcmp(_a, _b, sizeof(*_a)) == 0; \ - else \ - return CPPMAGIC_JOIN(&&, \ - CPPMAGIC_MAP(STRUCTEQ_MEMBER_CMP_, \ - __VA_ARGS__)); \ + const struct sname *_b) \ +{ \ + BUILD_ASSERT(((padbytes) < 0 && \ + CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ + __VA_ARGS__)) \ + - (padbytes) >= sizeof(*_a)) \ + || CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, \ + __VA_ARGS__)) \ + + (padbytes) == sizeof(*_a)); \ + if (CPPMAGIC_JOIN(+, CPPMAGIC_MAP(STRUCTEQ_MEMBER_SIZE_, __VA_ARGS__)) \ + == sizeof(*_a)) \ + return memcmp(_a, _b, sizeof(*_a)) == 0; \ + else \ + return CPPMAGIC_JOIN(&&, \ + CPPMAGIC_MAP(STRUCTEQ_MEMBER_CMP_, \ + __VA_ARGS__)); \ } /* Helpers */ diff --git a/nostrdb/ccan/ccan/take/LICENSE b/nostrdb/ccan/ccan/take/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/take/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/take/_info b/nostrdb/ccan/ccan/take/_info new file mode 100644 index 000000000..c8cc4ac99 --- /dev/null +++ b/nostrdb/ccan/ccan/take/_info @@ -0,0 +1,61 @@ +#include "config.h" +#include +#include + +/** + * take - routines to mark pointers to be consumed by called functions. + * + * This code helps to implement ownership transfer on a per-arg basis: + * the caller wraps the pointer argument in take() and the callee checks + * taken() to see if it should consume it. + * + * Author: Rusty Russell + * License: CC0 (Public domain) + * + * Example: + * // Given "foo/bar.c" outputs basename is bar.c + * #include + * #include + * + * // Dumb basename program and driver. + * static char *base(const char *file TAKES) + * { + * const char *p = strrchr(file, '/'); + * if (!p) + * p = file; + * else + * p++; + * + * // Use arg in place if we're allowed. + * if (taken(file)) + * return memmove((char *)file, p, strlen(p)+1); + * else + * return strdup(p); + * } + * + * int main(int argc, char *argv[]) + * { + * char *b; + * + * if (argc > 1) // Mangle in place. + * b = base(take(argv[1])); + * else + * b = base("test/string"); + * + * printf("basename is %s\n", b); + * return 0; + * } + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/likely\n"); + printf("ccan/str\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/take/take.c b/nostrdb/ccan/ccan/take/take.c index 04bcc7ed6..4833bf935 100644 --- a/nostrdb/ccan/ccan/take/take.c +++ b/nostrdb/ccan/ccan/take/take.c @@ -1,6 +1,6 @@ /* CC0 (Public domain) - see LICENSE file for details */ -#include "take.h" -#include "ccan/likely/likely.h" +#include +#include #include #include #include @@ -13,29 +13,29 @@ static void (*allocfailfn)(const void *p); void *take_(const void *p, const char *label) { - /* Overallocate: it's better than risking calloc returning NULL! */ - if (unlikely(label && !labelarr)) - labelarr = calloc(max_taken+1, sizeof(*labelarr)); - - if (unlikely(num_taken == max_taken)) { - const void **new; - - new = realloc(takenarr, sizeof(*takenarr) * (max_taken+1)); - if (unlikely(!new)) { - if (allocfailfn) { - allocfail++; - allocfailfn(p); - return NULL; - } - /* Otherwise we leak p. */ - return (void *)p; - } - takenarr = new; - /* Once labelarr is set, we maintain it. */ - if (labelarr) { + /* Overallocate: it's better than risking calloc returning NULL! */ + if (unlikely(label && !labelarr)) + labelarr = calloc(max_taken+1, sizeof(*labelarr)); + + if (unlikely(num_taken == max_taken)) { + const void **new; + + new = realloc(takenarr, sizeof(*takenarr) * (max_taken+1)); + if (unlikely(!new)) { + if (allocfailfn) { + allocfail++; + allocfailfn(p); + return NULL; + } + /* Otherwise we leak p. */ + return (void *)p; + } + takenarr = new; + /* Once labelarr is set, we maintain it. */ + if (labelarr) { const char **labelarr_new; - labelarr_new = realloc(labelarr, - sizeof(*labelarr) * (max_taken+1)); + labelarr_new = realloc(labelarr, + sizeof(*labelarr) * (max_taken+1)); if (labelarr_new) { labelarr = labelarr_new; } else { @@ -46,81 +46,81 @@ void *take_(const void *p, const char *label) labelarr = NULL; } } - max_taken++; - } - if (unlikely(labelarr)) - labelarr[num_taken] = label; - takenarr[num_taken++] = p; + max_taken++; + } + if (unlikely(labelarr)) + labelarr[num_taken] = label; + takenarr[num_taken++] = p; - return (void *)p; + return (void *)p; } static size_t find_taken(const void *p) { - size_t i; + size_t i; - for (i = 0; i < num_taken; i++) { - if (takenarr[i] == p) - return i+1; - } - return 0; + for (i = 0; i < num_taken; i++) { + if (takenarr[i] == p) + return i+1; + } + return 0; } bool taken(const void *p) { - size_t i; + size_t i; - if (!p && unlikely(allocfail)) { - allocfail--; - return true; - } + if (!p && unlikely(allocfail)) { + allocfail--; + return true; + } - i = find_taken(p); - if (!i) - return false; + i = find_taken(p); + if (!i) + return false; - memmove(&takenarr[i-1], &takenarr[i], - (--num_taken - (i - 1))*sizeof(takenarr[0])); - return true; + memmove(&takenarr[i-1], &takenarr[i], + (--num_taken - (i - 1))*sizeof(takenarr[0])); + return true; } bool is_taken(const void *p) { - if (!p && unlikely(allocfail)) - return true; + if (!p && unlikely(allocfail)) + return true; - return find_taken(p) > 0; + return find_taken(p) > 0; } const char *taken_any(void) { - static char pointer_buf[32]; + static char pointer_buf[32]; - if (num_taken == 0) - return NULL; + if (num_taken == 0) + return NULL; - /* We're *allowed* to have some with labels, some without. */ - if (labelarr) { - size_t i; - for (i = 0; i < num_taken; i++) - if (labelarr[i]) - return labelarr[i]; - } + /* We're *allowed* to have some with labels, some without. */ + if (labelarr) { + size_t i; + for (i = 0; i < num_taken; i++) + if (labelarr[i]) + return labelarr[i]; + } - sprintf(pointer_buf, "%p", takenarr[0]); - return pointer_buf; + sprintf(pointer_buf, "%p", takenarr[0]); + return pointer_buf; } void take_cleanup(void) { - max_taken = num_taken = 0; - free(takenarr); - takenarr = NULL; - free(labelarr); - labelarr = NULL; + max_taken = num_taken = 0; + free(takenarr); + takenarr = NULL; + free(labelarr); + labelarr = NULL; } void take_allocfail(void (*fn)(const void *p)) { - allocfailfn = fn; + allocfailfn = fn; } diff --git a/nostrdb/ccan/ccan/take/take.h b/nostrdb/ccan/ccan/take/take.h index 3de6f99de..8950c6b5b 100644 --- a/nostrdb/ccan/ccan/take/take.h +++ b/nostrdb/ccan/ccan/take/take.h @@ -1,9 +1,9 @@ /* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_TAKE_H #define CCAN_TAKE_H -#include "../config.h" +#include "config.h" #include -#include "str.h" +#include #ifdef CCAN_TAKE_DEBUG #define TAKE_LABEL(p) __FILE__ ":" stringify(__LINE__) ":" stringify(p) @@ -17,8 +17,8 @@ * This doesn't do anything, but useful for documentation. * * Example: - * void print_string(const char *str TAKES); - * + * void print_string(const char *str TAKES); + * */ #define TAKES @@ -41,18 +41,18 @@ * this only returns true once. * * Example: - * // Silly routine to add 1 - * static int *add_one(const int *num TAKES) - * { - * int *ret; - * if (taken(num)) - * ret = (int *)num; - * else - * ret = malloc(sizeof(int)); - * if (ret) - * *ret = (*num) + 1; - * return ret; - * } + * // Silly routine to add 1 + * static int *add_one(const int *num TAKES) + * { + * int *ret; + * if (taken(num)) + * ret = (int *)num; + * else + * ret = malloc(sizeof(int)); + * if (ret) + * *ret = (*num) + 1; + * return ret; + * } */ bool taken(const void *p); @@ -63,15 +63,15 @@ bool taken(const void *p); * This is like the above, but doesn't remove it from the taken list. * * Example: - * // Silly routine to add 1: doesn't handle taken args! - * static int *add_one_notake(const int *num) - * { - * int *ret = malloc(sizeof(int)); - * assert(!is_taken(num)); - * if (ret) - * *ret = (*num) + 1; - * return ret; - * } + * // Silly routine to add 1: doesn't handle taken args! + * static int *add_one_notake(const int *num) + * { + * int *ret = malloc(sizeof(int)); + * assert(!is_taken(num)); + * if (ret) + * *ret = (*num) + 1; + * return ret; + * } */ bool is_taken(const void *p); @@ -83,10 +83,10 @@ bool is_taken(const void *p); * a static char buffer with the pointer value in it. NULL if none are taken. * * Example: - * static void cleanup(void) - * { - * assert(!taken_any()); - * } + * static void cleanup(void) + * { + * assert(!taken_any()); + * } */ const char *taken_any(void); @@ -96,10 +96,10 @@ const char *taken_any(void); * This is useful in atexit() handlers for valgrind-style leak detection. * * Example: - * static void cleanup2(void) - * { - * take_cleanup(); - * } + * static void cleanup2(void) + * { + * take_cleanup(); + * } */ void take_cleanup(void); @@ -113,15 +113,15 @@ void take_cleanup(void); * it like any allocation failure. * * Example: - * static void free_on_fail(const void *p) - * { - * free((void *)p); - * } + * static void free_on_fail(const void *p) + * { + * free((void *)p); + * } * - * static void init(void) - * { - * take_allocfail(free_on_fail); - * } + * static void init(void) + * { + * take_allocfail(free_on_fail); + * } */ void take_allocfail(void (*fn)(const void *p)); diff --git a/nostrdb/ccan/ccan/tal/LICENSE b/nostrdb/ccan/ccan/tal/LICENSE new file mode 120000 index 000000000..2354d1294 --- /dev/null +++ b/nostrdb/ccan/ccan/tal/LICENSE @@ -0,0 +1 @@ +../../licenses/BSD-MIT \ No newline at end of file diff --git a/nostrdb/ccan/ccan/tal/_info b/nostrdb/ccan/ccan/tal/_info new file mode 100644 index 000000000..5285c1632 --- /dev/null +++ b/nostrdb/ccan/ccan/tal/_info @@ -0,0 +1,108 @@ +#include "config.h" +#include +#include + +/** + * tal - compact tree allocator routines (inspired by talloc) + * + * Tal is a hierarchical allocator; any pointer allocated by tal can + * become the parent of another allocation. When you free that parent, + * the children (and grandchildren, etc) are automatically freed. + * + * This allows you to build complex objects based on their lifetimes, eg: + * + * struct foo *X = tal(NULL, struct foo); + * X->val = tal(X, int); + * + * and the pointer X->val would be a "child" of the tal context "X"; + * tal_free(X->val) would free X->val as expected, by tal_free(X) would + * free X and X->val. + * + * With an overhead of approximately 4 pointers per object + * (vs. talloc's 12 pointers), it uses dynamic allocation for + * destructors and child lists, so those operations can fail. It does + * not support talloc's references or failing destructors. + * + * See Also: + * ccan/tal/str (useful string helpers) + * + * Example: + * #include + * #include + * #include + * + * // A structure containing a popened command. + * struct command { + * FILE *f; + * char *command; + * }; + * + * // When struct command is freed, we also want to pclose pipe. + * static void close_cmd(struct command *cmd) + * { + * pclose(cmd->f); + * } + * + * // This function opens a writable pipe to the given command. + * static struct command *open_output_cmd(const tal_t *ctx, + * const char *a0, const char *a1) + * { + * struct command *cmd = tal(ctx, struct command); + * + * if (!cmd) + * return NULL; + * + * // Note that tal/str has helpers to make this much easier! + * cmd->command = tal_arrz(cmd, char, strlen(a0) + strlen(a1) + 2); + * if (!cmd->command) { + * tal_free(cmd); + * return NULL; + * } + * strcat(cmd->command, a0); + * strcat(cmd->command, " "); + * strcat(cmd->command, a1); + * + * cmd->f = popen(cmd->command, "w"); + * if (!cmd->f) { + * tal_free(cmd); + * return NULL; + * } + * tal_add_destructor(cmd, close_cmd); + * return cmd; + * } + * + * int main(int argc, char *argv[]) + * { + * struct command *cmd; + * + * if (argc != 2) + * errx(1, "Usage: %s \n", argv[0]); + * + * cmd = open_output_cmd(NULL, argv[1], "hello"); + * if (!cmd) + * err(1, "Running '%s hello'", argv[1]); + * fprintf(cmd->f, "This is a test\n"); + * tal_free(cmd); + * return 0; + * } + * + * License: BSD-MIT + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/alignof\n"); + printf("ccan/compiler\n"); + printf("ccan/likely\n"); + printf("ccan/list\n"); + printf("ccan/str\n"); + printf("ccan/take\n"); + printf("ccan/typesafe_cb\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/tal/benchmark/Makefile b/nostrdb/ccan/ccan/tal/benchmark/Makefile new file mode 100644 index 000000000..f1e8502b3 --- /dev/null +++ b/nostrdb/ccan/ccan/tal/benchmark/Makefile @@ -0,0 +1,26 @@ +CFLAGS=-O3 -Wall -flto -I../../.. +#CFLAGS=-O3 -Wall -I../../.. +#CFLAGS=-g -Wall -I../../.. +LDFLAGS=-O3 -flto +LDLIBS=-lrt + +all: speed samba-allocs + +speed: speed.o tal.o talloc.o time.o list.o take.o str.o +samba-allocs: samba-allocs.o tal.o talloc.o time.o list.o take.o + +tal.o: ../tal.c + $(CC) $(CFLAGS) -c -o $@ $< +str.o: ../str/str.c + $(CC) $(CFLAGS) -c -o $@ $< +talloc.o: ../../talloc/talloc.c + $(CC) $(CFLAGS) -c -o $@ $< +time.o: ../../time/time.c + $(CC) $(CFLAGS) -c -o $@ $< +list.o: ../../list/list.c + $(CC) $(CFLAGS) -c -o $@ $< +take.o: ../../take/take.c + $(CC) $(CFLAGS) -c -o $@ $< + +clean: + rm -f speed samba-allocs *.o diff --git a/nostrdb/ccan/ccan/tal/benchmark/samba-allocs.c b/nostrdb/ccan/ccan/tal/benchmark/samba-allocs.c new file mode 100644 index 000000000..4bed1b2a2 --- /dev/null +++ b/nostrdb/ccan/ccan/tal/benchmark/samba-allocs.c @@ -0,0 +1,374 @@ +/* Grab dump of Samba4 talloc tree to do benchmarks on it. */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +struct node { + void *n; + struct node *parent; + char *name; + bool destructor; + size_t len; + unsigned int num_children; + struct node *children[0]; +}; + +static int node_count; + +static struct node *new_node(void) +{ + node_count++; + return calloc(sizeof(struct node), 1); +} + +/* struct db_context contains 282 bytes in 5 blocks (ref 0) d=(nil) 0x1f64e70 */ +static struct node *parse(const char *line) +{ + struct node *n = new_node(); + const char *p; + + p = strstr(line, " contains "); + p += strlen(" contains "); + p += strspn(line, " "); + n->len = strtol(p, NULL, 0); + p = strstr(p, "d="); + if (p[2] != '(') + n->destructor = true; + return n; +} + +static void add_child(struct node *parent, struct node *child) +{ + unsigned int i; + struct node *oldp = parent; + + parent = realloc(parent, sizeof(*parent) + + sizeof(parent->children[0]) * (parent->num_children+1)); + parent->children[parent->num_children++] = child; + child->parent = parent; + + if (parent == oldp) + return; + + /* Fix up children's parent pointers. */ + for (i = 0; i < parent->num_children-1; i++) { + assert(parent->children[i]->parent == oldp); + parent->children[i]->parent = parent; + } + + /* Fix up parent's child pointer. */ + if (parent->parent) { + assert(parent->parent->children[parent->parent->num_children-1] + == oldp); + parent->parent->children[parent->parent->num_children-1] + = parent; + } +} + +/* Random string of required length */ +static char *namelen(int len) +{ + char *p = malloc(len); + memset(p, 'x', len-1); + p[len-1] = '\0'; + return p; +} + +static struct node *read_nodes(FILE *f) +{ + char line[4096]; + unsigned int curr_indent = 0, indent; + struct node *n, *curr = new_node(); + + /* Ignore first line */ + fgets(line, 4096, f); + + while (fgets(line, 4096, f)) { + bool is_name; + + indent = strspn(line, " "); + + /* Ignore references for now. */ + if (strstarts(line + indent, "reference to: ")) + continue; + + /* Blank name? Use offset of 'contains' to guess indent! */ + if (strstarts(line + indent, "contains ")) + indent -= 31; + + is_name = strstarts(line + indent, ".name "); + + n = parse(line + indent); + if (is_name) { + curr->name = namelen(n->len); + free(n); + } else { + if (indent > curr_indent) { + assert(indent == curr_indent + 4); + curr_indent += 4; + } else { + /* Go back up to parent. */ + for (curr_indent += 4; + curr_indent != indent; + curr_indent -= 4) + curr = curr->parent; + } + add_child(curr, n); + curr = n; + } + } + while (curr->parent) { + curr = curr->parent; + curr_indent -= 4; + } + assert(curr_indent == 0); + return curr; +} + +static int unused_talloc_destructor(void *p) +{ + return 0; +} + +static void do_tallocs(struct node *node) +{ + unsigned int i; + static int count; + + if (count++ % 16 == 0) + node->n = talloc_array(node->parent ? node->parent->n : NULL, + char, node->len); + else + node->n = talloc_size(node->parent ? node->parent->n : NULL, + node->len); + if (node->destructor) + talloc_set_destructor(node->n, unused_talloc_destructor); + if (node->name) + talloc_set_name(node->n, "%s", node->name); + + for (i = 0; i < node->num_children; i++) + do_tallocs(node->children[i]); +} + +static void free_tallocs(struct node *node) +{ + unsigned int i; + + for (i = 0; i < node->num_children; i++) + free_tallocs(node->children[i]); + + talloc_free(node->n); +} + +static void unused_tal_destructor(void *p) +{ +} + +static void do_tals(struct node *node) +{ + unsigned int i; + static int count; + + node->n = tal_arr(node->parent ? node->parent->n : NULL, + char, node->len); + + if (node->destructor) + tal_add_destructor(node->n, unused_tal_destructor); + if (node->name) + tal_set_name(node->n, node->name); + + for (i = 0; i < node->num_children; i++) + do_tals(node->children[i]); +} + +static void free_tals(struct node *node) +{ + unsigned int i; + + for (i = 0; i < node->num_children; i++) + free_tals(node->children[i]); + + tal_free(node->n); +} + +static void do_mallocs(struct node *node) +{ + unsigned int i; + + node->n = malloc(node->len + (node->name ? strlen(node->name) + 1 : 1)); + + for (i = 0; i < node->num_children; i++) + do_mallocs(node->children[i]); +} + +static void free_mallocs(struct node *node) +{ + unsigned int i; + + for (i = 0; i < node->num_children; i++) + free_mallocs(node->children[i]); + + free(node->n); +} + +/* See proc(5): field 23 is vsize, 24 is rss (in pages) */ +static void dump_vsize(void) +{ + int fd, i; + char buf[1000], *p = buf; + + sprintf(buf, "/proc/%u/stat", getpid()); + fd = open(buf, O_RDONLY); + read(fd, buf, sizeof(buf)); + close(fd); + + for (i = 0; i < 22; i++) { + p += strcspn(p, " "); + p += strspn(p, " "); + } + i = atoi(p); + printf("Virtual size = %i, ", i); + p += strcspn(p, " "); + p += strspn(p, " "); + i = atoi(p); + printf("RSS = %i\n", i * getpagesize()); +} + +#define LOOPS 1000 + +int main(int argc, char *argv[]) +{ + struct timeabs start; + struct timerel alloc_time, free_time; + struct node *root; + unsigned int i; + FILE *f; + bool run_talloc = true, run_tal = true, run_malloc = true; + + f = argv[1] ? fopen(argv[1], "r") : stdin; + root = read_nodes(f); + fclose(f); + printf("Read %u nodes\n", node_count); + + if (argc > 2) { + if (streq(argv[2], "--talloc-size")) { + do_tallocs(root); + dump_vsize(); + exit(0); + } + if (streq(argv[2], "--tal-size")) { + do_tals(root); + dump_vsize(); + exit(0); + } + if (strcmp(argv[2], "--talloc") == 0) + run_tal = run_malloc = false; + else if (strcmp(argv[2], "--tal") == 0) + run_talloc = run_malloc = false; + else if (strcmp(argv[2], "--malloc") == 0) + run_talloc = run_tal = false; + else + errx(1, "Bad flag %s", argv[2]); + } + + if (!run_malloc) + goto after_malloc; + + alloc_time.ts.tv_sec = alloc_time.ts.tv_nsec = 0; + free_time.ts.tv_sec = free_time.ts.tv_nsec = 0; + for (i = 0; i < LOOPS; i++) { + start = time_now(); + do_mallocs(root); + alloc_time = timerel_add(alloc_time, + time_between(time_now(), start)); + + start = time_now(); + free_mallocs(root); + free_time = timerel_add(free_time, + time_between(time_now(), start)); + } + alloc_time = time_divide(alloc_time, i); + free_time = time_divide(free_time, i); + printf("Malloc time: %"PRIu64"ns\n", time_to_nsec(alloc_time)); + printf("Free time: %"PRIu64"ns\n", time_to_nsec(free_time)); + +after_malloc: + if (!run_talloc) + goto after_talloc; + + alloc_time.ts.tv_sec = alloc_time.ts.tv_nsec = 0; + free_time.ts.tv_sec = free_time.ts.tv_nsec = 0; + for (i = 0; i < LOOPS; i++) { + start = time_now(); + do_tallocs(root); + alloc_time = timerel_add(alloc_time, + time_between(time_now(), start)); + + start = time_now(); + free_tallocs(root); + free_time = timerel_add(free_time, + time_between(time_now(), start)); + } + alloc_time = time_divide(alloc_time, i); + free_time = time_divide(free_time, i); + printf("Talloc time: %"PRIu64"ns\n", time_to_nsec(alloc_time)); + printf("talloc_free time: %"PRIu64"ns\n", time_to_nsec(free_time)); + + free_time.ts.tv_sec = free_time.ts.tv_nsec = 0; + for (i = 0; i < LOOPS; i++) { + do_tallocs(root); + + start = time_now(); + talloc_free(root->n); + free_time = timerel_add(free_time, + time_between(time_now(), start)); + } + free_time = time_divide(free_time, i); + printf("Single talloc_free time: %"PRIu64"\n", time_to_nsec(free_time)); + +after_talloc: + if (!run_tal) + goto after_tal; + + alloc_time.ts.tv_sec = alloc_time.ts.tv_nsec = 0; + free_time.ts.tv_sec = free_time.ts.tv_nsec = 0; + for (i = 0; i < LOOPS; i++) { + start = time_now(); + do_tals(root); + alloc_time = timerel_add(alloc_time, + time_between(time_now(), start)); + + start = time_now(); + free_tals(root); + free_time = timerel_add(free_time, + time_between(time_now(), start)); + } + alloc_time = time_divide(alloc_time, i); + free_time = time_divide(free_time, i); + printf("Tal time: %"PRIu64"ns\n", time_to_nsec(alloc_time)); + printf("Tal_free time: %"PRIu64"ns\n", time_to_nsec(free_time)); + + free_time.ts.tv_sec = free_time.ts.tv_nsec = 0; + for (i = 0; i < LOOPS; i++) { + do_tals(root); + + start = time_now(); + tal_free(root->n); + free_time = timerel_add(free_time, + time_between(time_now(), start)); + } + free_time = time_divide(free_time, i); + printf("Single tal_free time: %"PRIu64"ns\n", time_to_nsec(free_time)); +after_tal: + + return 0; +} diff --git a/nostrdb/ccan/ccan/tal/benchmark/speed.c b/nostrdb/ccan/ccan/tal/benchmark/speed.c new file mode 100644 index 000000000..fd2d9cc71 --- /dev/null +++ b/nostrdb/ccan/ccan/tal/benchmark/speed.c @@ -0,0 +1,125 @@ +/* + Taken from samba/lib/talloc/testsuite.c: Unix SMB/CIFS implementation. + + local testing of talloc routines. + + Copyright (C) Andrew Tridgell 2004 + + ** NOTE! The following LGPL license applies to the talloc + ** library. This does NOT imply that all of Samba is released + ** under the LGPL + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 3 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, see . +*/ +#include +#include +#include +#include +#include +#include + +#define LOOPS 1024 + +int main(int argc, char *argv[]) +{ + void *ctx; + unsigned count; + int i, j; + struct timeabs tv; + void *p1, *p2[100], *p3[100]; + bool run_talloc = true, run_tal = true, run_malloc = true; + + if (argv[1]) { + if (strcmp(argv[1], "--talloc") == 0) + run_tal = run_malloc = false; + else if (strcmp(argv[1], "--tal") == 0) + run_talloc = run_malloc = false; + else if (strcmp(argv[1], "--malloc") == 0) + run_talloc = run_tal = false; + else + errx(1, "Bad flag %s", argv[1]); + } + + if (!run_talloc) + goto after_talloc; + + ctx = talloc_new(NULL); + tv = time_now(); + count = 0; + do { + for (i=0;i;CN=NTDS Settings,CN=DC5,CN=Servers,CN=Default-First-Site-Name,CN=Sites,CN=Configuration,DC=samba2000,DC=example,DC=com contains 163 bytes in 1 blocks (ref 0) d=(nil) 0x34269b0 + struct dsdb_class contains 785 bytes in 18 blocks (ref 0) d=(nil) 0x3425e10 + Volume contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3426880 + Volume contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3426810 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3426740 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x34265b0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34266c0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3426640 + const char * contains 66 bytes in 3 blocks (ref 0) d=(nil) 0x3426420 + contentIndexingAllowed contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3426530 + lastContentIndexed contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34264b0 + const char * contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x3426320 + uNCName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x34263a0 + connectionPoint contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3426150 + ;CN=Volume,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x3426240 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34261d0 + 1.2.840.113556.1.5.36 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x34260d0 + volume contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3426060 + Volume contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3425ff0 + struct dsdb_class contains 6127 bytes in 181 blocks (ref 0) d=(nil) 0x341fc80 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3457330 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3457290 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x34395e0 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3439350 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3438400 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3438520 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3437000 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3436910 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3436160 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3435250 + User contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3425da0 + User contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3425d30 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPLCLORC;;;PS)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;CR;ab721a54-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;CR;ab721a56-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;RPWP;77B5B886-944A-11d1-AEBD-0000F80367C1;;PS)(OA;;RPWP;E45795B2-9455-11d1-AEBD-0000F80367C1;;PS)(OA;;RPWP;E45795B3-9455-11d1-AEBD-0000F80367C1;;PS)(OA;;RP;037088f8-0ae1-11d2-b422-00a0c968f939;;RS)(OA;;RP;4c164200-20c0-11d0-a768-00aa006e0529;;RS)(OA;;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;;RS)(A;;RC;;;AU)(OA;;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;;AU)(OA;;RP;77B5B886-944A-11d1-AEBD-0000F80367C1;;AU)(OA;;RP;E45795B3-9455-11d1-AEBD-0000F80367C1;;AU)(OA;;RP;e48d0154-bcf8-11d1-8702-00c04fb96050;;AU)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;WD)(OA;;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;;RS)(OA;;RPWP;bf967a7f-0de6-11d0-a285-00aa003049e2;;CA)(OA;;RP;46a9b11d-60ae-405a-b7e8-ff8a58d456d2;;S-1-5-32-560)(OA;;WPRP;6db69a1c-9422-11d1-aebd-0000f80367c1;;S-1-5-32-561)(OA;;WPRP;5805bc62-bdc9-4428-a5e2-856a0f4c185e;;S-1-5-32-561) contains 1114 bytes in 1 blocks (ref 0) d=(nil) 0x3425860 + const char * contains 75 bytes in 4 blocks (ref 0) d=(nil) 0x3425650 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34257e0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3425760 + builtinDomain contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34256e0 + const char * contains 450 bytes in 22 blocks (ref 0) d=(nil) 0x3424ae0 + audio contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x34255e0 + carLicense contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3425560 + departmentNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34254e0 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3425460 + employeeNumber contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x34253e0 + employeeType contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3425360 + givenName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34252e0 + homePostalAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3425260 + jpegPhoto contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34251e0 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3425160 + photo contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x34250f0 + preferredLanguage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3425070 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3424ff0 + secretary contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3424f70 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3424f00 + userPKCS12 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3424e80 + userSMIMECertificate contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3424e00 + x500uniqueIdentifier contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3424d80 + msDS-SourceObjectDN contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3424d00 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3424c80 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3424c00 + const char * contains 3428 bytes in 129 blocks (ref 0) d=(nil) 0x34204b0 + accountExpires contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3424a60 + aCSPolicyName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34249e0 + adminCount contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3424960 + badPasswordTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34248e0 + badPwdCount contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3424860 + codePage contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x34247e0 + controlAccessRights contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3424760 + dBCSPwd contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x34246e0 + defaultClassStore contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3424660 + desktopProfile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x34245e0 + dynamicLDAPServer contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3424560 + groupMembershipSAM contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34244e0 + groupPriority contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3424460 + groupsToIgnore contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x34243e0 + homeDirectory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3424360 + homeDrive contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34242e0 + lastLogoff contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3424260 + lastLogon contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34241e0 + lastLogonTimestamp contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3424160 + lmPwdHistory contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x34240e0 + localeID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3424060 + lockoutTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3423fe0 + logonCount contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3423f60 + logonHours contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3423ee0 + logonWorkstation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3423e60 + maxStorage contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3423de0 + msCOM-UserPartitionSetLink contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3423d50 + msDRM-IdentityCertificate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3423cc0 + msDS-Cached-Membership contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3423c40 + msDS-Cached-Membership-Time-Stamp contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x3423bb0 + mS-DS-CreatorSID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3423b30 + msDS-Site-Affinity contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3423ab0 + msDS-User-Account-Control-Computed contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x3423a20 + msIIS-FTPDir contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x34239a0 + msIIS-FTPRoot contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3423920 + mSMQDigests contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x34238a0 + mSMQDigestsMig contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3423820 + mSMQSignCertificates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x34237a0 + mSMQSignCertificatesMig contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3423710 + msNPAllowDialin contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3423690 + msNPCallingStationID contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3423610 + msNPSavedCallingStationID contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3423580 + msRADIUSCallbackNumber contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3423500 + msRADIUSFramedIPAddress contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3423470 + msRADIUSFramedRoute contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x34233f0 + msRADIUSServiceType contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3423370 + msRASSavedCallbackNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x34232e0 + msRASSavedFramedIPAddress contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3423250 + msRASSavedFramedRoute contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x34231d0 + networkAddress contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3423150 + ntPwdHistory contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x34230d0 + operatorCount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3423050 + otherLoginWorkstations contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3422fd0 + preferredOU contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3422f50 + primaryGroupID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3422ed0 + profilePath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3422e50 + pwdLastSet contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3422dd0 + scriptPath contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3422d50 + servicePrincipalName contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3422cd0 + terminalServer contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3422c50 + unicodePwd contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3422bd0 + userAccountControl contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3422b50 + userParameters contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3422ad0 + userPrincipalName contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3422a50 + userSharedFolder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34229d0 + userSharedFolderOther contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3422950 + userWorkstations contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34228d0 + userCertificate contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3422850 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34227d0 + homePhone contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3422750 + initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x34226d0 + mail contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3422660 + manager contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x34225e0 + mobile contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3422570 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x3422500 + pager contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x3422490 + msDS-SecondaryKrbTgtNumber contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3422400 + msDS-SupportedEncryptionTypes contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x3422370 + msPKIRoamingTimeStamp contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x34222f0 + msPKIDPAPIMasterKeys contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3422270 + msPKIAccountCredentials contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34221e0 + msRADIUS-FramedInterfaceId contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3422150 + msRADIUS-SavedFramedInterfaceId contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x34220c0 + msRADIUS-FramedIpv6Prefix contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3422030 + msRADIUS-SavedFramedIpv6Prefix contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x3421fa0 + msRADIUS-FramedIpv6Route contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3421f10 + msRADIUS-SavedFramedIpv6Route contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x3421e80 + msDS-LastSuccessfulInteractiveLogonTime contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3421de0 + msDS-LastFailedInteractiveLogonTime contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x3421d50 + msDS-FailedInteractiveLogonCount contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x3421cc0 + msDS-FailedInteractiveLogonCountAtLastSuccessfulLogon contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x3421c20 + msTSProfilePath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3421ba0 + msTSHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3421b20 + msTSHomeDrive contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3421aa0 + msTSAllowLogon contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3421a20 + msTSRemoteControl contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x34219a0 + msTSMaxDisconnectionTime contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3421910 + msTSMaxConnectionTime contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3421890 + msTSMaxIdleTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3421810 + msTSReconnectionAction contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3421790 + msTSBrokenConnectionAction contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3421700 + msTSConnectClientDrives contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3421670 + msTSConnectPrinterDrives contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x34215e0 + msTSDefaultToMainPrinter contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3421550 + msTSWorkDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x34214d0 + msTSInitialProgram contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3421450 + msTSProperty01 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x34213d0 + msTSProperty02 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3421350 + msTSExpireDate contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x34212d0 + msTSLicenseVersion contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3421250 + msTSManagingLS contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x34211d0 + msDS-UserPasswordExpiryTimeComputed contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x3421140 + msDS-AuthenticatedAtDC contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x34210c0 + msTSExpireDate4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3421040 + msTSExpireDate3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3420fc0 + msTSExpireDate2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3420f40 + msTSLicenseVersion4 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3420ec0 + msTSLicenseVersion3 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3420e40 + msTSLicenseVersion2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3420dc0 + msTSManagingLS4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3420d40 + msTSManagingLS3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3420cc0 + msTSManagingLS2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3420c40 + msTSLSProperty02 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3420bc0 + msTSLSProperty01 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3420b40 + msDS-ResultantPSO contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3420ac0 + msPKI-CredentialRoamingTokens contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x3420a30 + msTSSecondaryDesktops contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x34209b0 + msTSPrimaryDesktop contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3420930 + const char * contains 51 bytes in 3 blocks (ref 0) d=(nil) 0x3420320 + posixAccount contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3420430 + shadowAccount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34203b0 + const char * contains 56 bytes in 3 blocks (ref 0) d=(nil) 0x3420190 + mailRecipient contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34202a0 + securityPrincipal contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3420220 + organizationalPerson contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x341ffc0 + ;CN=Person,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x34200b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3420040 + 1.2.840.113556.1.5.9 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x341ff40 + user contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x341fed0 + User contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x341fe60 + struct dsdb_class contains 759 bytes in 16 blocks (ref 0) d=(nil) 0x341f280 + Type-Library contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341fc00 + Type-Library contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341fb80 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x341fab0 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x341f9b0 + classStore contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x341fa30 + const char * contains 73 bytes in 4 blocks (ref 0) d=(nil) 0x341f820 + cOMClassID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x341f930 + cOMInterfaceID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341f8b0 + cOMUniqueLIBID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341f5e0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x341f7b0 + ;CN=Type-Library,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 118 bytes in 1 blocks (ref 0) d=(nil) 0x341f6d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x341f660 + 1.2.840.113556.1.5.53 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341f560 + typeLibrary contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x341f4e0 + Type-Library contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341f460 + struct dsdb_class contains 1247 bytes in 30 blocks (ref 0) d=(nil) 0x341e070 + Trusted-Domain contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341f200 + Trusted-Domain contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341f180 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(OA;;WP;736e4812-af31-11d2-b7df-00805f48caeb;bf967ab8-0de6-11d0-a285-00aa003049e2;CO)(A;;SD;;;CO) contains 190 bytes in 1 blocks (ref 0) d=(nil) 0x341f050 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x341ef50 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x341efd0 + const char * contains 454 bytes in 18 blocks (ref 0) d=(nil) 0x341e620 + additionalTrustedServiceNames contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x341eec0 + domainCrossRef contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341ee40 + domainIdentifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x341edc0 + flatName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x341ed40 + initialAuthIncoming contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x341ecc0 + initialAuthOutgoing contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x341ec40 + mS-DS-CreatorSID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x341ebc0 + msDS-TrustForestTrustInfo contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x341eb30 + securityIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x341eab0 + trustAttributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x341ea30 + trustAuthIncoming contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341e9b0 + trustAuthOutgoing contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341e930 + trustDirection contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341e8b0 + trustPartner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341e830 + trustPosixOffset contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x341e7b0 + trustType contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x341e3d0 + msDS-SupportedEncryptionTypes contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x341e720 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x341e5b0 + ;CN=Trusted-Domain,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x341e4c0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x341e450 + 1.2.840.113556.1.5.34 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341e350 + trustedDomain contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x341e2d0 + Trusted-Domain contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341e250 + struct dsdb_class contains 3553 bytes in 127 blocks (ref 0) d=(nil) 0x3419ae0 + Top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x341e000 + Top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x341df90 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x341dec0 + const char * contains 29 bytes in 2 blocks (ref 0) d=(nil) 0x341ddc0 + lostAndFound contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341de40 + const char * contains 136 bytes in 5 blocks (ref 0) d=(nil) 0x341db00 + msDS-ObjectReferenceBL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x341dd40 + msDFSR-MemberReferenceBL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x341dcb0 + msDFSR-ComputerReferenceBL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x341dc20 + msSFU30PosixMemberOf contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x341dba0 + const char * contains 2686 bytes in 105 blocks (ref 0) d=(nil) 0x341a280 + msDS-NC-RO-Replica-Locations-BL contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x341da70 + adminDescription contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x341d9f0 + adminDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x341d970 + allowedAttributes contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341d8f0 + allowedAttributesEffective contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x341d860 + allowedChildClasses contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x341d7e0 + allowedChildClassesEffective contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x341d750 + bridgeheadServerListBL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x341d6d0 + canonicalName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x341d650 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x341d5e0 + createTimeStamp contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x341d560 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x341d4e0 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x341d460 + displayNamePrintable contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x341d3e0 + dSCorePropagationData contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341d360 + dSASignature contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341d2e0 + extensionName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x341d260 + flags contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x341d1f0 + fromEntry contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x341d170 + frsComputerReferenceBL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x341d0f0 + fRSMemberReferenceBL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x341d070 + fSMORoleOwner contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x341cff0 + showInAdvancedViewOnly contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x341cf70 + isCriticalSystemObject contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x341cef0 + isDeleted contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x341ce70 + memberOf contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x341cdf0 + isPrivilegeHolder contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341cd70 + lastKnownParent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x341ccf0 + managedObjects contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341cc70 + masteredBy contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x341cbf0 + modifyTimeStamp contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x341cb70 + msCOM-UserLink contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341caf0 + msCOM-PartitionSetLink contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x341ca70 + msDS-Approx-Immed-Subordinates contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x341c9e0 + mS-DS-ConsistencyChildCount contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x341c950 + mS-DS-ConsistencyGuid contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341c8d0 + msDs-masteredBy contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x341c850 + msDS-MembersForAzRoleBL contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x341c7c0 + msDS-OperationsForAzTaskBL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x341c730 + msDS-OperationsForAzRoleBL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x341c6a0 + msDS-TasksForAzTaskBL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341c620 + msDS-TasksForAzRoleBL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341c5a0 + msDS-NCReplCursors contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x341c520 + msDS-NCReplInboundNeighbors contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x341c490 + msDS-NCReplOutboundNeighbors contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x341c400 + msDS-NonMembersBL contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341c380 + msDS-ReplAttributeMetaData contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x341c2f0 + msDS-ReplValueMetaData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x341c270 + ownerBL contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x341c1f0 + netbootSCPBL contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341c170 + nonSecurityMemberBL contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x341c0f0 + distinguishedName contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341c070 + objectGUID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x341bff0 + objectVersion contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x341bf70 + otherWellKnownObjects contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341bef0 + partialAttributeDeletionList contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x341be60 + partialAttributeSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x341bde0 + possibleInferiors contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341bd60 + proxiedObjectName contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341bce0 + proxyAddresses contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341bc60 + queryPolicyBL contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x341bbe0 + name contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x341bb70 + replPropertyMetaData contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x341baf0 + replUpToDateVector contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x341ba70 + directReports contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x341b9f0 + repsFrom contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x341b970 + repsTo contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x341b900 + revision contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x341b880 + sDRightsEffective contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341b800 + serverReferenceBL contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341b780 + siteObjectBL contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341b700 + structuralObjectClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341b680 + subRefs contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x341b600 + subSchemaSubEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341b580 + systemFlags contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x341b500 + uSNChanged contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x341b480 + uSNCreated contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x341b400 + uSNDSALastObjRemoved contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x341b380 + USNIntersite contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341b300 + uSNLastObjRem contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x341b280 + uSNSource contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x341b200 + wbemPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x341b180 + wellKnownObjects contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x341b100 + whenChanged contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x341b080 + whenCreated contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x341b000 + wWWHomePage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x341af80 + url contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x341af10 + msDS-KrbTgtLinkBl contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341ae90 + msDS-RevealedDSAs contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341ae10 + msDS-IsFullReplicaFor contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341ad90 + msDS-IsDomainFor contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x341ad10 + msDS-IsPartialReplicaFor contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x341ac80 + msDS-AuthenticatedToAccountlist contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x341abf0 + msDS-RevealedListBL contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x341ab70 + msDS-PrincipalName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x341aaf0 + msDS-PSOApplied contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x341aa70 + msDS-NcType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x341a9f0 + isRecycled contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x341a970 + msDS-LocalEffectiveDeletionTime contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x341a8e0 + msDS-LocalEffectiveRecycleTime contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x341a850 + msDS-OIDToGroupLinkBl contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341a7d0 + msDS-HostServiceAccountBL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x341a740 + msDS-LastKnownRDN contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x341a6c0 + msDS-EnabledFeatureBL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x341a640 + const char * contains 101 bytes in 5 blocks (ref 0) d=(nil) 0x3419fe0 + instanceType contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x341a200 + nTSecurityDescriptor contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x341a180 + objectCategory contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x341a100 + objectClass contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x341a080 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3419f70 + ;CN=Top,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 109 bytes in 1 blocks (ref 0) d=(nil) 0x3419e90 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3419e20 + 2.5.6.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3419da0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3419d30 + Top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3419cc0 + struct dsdb_class contains 721 bytes in 19 blocks (ref 0) d=(nil) 0x3418fb0 + SubSchema contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3419a60 + SubSchema contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34199e0 + D:S: contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3419970 + const char * contains 20 bytes in 2 blocks (ref 0) d=(nil) 0x3419880 + dMD contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3419900 + const char * contains 157 bytes in 7 blocks (ref 0) d=(nil) 0x3419550 + attributeTypes contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3419800 + dITContentRules contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3419780 + extendedAttributeInfo contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3419700 + extendedClassInfo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3419680 + modifyTimeStamp contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3419600 + objectClasses contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3419310 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x34194e0 + ;CN=SubSchema,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x3419400 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3419390 + 2.5.20.1 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3419290 + subSchema contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3419210 + SubSchema contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3419190 + struct dsdb_class contains 738 bytes in 14 blocks (ref 0) d=(nil) 0x34187b0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3457450 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34573d0 + Subnet-Container contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3418f30 + Subnet-Container contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3418eb0 + D:(A;;RPWPCRCCDCLCLORCWOWDSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 89 bytes in 1 blocks (ref 0) d=(nil) 0x3418de0 + const char * contains 31 bytes in 2 blocks (ref 0) d=(nil) 0x3418b10 + sitesContainer contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3418d60 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3418cf0 + ;CN=Subnet-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x3418c00 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3418b90 + 1.2.840.113556.1.5.95 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3418a90 + subnetContainer contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3418a10 + Subnet-Container contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3418990 + struct dsdb_class contains 833 bytes in 18 blocks (ref 0) d=(nil) 0x3417df0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3457570 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x34574d0 + Subnet contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3418740 + Subnet contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x34186d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3418600 + const char * contains 32 bytes in 2 blocks (ref 0) d=(nil) 0x3418500 + subnetContainer contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3418580 + const char * contains 75 bytes in 4 blocks (ref 0) d=(nil) 0x3418370 + location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3418480 + physicalLocationObject contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3418400 + siteObject contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3418130 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3418300 + ;CN=Subnet,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x3418220 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34181b0 + 1.2.840.113556.1.5.96 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x34180b0 + subnet contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3418040 + Subnet contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3417fd0 + struct dsdb_class contains 741 bytes in 16 blocks (ref 0) d=(nil) 0x34173e0 + Storage contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3417d70 + Storage contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3417cf0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3417c20 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3417b20 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3417ba0 + const char * contains 68 bytes in 4 blocks (ref 0) d=(nil) 0x3417910 + iconPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3417aa0 + moniker contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3417a20 + monikerDisplayName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34179a0 + connectionPoint contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3417740 + ;CN=Storage,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 113 bytes in 1 blocks (ref 0) d=(nil) 0x3417830 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34177c0 + 1.2.840.113556.1.5.33 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x34176c0 + storage contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3417640 + Storage contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x34175c0 + struct dsdb_class contains 769 bytes in 14 blocks (ref 0) d=(nil) 0x3416be0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x34576a0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3457610 + Sites-Container contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3417360 + Sites-Container contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34172e0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3417210 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x3416f40 + configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3417190 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3417120 + ;CN=Sites-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x3417030 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3416fc0 + 1.2.840.113556.1.5.107 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3416ec0 + sitesContainer contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3416e40 + Sites-Container contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3416dc0 + struct dsdb_class contains 743 bytes in 14 blocks (ref 0) d=(nil) 0x34162e0 + Site-Link-Bridge contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3416b60 + Site-Link-Bridge contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3416ae0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3416a10 + const char * contains 35 bytes in 2 blocks (ref 0) d=(nil) 0x3416910 + interSiteTransport contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3416990 + const char * contains 29 bytes in 2 blocks (ref 0) d=(nil) 0x3416640 + siteLinkList contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3416890 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3416820 + ;CN=Site-Link-Bridge,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x3416730 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34166c0 + 1.2.840.113556.1.5.148 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x34165c0 + siteLinkBridge contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3416540 + Site-Link-Bridge contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34164c0 + struct dsdb_class contains 780 bytes in 19 blocks (ref 0) d=(nil) 0x3415760 + Site-Link contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3416260 + Site-Link contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34161e0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3416110 + const char * contains 35 bytes in 2 blocks (ref 0) d=(nil) 0x3416010 + interSiteTransport contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3416090 + const char * contains 75 bytes in 5 blocks (ref 0) d=(nil) 0x3415d80 + cost contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3415fa0 + options contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3415f20 + replInterval contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3415ea0 + schedule contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3415e20 + const char * contains 25 bytes in 2 blocks (ref 0) d=(nil) 0x3415ac0 + siteList contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3415d00 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3415c90 + ;CN=Site-Link,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x3415bb0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3415b40 + 1.2.840.113556.1.5.147 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3415a40 + siteLink contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x34159c0 + Site-Link contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3415940 + struct dsdb_class contains 940 bytes in 26 blocks (ref 0) d=(nil) 0x3414a00 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x34577c0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3457730 + Site contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x34156f0 + Site contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3415680 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;LCRPLORC;;;ED) contains 75 bytes in 1 blocks (ref 0) d=(nil) 0x34155c0 + const char * contains 31 bytes in 2 blocks (ref 0) d=(nil) 0x34154c0 + sitesContainer contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3415540 + const char * contains 243 bytes in 12 blocks (ref 0) d=(nil) 0x3414f80 + msDS-BridgeHeadServersUsed contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x34144d0 + gPLink contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3415450 + gPOptions contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34153d0 + location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3415350 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34152d0 + mSMQInterval1 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3415250 + mSMQInterval2 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34151d0 + mSMQNt4Stub contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3415150 + mSMQSiteForeign contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34150d0 + mSMQSiteID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3415050 + notificationList contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3414d40 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3414f10 + ;CN=Site,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 110 bytes in 1 blocks (ref 0) d=(nil) 0x3414e30 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3414dc0 + 1.2.840.113556.1.5.31 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3414cc0 + site contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3414c50 + Site contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3414be0 + struct dsdb_class contains 738 bytes in 12 blocks (ref 0) d=(nil) 0x3414160 + simpleSecurityObject contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3414980 + simpleSecurityObject contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3414900 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x3414830 + const char * contains 29 bytes in 2 blocks (ref 0) d=(nil) 0x3414730 + userPassword contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x34147b0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x34146c0 + ;CN=simpleSecurityObject,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x34145d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3414560 + 0.9.2342.19200300.100.4.19 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3414440 + simpleSecurityObject contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x34143c0 + simpleSecurityObject contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3414340 + struct dsdb_class contains 867 bytes in 21 blocks (ref 0) d=(nil) 0x34134b0 + ShadowAccount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34140e0 + ShadowAccount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3414060 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3413f90 + const char * contains 207 bytes in 11 blocks (ref 0) d=(nil) 0x3413a50 + shadowFlag contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3413f10 + shadowExpire contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3413e90 + shadowInactive contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3413e10 + shadowWarning contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3413d90 + shadowMax contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3413d10 + shadowMin contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3413c90 + shadowLastChange contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3413c10 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3413b90 + userPassword contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3413810 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3413b20 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x34139e0 + ;CN=ShadowAccount,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x3413900 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3413890 + 1.3.6.1.1.1.2.1 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3413790 + shadowAccount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3413710 + ShadowAccount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3413690 + struct dsdb_class contains 832 bytes in 18 blocks (ref 0) d=(nil) 0x3412980 + Service-Instance contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3413430 + Service-Instance contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34133b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x34132e0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x34131e0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3413260 + const char * contains 64 bytes in 3 blocks (ref 0) d=(nil) 0x3413050 + serviceInstanceVersion contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3413160 + winsockAddresses contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34130e0 + const char * contains 51 bytes in 3 blocks (ref 0) d=(nil) 0x3412ec0 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3412fd0 + serviceClassID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3412f50 + connectionPoint contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3412ce0 + ;CN=Service-Instance,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x3412dd0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3412d60 + 1.2.840.113556.1.5.30 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3412c60 + serviceInstance contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3412be0 + Service-Instance contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3412b60 + struct dsdb_class contains 1560 bytes in 34 blocks (ref 0) d=(nil) 0x3411ad0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34578e0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3457850 + const char * contains 56 bytes in 1 blocks (ref 0) d=(nil) 0x343a6e0 + const char * contains 56 bytes in 1 blocks (ref 0) d=(nil) 0x3439960 + const char * contains 56 bytes in 1 blocks (ref 0) d=(nil) 0x3439af0 + const char * contains 56 bytes in 1 blocks (ref 0) d=(nil) 0x3437bf0 + const char * contains 56 bytes in 1 blocks (ref 0) d=(nil) 0x34375f0 + const char * contains 56 bytes in 1 blocks (ref 0) d=(nil) 0x34372f0 + const char * contains 56 bytes in 1 blocks (ref 0) d=(nil) 0x3435d40 + const char * contains 56 bytes in 1 blocks (ref 0) d=(nil) 0x3435c90 + Service-Connection-Point contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x34128f0 + Service-Connection-Point contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3412860 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x3412770 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x3412560 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x34126f0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3412670 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34125f0 + const char * contains 227 bytes in 10 blocks (ref 0) d=(nil) 0x3412020 + appSchemaVersion contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34124e0 + serviceBindingInformation contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3412450 + serviceClassName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34123d0 + serviceDNSName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3412350 + serviceDNSNameType contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34122d0 + vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3412260 + versionNumber contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34121e0 + versionNumberHi contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3412160 + versionNumberLo contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34120e0 + connectionPoint contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3411e40 + ;CN=Service-Connection-Point,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 130 bytes in 1 blocks (ref 0) d=(nil) 0x3411f30 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3411ec0 + 1.2.840.113556.1.5.126 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3411dc0 + serviceConnectionPoint contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3411d40 + Service-Connection-Point contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3411cb0 + struct dsdb_class contains 775 bytes in 17 blocks (ref 0) d=(nil) 0x3411040 + Service-Class contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3411a50 + Service-Class contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34119d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3411900 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3411800 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3411880 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x3411700 + serviceClassInfo contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3411780 + const char * contains 51 bytes in 3 blocks (ref 0) d=(nil) 0x3411570 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3411680 + serviceClassID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3411600 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x34113a0 + ;CN=Service-Class,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x3411490 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3411420 + 1.2.840.113556.1.5.29 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3411320 + serviceClass contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x34112a0 + Service-Class contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3411220 + struct dsdb_class contains 1534 bytes in 36 blocks (ref 0) d=(nil) 0x34107f0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3457a00 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3457970 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x343a360 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x343a650 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x343a0d0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3439d70 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3439e50 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3438260 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x34382f0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3437f70 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3437e50 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3437d40 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3437ad0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3437b60 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3437740 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x34374d0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3437560 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3436770 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3437260 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3436d70 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3435a80 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3436af0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3435b70 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x3435c00 + Service-Administration-Point contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3410fb0 + Service-Administration-Point contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3410f20 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3410e50 + const char * contains 25 bytes in 2 blocks (ref 0) d=(nil) 0x3410d50 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3410dd0 + serviceConnectionPoint contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3410b70 + ;CN=Service-Administration-Point,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 134 bytes in 1 blocks (ref 0) d=(nil) 0x3410c60 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3410bf0 + 1.2.840.113556.1.5.94 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3410af0 + serviceAdministrationPoint contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3410a60 + Service-Administration-Point contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x34109d0 + struct dsdb_class contains 718 bytes in 14 blocks (ref 0) d=(nil) 0x340fff0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3457b10 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3457a90 + Servers-Container contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3410770 + Servers-Container contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x34106f0 + D:(A;;CC;;;BA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 69 bytes in 1 blocks (ref 0) d=(nil) 0x3410640 + const char * contains 21 bytes in 2 blocks (ref 0) d=(nil) 0x3410550 + site contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x34105d0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3410360 + ;CN=Servers-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x3410460 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34103f0 + 1.2.840.113556.1.5.7000.48 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x34102d0 + serversContainer contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3410250 + Servers-Container contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x34101d0 + struct dsdb_class contains 1110 bytes in 25 blocks (ref 0) d=(nil) 0x340f240 + const char * contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x3457c60 + const char * contains 96 bytes in 1 blocks (ref 0) d=(nil) 0x3457b90 + Server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x340ff80 + Server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x340ff10 + D:(A;CI;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 95 bytes in 1 blocks (ref 0) d=(nil) 0x340fe40 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x340fd40 + serversContainer contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x340fdc0 + const char * contains 237 bytes in 11 blocks (ref 0) d=(nil) 0x340f750 + bridgeheadTransportList contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x340fcb0 + dNSHostName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x340fc30 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340fbb0 + serialNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x340fb30 + serverReference contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x340fab0 + mailAddress contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x340fa30 + msDS-isGC contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340f9b0 + msDS-isRODC contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x340f930 + msDS-SiteName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x340f8b0 + msDS-IsUserCachableAtRodc contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x340f820 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x340f580 + ;CN=Server,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x340f670 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x340f600 + 1.2.840.113556.1.5.17 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x340f500 + server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x340f490 + Server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x340f420 + struct dsdb_class contains 973 bytes in 25 blocks (ref 0) d=(nil) 0x340e370 + Security-Principal contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x340f1c0 + Security-Principal contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x340f140 + const char * contains 329 bytes in 13 blocks (ref 0) d=(nil) 0x340ea40 + accountNameHistory contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x340f0c0 + altSecurityIdentities contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x340f040 + msDS-KeyVersionNumber contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x340efc0 + nTSecurityDescriptor contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x340ef40 + tokenGroups contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x340eec0 + tokenGroupsGlobalAndUniversal contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x340ee30 + tokenGroupsNoGCAcceptable contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x340eda0 + rid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x340ed30 + sAMAccountType contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x340ecb0 + securityIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x340ec30 + sIDHistory contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x340ebb0 + supplementalCredentials contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x340eb20 + const char * contains 49 bytes in 3 blocks (ref 0) d=(nil) 0x340e8b0 + objectSid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340e9c0 + sAMAccountName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x340e940 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x340e6d0 + ;CN=Security-Principal,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x340e7c0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x340e750 + 1.2.840.113556.1.5.6 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x340e650 + securityPrincipal contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x340e5d0 + Security-Principal contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x340e550 + struct dsdb_class contains 734 bytes in 15 blocks (ref 0) d=(nil) 0x340da70 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3434fa0 + Security-Object contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x340e2f0 + Security-Object contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x340e270 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x340e1a0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x340e0a0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340e120 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x340dfb0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x340e030 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x340ddd0 + ;CN=Security-Object,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x340dec0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x340de50 + 1.2.840.113556.1.5.1 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x340dd50 + securityObject contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x340dcd0 + Security-Object contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x340dc50 + struct dsdb_class contains 692 bytes in 17 blocks (ref 0) d=(nil) 0x340d050 + Secret contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x340da00 + Secret contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x340d990 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY) contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x340d900 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x340d800 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340d880 + const char * contains 89 bytes in 5 blocks (ref 0) d=(nil) 0x340d560 + currentValue contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x340d780 + lastSetTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x340d700 + priorSetTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x340d680 + priorValue contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x340d600 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x340d390 + ;CN=Secret,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x340d480 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x340d410 + 1.2.840.113556.1.5.28 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x340d310 + secret contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x340d2a0 + Secret contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x340d230 + struct dsdb_class contains 834 bytes in 14 blocks (ref 0) d=(nil) 0x340c6e0 + Sam-Server contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x340cfd0 + Sam-Server contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x340cf50 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPLCLORC;;;RU)(OA;;CR;91d67418-0135-4acc-8d79-c08e857cfbec;;AU)(OA;;CR;91d67418-0135-4acc-8d79-c08e857cfbec;;RU) contains 209 bytes in 1 blocks (ref 0) d=(nil) 0x340ce10 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x340cd10 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340cd90 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x340cc10 + samDomainUpdates contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x340cc90 + securityObject contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x340ca40 + ;CN=Sam-Server,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x340cb30 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x340cac0 + 1.2.840.113556.1.5.5 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x340c9c0 + samServer contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340c940 + Sam-Server contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x340c8c0 + struct dsdb_class contains 1050 bytes in 31 blocks (ref 0) d=(nil) 0x340b4e0 + Sam-Domain-Base contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x340c660 + Sam-Domain-Base contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x340c5e0 + const char * contains 471 bytes in 22 blocks (ref 0) d=(nil) 0x340ba20 + creationTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x340c560 + domainReplica contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x340c4e0 + forceLogoff contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x340c460 + lockOutObservationWindow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x340c3d0 + lockoutDuration contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x340c350 + lockoutThreshold contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x340c2d0 + maxPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340c250 + minPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340c1d0 + minPwdLength contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x340c150 + modifiedCount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x340c0d0 + modifiedCountAtLastProm contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x340c040 + nextRid contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x340bfc0 + nTSecurityDescriptor contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x340bf40 + objectSid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340bec0 + oEMInformation contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x340be40 + pwdHistoryLength contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x340bdc0 + pwdProperties contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x340bd40 + revision contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x340bcc0 + serverRole contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x340bc40 + serverState contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x340bbc0 + uASCompat contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340bb40 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x340b840 + ;CN=Sam-Domain-Base,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x340b930 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x340b8c0 + 1.2.840.113556.1.5.2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x340b7c0 + samDomainBase contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x340b740 + Sam-Domain-Base contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x340b6c0 + struct dsdb_class contains 4397 bytes in 51 blocks (ref 0) d=(nil) 0x3408d00 + Sam-Domain contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x340b460 + Sam-Domain contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x340b3e0 + D:(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-2848215498-2472035911-1947525656-498)(A;;RP;;;WD)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCRCWDWOSW;;;DA)(A;CI;RPWPCRLCLOCCRCWDWOSDSW;;;BA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY)(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;EA)(A;CI;LC;;;RU)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;RP;c7407360-20bf-11d0-a768-00aa006e0529;;RU)(OA;CIIO;RPLCLORC;;bf967a9c-0de6-11d0-a285-00aa003049e2;RU)(A;;RPRC;;;RU)(OA;CIIO;RPLCLORC;;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(A;;LCRPLORC;;;ED)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RPLCLORC;;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;RU)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;AU)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0de6-11d0-a285-00aa003049e2;ED)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;DD)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;e2a36dc9-ae17-47c3-b58b-be34c55ba633;;S-1-5-32-557)(OA;;CR;280f369c-67c7-438e-ae98-1d46f3c6f541;;AU)(OA;;CR;ccc2dc7d-a6ad-4a7a-8846-c04e3cc53501;;AU)(OA;;CR;05c74c5e-4deb-43b4-bd9f-86664c2a7fd5;;AU)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;CIIO;CRRPWP;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)S:(AU;SA;WDWOWP;;;WD)(AU;SA;CR;;;BA)(AU;SA;CR;;;DU)(OU;CISA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(OU;CISA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD) contains 2870 bytes in 1 blocks (ref 0) d=(nil) 0x340a840 + const char * contains 942 bytes in 39 blocks (ref 0) d=(nil) 0x3409330 + auditingPolicy contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x340a7c0 + builtinCreationTime contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x340a740 + builtinModifiedCount contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x340a6c0 + cACertificate contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x340a640 + controlAccessRights contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x340a5c0 + creationTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x340a540 + defaultLocalPolicyObject contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x340a4b0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x340a430 + desktopProfile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x340a3b0 + domainPolicyObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x340a330 + eFSPolicy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340a2b0 + gPLink contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x340a240 + gPOptions contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x340a1c0 + lockOutObservationWindow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x340a130 + lockoutDuration contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x340a0b0 + lockoutThreshold contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x340a030 + lSACreationTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3409fb0 + lSAModifiedCount contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3409f30 + maxPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3409eb0 + minPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3409e30 + minPwdLength contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3409db0 + modifiedCountAtLastProm contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3409d20 + msDS-AllUsersTrustQuota contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3409c90 + msDS-LogonTimeSyncInterval contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3409c00 + ms-DS-MachineAccountQuota contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3409b70 + msDS-PerUserTrustQuota contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3409af0 + msDS-PerUserTrustTombstonesQuota contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x3409a60 + nETBIOSName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x34099e0 + nextRid contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3409960 + nTMixedDomain contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34098e0 + pekKeyChangeInterval contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3409860 + pekList contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x34097e0 + privateKey contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3409760 + pwdHistoryLength contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34096e0 + pwdProperties contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3409660 + replicaSource contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34095e0 + rIDManagerReference contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3409560 + treeName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x34094e0 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x3409230 + samDomainBase contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34092b0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3409060 + ;CN=Sam-Domain,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x3409150 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34090e0 + 1.2.840.113556.1.5.3 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3408fe0 + samDomain contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3408f60 + Sam-Domain contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3408ee0 + struct dsdb_class contains 854 bytes in 14 blocks (ref 0) d=(nil) 0x3408370 + RRAS-Administration-Dictionary contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x3408c70 + RRAS-Administration-Dictionary contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x3408be0 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x3408af0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x34089f0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3408a70 + const char * contains 43 bytes in 2 blocks (ref 0) d=(nil) 0x34088e0 + msRRASVendorAttributeEntry contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3408960 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x34086f0 + ;CN=RRAS-Administration-Dictionary,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 136 bytes in 1 blocks (ref 0) d=(nil) 0x34087e0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3408770 + 1.2.840.113556.1.5.156 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3408670 + rRASAdministrationDictionary contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x34085e0 + RRAS-Administration-Dictionary contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x3408550 + struct dsdb_class contains 942 bytes in 16 blocks (ref 0) d=(nil) 0x34079e0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3457dd0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3457d40 + RRAS-Administration-Connection-Point contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x34082e0 + RRAS-Administration-Connection-Point contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x3408250 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x3408160 + const char * contains 25 bytes in 2 blocks (ref 0) d=(nil) 0x3408060 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x34080e0 + const char * contains 32 bytes in 2 blocks (ref 0) d=(nil) 0x3407d60 + msRRASAttribute contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3407fe0 + serviceAdministrationPoint contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3407f50 + ;CN=RRAS-Administration-Connection-Point,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 142 bytes in 1 blocks (ref 0) d=(nil) 0x3407e50 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3407de0 + 1.2.840.113556.1.5.150 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3407ce0 + rRASAdministrationConnectionPoint contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x3407c50 + RRAS-Administration-Connection-Point contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x3407bc0 + struct dsdb_class contains 802 bytes in 16 blocks (ref 0) d=(nil) 0x3406fc0 + rpc-Server-Element contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3407960 + rpc-Server-Element contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34078e0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3407810 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3407710 + rpcServer contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3407790 + const char * contains 83 bytes in 4 blocks (ref 0) d=(nil) 0x3407500 + rpcNsBindings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3407690 + rpcNsInterfaceID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3407610 + rpcNsTransferSyntax contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3407590 + rpcEntry contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3407320 + ;CN=rpc-Server-Element,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x3407410 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34073a0 + 1.2.840.113556.1.5.73 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x34072a0 + rpcServerElement contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3407220 + rpc-Server-Element contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34071a0 + struct dsdb_class contains 787 bytes in 18 blocks (ref 0) d=(nil) 0x34065b0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3457ee0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3457e60 + rpc-Server contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3406f40 + rpc-Server contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3406ec0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3406df0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3406cf0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3406d70 + const char * contains 75 bytes in 4 blocks (ref 0) d=(nil) 0x3406ae0 + rpcNsCodeset contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3406c70 + rpcNsEntryFlags contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3406bf0 + rpcNsObjectID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3406b70 + rpcEntry contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3406910 + ;CN=rpc-Server,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x3406a00 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3406990 + 1.2.840.113556.1.5.81 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3406890 + rpcServer contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3406810 + rpc-Server contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3406790 + struct dsdb_class contains 838 bytes in 18 blocks (ref 0) d=(nil) 0x3405a80 + rpc-Profile-Element contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3406530 + rpc-Profile-Element contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x34064b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x34063e0 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x34062e0 + rpcProfile contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3406360 + const char * contains 58 bytes in 3 blocks (ref 0) d=(nil) 0x3406150 + rpcNsAnnotation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3406260 + rpcNsProfileEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x34061e0 + const char * contains 55 bytes in 3 blocks (ref 0) d=(nil) 0x3405fc0 + rpcNsInterfaceID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x34060d0 + rpcNsPriority contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3406050 + rpcEntry contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3405de0 + ;CN=rpc-Profile-Element,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x3405ed0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3405e60 + 1.2.840.113556.1.5.26 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3405d60 + rpcProfileElement contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3405ce0 + rpc-Profile-Element contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3405c60 + struct dsdb_class contains 717 bytes in 14 blocks (ref 0) d=(nil) 0x3405280 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3457fe0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3457f60 + rpc-Profile contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3405a00 + rpc-Profile contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3405980 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x34058b0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x34057b0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3405830 + rpcEntry contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x34055e0 + ;CN=rpc-Profile,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 117 bytes in 1 blocks (ref 0) d=(nil) 0x34056d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3405660 + 1.2.840.113556.1.5.82 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3405560 + rpcProfile contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x34054e0 + rpc-Profile contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3405460 + struct dsdb_class contains 724 bytes in 15 blocks (ref 0) d=(nil) 0x34048f0 + rpc-Group contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3405200 + rpc-Group contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3405180 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x34050b0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3404fb0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3405030 + const char * contains 49 bytes in 3 blocks (ref 0) d=(nil) 0x3404e20 + rpcNsGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3404f30 + rpcNsObjectID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3404eb0 + rpcEntry contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3404c50 + ;CN=rpc-Group,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x3404d40 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3404cd0 + 1.2.840.113556.1.5.80 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3404bd0 + rpcGroup contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3404b50 + rpc-Group contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3404ad0 + struct dsdb_class contains 1066 bytes in 20 blocks (ref 0) d=(nil) 0x34040f0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x343a590 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3439cd0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3439a30 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3437ca0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x34376a0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x34371a0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x34359e0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3435e30 + rpc-Entry contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3404870 + rpc-Entry contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34047f0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3404720 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3404620 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34046a0 + connectionPoint contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3404450 + ;CN=rpc-Entry,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x3404540 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34044d0 + 1.2.840.113556.1.5.27 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x34043d0 + rpcEntry contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3404350 + rpc-Entry contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34042d0 + struct dsdb_class contains 2682 bytes in 16 blocks (ref 0) d=(nil) 0x34037f0 + const char * contains 992 bytes in 1 blocks (ref 0) d=(nil) 0x3458490 + const char * contains 960 bytes in 1 blocks (ref 0) d=(nil) 0x3458060 + Rpc-Container contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3404070 + Rpc-Container contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3403ff0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3403f20 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3403e20 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3403ea0 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x3403d20 + nameServiceFlags contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3403da0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3403b50 + ;CN=Rpc-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x3403c40 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3403bd0 + 1.2.840.113556.1.5.136 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3403ad0 + rpcContainer contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3403a50 + Rpc-Container contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x34039d0 + struct dsdb_class contains 804 bytes in 21 blocks (ref 0) d=(nil) 0x3402b70 + room contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3403780 + room contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3403710 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x3403640 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x34034b0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34035c0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3403540 + const char * contains 104 bytes in 6 blocks (ref 0) d=(nil) 0x3403190 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3403430 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x34033b0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3403330 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34032b0 + location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3403230 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x34030a0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3403120 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3402ec0 + ;CN=room,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 110 bytes in 1 blocks (ref 0) d=(nil) 0x3402fc0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3402f50 + 0.9.2342.19200300.100.4.7 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3402e30 + room contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3402dc0 + room contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3402d50 + struct dsdb_class contains 798 bytes in 19 blocks (ref 0) d=(nil) 0x3401fd0 + RID-Set contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3402af0 + RID-Set contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3402a70 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x34029a0 + const char * contains 56 bytes in 4 blocks (ref 0) d=(nil) 0x34027a0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3402920 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34028a0 + user contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3402830 + const char * contains 107 bytes in 5 blocks (ref 0) d=(nil) 0x34024f0 + rIDAllocationPool contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3402720 + rIDNextRID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x34026a0 + rIDPreviousAllocationPool contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3402610 + rIDUsedPool contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3402590 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3402320 + ;CN=RID-Set,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 113 bytes in 1 blocks (ref 0) d=(nil) 0x3402410 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34023a0 + 1.2.840.113556.1.5.129 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x34022a0 + rIDSet contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3402230 + RID-Set contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x34021b0 + struct dsdb_class contains 732 bytes in 14 blocks (ref 0) d=(nil) 0x34016c0 + RID-Manager contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3401f50 + RID-Manager contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3401ed0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)S:(AU;SA;CRWP;;;WD) contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x3401df0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3401cf0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3401d70 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x3401bf0 + rIDAvailablePool contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3401c70 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3401a20 + ;CN=RID-Manager,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 117 bytes in 1 blocks (ref 0) d=(nil) 0x3401b10 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3401aa0 + 1.2.840.113556.1.5.83 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x34019a0 + rIDManager contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3401920 + RID-Manager contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x34018a0 + struct dsdb_class contains 1225 bytes in 34 blocks (ref 0) d=(nil) 0x34003f0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x34588e0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3456200 + rFC822LocalPart contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3401640 + rFC822LocalPart contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34015c0 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x34014f0 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x3401360 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3401470 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34013f0 + const char * contains 429 bytes in 19 blocks (ref 0) d=(nil) 0x34009c0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34012f0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3401270 + destinationIndicator contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x34011f0 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3401160 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34010d0 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3401040 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3400fc0 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3400f40 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3400ec0 + preferredDeliveryMethod contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3400e30 + registeredAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3400db0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3400d30 + sn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3400cc0 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3400c50 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3400bd0 + teletexTerminalIdentifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3400760 + telexNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3400b50 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3400ad0 + domain contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3400950 + ;CN=rFC822LocalPart,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x3400860 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x34007f0 + 0.9.2342.19200300.100.4.14 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x34006d0 + rFC822LocalPart contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3400650 + rFC822LocalPart contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34005d0 + struct dsdb_class contains 1188 bytes in 34 blocks (ref 0) d=(nil) 0x33ff150 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3458a00 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3458970 + Residential-Person contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3400370 + Residential-Person contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34002f0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3400220 + const char * contains 43 bytes in 3 blocks (ref 0) d=(nil) 0x3400090 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x34001a0 + locality contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3400120 + const char * contains 418 bytes in 19 blocks (ref 0) d=(nil) 0x33ff700 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3400010 + destinationIndicator contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33fff90 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33fff00 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33ffe70 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33ffe00 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ffd90 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33ffd00 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ffc80 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ffc00 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33ffb80 + preferredDeliveryMethod contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33ffaf0 + registeredAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ffa70 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ffa00 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33ff990 + teletexTerminalIdentifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33ff900 + telexNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ff880 + title contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33ff810 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ff4b0 + person contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33ff690 + ;CN=Residential-Person,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33ff5a0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ff530 + 2.5.6.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33ff430 + residentialPerson contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ff3b0 + Residential-Person contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ff330 + struct dsdb_class contains 904 bytes in 16 blocks (ref 0) d=(nil) 0x33fe7d0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3458b20 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3458a90 + Remote-Storage-Service-Point contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33ff0c0 + Remote-Storage-Service-Point contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33ff030 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33fef40 + const char * contains 25 bytes in 2 blocks (ref 0) d=(nil) 0x33fee40 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33feec0 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33feb50 + remoteStorageGUID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33fedc0 + serviceAdministrationPoint contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33fed30 + ;CN=Remote-Storage-Service-Point,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 134 bytes in 1 blocks (ref 0) d=(nil) 0x33fec40 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33febd0 + 1.2.840.113556.1.5.146 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33fead0 + remoteStorageServicePoint contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33fea40 + Remote-Storage-Service-Point contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33fe9b0 + struct dsdb_class contains 907 bytes in 19 blocks (ref 0) d=(nil) 0x33fdc00 + Remote-Mail-Recipient contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33fe750 + Remote-Mail-Recipient contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33fe6d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(OA;;CR;ab721a55-1e2f-11d0-9819-00aa0040529b;;AU) contains 142 bytes in 1 blocks (ref 0) d=(nil) 0x33fe5d0 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x33fe440 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33fe550 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33fe4d0 + const char * contains 72 bytes in 4 blocks (ref 0) d=(nil) 0x33fe230 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33fe3c0 + remoteSource contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33fe340 + remoteSourceType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33fe2c0 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x33fdf60 + mailRecipient contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33fe1b0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33fe140 + ;CN=Remote-Mail-Recipient,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33fe050 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33fdfe0 + 1.2.840.113556.1.5.24 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33fdee0 + remoteMailRecipient contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33fde60 + Remote-Mail-Recipient contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33fdde0 + struct dsdb_class contains 741 bytes in 15 blocks (ref 0) d=(nil) 0x33fd280 + Query-Policy contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33fdb80 + Query-Policy contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33fdb00 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33fda30 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33fd930 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33fd9b0 + const char * contains 55 bytes in 3 blocks (ref 0) d=(nil) 0x33fd820 + lDAPAdminLimits contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fd8b0 + lDAPIPDenyList contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33fd5e0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33fd7b0 + ;CN=Query-Policy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 118 bytes in 1 blocks (ref 0) d=(nil) 0x33fd6d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33fd660 + 1.2.840.113556.1.5.106 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33fd560 + queryPolicy contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fd4e0 + Query-Policy contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33fd460 + struct dsdb_class contains 2051 bytes in 68 blocks (ref 0) d=(nil) 0x33fac60 + Print-Queue contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fd200 + Print-Queue contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fd180 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;PO)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO)(A;;RPLCLORC;;;AU) contains 165 bytes in 1 blocks (ref 0) d=(nil) 0x33fd070 + const char * contains 88 bytes in 5 blocks (ref 0) d=(nil) 0x33fcdd0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33fcff0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33fcf70 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33fcef0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33fce70 + const char * contains 1116 bytes in 47 blocks (ref 0) d=(nil) 0x33fb4b0 + assetNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fcd50 + bytesPerMinute contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33fccd0 + defaultPriority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fcc50 + driverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33fcbd0 + driverVersion contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33fcb50 + location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33fcad0 + operatingSystem contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fca50 + operatingSystemHotfix contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33fc9d0 + operatingSystemServicePack contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33fc940 + operatingSystemVersion contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33fc8c0 + physicalLocationObject contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33fc840 + portName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33fc7c0 + printAttributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fc740 + printBinNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33fc6c0 + printCollate contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33fc640 + printColor contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33fc5c0 + printDuplexSupported contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33fc540 + printEndTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33fc4c0 + printFormName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33fc440 + printKeepPrintedJobs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33fc3c0 + printLanguage contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33fc340 + printMACAddress contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fc2c0 + printMaxCopies contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33fc240 + printMaxResolutionSupported contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33fc1b0 + printMaxXExtent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fc130 + printMaxYExtent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fc0b0 + printMediaReady contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fc030 + printMediaSupported contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33fbfb0 + printMemory contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fbf30 + printMinXExtent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fbeb0 + printMinYExtent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fbe30 + printNetworkAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33fbdb0 + printNotify contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fbd30 + printNumberUp contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33fbcb0 + printOrientationsSupported contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33fbc20 + printOwner contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33fbba0 + printPagesPerMinute contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33fbb20 + printRate contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33fbaa0 + printRateUnit contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33fba20 + printSeparatorFile contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33fb9a0 + printShareName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33fb920 + printSpooling contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33fb8a0 + printStaplingSupported contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33fb820 + printStartTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33fb7a0 + printStatus contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fb720 + priority contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33fb6a0 + const char * contains 109 bytes in 6 blocks (ref 0) d=(nil) 0x33fb190 + printerName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fb430 + serverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33fb3b0 + shortServerName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fb330 + uNCName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33fb2b0 + versionNumber contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33fb230 + connectionPoint contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fafc0 + ;CN=Print-Queue,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 117 bytes in 1 blocks (ref 0) d=(nil) 0x33fb0b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33fb040 + 1.2.840.113556.1.5.23 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33faf40 + printQueue contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33faec0 + Print-Queue contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fae40 + struct dsdb_class contains 765 bytes in 17 blocks (ref 0) d=(nil) 0x33fa1d0 + PosixGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33fabe0 + PosixGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33fab60 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33faa90 + const char * contains 121 bytes in 7 blocks (ref 0) d=(nil) 0x33fa770 + memberUid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33faa10 + gidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33fa990 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33fa910 + unixUserPassword contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33fa890 + userPassword contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33fa530 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33fa820 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33fa700 + ;CN=PosixGroup,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x33fa620 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33fa5b0 + 1.3.6.1.1.1.2.2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33fa4b0 + posixGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33fa430 + PosixGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33fa3b0 + struct dsdb_class contains 869 bytes in 22 blocks (ref 0) d=(nil) 0x33f94c0 + PosixAccount contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33fa150 + PosixAccount contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33fa0d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33fa000 + const char * contains 214 bytes in 12 blocks (ref 0) d=(nil) 0x33f9a60 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f9f80 + gecos contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33f9f10 + loginShell contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33f9e90 + unixUserPassword contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33f9e10 + userPassword contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f9d90 + homeDirectory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f9d10 + unixHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33f9c90 + gidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f9c10 + uidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f9820 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f9ba0 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33f9b30 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33f99f0 + ;CN=PosixAccount,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 118 bytes in 1 blocks (ref 0) d=(nil) 0x33f9910 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33f98a0 + 1.3.6.1.1.1.2.0 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f97a0 + posixAccount contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f9720 + PosixAccount contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f96a0 + struct dsdb_class contains 951 bytes in 21 blocks (ref 0) d=(nil) 0x33f87f0 + PKI-Enrollment-Service contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f9440 + PKI-Enrollment-Service contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f93c0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33f92f0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33f91f0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f9270 + const char * contains 216 bytes in 9 blocks (ref 0) d=(nil) 0x33f8da0 + cACertificate contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f9170 + cACertificateDN contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f90f0 + certificateTemplates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33f9070 + dNSHostName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f8ff0 + enrollmentProviders contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f8f70 + signatureAlgorithms contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f8ef0 + msPKI-Site-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f8b50 + msPKI-Enrollment-Servers contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f8e60 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33f8d30 + ;CN=PKI-Enrollment-Service,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 128 bytes in 1 blocks (ref 0) d=(nil) 0x33f8c40 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f8bd0 + 1.2.840.113556.1.5.178 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f8ad0 + pKIEnrollmentService contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33f8a50 + PKI-Enrollment-Service contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f89d0 + struct dsdb_class contains 1461 bytes in 37 blocks (ref 0) d=(nil) 0x33f7210 + PKI-Certificate-Template contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f8760 + PKI-Certificate-Template contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f86d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33f8600 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33f8500 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f8580 + const char * contains 716 bytes in 25 blocks (ref 0) d=(nil) 0x33f77d0 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f8480 + flags contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33f8410 + msPKI-Cert-Template-OID contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33f8380 + msPKI-Certificate-Application-Policy contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x33f82f0 + msPKI-Certificate-Name-Flag contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33f8260 + msPKI-Certificate-Policy contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f81d0 + msPKI-Enrollment-Flag contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33f8150 + msPKI-Minimal-Key-Size contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f80d0 + msPKI-Private-Key-Flag contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f8050 + msPKI-Supersede-Templates contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33f7fc0 + msPKI-Template-Minor-Revision contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33f7f30 + msPKI-Template-Schema-Version contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33f7ea0 + msPKI-RA-Application-Policies contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33f7e10 + msPKI-RA-Policies contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33f7d90 + msPKI-RA-Signature contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f7d10 + pKICriticalExtensions contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33f7c90 + pKIDefaultKeySpec contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33f7c10 + pKIDefaultCSPs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33f7b90 + pKIEnrollmentAccess contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f7b10 + pKIExpirationPeriod contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f7a90 + pKIExtendedKeyUsage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f7a10 + pKIKeyUsage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f7990 + pKIMaxIssuingDepth contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f7910 + pKIOverlapPeriod contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33f7580 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33f7760 + ;CN=PKI-Certificate-Template,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 130 bytes in 1 blocks (ref 0) d=(nil) 0x33f7670 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f7600 + 1.2.840.113556.1.5.177 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f7500 + pKICertificateTemplate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f7480 + PKI-Certificate-Template contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f73f0 + struct dsdb_class contains 866 bytes in 17 blocks (ref 0) d=(nil) 0x33f6870 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3458c50 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3458bb0 + Physical-Location contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33f7190 + Physical-Location contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33f7110 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33f7040 + const char * contains 55 bytes in 3 blocks (ref 0) d=(nil) 0x33f6eb0 + configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f6fc0 + physicalLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33f6f40 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33f6db0 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f6e30 + locality contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33f6bd0 + ;CN=Physical-Location,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x33f6cc0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f6c50 + 1.2.840.113556.1.5.97 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33f6b50 + physicalLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33f6ad0 + Physical-Location contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33f6a50 + struct dsdb_class contains 1011 bytes in 26 blocks (ref 0) d=(nil) 0x33f5b20 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3458d80 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3458cf0 + const char * contains 128 bytes in 1 blocks (ref 0) d=(nil) 0x3436200 + Person contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33f6800 + Person contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33f6790 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33f66c0 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x33f6530 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f6640 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f65c0 + const char * contains 46 bytes in 2 blocks (ref 0) d=(nil) 0x33f6420 + attributeCertificateAttribute contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33f64a0 + const char * contains 101 bytes in 6 blocks (ref 0) d=(nil) 0x33f6110 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33f63a0 + serialNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f6320 + sn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f62b0 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f6230 + userPassword contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f61b0 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x33f6020 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f60a0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33f5fb0 + ;CN=Person,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x33f5ed0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f5e60 + 2.5.6.6 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33f5de0 + person contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33f5d70 + Person contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33f5d00 + struct dsdb_class contains 1309 bytes in 40 blocks (ref 0) d=(nil) 0x33f4460 + Package-Registration contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33f5aa0 + Package-Registration contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33f5a20 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33f5950 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x33f5850 + classStore contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33f58d0 + const char * contains 583 bytes in 28 blocks (ref 0) d=(nil) 0x33f4a10 + canUpgradeScript contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33f57d0 + categories contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33f5750 + cOMClassID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33f56d0 + cOMInterfaceID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33f5650 + cOMProgID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f55d0 + cOMTypelibId contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f5550 + fileExtPriority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f54d0 + iconPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33f5450 + installUiLevel contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33f53d0 + lastUpdateSequence contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f5350 + localeID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33f52d0 + machineArchitecture contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f5250 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f51d0 + msiFileList contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f5150 + msiScript contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f50d0 + msiScriptName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f5050 + msiScriptPath contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f4fd0 + msiScriptSize contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f4f50 + packageFlags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f4ed0 + packageName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f4e50 + packageType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f4dd0 + productCode contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f4d50 + setupCommand contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f4cd0 + upgradeProductCode contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f4c50 + vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33f4be0 + versionNumberHi contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f4b60 + versionNumberLo contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f47c0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33f49a0 + ;CN=Package-Registration,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x33f48b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f4840 + 1.2.840.113556.1.5.49 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33f4740 + packageRegistration contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f46c0 + Package-Registration contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33f4640 + struct dsdb_class contains 2861 bytes in 51 blocks (ref 0) d=(nil) 0x33f27d0 + const char * contains 560 bytes in 1 blocks (ref 0) d=(nil) 0x34590b0 + const char * contains 552 bytes in 1 blocks (ref 0) d=(nil) 0x3458e10 + Organizational-Unit contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f43e0 + Organizational-Unit contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f4360 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(OA;;CCDC;bf967a86-0de6-11d0-a285-00aa003049e2;;AO)(OA;;CCDC;bf967aba-0de6-11d0-a285-00aa003049e2;;AO)(OA;;CCDC;bf967a9c-0de6-11d0-a285-00aa003049e2;;AO)(OA;;CCDC;bf967aa8-0de6-11d0-a285-00aa003049e2;;PO)(A;;RPLCLORC;;;AU)(A;;LCRPLORC;;;ED)(OA;;CCDC;4828CC14-1437-45bc-9B07-AD6F015E5F28;;AO) contains 366 bytes in 1 blocks (ref 0) d=(nil) 0x33f4180 + const char * contains 90 bytes in 5 blocks (ref 0) d=(nil) 0x33f3ee0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f4100 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f4080 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f4000 + country contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33f3f80 + const char * contains 687 bytes in 32 blocks (ref 0) d=(nil) 0x33f2df0 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33f3e60 + c contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33f3df0 + countryCode contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f3d70 + defaultGroup contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f3cf0 + desktopProfile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33f3c70 + destinationIndicator contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33f3bf0 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f3b60 + gPLink contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33f3af0 + gPOptions contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f3a70 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33f39e0 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33f3970 + thumbnailLogo contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f38f0 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f3870 + msCOM-UserPartitionSetLink contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33f37e0 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33f3750 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f36d0 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f3650 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33f35d0 + preferredDeliveryMethod contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33f3540 + registeredAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33f34c0 + searchGuide contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f3440 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33f33c0 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f3350 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33f32e0 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f3260 + teletexTerminalIdentifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33f31d0 + telexNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f3150 + co contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f30e0 + uPNSuffixes contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f3060 + userPassword contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f2fe0 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f2f60 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x33f2d00 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f2d80 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33f2c90 + ;CN=Organizational-Unit,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33f2ba0 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f2b30 + 2.5.6.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33f2ab0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f2a30 + Organizational-Unit contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f29b0 + struct dsdb_class contains 1213 bytes in 36 blocks (ref 0) d=(nil) 0x33f1330 + Organizational-Role contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f2750 + Organizational-Role contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f26d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33f2600 + const char * contains 74 bytes in 4 blocks (ref 0) d=(nil) 0x33f23f0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f2580 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f2500 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f2480 + const char * contains 440 bytes in 20 blocks (ref 0) d=(nil) 0x33f1950 + destinationIndicator contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33f2370 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f22e0 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33f2250 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33f21e0 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f2170 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33f20e0 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f2060 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f1fe0 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33f1f60 + preferredDeliveryMethod contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33f1ed0 + registeredAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33f1e50 + roleOccupant contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f1dd0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33f1d50 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f1ce0 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33f1c70 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f1bf0 + teletexTerminalIdentifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33f1b60 + telexNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f1ae0 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f1a60 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x33f1860 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f18e0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33f17f0 + ;CN=Organizational-Role,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33f1700 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33f1690 + 2.5.6.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33f1610 + organizationalRole contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f1590 + Organizational-Role contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f1510 + struct dsdb_class contains 2367 bytes in 82 blocks (ref 0) d=(nil) 0x33ee8d0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34593e0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3459350 + const char * contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x34390e0 + const char * contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x34378a0 + const char * contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x3435ef0 + Organizational-Person contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33f12b0 + Organizational-Person contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33f1230 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33f1160 + const char * contains 74 bytes in 4 blocks (ref 0) d=(nil) 0x33f0f50 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f10e0 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33f1060 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33f0fe0 + const char * contains 278 bytes in 10 blocks (ref 0) d=(nil) 0x33f09e0 + homePostalAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33f0ed0 + msExchHouseIdentifier contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33f0e50 + houseIdentifier contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33f0dd0 + msDS-PhoneticFirstName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f0d50 + msDS-PhoneticLastName contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33f0cd0 + msDS-PhoneticDepartment contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33f0c40 + msDS-PhoneticCompanyName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f0bb0 + msDS-PhoneticDisplayName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f0b20 + msDS-HABSeniorityIndex contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33f0aa0 + const char * contains 1097 bytes in 53 blocks (ref 0) d=(nil) 0x33eedf0 + streetAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f0960 + assistant contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f08e0 + company contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33f0860 + countryCode contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33f07e0 + c contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33f0770 + department contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33f06f0 + destinationIndicator contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33f0670 + division contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33f05f0 + mail contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x33f0580 + employeeID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33f0500 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f0470 + generationQualifier contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33f03f0 + givenName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33f0370 + initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33f02f0 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33f0260 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33f01f0 + thumbnailLogo contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33f0170 + manager contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33f00f0 + msDS-AllowedToDelegateTo contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33f0060 + mhsORAddress contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33effe0 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33eff70 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33eff00 + otherMailbox contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33efe80 + middleName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33efe00 + personalTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33efd80 + otherFacsimileTelephoneNumber contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33efcf0 + homePhone contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33efc70 + otherHomePhone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33efbf0 + otherIpPhone contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33efb70 + ipPhone contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33efaf0 + primaryInternationalISDNNumber contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33efa60 + otherMobile contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ef9e0 + mobile contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33ef970 + otherTelephone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ef8f0 + otherPager contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33ef870 + pager contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33ef800 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33ef770 + thumbnailPhoto contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ef6f0 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ef670 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ef5f0 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33ef570 + preferredDeliveryMethod contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33ef4e0 + registeredAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ef460 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ef3f0 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33ef380 + teletexTerminalIdentifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33ef2f0 + telexNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ef270 + primaryTelexNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ef1f0 + co contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ef180 + title contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33ef110 + comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33ef090 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ef010 + person contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33eed80 + ;CN=Person,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x33eeca0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33eec30 + 2.5.6.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33eebb0 + organizationalPerson contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33eeb30 + Organizational-Person contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33eeab0 + struct dsdb_class contains 1620 bytes in 39 blocks (ref 0) d=(nil) 0x33ed3a0 + const char * contains 224 bytes in 1 blocks (ref 0) d=(nil) 0x34595b0 + const char * contains 200 bytes in 1 blocks (ref 0) d=(nil) 0x3459470 + Organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ee850 + Organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ee7d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33ee700 + const char * contains 59 bytes in 4 blocks (ref 0) d=(nil) 0x33ee4f0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33ee680 + country contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33ee600 + locality contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33ee580 + const char * contains 474 bytes in 21 blocks (ref 0) d=(nil) 0x33ed9b0 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ee470 + destinationIndicator contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33ee3f0 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33ee360 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33ee2d0 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33ee260 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33ee1d0 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ee150 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ee0d0 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33ee050 + preferredDeliveryMethod contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33edfc0 + registeredAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33edf40 + searchGuide contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33edec0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33ede40 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33eddd0 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33edd60 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33edce0 + teletexTerminalIdentifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33edc50 + telexNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33edbd0 + userPassword contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33edb50 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33edad0 + const char * contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x33ed8c0 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33ed940 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33ed850 + ;CN=Organization,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 118 bytes in 1 blocks (ref 0) d=(nil) 0x33ed770 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33ed700 + 2.5.6.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33ed680 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ed600 + Organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ed580 + struct dsdb_class contains 865 bytes in 24 blocks (ref 0) d=(nil) 0x33ec5b0 + OncRpc contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33ed330 + OncRpc contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33ed2c0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33ed1f0 + const char * contains 86 bytes in 5 blocks (ref 0) d=(nil) 0x33ecf60 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ed170 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33ed0f0 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33ed080 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33ed000 + const char * contains 115 bytes in 6 blocks (ref 0) d=(nil) 0x33ecc40 + msSFU30Aliases contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ecee0 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33ece60 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ecde0 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ecd60 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ecce0 + const char * contains 40 bytes in 3 blocks (ref 0) d=(nil) 0x33ecac0 + oncRpcNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ecbc0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ecb50 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33ec8f0 + ;CN=OncRpc,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x33ec9e0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ec970 + 1.3.6.1.1.1.2.5 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ec870 + oncRpc contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33ec800 + OncRpc contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33ec790 + struct dsdb_class contains 916 bytes in 20 blocks (ref 0) d=(nil) 0x33eba70 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3459790 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3459700 + NTFRS-Subscriptions contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ec530 + NTFRS-Subscriptions contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ec4b0 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33ec3c0 + const char * contains 65 bytes in 4 blocks (ref 0) d=(nil) 0x33ec1c0 + nTFRSSubscriptions contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ec340 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33ec2c0 + user contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x33ec250 + const char * contains 72 bytes in 4 blocks (ref 0) d=(nil) 0x33ebfb0 + fRSExtensions contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ec140 + fRSVersion contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33ec0c0 + fRSWorkingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ec040 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33ebdd0 + ;CN=NTFRS-Subscriptions,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33ebec0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ebe50 + 1.2.840.113556.1.5.154 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ebd50 + nTFRSSubscriptions contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ebcd0 + NTFRS-Subscriptions contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ebc50 + struct dsdb_class contains 1061 bytes in 26 blocks (ref 0) d=(nil) 0x33eaac0 + NTFRS-Subscriber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33eb9f0 + NTFRS-Subscriber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33eb970 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33eb880 + const char * contains 35 bytes in 2 blocks (ref 0) d=(nil) 0x33eb780 + nTFRSSubscriptions contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33eb800 + const char * contains 259 bytes in 11 blocks (ref 0) d=(nil) 0x33eb190 + fRSExtensions contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33eb700 + fRSFaultCondition contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33eb680 + fRSFlags contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33eb600 + fRSMemberReference contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33eb580 + fRSServiceCommand contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33eb500 + fRSServiceCommandStatus contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33eb470 + fRSTimeLastCommand contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33eb3f0 + fRSTimeLastConfigChange contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33eb360 + fRSUpdateTimeout contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33eb2e0 + schedule contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33eb260 + const char * contains 51 bytes in 3 blocks (ref 0) d=(nil) 0x33eb000 + fRSRootPath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33eb110 + fRSStagingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33eb090 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33eae20 + ;CN=NTFRS-Subscriber,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x33eaf10 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33eaea0 + 1.2.840.113556.1.5.155 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33eada0 + nTFRSSubscriber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ead20 + NTFRS-Subscriber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33eaca0 + struct dsdb_class contains 913 bytes in 20 blocks (ref 0) d=(nil) 0x33e9f60 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34598b0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3459820 + NTFRS-Settings contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33eaa40 + NTFRS-Settings contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ea9c0 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33ea8d0 + const char * contains 96 bytes in 5 blocks (ref 0) d=(nil) 0x33ea630 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ea850 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ea7d0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33ea750 + nTFRSSettings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ea6d0 + const char * contains 48 bytes in 3 blocks (ref 0) d=(nil) 0x33ea4a0 + fRSExtensions contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ea5b0 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33ea530 + applicationSettings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ea2c0 + ;CN=NTFRS-Settings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x33ea3b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ea340 + 1.2.840.113556.1.5.89 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ea240 + nTFRSSettings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ea1c0 + NTFRS-Settings contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ea140 + struct dsdb_class contains 1251 bytes in 32 blocks (ref 0) d=(nil) 0x33e8d80 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34599d0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3459940 + NTFRS-Replica-Set contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e9ee0 + NTFRS-Replica-Set contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e9e60 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY)(OA;;CCDC;2a132586-9373-11d1-aebc-0000f80367c1;;ED) contains 180 bytes in 1 blocks (ref 0) d=(nil) 0x33e9d40 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x33e9c40 + nTFRSSettings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e9cc0 + const char * contains 402 bytes in 18 blocks (ref 0) d=(nil) 0x33e92c0 + fRSDirectoryFilter contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33e9bc0 + fRSDSPoll contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e9b40 + fRSExtensions contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e9ac0 + fRSFileFilter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e9a40 + fRSFlags contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33e99c0 + fRSLevelLimit contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e9940 + fRSPartnerAuthLevel contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33e98c0 + fRSPrimaryMember contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33e9840 + fRSReplicaSetGUID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e97c0 + fRSReplicaSetType contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e9740 + fRSRootSecurity contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e96c0 + fRSServiceCommand contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e9640 + fRSVersionGUID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33e95c0 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e9540 + msFRS-Hub-Member contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33e94c0 + msFRS-Topology-Pref contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33e9440 + schedule contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33e93c0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33e90e0 + ;CN=NTFRS-Replica-Set,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x33e91d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e9160 + 1.2.840.113556.1.5.102 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33e9060 + nTFRSReplicaSet contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e8fe0 + NTFRS-Replica-Set contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e8f60 + struct dsdb_class contains 1061 bytes in 26 blocks (ref 0) d=(nil) 0x33e7ef0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3459ae0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3459a60 + NTFRS-Member contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e8d00 + NTFRS-Member contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e8c80 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33e8b90 + const char * contains 32 bytes in 2 blocks (ref 0) d=(nil) 0x33e8a90 + nTFRSReplicaSet contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e8b10 + const char * contains 301 bytes in 12 blocks (ref 0) d=(nil) 0x33e8420 + frsComputerReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33e8a10 + fRSControlDataCreation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33e8990 + fRSControlInboundBacklog contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33e8900 + fRSControlOutboundBacklog contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33e8870 + fRSExtensions contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e87f0 + fRSFlags contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33e8770 + fRSPartnerAuthLevel contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33e86f0 + fRSRootSecurity contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e8670 + fRSServiceCommand contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e85f0 + fRSUpdateTimeout contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33e8570 + serverReference contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e84f0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33e8250 + ;CN=NTFRS-Member,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 118 bytes in 1 blocks (ref 0) d=(nil) 0x33e8340 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e82d0 + 1.2.840.113556.1.5.153 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33e81d0 + nTFRSMember contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e8150 + NTFRS-Member contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e80d0 + struct dsdb_class contains 945 bytes in 21 blocks (ref 0) d=(nil) 0x33e7200 + NTDS-Site-Settings contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33e7e70 + NTDS-Site-Settings contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33e7df0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33e7d20 + const char * contains 21 bytes in 2 blocks (ref 0) d=(nil) 0x33e7c30 + site contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x33e7cb0 + const char * contains 216 bytes in 9 blocks (ref 0) d=(nil) 0x33e77d0 + interSiteTopologyFailover contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33e7ba0 + interSiteTopologyGenerator contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33e7b10 + interSiteTopologyRenew contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33e7a90 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e7a10 + msDS-Preferred-GC-Site contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33e7990 + options contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33e7910 + queryPolicyObject contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e7890 + schedule contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33e7560 + applicationSiteSettings contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33e7740 + ;CN=NTDS-Site-Settings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33e7650 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e75e0 + 1.2.840.113556.1.5.69 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33e74e0 + nTDSSiteSettings contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33e7460 + NTDS-Site-Settings contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33e73e0 + struct dsdb_class contains 981 bytes in 22 blocks (ref 0) d=(nil) 0x33e65b0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3459c00 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3459b60 + NTDS-Service contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e7180 + NTDS-Service contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e7100 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33e7030 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33e6f30 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e6fb0 + const char * contains 200 bytes in 8 blocks (ref 0) d=(nil) 0x33e6ae0 + dSHeuristics contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e6eb0 + garbageCollPeriod contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e6e30 + msDS-Other-Settings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33e6db0 + replTopologyStayOfExecution contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33e6d20 + sPNMappings contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e6ca0 + tombstoneLifetime contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e6c20 + msDS-DeletedObjectLifetime contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33e6b90 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33e6910 + ;CN=NTDS-Service,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 118 bytes in 1 blocks (ref 0) d=(nil) 0x33e6a00 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e6990 + 1.2.840.113556.1.5.72 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33e6890 + nTDSService contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e6810 + NTDS-Service contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e6790 + struct dsdb_class contains 734 bytes in 15 blocks (ref 0) d=(nil) 0x33e5d30 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3459d20 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3459ca0 + NTDS-DSA-RO contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e6530 + NTDS-DSA-RO contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e64b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33e63e0 + const char * contains 44 bytes in 3 blocks (ref 0) d=(nil) 0x33e6260 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e6360 + server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33e62f0 + nTDSDSA contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33e6090 + ;CN=NTDS-DSA-RO,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 117 bytes in 1 blocks (ref 0) d=(nil) 0x33e6180 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e6110 + 1.2.840.113556.1.5.254 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33e6010 + nTDSDSARO contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e5f90 + NTDS-DSA-RO contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e5f10 + struct dsdb_class contains 1501 bytes in 46 blocks (ref 0) d=(nil) 0x33e4560 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3459e20 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3459da0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x343ab00 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34377d0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3436640 + NTDS-DSA contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33e5cb0 + NTDS-DSA contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33e5c30 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33e5b60 + const char * contains 44 bytes in 3 blocks (ref 0) d=(nil) 0x33e59e0 + server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33e5af0 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e5a70 + const char * contains 717 bytes in 28 blocks (ref 0) d=(nil) 0x33e4ab0 + msDS-EnabledFeature contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33e5960 + dMDLocation contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e58e0 + fRSRootPath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e5860 + hasMasterNCs contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e57e0 + hasPartialReplicaNCs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33e5760 + invocationId contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e56e0 + lastBackupRestorationTime contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33e5650 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e55d0 + msDS-Behavior-Version contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33e5550 + msDS-HasDomainNCs contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e54d0 + msDS-hasMasterNCs contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e5450 + msDS-HasInstantiatedNCs contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33e53c0 + msDS-ReplicationEpoch contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33e5340 + networkAddress contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33e52c0 + options contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33e5240 + queryPolicyObject contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e51c0 + retiredReplDSASignatures contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33e5130 + msDS-RetiredReplNCSignatures contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33e50a0 + serverReference contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e5020 + msDS-hasFullReplicaNCs contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33e4fa0 + msDS-RevealOnDemandGroup contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33e4f10 + msDS-NeverRevealGroup contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33e4e90 + msDS-RevealedUsers contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33e4e10 + msDS-isGC contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e4d90 + msDS-isRODC contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e4d10 + msDS-SiteName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e4c90 + msDS-IsUserCachableAtRodc contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33e4c00 + applicationSettings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33e48d0 + ;CN=NTDS-DSA,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 114 bytes in 1 blocks (ref 0) d=(nil) 0x33e49d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e4960 + 1.2.840.113556.1.5.7000.47 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33e4840 + nTDSDSA contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33e47c0 + NTDS-DSA contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33e4740 + struct dsdb_class contains 920 bytes in 23 blocks (ref 0) d=(nil) 0x33e3780 + NTDS-Connection contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e44e0 + NTDS-Connection contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e4460 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33e4390 + const char * contains 68 bytes in 4 blocks (ref 0) d=(nil) 0x33e4180 + nTDSDSA contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33e4310 + nTFRSReplicaSet contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e4290 + nTFRSMember contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e4210 + const char * contains 108 bytes in 5 blocks (ref 0) d=(nil) 0x33e3ed0 + generatedConnection contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33e4100 + mS-DS-ReplicatesNCReason contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33e4070 + schedule contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33e3ff0 + transportType contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e3f70 + const char * contains 69 bytes in 4 blocks (ref 0) d=(nil) 0x33e3cc0 + enabledConnection contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e3e50 + fromServer contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33e3dd0 + options contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33e3d50 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x33e3ae0 + ;CN=NTDS-Connection,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x33e3bd0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e3b60 + 1.2.840.113556.1.5.71 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33e3a60 + nTDSConnection contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33e39e0 + NTDS-Connection contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e3960 + struct dsdb_class contains 857 bytes in 23 blocks (ref 0) d=(nil) 0x33e29e0 + NisObject contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e3700 + NisObject contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e3680 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33e35b0 + const char * contains 86 bytes in 5 blocks (ref 0) d=(nil) 0x33e3320 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33e3530 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e34b0 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33e3440 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e33c0 + const char * contains 73 bytes in 4 blocks (ref 0) d=(nil) 0x33e3110 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33e32a0 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e3220 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e31a0 + const char * contains 58 bytes in 4 blocks (ref 0) d=(nil) 0x33e2f10 + nisMapEntry contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e3090 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33e3010 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e2fa0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33e2d40 + ;CN=NisObject,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x33e2e30 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e2dc0 + 1.3.6.1.1.1.2.10 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33e2cc0 + nisObject contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e2c40 + NisObject contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e2bc0 + struct dsdb_class contains 970 bytes in 26 blocks (ref 0) d=(nil) 0x33e1a80 + NisNetgroup contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e2960 + NisNetgroup contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e28e0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33e2810 + const char * contains 86 bytes in 5 blocks (ref 0) d=(nil) 0x33e2580 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33e2790 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e2710 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33e26a0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e2620 + const char * contains 216 bytes in 9 blocks (ref 0) d=(nil) 0x33e20a0 + msSFU30NetgroupUserAtDomain contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33e24f0 + msSFU30NetgroupHostAtDomain contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33e2460 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33e23e0 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33e2360 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e22e0 + nisNetgroupTriple contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e2260 + memberNisNetgroup contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e21e0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e2160 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x33e1fb0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e2030 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33e1de0 + ;CN=NisNetgroup,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 117 bytes in 1 blocks (ref 0) d=(nil) 0x33e1ed0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e1e60 + 1.3.6.1.1.1.2.8 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e1d60 + nisNetgroup contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e1ce0 + NisNetgroup contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e1c60 + struct dsdb_class contains 921 bytes in 21 blocks (ref 0) d=(nil) 0x33e0f30 + const char * contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x3459f60 + const char * contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x3459ea0 + NisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33e1a10 + NisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33e19a0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33e18d0 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x33e16c0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33e1850 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e17d0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e1750 + const char * contains 28 bytes in 2 blocks (ref 0) d=(nil) 0x33e15c0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e1640 + const char * contains 38 bytes in 3 blocks (ref 0) d=(nil) 0x33e1440 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33e1540 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e14d0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33e1270 + ;CN=NisMap,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x33e1360 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e12f0 + 1.3.6.1.1.1.2.9 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e11f0 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33e1180 + NisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33e1110 + struct dsdb_class contains 917 bytes in 23 blocks (ref 0) d=(nil) 0x33e0170 + ms-WMI-WMIGPO contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e0eb0 + ms-WMI-WMIGPO contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e0e30 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSW;;;DA)(A;;CC;;;PA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 101 bytes in 1 blocks (ref 0) d=(nil) 0x33e0d60 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33e0c60 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33e0ce0 + const char * contains 184 bytes in 9 blocks (ref 0) d=(nil) 0x33e07a0 + msWMI-intFlags1 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e0be0 + msWMI-intFlags2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e0b60 + msWMI-intFlags3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e0ae0 + msWMI-intFlags4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33e0a60 + msWMI-Parm1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e09e0 + msWMI-Parm2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e0960 + msWMI-Parm3 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e08e0 + msWMI-Parm4 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33e0860 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33e06a0 + msWMI-TargetClass contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33e0720 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33e04d0 + ;CN=ms-WMI-WMIGPO,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x33e05c0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33e0550 + 1.2.840.113556.1.5.215 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33e0450 + msWMI-WMIGPO contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33e03d0 + ms-WMI-WMIGPO contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33e0350 + struct dsdb_class contains 844 bytes in 15 blocks (ref 0) d=(nil) 0x33df780 + ms-WMI-UnknownRangeParam contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33e00e0 + ms-WMI-UnknownRangeParam contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33e0050 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33dff80 + const char * contains 46 bytes in 2 blocks (ref 0) d=(nil) 0x33dfe70 + msWMI-MergeablePolicyTemplate contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33dfef0 + const char * contains 65 bytes in 3 blocks (ref 0) d=(nil) 0x33dfce0 + msWMI-NormalizedClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33dfdf0 + msWMI-TargetObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33dfd70 + msWMI-RangeParam contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33dfb00 + ;CN=ms-WMI-UnknownRangeParam,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 130 bytes in 1 blocks (ref 0) d=(nil) 0x33dfbf0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33dfb80 + 1.2.840.113556.1.5.204 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33dfa80 + msWMI-UnknownRangeParam contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33df9f0 + ms-WMI-UnknownRangeParam contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33df960 + struct dsdb_class contains 830 bytes in 16 blocks (ref 0) d=(nil) 0x33ded60 + ms-WMI-UintSetParam contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33df700 + ms-WMI-UintSetParam contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33df680 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPCCDCLCLODTRC;;;AU) contains 99 bytes in 1 blocks (ref 0) d=(nil) 0x33df5b0 + const char * contains 46 bytes in 2 blocks (ref 0) d=(nil) 0x33df4a0 + msWMI-MergeablePolicyTemplate contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33df520 + const char * contains 37 bytes in 2 blocks (ref 0) d=(nil) 0x33df3a0 + msWMI-IntValidValues contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33df420 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33df2a0 + msWMI-IntDefault contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33df320 + msWMI-RangeParam contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33df0c0 + ;CN=ms-WMI-UintSetParam,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33df1b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33df140 + 1.2.840.113556.1.5.208 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33df040 + msWMI-UintSetParam contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33defc0 + ms-WMI-UintSetParam contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33def40 + struct dsdb_class contains 847 bytes in 17 blocks (ref 0) d=(nil) 0x33de2b0 + ms-WMI-UintRangeParam contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33dece0 + ms-WMI-UintRangeParam contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33dec60 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33deb90 + const char * contains 46 bytes in 2 blocks (ref 0) d=(nil) 0x33dea80 + msWMI-MergeablePolicyTemplate contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33deb00 + const char * contains 50 bytes in 3 blocks (ref 0) d=(nil) 0x33de8f0 + msWMI-IntMin contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33dea00 + msWMI-IntMax contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33de980 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33de7f0 + msWMI-IntDefault contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33de870 + msWMI-RangeParam contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33de610 + ;CN=ms-WMI-UintRangeParam,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33de700 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33de690 + 1.2.840.113556.1.5.207 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33de590 + msWMI-UintRangeParam contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33de510 + ms-WMI-UintRangeParam contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33de490 + struct dsdb_class contains 846 bytes in 16 blocks (ref 0) d=(nil) 0x33dd880 + ms-WMI-StringSetParam contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33de230 + ms-WMI-StringSetParam contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33de1b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPCCDCLCLODTRC;;;AU) contains 99 bytes in 1 blocks (ref 0) d=(nil) 0x33de0e0 + const char * contains 46 bytes in 2 blocks (ref 0) d=(nil) 0x33ddfd0 + msWMI-MergeablePolicyTemplate contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33de050 + const char * contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x33ddec0 + msWMI-StringValidValues contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33ddf40 + const char * contains 36 bytes in 2 blocks (ref 0) d=(nil) 0x33dddc0 + msWMI-StringDefault contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33dde40 + msWMI-RangeParam contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ddbe0 + ;CN=ms-WMI-StringSetParam,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33ddcd0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ddc60 + 1.2.840.113556.1.5.210 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ddb60 + msWMI-StringSetParam contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33ddae0 + ms-WMI-StringSetParam contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33dda60 + struct dsdb_class contains 1050 bytes in 30 blocks (ref 0) d=(nil) 0x33dc810 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a0a0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a020 + ms-WMI-Som contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33dd800 + ms-WMI-Som contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33dd780 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSW;;;DA)(A;;CC;;;PA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 101 bytes in 1 blocks (ref 0) d=(nil) 0x33dd6b0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33dd5b0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33dd630 + const char * contains 290 bytes in 13 blocks (ref 0) d=(nil) 0x33dcec0 + msWMI-Author contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33dd530 + msWMI-ChangeDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33dd4b0 + msWMI-CreationDate contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33dd430 + msWMI-intFlags1 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33dd3b0 + msWMI-intFlags2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33dd330 + msWMI-intFlags3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33dd2b0 + msWMI-intFlags4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33dd230 + msWMI-Parm1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33dd1b0 + msWMI-Parm2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33dd130 + msWMI-Parm3 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33dd0b0 + msWMI-Parm4 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33dd030 + msWMI-SourceOrganization contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33dcfa0 + const char * contains 44 bytes in 3 blocks (ref 0) d=(nil) 0x33dcdb0 + msWMI-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33dce40 + msWMI-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33dcb70 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33dcd40 + ;CN=ms-WMI-Som,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x33dcc60 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33dcbf0 + 1.2.840.113556.1.5.213 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33dcaf0 + msWMI-Som contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33dca70 + ms-WMI-Som contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33dc9f0 + struct dsdb_class contains 819 bytes in 14 blocks (ref 0) d=(nil) 0x33dbec0 + ms-WMI-SimplePolicyTemplate contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33dc780 + ms-WMI-SimplePolicyTemplate contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33dc6f0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPCCDCLCLODTRC;;;AU) contains 99 bytes in 1 blocks (ref 0) d=(nil) 0x33dc620 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33dc520 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33dc5a0 + const char * contains 35 bytes in 2 blocks (ref 0) d=(nil) 0x33dc420 + msWMI-TargetObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33dc4a0 + msWMI-PolicyTemplate contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33dc240 + ;CN=ms-WMI-SimplePolicyTemplate,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 133 bytes in 1 blocks (ref 0) d=(nil) 0x33dc330 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33dc2c0 + 1.2.840.113556.1.5.201 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33dc1c0 + msWMI-SimplePolicyTemplate contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33dc130 + ms-WMI-SimplePolicyTemplate contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33dc0a0 + struct dsdb_class contains 763 bytes in 14 blocks (ref 0) d=(nil) 0x33db5c0 + ms-WMI-ShadowObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33dbe40 + ms-WMI-ShadowObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33dbdc0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33dbcf0 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33dbbf0 + msWMI-PolicyType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33dbc70 + const char * contains 35 bytes in 2 blocks (ref 0) d=(nil) 0x33db920 + msWMI-TargetObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33dbb70 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33dbb00 + ;CN=ms-WMI-ShadowObject,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33dba10 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33db9a0 + 1.2.840.113556.1.5.212 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33db8a0 + msWMI-ShadowObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33db820 + ms-WMI-ShadowObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33db7a0 + struct dsdb_class contains 785 bytes in 17 blocks (ref 0) d=(nil) 0x33dab30 + ms-WMI-Rule contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33db540 + ms-WMI-Rule contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33db4c0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33db3f0 + const char * contains 44 bytes in 3 blocks (ref 0) d=(nil) 0x33db260 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33db370 + msWMI-Som contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33db2f0 + const char * contains 86 bytes in 4 blocks (ref 0) d=(nil) 0x33db0d0 + msWMI-Query contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33db1e0 + msWMI-TargetNameSpace contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33db160 + msWMI-QueryLanguage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33dae90 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33db060 + ;CN=ms-WMI-Rule,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 117 bytes in 1 blocks (ref 0) d=(nil) 0x33daf80 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33daf10 + 1.2.840.113556.1.5.214 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33dae10 + msWMI-Rule contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33dad90 + ms-WMI-Rule contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33dad10 + struct dsdb_class contains 850 bytes in 17 blocks (ref 0) d=(nil) 0x33da080 + ms-WMI-RealRangeParam contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33daab0 + ms-WMI-RealRangeParam contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33daa30 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33da960 + const char * contains 46 bytes in 2 blocks (ref 0) d=(nil) 0x33da850 + msWMI-MergeablePolicyTemplate contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33da8d0 + const char * contains 52 bytes in 3 blocks (ref 0) d=(nil) 0x33da6c0 + msWMI-Int8Min contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33da7d0 + msWMI-Int8Max contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33da750 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33da5c0 + msWMI-Int8Default contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33da640 + msWMI-RangeParam contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33da3e0 + ;CN=ms-WMI-RealRangeParam,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33da4d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33da460 + 1.2.840.113556.1.5.209 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33da360 + msWMI-RealRangeParam contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33da2e0 + ms-WMI-RealRangeParam contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33da260 + struct dsdb_class contains 887 bytes in 17 blocks (ref 0) d=(nil) 0x33d9660 + const char * contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x3435020 + ms-WMI-RangeParam contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33da000 + ms-WMI-RangeParam contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d9f80 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPCCDCLCLODTRC;;;AU) contains 99 bytes in 1 blocks (ref 0) d=(nil) 0x33d9eb0 + const char * contains 46 bytes in 2 blocks (ref 0) d=(nil) 0x33d9da0 + msWMI-MergeablePolicyTemplate contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33d9e20 + const char * contains 86 bytes in 4 blocks (ref 0) d=(nil) 0x33d9c10 + msWMI-PropertyName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d9d20 + msWMI-TargetClass contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d9ca0 + msWMI-TargetType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d99c0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33d9ba0 + ;CN=ms-WMI-RangeParam,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x33d9ab0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d9a40 + 1.2.840.113556.1.5.203 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d9940 + msWMI-RangeParam contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d98c0 + ms-WMI-RangeParam contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d9840 + struct dsdb_class contains 1093 bytes in 30 blocks (ref 0) d=(nil) 0x33d85e0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a1a0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a120 + ms-WMI-PolicyType contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d95e0 + ms-WMI-PolicyType contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d9560 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSW;;;DA)(A;;CC;;;PA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 101 bytes in 1 blocks (ref 0) d=(nil) 0x33d9490 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33d9390 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33d9410 + const char * contains 290 bytes in 13 blocks (ref 0) d=(nil) 0x33d8ca0 + msWMI-Author contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33d9310 + msWMI-ChangeDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d9290 + msWMI-CreationDate contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d9210 + msWMI-intFlags1 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d9190 + msWMI-intFlags2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d9110 + msWMI-intFlags3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d9090 + msWMI-intFlags4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d9010 + msWMI-Parm1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d8f90 + msWMI-Parm2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d8f10 + msWMI-Parm3 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d8e90 + msWMI-Parm4 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d8e10 + msWMI-SourceOrganization contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33d8d80 + const char * contains 52 bytes in 3 blocks (ref 0) d=(nil) 0x33d8b90 + msWMI-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33d8c20 + msWMI-TargetObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d8940 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33d8b20 + ;CN=ms-WMI-PolicyType,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x33d8a30 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d89c0 + 1.2.840.113556.1.5.211 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d88c0 + msWMI-PolicyType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d8840 + ms-WMI-PolicyType contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d87c0 + struct dsdb_class contains 1233 bytes in 34 blocks (ref 0) d=(nil) 0x33d72c0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34350d0 + ms-WMI-PolicyTemplate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d8560 + ms-WMI-PolicyTemplate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d84e0 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSW;;;DA)(A;;CC;;;PA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 101 bytes in 1 blocks (ref 0) d=(nil) 0x33d8410 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33d8310 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33d8390 + const char * contains 315 bytes in 14 blocks (ref 0) d=(nil) 0x33d7ba0 + msWMI-Author contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33d8290 + msWMI-ChangeDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d8210 + msWMI-CreationDate contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d8190 + msWMI-intFlags1 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d8110 + msWMI-intFlags2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d8090 + msWMI-intFlags3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d8010 + msWMI-intFlags4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d7f90 + msWMI-Parm1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d7f10 + msWMI-Parm2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d7e90 + msWMI-Parm3 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d7e10 + msWMI-Parm4 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d7d90 + msWMI-SourceOrganization contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33d7d00 + msWMI-TargetType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d7c80 + const char * contains 155 bytes in 7 blocks (ref 0) d=(nil) 0x33d7870 + msWMI-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33d7b20 + msWMI-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33d7aa0 + msWMI-TargetNameSpace contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d7a20 + msWMI-TargetClass contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d79a0 + msWMI-TargetPath contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d7920 + msWMI-NormalizedClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d7620 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33d7800 + ;CN=ms-WMI-PolicyTemplate,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33d7710 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d76a0 + 1.2.840.113556.1.5.200 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d75a0 + msWMI-PolicyTemplate contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d7520 + ms-WMI-PolicyTemplate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d74a0 + struct dsdb_class contains 1023 bytes in 26 blocks (ref 0) d=(nil) 0x33d6360 + ms-WMI-ObjectEncoding contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d7240 + ms-WMI-ObjectEncoding contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d71c0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33d70f0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33d6ff0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33d7070 + const char * contains 292 bytes in 14 blocks (ref 0) d=(nil) 0x33d6910 + msWMI-TargetObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d6f70 + msWMI-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33d6ef0 + msWMI-intFlags4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d6e70 + msWMI-intFlags3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d6df0 + msWMI-intFlags2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d6d70 + msWMI-intFlags1 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d6cf0 + msWMI-Genus contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d6c70 + msWMI-Parm4 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d6bf0 + msWMI-Parm3 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d6b70 + msWMI-Parm2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d6af0 + msWMI-Parm1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d6a70 + msWMI-ScopeGuid contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d69f0 + msWMI-Class contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d66c0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33d68a0 + ;CN=ms-WMI-ObjectEncoding,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33d67b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d6740 + 1.2.840.113556.1.5.217 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d6640 + msWMI-ObjectEncoding contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d65c0 + ms-WMI-ObjectEncoding contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d6540 + struct dsdb_class contains 943 bytes in 14 blocks (ref 0) d=(nil) 0x33d5b00 + const char * contains 72 bytes in 1 blocks (ref 0) d=(nil) 0x345a2e0 + const char * contains 72 bytes in 1 blocks (ref 0) d=(nil) 0x345a220 + ms-WMI-MergeablePolicyTemplate contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33d62d0 + ms-WMI-MergeablePolicyTemplate contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33d6240 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPCCDCLCLODTRC;;;AU) contains 99 bytes in 1 blocks (ref 0) d=(nil) 0x33d6170 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33d6070 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33d60f0 + msWMI-PolicyTemplate contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d5e80 + ;CN=ms-WMI-MergeablePolicyTemplate,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 136 bytes in 1 blocks (ref 0) d=(nil) 0x33d5f70 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d5f00 + 1.2.840.113556.1.5.202 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d5e00 + msWMI-MergeablePolicyTemplate contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33d5d70 + ms-WMI-MergeablePolicyTemplate contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33d5ce0 + struct dsdb_class contains 825 bytes in 16 blocks (ref 0) d=(nil) 0x33d50e0 + ms-WMI-IntSetParam contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d5a80 + ms-WMI-IntSetParam contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d5a00 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPCCDCLCLODTRC;;;AU) contains 99 bytes in 1 blocks (ref 0) d=(nil) 0x33d5930 + const char * contains 46 bytes in 2 blocks (ref 0) d=(nil) 0x33d5820 + msWMI-MergeablePolicyTemplate contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33d58a0 + const char * contains 37 bytes in 2 blocks (ref 0) d=(nil) 0x33d5720 + msWMI-IntValidValues contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d57a0 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33d5620 + msWMI-IntDefault contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d56a0 + msWMI-RangeParam contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d5440 + ;CN=ms-WMI-IntSetParam,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33d5530 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d54c0 + 1.2.840.113556.1.5.206 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d53c0 + msWMI-IntSetParam contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d5340 + ms-WMI-IntSetParam contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d52c0 + struct dsdb_class contains 842 bytes in 17 blocks (ref 0) d=(nil) 0x33d4630 + ms-WMI-IntRangeParam contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d5060 + ms-WMI-IntRangeParam contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d4fe0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33d4f10 + const char * contains 46 bytes in 2 blocks (ref 0) d=(nil) 0x33d4e00 + msWMI-MergeablePolicyTemplate contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33d4e80 + const char * contains 50 bytes in 3 blocks (ref 0) d=(nil) 0x33d4c70 + msWMI-IntMin contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33d4d80 + msWMI-IntMax contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33d4d00 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33d4b70 + msWMI-IntDefault contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d4bf0 + msWMI-RangeParam contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d4990 + ;CN=ms-WMI-IntRangeParam,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x33d4a80 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d4a10 + 1.2.840.113556.1.5.205 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d4910 + msWMI-IntRangeParam contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33d4890 + ms-WMI-IntRangeParam contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d4810 + struct dsdb_class contains 792 bytes in 16 blocks (ref 0) d=(nil) 0x33d3c10 + ms-TAPI-Rt-Person contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d45b0 + ms-TAPI-Rt-Person contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d4530 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33d4460 + const char * contains 56 bytes in 3 blocks (ref 0) d=(nil) 0x33d42d0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d43e0 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33d4360 + const char * contains 52 bytes in 3 blocks (ref 0) d=(nil) 0x33d41c0 + msTAPI-IpAddress contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d4250 + msTAPI-uid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33d3f70 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33d4150 + ;CN=ms-TAPI-Rt-Person,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x33d4060 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d3ff0 + 1.2.840.113556.1.5.222 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d3ef0 + msTAPI-RtPerson contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d3e70 + ms-TAPI-Rt-Person contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d3df0 + struct dsdb_class contains 838 bytes in 17 blocks (ref 0) d=(nil) 0x33d3170 + ms-TAPI-Rt-Conference contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d3b90 + ms-TAPI-Rt-Conference contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d3b10 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33d3a40 + const char * contains 35 bytes in 2 blocks (ref 0) d=(nil) 0x33d3940 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d39c0 + const char * contains 64 bytes in 3 blocks (ref 0) d=(nil) 0x33d37b0 + msTAPI-ProtocolId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d38c0 + msTAPI-ConferenceBlob contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d3840 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x33d36b0 + msTAPI-uid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33d3730 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33d3550 + ;CN=ms-TAPI-Rt-Conference,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33d35c0 + msTAPI-uid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33d34d0 + 1.2.840.113556.1.5.221 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d3450 + msTAPI-RtConference contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33d33d0 + ms-TAPI-Rt-Conference contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d3350 + struct dsdb_class contains 1451 bytes in 39 blocks (ref 0) d=(nil) 0x33d1c10 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x345a440 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x345a3a0 + MS-SQL-SQLServer contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d30f0 + MS-SQL-SQLServer contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d3070 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33d2fa0 + const char * contains 39 bytes in 2 blocks (ref 0) d=(nil) 0x33d2ea0 + serviceConnectionPoint contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d2f20 + const char * contains 616 bytes in 25 blocks (ref 0) d=(nil) 0x33d2150 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d2e20 + mS-SQL-RegisteredOwner contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d2da0 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33d2d20 + mS-SQL-Location contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d2ca0 + mS-SQL-Memory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33d2c20 + mS-SQL-Build contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33d2ba0 + mS-SQL-ServiceAccount contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d2b20 + mS-SQL-CharacterSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33d2aa0 + mS-SQL-SortOrder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d2a20 + mS-SQL-UnicodeSortOrder contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33d2990 + mS-SQL-Clustered contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d2910 + mS-SQL-NamedPipe contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d2890 + mS-SQL-MultiProtocol contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d2810 + mS-SQL-SPX contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33d2790 + mS-SQL-TCPIP contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33d2710 + mS-SQL-AppleTalk contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d2690 + mS-SQL-Vines contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33d2610 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33d2590 + mS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d2510 + mS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d2490 + mS-SQL-GPSLatitude contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d2410 + mS-SQL-GPSLongitude contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33d2390 + mS-SQL-GPSHeight contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d2310 + mS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d2290 + serviceConnectionPoint contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d1f70 + ;CN=MS-SQL-SQLServer,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x33d2060 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d1ff0 + 1.2.840.113556.1.5.184 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d1ef0 + mS-SQL-SQLServer contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d1e70 + MS-SQL-SQLServer contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d1df0 + struct dsdb_class contains 914 bytes in 20 blocks (ref 0) d=(nil) 0x33d0fd0 + MS-SQL-SQLRepository contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d1b90 + MS-SQL-SQLRepository contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d1b10 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33d1a40 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33d1940 + mS-SQL-SQLServer contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d19c0 + const char * contains 180 bytes in 8 blocks (ref 0) d=(nil) 0x33d1580 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d18c0 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33d1840 + mS-SQL-Build contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33d17c0 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33d1740 + mS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d16c0 + mS-SQL-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33d1330 + mS-SQL-InformationDirectory contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33d1630 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33d1510 + ;CN=MS-SQL-SQLRepository,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x33d1420 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d13b0 + 1.2.840.113556.1.5.186 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d12b0 + mS-SQL-SQLRepository contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d1230 + MS-SQL-SQLRepository contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33d11b0 + struct dsdb_class contains 1140 bytes in 25 blocks (ref 0) d=(nil) 0x33d0080 + MS-SQL-SQLPublication contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d0f50 + MS-SQL-SQLPublication contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d0ed0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33d0e00 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33d0d00 + mS-SQL-SQLServer contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d0d80 + const char * contains 401 bytes in 13 blocks (ref 0) d=(nil) 0x33d0630 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d0c80 + mS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d0c00 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33d0b80 + mS-SQL-Type contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33d0b00 + mS-SQL-Database contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33d0a80 + mS-SQL-AllowAnonymousSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x33d09f0 + mS-SQL-Publisher contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33d0970 + mS-SQL-AllowKnownPullSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x33d08e0 + mS-SQL-AllowImmediateUpdatingSubscription contains 42 bytes in 1 blocks (ref 0) d=(nil) 0x33d0840 + mS-SQL-AllowQueuedUpdatingSubscription contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x33d07b0 + mS-SQL-AllowSnapshotFilesFTPDownloading contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x33d0710 + mS-SQL-ThirdParty contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33d03e0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33d05c0 + ;CN=MS-SQL-SQLPublication,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33d04d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33d0460 + 1.2.840.113556.1.5.187 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33d0360 + mS-SQL-SQLPublication contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d02e0 + MS-SQL-SQLPublication contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33d0260 + struct dsdb_class contains 1039 bytes in 25 blocks (ref 0) d=(nil) 0x33cf180 + MS-SQL-SQLDatabase contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33d0000 + MS-SQL-SQLDatabase contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33cff80 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33cfeb0 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33cfdb0 + mS-SQL-SQLServer contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33cfe30 + const char * contains 315 bytes in 13 blocks (ref 0) d=(nil) 0x33cf6c0 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33cfd30 + mS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33cfcb0 + mS-SQL-Alias contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33cfc30 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33cfbb0 + mS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33cfb30 + mS-SQL-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33cfab0 + mS-SQL-LastBackupDate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cfa30 + mS-SQL-LastDiagnosticDate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33cf9a0 + mS-SQL-Applications contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33cf920 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33cf8a0 + mS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cf820 + mS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33cf7a0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33cf4e0 + ;CN=MS-SQL-SQLDatabase,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33cf5d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33cf560 + 1.2.840.113556.1.5.188 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33cf460 + mS-SQL-SQLDatabase contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33cf3e0 + MS-SQL-SQLDatabase contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33cf360 + struct dsdb_class contains 1094 bytes in 26 blocks (ref 0) d=(nil) 0x33ce320 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x345a570 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x345a4e0 + MS-SQL-OLAPServer contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33cf100 + MS-SQL-OLAPServer contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33cf080 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33cefb0 + const char * contains 39 bytes in 2 blocks (ref 0) d=(nil) 0x33ceeb0 + serviceConnectionPoint contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33cef30 + const char * contains 286 bytes in 12 blocks (ref 0) d=(nil) 0x33ce860 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33cee30 + mS-SQL-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33cedb0 + mS-SQL-Build contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ced30 + mS-SQL-RegisteredOwner contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33cecb0 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33cec30 + mS-SQL-ServiceAccount contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cebb0 + mS-SQL-Language contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ceb30 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ceab0 + mS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cea30 + mS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ce9b0 + mS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ce930 + serviceConnectionPoint contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ce680 + ;CN=MS-SQL-OLAPServer,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x33ce770 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ce700 + 1.2.840.113556.1.5.185 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ce600 + mS-SQL-OLAPServer contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ce580 + MS-SQL-OLAPServer contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ce500 + struct dsdb_class contains 1104 bytes in 28 blocks (ref 0) d=(nil) 0x33cd3b0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a680 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a600 + MS-SQL-OLAPDatabase contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ce2a0 + MS-SQL-OLAPDatabase contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ce220 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33ce150 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33ce050 + mS-SQL-OLAPServer contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ce0d0 + const char * contains 342 bytes in 14 blocks (ref 0) d=(nil) 0x33cd8f0 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33cdfd0 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33cdf50 + mS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33cded0 + mS-SQL-Type contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33cde50 + mS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33cddd0 + mS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33cdd50 + mS-SQL-LastBackupDate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cdcd0 + mS-SQL-Applications contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33cdc50 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33cdbd0 + mS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cdb50 + mS-SQL-ConnectionURL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33cdad0 + mS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cda50 + mS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33cd9d0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33cd710 + ;CN=MS-SQL-OLAPDatabase,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33cd800 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33cd790 + 1.2.840.113556.1.5.189 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33cd690 + mS-SQL-OLAPDatabase contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33cd610 + MS-SQL-OLAPDatabase contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33cd590 + struct dsdb_class contains 947 bytes in 22 blocks (ref 0) d=(nil) 0x33cc660 + MS-SQL-OLAPCube contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33cd330 + MS-SQL-OLAPCube contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33cd2b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33cd1e0 + const char * contains 36 bytes in 2 blocks (ref 0) d=(nil) 0x33cd0e0 + mS-SQL-OLAPDatabase contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33cd160 + const char * contains 235 bytes in 10 blocks (ref 0) d=(nil) 0x33ccba0 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33cd060 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ccfe0 + mS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ccf60 + mS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ccee0 + mS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33cce60 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33ccde0 + mS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ccd60 + mS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ccce0 + mS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ccc60 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33cc9c0 + ;CN=MS-SQL-OLAPCube,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x33ccab0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33cca40 + 1.2.840.113556.1.5.190 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33cc940 + mS-SQL-OLAPCube contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33cc8c0 + MS-SQL-OLAPCube contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33cc840 + struct dsdb_class contains 968 bytes in 20 blocks (ref 0) d=(nil) 0x33cb990 + msSFU-30-NIS-Map-Config contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33cc5d0 + msSFU-30-NIS-Map-Config contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33cc540 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33cc470 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33cc370 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33cc3f0 + const char * contains 225 bytes in 8 blocks (ref 0) d=(nil) 0x33cbf00 + msSFU30MapFilter contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33cc2f0 + msSFU30ResultAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33cc260 + msSFU30SearchAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33cc1d0 + msSFU30IntraFieldSeparator contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33cc140 + msSFU30NSMAPFieldPosition contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33cc0b0 + msSFU30FieldSeparator contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cc030 + msSFU30KeyAttributes contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33cbfb0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33cbd10 + ;CN=msSFU-30-NIS-Map-Config,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33cbe10 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33cbda0 + 1.2.840.113556.1.6.18.2.217 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33cbc80 + msSFU30NISMapConfig contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33cbc00 + msSFU-30-NIS-Map-Config contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33cbb70 + struct dsdb_class contains 864 bytes in 19 blocks (ref 0) d=(nil) 0x33cadc0 + msSFU-30-Network-User contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cb910 + msSFU-30-Network-User contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cb890 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33cb7c0 + const char * contains 59 bytes in 4 blocks (ref 0) d=(nil) 0x33cb5c0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33cb740 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33cb6d0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33cb650 + const char * contains 97 bytes in 5 blocks (ref 0) d=(nil) 0x33cb320 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33cb540 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33cb4c0 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33cb440 + msSFU30KeyValues contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33cb3c0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33cb130 + ;CN=msSFU-30-Network-User,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33cb230 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33cb1c0 + 1.2.840.113556.1.6.18.2.216 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33cb0a0 + msSFU30NetworkUser contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33cb020 + msSFU-30-Network-User contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33cafa0 + struct dsdb_class contains 834 bytes in 19 blocks (ref 0) d=(nil) 0x33ca1f0 + msSFU-30-Net-Id contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33cad40 + msSFU-30-Net-Id contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33cacc0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33cabf0 + const char * contains 59 bytes in 4 blocks (ref 0) d=(nil) 0x33ca9f0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33cab70 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33cab00 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33caa80 + const char * contains 97 bytes in 5 blocks (ref 0) d=(nil) 0x33ca750 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33ca970 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ca8f0 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ca870 + msSFU30KeyValues contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ca7f0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33ca560 + ;CN=msSFU-30-Net-Id,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x33ca660 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ca5f0 + 1.2.840.113556.1.6.18.2.212 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33ca4d0 + msSFU30NetId contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ca450 + msSFU-30-Net-Id contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ca3d0 + struct dsdb_class contains 862 bytes in 19 blocks (ref 0) d=(nil) 0x33c9620 + msSFU-30-Mail-Aliases contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ca170 + msSFU-30-Mail-Aliases contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ca0f0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33ca020 + const char * contains 59 bytes in 4 blocks (ref 0) d=(nil) 0x33c9e20 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c9fa0 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33c9f30 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c9eb0 + const char * contains 95 bytes in 5 blocks (ref 0) d=(nil) 0x33c9b80 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33c9da0 + msSFU30Aliases contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33c9d20 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33c9ca0 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c9c20 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c9990 + ;CN=msSFU-30-Mail-Aliases,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33c9a90 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c9a20 + 1.2.840.113556.1.6.18.2.211 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33c9900 + msSFU30MailAliases contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c9880 + msSFU-30-Mail-Aliases contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33c9800 + struct dsdb_class contains 990 bytes in 22 blocks (ref 0) d=(nil) 0x33c8890 + msSFU-30-Domain-Info contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33c95a0 + msSFU-30-Domain-Info contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33c9520 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c9450 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33c9350 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c93d0 + const char * contains 261 bytes in 10 blocks (ref 0) d=(nil) 0x33c8df0 + msSFU30CryptMethod contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c92d0 + msSFU30MaxUidNumber contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33c9250 + msSFU30MaxGidNumber contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33c91d0 + msSFU30OrderNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c9150 + msSFU30MasterServerName contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33c90c0 + msSFU30IsValidContainer contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33c9030 + msSFU30SearchContainer contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c8fb0 + msSFU30YpServers contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33c8f30 + msSFU30Domains contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33c8eb0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c8c00 + ;CN=msSFU-30-Domain-Info,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x33c8d00 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c8c90 + 1.2.840.113556.1.6.18.2.215 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33c8b70 + msSFU30DomainInfo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33c8af0 + msSFU-30-Domain-Info contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33c8a70 + struct dsdb_class contains 858 bytes in 19 blocks (ref 0) d=(nil) 0x33c7ca0 + ms-Print-ConnectionPolicy contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33c8800 + ms-Print-ConnectionPolicy contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33c8770 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c86a0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33c85a0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c8620 + const char * contains 87 bytes in 5 blocks (ref 0) d=(nil) 0x33c8300 + uNCName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33c8520 + serverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33c84a0 + printAttributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33c8420 + printerName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c83a0 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x33c8210 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c8290 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c8030 + ;CN=ms-Print-ConnectionPolicy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 131 bytes in 1 blocks (ref 0) d=(nil) 0x33c8120 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c80b0 + 1.2.840.113556.1.6.23.2 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33c7fa0 + msPrint-ConnectionPolicy contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33c7f10 + ms-Print-ConnectionPolicy contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33c7e80 + struct dsdb_class contains 820 bytes in 14 blocks (ref 0) d=(nil) 0x33c7340 + ms-PKI-Private-Key-Recovery-Agent contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x33c7c10 + ms-PKI-Private-Key-Recovery-Agent contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x33c7b80 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c7ab0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33c79b0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c7a30 + const char * contains 32 bytes in 2 blocks (ref 0) d=(nil) 0x33c78b0 + userCertificate contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33c7930 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c76c0 + ;CN=ms-PKI-Private-Key-Recovery-Agent,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 139 bytes in 1 blocks (ref 0) d=(nil) 0x33c77b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c7740 + 1.2.840.113556.1.5.223 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c7640 + msPKI-PrivateKeyRecoveryAgent contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33c75b0 + ms-PKI-Private-Key-Recovery-Agent contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x33c7520 + struct dsdb_class contains 840 bytes in 14 blocks (ref 0) d=(nil) 0x33c6af0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x345a7a0 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345a700 + ms-PKI-Key-Recovery-Agent contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33c72b0 + ms-PKI-Key-Recovery-Agent contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33c7220 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c7150 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33c7050 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c70d0 + user contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x33c6e70 + ;CN=ms-PKI-Key-Recovery-Agent,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 131 bytes in 1 blocks (ref 0) d=(nil) 0x33c6f60 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c6ef0 + 1.2.840.113556.1.5.195 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c6df0 + msPKI-Key-Recovery-Agent contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33c6d60 + ms-PKI-Key-Recovery-Agent contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33c6cd0 + struct dsdb_class contains 971 bytes in 22 blocks (ref 0) d=(nil) 0x33c5e90 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a8c0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a840 + ms-PKI-Enterprise-Oid contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33c6a70 + ms-PKI-Enterprise-Oid contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33c69f0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c6920 + const char * contains 55 bytes in 3 blocks (ref 0) d=(nil) 0x33c6790 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c68a0 + msPKI-Enterprise-Oid contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33c6820 + const char * contains 179 bytes in 7 blocks (ref 0) d=(nil) 0x33c63d0 + msPKI-Cert-Template-OID contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33c6700 + msPKI-OID-Attribute contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33c6680 + msPKI-OID-CPS contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c6600 + msPKI-OIDLocalizedName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c6580 + msPKI-OID-User-Notice contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33c6500 + msDS-OIDToGroupLink contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33c6480 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c61f0 + ;CN=ms-PKI-Enterprise-Oid,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33c62e0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c6270 + 1.2.840.113556.1.5.196 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c6170 + msPKI-Enterprise-Oid contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33c60f0 + ms-PKI-Enterprise-Oid contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33c6070 + struct dsdb_class contains 928 bytes in 18 blocks (ref 0) d=(nil) 0x33c5300 + ms-net-ieee-8023-GroupPolicy contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33c5e00 + ms-net-ieee-8023-GroupPolicy contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33c5d70 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c5ca0 + const char * contains 58 bytes in 4 blocks (ref 0) d=(nil) 0x33c5aa0 + person contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33c5c30 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c5bb0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33c5b30 + const char * contains 129 bytes in 4 blocks (ref 0) d=(nil) 0x33c5860 + ms-net-ieee-8023-GP-PolicyGUID contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33c5a10 + ms-net-ieee-8023-GP-PolicyData contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33c5980 + ms-net-ieee-8023-GP-PolicyReserved contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x33c58f0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c5680 + ;CN=ms-net-ieee-8023-GroupPolicy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 134 bytes in 1 blocks (ref 0) d=(nil) 0x33c5770 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c5700 + 1.2.840.113556.1.5.252 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c5600 + ms-net-ieee-8023-GroupPolicy contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33c5570 + ms-net-ieee-8023-GroupPolicy contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33c54e0 + struct dsdb_class contains 936 bytes in 18 blocks (ref 0) d=(nil) 0x33c4770 + ms-net-ieee-80211-GroupPolicy contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33c5270 + ms-net-ieee-80211-GroupPolicy contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33c51e0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c5110 + const char * contains 58 bytes in 4 blocks (ref 0) d=(nil) 0x33c4f10 + person contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33c50a0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c5020 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33c4fa0 + const char * contains 132 bytes in 4 blocks (ref 0) d=(nil) 0x33c4cd0 + ms-net-ieee-80211-GP-PolicyGUID contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x33c4e80 + ms-net-ieee-80211-GP-PolicyData contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x33c4df0 + ms-net-ieee-80211-GP-PolicyReserved contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x33c4d60 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c4af0 + ;CN=ms-net-ieee-80211-GroupPolicy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 135 bytes in 1 blocks (ref 0) d=(nil) 0x33c4be0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c4b70 + 1.2.840.113556.1.5.251 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c4a70 + ms-net-ieee-80211-GroupPolicy contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33c49e0 + ms-net-ieee-80211-GroupPolicy contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33c4950 + struct dsdb_class contains 824 bytes in 19 blocks (ref 0) d=(nil) 0x33c3bc0 + MSMQ-Site-Link contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33c46f0 + MSMQ-Site-Link contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33c4670 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c45a0 + const char * contains 39 bytes in 2 blocks (ref 0) d=(nil) 0x33c44a0 + mSMQEnterpriseSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c4520 + const char * contains 55 bytes in 3 blocks (ref 0) d=(nil) 0x33c4310 + mSMQSiteGates contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c4420 + mSMQSiteGatesMig contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33c43a0 + const char * contains 61 bytes in 4 blocks (ref 0) d=(nil) 0x33c4100 + mSMQCost contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33c4290 + mSMQSite1 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c4210 + mSMQSite2 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c4190 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c3f20 + ;CN=MSMQ-Site-Link,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x33c4010 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c3fa0 + 1.2.840.113556.1.5.164 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c3ea0 + mSMQSiteLink contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33c3e20 + MSMQ-Site-Link contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33c3da0 + struct dsdb_class contains 924 bytes in 23 blocks (ref 0) d=(nil) 0x33c2df0 + MSMQ-Settings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c3b40 + MSMQ-Settings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c3ac0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c39f0 + const char * contains 23 bytes in 2 blocks (ref 0) d=(nil) 0x33c3900 + server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33c3980 + const char * contains 236 bytes in 11 blocks (ref 0) d=(nil) 0x33c3320 + mSMQDependentClientService contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33c3870 + mSMQDsService contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c37f0 + mSMQMigrated contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33c3770 + mSMQNt4Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33c36f0 + mSMQOwnerID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c3670 + mSMQQMID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33c35f0 + mSMQRoutingService contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c3570 + mSMQServices contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33c34f0 + mSMQSiteName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33c3470 + mSMQSiteNameEx contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33c33f0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c3150 + ;CN=MSMQ-Settings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x33c3240 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c31d0 + 1.2.840.113556.1.5.165 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c30d0 + mSMQSettings contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33c3050 + MSMQ-Settings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c2fd0 + struct dsdb_class contains 1028 bytes in 27 blocks (ref 0) d=(nil) 0x33c1e00 + MSMQ-Queue contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33c2d70 + MSMQ-Queue contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33c2cf0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c2c20 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33c2b20 + mSMQConfiguration contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33c2ba0 + const char * contains 344 bytes in 15 blocks (ref 0) d=(nil) 0x33c2330 + mSMQAuthenticate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33c2aa0 + mSMQBasePriority contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33c2a20 + mSMQJournal contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c29a0 + mSMQLabel contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c2920 + mSMQLabelEx contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c28a0 + MSMQ-MulticastAddress contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33c2820 + mSMQOwnerID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c27a0 + mSMQPrivacyLevel contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33c2720 + mSMQQueueJournalQuota contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33c26a0 + mSMQQueueNameExt contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33c2620 + mSMQQueueQuota contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33c25a0 + mSMQQueueType contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c2520 + MSMQ-SecuredSource contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c24a0 + mSMQTransactional contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33c2420 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c2160 + ;CN=MSMQ-Queue,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x33c2250 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c21e0 + 1.2.840.113556.1.5.161 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c20e0 + mSMQQueue contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c2060 + MSMQ-Queue contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33c1fe0 + struct dsdb_class contains 914 bytes in 21 blocks (ref 0) d=(nil) 0x33c1120 + MSMQ-Migrated-User contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c1d80 + MSMQ-Migrated-User contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c1d00 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c1c30 + const char * contains 75 bytes in 4 blocks (ref 0) d=(nil) 0x33c1a20 + builtinDomain contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c1bb0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c1b30 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c1ab0 + const char * contains 150 bytes in 7 blocks (ref 0) d=(nil) 0x33c1660 + objectSid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c19a0 + mSMQDigests contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c1920 + mSMQDigestsMig contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33c18a0 + mSMQSignCertificates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33c1820 + mSMQSignCertificatesMig contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33c1790 + mSMQUserSid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c1710 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c1480 + ;CN=MSMQ-Migrated-User,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33c1570 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c1500 + 1.2.840.113556.1.5.179 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c1400 + mSMQMigratedUser contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33c1380 + MSMQ-Migrated-User contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c1300 + struct dsdb_class contains 709 bytes in 14 blocks (ref 0) d=(nil) 0x33c0830 + MSMQ-Group contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33c10a0 + MSMQ-Group contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33c1020 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c0f50 + const char * contains 35 bytes in 2 blocks (ref 0) d=(nil) 0x33c0e50 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33c0ed0 + const char * contains 23 bytes in 2 blocks (ref 0) d=(nil) 0x33c0d60 + member contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33c0de0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c0b90 + ;CN=MSMQ-Group,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x33c0c80 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33c0c10 + 1.2.840.113556.1.5.219 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33c0b10 + msMQ-Group contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33c0a90 + MSMQ-Group contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33c0a10 + struct dsdb_class contains 913 bytes in 21 blocks (ref 0) d=(nil) 0x33bfc50 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a9c0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345a940 + MSMQ-Enterprise-Settings contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33c07a0 + MSMQ-Enterprise-Settings contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33c0710 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33c0640 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33c0540 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33c05c0 + const char * contains 136 bytes in 7 blocks (ref 0) d=(nil) 0x33c0190 + mSMQCSPName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c04c0 + mSMQInterval1 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c0440 + mSMQInterval2 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c03c0 + mSMQLongLived contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c0340 + mSMQNameStyle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33c02c0 + mSMQVersion contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33c0240 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33c0120 + ;CN=MSMQ-Enterprise-Settings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 130 bytes in 1 blocks (ref 0) d=(nil) 0x33c0030 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33bffc0 + 1.2.840.113556.1.5.163 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33bff40 + mSMQEnterpriseSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33bfec0 + MSMQ-Enterprise-Settings contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33bfe30 + struct dsdb_class contains 819 bytes in 16 blocks (ref 0) d=(nil) 0x33bf230 + MSMQ-Custom-Recipient contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33bfbd0 + MSMQ-Custom-Recipient contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33bfb50 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33bfa80 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x33bf870 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33bfa00 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33bf980 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33bf900 + const char * contains 42 bytes in 2 blocks (ref 0) d=(nil) 0x33bf590 + msMQ-Recipient-FormatName contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33bf7e0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33bf770 + ;CN=MSMQ-Custom-Recipient,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33bf680 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33bf610 + 1.2.840.113556.1.5.218 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33bf510 + msMQ-Custom-Recipient contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33bf490 + MSMQ-Custom-Recipient contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33bf410 + struct dsdb_class contains 1140 bytes in 31 blocks (ref 0) d=(nil) 0x33be120 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345aac0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345aa40 + MSMQ-Configuration contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33bf1b0 + MSMQ-Configuration contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33bf130 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33bf060 + const char * contains 25 bytes in 2 blocks (ref 0) d=(nil) 0x33bef60 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33befe0 + const char * contains 393 bytes in 17 blocks (ref 0) d=(nil) 0x33be6d0 + mSMQComputerType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33beee0 + mSMQComputerTypeEx contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33bee60 + mSMQDependentClientServices contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33bedd0 + mSMQDsServices contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33bed50 + mSMQEncryptKey contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33becd0 + mSMQForeign contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33bec50 + mSMQInRoutingServers contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33bebd0 + mSMQJournalQuota contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33beb50 + mSMQOSType contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33bead0 + mSMQOutRoutingServers contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33bea50 + mSMQOwnerID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33be9d0 + mSMQQuota contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33be950 + mSMQRoutingServices contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33be8d0 + mSMQServiceType contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33be850 + mSMQSignKey contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33be7d0 + mSMQSites contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33be480 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33be660 + ;CN=MSMQ-Configuration,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33be570 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33be500 + 1.2.840.113556.1.5.162 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33be400 + mSMQConfiguration contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33be380 + MSMQ-Configuration contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33be300 + struct dsdb_class contains 2679 bytes in 14 blocks (ref 0) d=(nil) 0x33bd910 + const char * contains 1000 bytes in 1 blocks (ref 0) d=(nil) 0x345af80 + const char * contains 968 bytes in 1 blocks (ref 0) d=(nil) 0x345ab40 + ms-Imaging-PSPs contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33be0a0 + ms-Imaging-PSPs contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33be020 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x33bdf50 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33bde50 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33bded0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33bdc70 + ;CN=ms-Imaging-PSPs,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x33bdd60 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33bdcf0 + 1.2.840.113556.1.5.262 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33bdbf0 + msImaging-PSPs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33bdb70 + ms-Imaging-PSPs contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33bdaf0 + struct dsdb_class contains 880 bytes in 18 blocks (ref 0) d=(nil) 0x33bcda0 + ms-Imaging-PostScanProcess contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33bd880 + ms-Imaging-PostScanProcess contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33bd7f0 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x33bd720 + const char * contains 31 bytes in 2 blocks (ref 0) d=(nil) 0x33bd620 + msImaging-PSPs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33bd6a0 + const char * contains 55 bytes in 3 blocks (ref 0) d=(nil) 0x33bd490 + serverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33bd5a0 + msImaging-PSPString contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33bd520 + const char * contains 60 bytes in 3 blocks (ref 0) d=(nil) 0x33bd370 + msImaging-PSPIdentifier contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33bd400 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33bd120 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33bd300 + ;CN=ms-Imaging-PostScanProcess,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 132 bytes in 1 blocks (ref 0) d=(nil) 0x33bd210 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33bd1a0 + 1.2.840.113556.1.5.263 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33bd0a0 + msImaging-PostScanProcess contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33bd010 + ms-Imaging-PostScanProcess contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33bcf80 + struct dsdb_class contains 854 bytes in 18 blocks (ref 0) d=(nil) 0x33bc280 + ms-ieee-80211-Policy contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33bcd20 + ms-ieee-80211-Policy contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33bcca0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33bcbd0 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x33bc9c0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33bcb50 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33bcad0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33bca50 + const char * contains 85 bytes in 4 blocks (ref 0) d=(nil) 0x33bc830 + msieee80211-Data contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33bc940 + msieee80211-DataType contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33bc8c0 + msieee80211-ID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33bc5e0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33bc7c0 + ;CN=ms-ieee-80211-Policy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x33bc6d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33bc660 + 1.2.840.113556.1.5.240 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33bc560 + msieee80211-Policy contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33bc4e0 + ms-ieee-80211-Policy contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33bc460 + struct dsdb_class contains 861 bytes in 18 blocks (ref 0) d=(nil) 0x33bb730 + ms-FVE-RecoveryInformation contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33bc1f0 + ms-FVE-RecoveryInformation contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33bc160 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY) contains 75 bytes in 1 blocks (ref 0) d=(nil) 0x33bc0a0 + const char * contains 25 bytes in 2 blocks (ref 0) d=(nil) 0x33bbfa0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33bc020 + const char * contains 58 bytes in 3 blocks (ref 0) d=(nil) 0x33bbe10 + msFVE-VolumeGuid contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33bbf20 + msFVE-KeyPackage contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33bbea0 + const char * contains 66 bytes in 3 blocks (ref 0) d=(nil) 0x33bbd00 + msFVE-RecoveryGuid contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33bbd90 + msFVE-RecoveryPassword contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33bbab0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33bbc90 + ;CN=ms-FVE-RecoveryInformation,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 132 bytes in 1 blocks (ref 0) d=(nil) 0x33bbba0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33bbb30 + 1.2.840.113556.1.5.253 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33bba30 + msFVE-RecoveryInformation contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33bb9a0 + ms-FVE-RecoveryInformation contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33bb910 + struct dsdb_class contains 2868 bytes in 19 blocks (ref 0) d=(nil) 0x33bac20 + const char * contains 992 bytes in 1 blocks (ref 0) d=(nil) 0x345b810 + const char * contains 960 bytes in 1 blocks (ref 0) d=(nil) 0x345b3e0 + ms-Exch-Configuration-Container contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x33bb6a0 + ms-Exch-Configuration-Container contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x33bb610 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33bb540 + const char * contains 157 bytes in 7 blocks (ref 0) d=(nil) 0x33bb190 + globalAddressList2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33bb4c0 + addressBookRoots2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33bb440 + templateRoots2 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33bb3c0 + globalAddressList contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33bb340 + addressBookRoots contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33bb2c0 + templateRoots contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33bb240 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33bafa0 + ;CN=ms-Exch-Configuration-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 137 bytes in 1 blocks (ref 0) d=(nil) 0x33bb090 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33bb020 + 1.2.840.113556.1.5.176 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33baf20 + msExchConfigurationContainer contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33bae90 + ms-Exch-Configuration-Container contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x33bae00 + struct dsdb_class contains 764 bytes in 16 blocks (ref 0) d=(nil) 0x33ba240 + ms-DS-Quota-Control contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33baba0 + ms-DS-Quota-Control contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33bab20 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPLCLORC;;;BA) contains 57 bytes in 1 blocks (ref 0) d=(nil) 0x33baa70 + const char * contains 36 bytes in 2 blocks (ref 0) d=(nil) 0x33ba970 + msDS-QuotaContainer contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ba9f0 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x33ba7f0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ba900 + msDS-QuotaTrustee contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ba880 + msDS-QuotaAmount contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ba5a0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33ba780 + ;CN=ms-DS-Quota-Control,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33ba690 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33ba620 + 1.2.840.113556.1.5.243 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ba520 + msDS-QuotaControl contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ba4a0 + ms-DS-Quota-Control contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ba420 + struct dsdb_class contains 962 bytes in 23 blocks (ref 0) d=(nil) 0x33b9580 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345bc60 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3456290 + ms-DS-Quota-Container contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ba1c0 + ms-DS-Quota-Container contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ba140 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPLCLORC;;;BA)(OA;;CR;4ecc03fe-ffc0-4947-b630-eb672a8a9dbc;;WD) contains 106 bytes in 1 blocks (ref 0) d=(nil) 0x33ba060 + const char * contains 48 bytes in 3 blocks (ref 0) d=(nil) 0x33b9ed0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b9fe0 + configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33b9f60 + const char * contains 146 bytes in 6 blocks (ref 0) d=(nil) 0x33b9ba0 + msDS-DefaultQuota contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33b9e50 + msDS-TombstoneQuotaFactor contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33b9dc0 + msDS-QuotaEffective contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33b9d40 + msDS-QuotaUsed contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b9cc0 + msDS-TopQuotaUsage contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b9c40 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x33b98e0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b9b30 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b9ac0 + ;CN=ms-DS-Quota-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33b99d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b9960 + 1.2.840.113556.1.5.242 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b9860 + msDS-QuotaContainer contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33b97e0 + ms-DS-Quota-Container contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33b9760 + struct dsdb_class contains 803 bytes in 14 blocks (ref 0) d=(nil) 0x33b8d40 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345bd60 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345bce0 + ms-DS-Password-Settings-Container contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x33b94f0 + ms-DS-Password-Settings-Container contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x33b9460 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY) contains 75 bytes in 1 blocks (ref 0) d=(nil) 0x33b93a0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33b90c0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b9320 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b92b0 + ;CN=ms-DS-Password-Settings-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 139 bytes in 1 blocks (ref 0) d=(nil) 0x33b91b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b9140 + 1.2.840.113556.1.5.256 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b9040 + msDS-PasswordSettingsContainer contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33b8fb0 + ms-DS-Password-Settings-Container contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x33b8f20 + struct dsdb_class contains 1144 bytes in 25 blocks (ref 0) d=(nil) 0x33b7db0 + ms-DS-Password-Settings contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33b8cb0 + ms-DS-Password-Settings contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33b8c20 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY) contains 75 bytes in 1 blocks (ref 0) d=(nil) 0x33b8b60 + const char * contains 47 bytes in 2 blocks (ref 0) d=(nil) 0x33b8a50 + msDS-PasswordSettingsContainer contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33b8ad0 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33b8950 + msDS-PSOAppliesTo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33b89d0 + const char * contains 367 bytes in 11 blocks (ref 0) d=(nil) 0x33b8370 + msDS-PasswordHistoryLength contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33b88c0 + msDS-PasswordSettingsPrecedence contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x33b8830 + msDS-PasswordReversibleEncryptionEnabled contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x33b8790 + msDS-LockoutThreshold contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33b8710 + msDS-LockoutDuration contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33b8120 + msDS-LockoutObservationWindow contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33b8680 + msDS-PasswordComplexityEnabled contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33b85f0 + msDS-MinimumPasswordLength contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33b8560 + msDS-MinimumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33b84d0 + msDS-MaximumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33b8440 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b8300 + ;CN=ms-DS-Password-Settings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33b8210 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b81a0 + 1.2.840.113556.1.5.255 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b80a0 + msDS-PasswordSettings contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33b8020 + ms-DS-Password-Settings contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33b7f90 + struct dsdb_class contains 940 bytes in 18 blocks (ref 0) d=(nil) 0x33b7230 + ms-DS-Optional-Feature contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b7d30 + ms-DS-Optional-Feature contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b7cb0 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;EA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33b7bc0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33b7590 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b7b40 + const char * contains 94 bytes in 3 blocks (ref 0) d=(nil) 0x33b7990 + msDS-RequiredForestBehaviorVersion contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x33b7ab0 + msDS-RequiredDomainBehaviorVersion contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x33b7a20 + const char * contains 75 bytes in 3 blocks (ref 0) d=(nil) 0x33b77e0 + msDS-OptionalFeatureGUID contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33b7900 + msDS-OptionalFeatureFlags contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33b7870 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b7770 + ;CN=ms-DS-Optional-Feature,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 128 bytes in 1 blocks (ref 0) d=(nil) 0x33b7680 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b7610 + 1.2.840.113556.1.5.265 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b7510 + msDS-OptionalFeature contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33b7490 + ms-DS-Optional-Feature contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b7410 + struct dsdb_class contains 2315 bytes in 16 blocks (ref 0) d=(nil) 0x33b6550 + const char * contains 304 bytes in 1 blocks (ref 0) d=(nil) 0x345bf70 + const char * contains 288 bytes in 1 blocks (ref 0) d=(nil) 0x345bde0 + ms-DS-Managed-Service-Account contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33b71a0 + ms-DS-Managed-Service-Account contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33b7110 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPCRLCLORCSDDT;;;CO)(OA;;WP;4c164200-20c0-11d0-a768-00aa006e0529;;CO)(OA;;SW;72e39547-7b18-11d1-adef-00c04fd8d5cd;;CO)(OA;;SW;f3a64788-5306-11d1-a9c5-0000f80367c1;;CO)(OA;;WP;3e0abfd0-126a-11d0-a060-00aa006c33ed;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;;WP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;;WP;bf967950-0de6-11d0-a285-00aa003049e2;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;;WP;bf967953-0de6-11d0-a285-00aa003049e2;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;;SW;f3a64788-5306-11d1-a9c5-0000f80367c1;;PS)(OA;;RPWP;77B5B886-944A-11d1-AEBD-0000F80367C1;;PS)(OA;;SW;72e39547-7b18-11d1-adef-00c04fd8d5cd;;PS)(A;;RPLCLORC;;;AU)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;WD)(OA;;RPWP;bf967a7f-0de6-11d0-a285-00aa003049e2;;CA)(OA;;RP;46a9b11d-60ae-405a-b7e8-ff8a58d456d2;;S-1-5-32-560)(OA;;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;;ED) contains 997 bytes in 1 blocks (ref 0) d=(nil) 0x33b6cc0 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x33b6ab0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b6c40 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b6bc0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b6b40 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33b68d0 + ;CN=ms-DS-Managed-Service-Account,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 135 bytes in 1 blocks (ref 0) d=(nil) 0x33b69c0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b6950 + 1.2.840.113556.1.5.264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b6850 + msDS-ManagedServiceAccount contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33b67c0 + ms-DS-Managed-Service-Account contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33b6730 + struct dsdb_class contains 1076 bytes in 25 blocks (ref 0) d=(nil) 0x33b5630 + ms-DS-Az-Task contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33b64d0 + ms-DS-Az-Task contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33b6450 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33b6360 + const char * contains 74 bytes in 4 blocks (ref 0) d=(nil) 0x33b6150 + msDS-AzApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b62e0 + msDS-AzScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33b6260 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b61e0 + const char * contains 302 bytes in 11 blocks (ref 0) d=(nil) 0x33b5bd0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33b60d0 + msDS-AzBizRule contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b6050 + msDS-AzBizRuleLanguage contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b5fd0 + msDS-AzLastImportedBizRulePath contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33b5f40 + msDS-AzTaskIsRoleDefinition contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33b5eb0 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b5e30 + msDS-OperationsForAzTask contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33b5da0 + msDS-TasksForAzTask contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33b5d20 + msDS-AzObjectGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33b5ca0 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b5990 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b5b60 + ;CN=ms-DS-Az-Task,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x33b5a80 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b5a10 + 1.2.840.113556.1.5.238 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b5910 + msDS-AzTask contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33b5890 + ms-DS-Az-Task contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33b5810 + struct dsdb_class contains 1029 bytes in 21 blocks (ref 0) d=(nil) 0x33b4a70 + const char * contains 72 bytes in 1 blocks (ref 0) d=(nil) 0x345c1d0 + const char * contains 72 bytes in 1 blocks (ref 0) d=(nil) 0x345c110 + ms-DS-Az-Scope contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b55b0 + ms-DS-Az-Scope contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b5530 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33b5440 + const char * contains 35 bytes in 2 blocks (ref 0) d=(nil) 0x33b5340 + msDS-AzApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b53c0 + const char * contains 112 bytes in 5 blocks (ref 0) d=(nil) 0x33b50a0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33b52c0 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b5240 + msDS-AzObjectGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33b51c0 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b5140 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33b4dd0 + msDS-AzScopeName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33b5020 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b4fb0 + ;CN=ms-DS-Az-Scope,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x33b4ec0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b4e50 + 1.2.840.113556.1.5.237 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b4d50 + msDS-AzScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33b4cd0 + ms-DS-Az-Scope contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b4c50 + struct dsdb_class contains 977 bytes in 22 blocks (ref 0) d=(nil) 0x33b3d10 + ms-DS-Az-Role contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33b49f0 + ms-DS-Az-Role contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33b4970 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33b4880 + const char * contains 74 bytes in 4 blocks (ref 0) d=(nil) 0x33b4670 + msDS-AzApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b4800 + msDS-AzScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33b4780 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b4700 + const char * contains 203 bytes in 8 blocks (ref 0) d=(nil) 0x33b42b0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33b45f0 + msDS-MembersForAzRole contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33b4570 + msDS-OperationsForAzRole contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33b44e0 + msDS-TasksForAzRole contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33b4460 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b43e0 + msDS-AzObjectGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33b4360 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b4070 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b4240 + ;CN=ms-DS-Az-Role,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x33b4160 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b40f0 + 1.2.840.113556.1.5.239 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b3ff0 + msDS-AzRole contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33b3f70 + ms-DS-Az-Role contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33b3ef0 + struct dsdb_class contains 925 bytes in 20 blocks (ref 0) d=(nil) 0x33b30c0 + ms-DS-Az-Operation contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b3c90 + ms-DS-Az-Operation contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b3c10 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33b3b20 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x33b3990 + msDS-AzApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b3aa0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b3a20 + const char * contains 112 bytes in 5 blocks (ref 0) d=(nil) 0x33b36f0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33b3910 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b3890 + msDS-AzObjectGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33b3810 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b3790 + const char * contains 35 bytes in 2 blocks (ref 0) d=(nil) 0x33b3420 + msDS-AzOperationID contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b3670 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b3600 + ;CN=ms-DS-Az-Operation,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33b3510 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b34a0 + 1.2.840.113556.1.5.236 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b33a0 + msDS-AzOperation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33b3320 + ms-DS-Az-Operation contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b32a0 + struct dsdb_class contains 1177 bytes in 23 blocks (ref 0) d=(nil) 0x33b23d0 + const char * contains 88 bytes in 1 blocks (ref 0) d=(nil) 0x345c360 + const char * contains 88 bytes in 1 blocks (ref 0) d=(nil) 0x345c290 + ms-DS-Az-Application contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33b3040 + ms-DS-Az-Application contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33b2fc0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33b2ed0 + const char * contains 36 bytes in 2 blocks (ref 0) d=(nil) 0x33b2dd0 + msDS-AzAdminManager contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33b2e50 + const char * contains 230 bytes in 9 blocks (ref 0) d=(nil) 0x33b2980 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33b2d50 + msDS-AzApplicationName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b2cd0 + msDS-AzClassId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b2c50 + msDS-AzApplicationVersion contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33b2bc0 + msDS-AzGenerateAudits contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33b2b40 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b2ac0 + msDS-AzObjectGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33b2a40 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b2730 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b2910 + ;CN=ms-DS-Az-Application,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x33b2820 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b27b0 + 1.2.840.113556.1.5.235 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b26b0 + msDS-AzApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b2630 + ms-DS-Az-Application contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33b25b0 + struct dsdb_class contains 1235 bytes in 27 blocks (ref 0) d=(nil) 0x33b14c0 + const char * contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x345c4e0 + const char * contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x345c430 + ms-DS-Az-Admin-Manager contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b2350 + ms-DS-Az-Admin-Manager contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b22d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33b21e0 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x33b1fd0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b2160 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b20e0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b2060 + const char * contains 292 bytes in 11 blocks (ref 0) d=(nil) 0x33b1a70 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33b1f50 + msDS-AzDomainTimeout contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33b1ed0 + msDS-AzScriptEngineCacheMax contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33b1e40 + msDS-AzScriptTimeout contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33b1dc0 + msDS-AzGenerateAudits contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33b1d40 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b1cc0 + msDS-AzMajorVersion contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33b1c40 + msDS-AzMinorVersion contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33b1bc0 + msDS-AzObjectGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33b1b40 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b1820 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33b1a00 + ;CN=ms-DS-Az-Admin-Manager,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 128 bytes in 1 blocks (ref 0) d=(nil) 0x33b1910 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b18a0 + 1.2.840.113556.1.5.234 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b17a0 + msDS-AzAdminManager contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33b1720 + ms-DS-Az-Admin-Manager contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b16a0 + struct dsdb_class contains 907 bytes in 22 blocks (ref 0) d=(nil) 0x33b0780 + ms-DS-App-Data contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b1440 + ms-DS-App-Data contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b13c0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33b12f0 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x33b10e0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b1270 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33b11f0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b1170 + const char * contains 152 bytes in 8 blocks (ref 0) d=(nil) 0x33b0cc0 + keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33b1060 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b0fe0 + msDS-ByteArray contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b0f60 + msDS-DateTime contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33b0ee0 + msDS-Integer contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33b0e60 + msDS-ObjectReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33b0de0 + owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33b0d70 + applicationSettings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33b0ae0 + ;CN=ms-DS-App-Data,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x33b0bd0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33b0b60 + 1.2.840.113556.1.5.241 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33b0a60 + msDS-AppData contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33b09e0 + ms-DS-App-Data contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b0960 + struct dsdb_class contains 953 bytes in 22 blocks (ref 0) d=(nil) 0x33afa10 + ms-DS-App-Configuration contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33b06f0 + ms-DS-App-Configuration contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33b0660 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33b0590 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x33b0380 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b0510 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33b0490 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33b0410 + const char * contains 152 bytes in 8 blocks (ref 0) d=(nil) 0x33aff60 + keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33b0300 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33b0280 + msDS-ByteArray contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33b0200 + msDS-DateTime contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33b0180 + msDS-Integer contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33b0100 + msDS-ObjectReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33b0080 + owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33b0010 + applicationSettings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33afd80 + ;CN=ms-DS-App-Configuration,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33afe70 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33afe00 + 1.2.840.113556.1.5.220 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33afd00 + msDS-App-Configuration contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33afc80 + ms-DS-App-Configuration contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33afbf0 + struct dsdb_class contains 892 bytes in 19 blocks (ref 0) d=(nil) 0x33aef10 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345c610 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345c590 + ms-DFSR-Topology contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33af990 + ms-DFSR-Topology contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33af910 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33af820 + const char * contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x33af710 + msDFSR-ReplicationGroup contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33af790 + const char * contains 101 bytes in 5 blocks (ref 0) d=(nil) 0x33af470 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33af690 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33af610 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33af590 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33af510 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33af280 + ;CN=ms-DFSR-Topology,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x33af380 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33af310 + 1.2.840.113556.1.6.13.4.8 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33af1f0 + msDFSR-Topology contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33af170 + ms-DFSR-Topology contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33af0f0 + struct dsdb_class contains 1512 bytes in 38 blocks (ref 0) d=(nil) 0x33ad880 + ms-DFSR-Subscription contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33aee90 + ms-DFSR-Subscription contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33aee10 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33aed20 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33aec20 + msDFSR-Subscriber contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33aeca0 + const char * contains 665 bytes in 23 blocks (ref 0) d=(nil) 0x33adf80 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33aeba0 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33aeb20 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33aeaa0 + msDFSR-DfsLinkTarget contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33aea20 + msDFSR-RootFence contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ae9a0 + msDFSR-Enabled contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ae920 + msDFSR-ConflictSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33ae890 + msDFSR-ConflictPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ae810 + msDFSR-StagingSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ae790 + msDFSR-StagingPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ae710 + msDFSR-RootSizeInMb contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ae690 + msDFSR-RootPath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ae610 + msDFSR-DeletedPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ae590 + msDFSR-DeletedSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ae510 + msDFSR-ReadOnly contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ae490 + msDFSR-CachePolicy contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ae410 + msDFSR-MinDurationCacheInMin contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33ae380 + msDFSR-MaxAgeInCacheInMin contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33ae2f0 + msDFSR-OnDemandExclusionFileFilter contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x33ae260 + msDFSR-OnDemandExclusionDirectoryFilter contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x33ae1c0 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ae140 + msDFSR-StagingCleanupTriggerInPercent contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x33ae0b0 + const char * contains 74 bytes in 3 blocks (ref 0) d=(nil) 0x33adde0 + msDFSR-ReplicationGroupGuid contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33adef0 + msDFSR-ContentSetGuid contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ade70 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33adbf0 + ;CN=ms-DFSR-Subscription,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x33adcf0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33adc80 + 1.2.840.113556.1.6.13.4.3 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33adb60 + msDFSR-Subscription contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33adae0 + ms-DFSR-Subscription contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33ada60 + struct dsdb_class contains 974 bytes in 22 blocks (ref 0) d=(nil) 0x33acbf0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345c710 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345c690 + ms-DFSR-Subscriber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ad800 + ms-DFSR-Subscriber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33ad780 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33ad690 + const char * contains 37 bytes in 2 blocks (ref 0) d=(nil) 0x33ad590 + msDFSR-LocalSettings contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33ad610 + const char * contains 101 bytes in 5 blocks (ref 0) d=(nil) 0x33ad2f0 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ad510 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ad490 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ad410 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ad390 + const char * contains 75 bytes in 3 blocks (ref 0) d=(nil) 0x33ad150 + msDFSR-ReplicationGroupGuid contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33ad260 + msDFSR-MemberReference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ad1e0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33acf60 + ;CN=ms-DFSR-Subscriber,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33ad060 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33acff0 + 1.2.840.113556.1.6.13.4.2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33aced0 + msDFSR-Subscriber contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ace50 + ms-DFSR-Subscriber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33acdd0 + struct dsdb_class contains 1412 bytes in 34 blocks (ref 0) d=(nil) 0x33ab860 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345c8b0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345c790 + ms-DFSR-ReplicationGroup contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33acb60 + ms-DFSR-ReplicationGroup contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33acad0 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33ac9e0 + const char * contains 38 bytes in 2 blocks (ref 0) d=(nil) 0x33ac8e0 + msDFSR-GlobalSettings contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33ac960 + const char * contains 523 bytes in 18 blocks (ref 0) d=(nil) 0x33abef0 + msDFSR-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ac860 + msDFSR-Schedule contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ac7e0 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ac760 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ac6e0 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ac660 + msDFSR-TombstoneExpiryInMin contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33ac5d0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33ac550 + msDFSR-RootSizeInMb contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33ac4d0 + msDFSR-StagingSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ac450 + msDFSR-ConflictSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33ac3c0 + msDFSR-FileFilter contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33ac340 + msDFSR-DirectoryFilter contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ac2c0 + msDFSR-DeletedSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33ac240 + msDFSR-DefaultCompressionExclusionFilter contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x33ac1a0 + msDFSR-OnDemandExclusionFileFilter contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x33ac110 + msDFSR-OnDemandExclusionDirectoryFilter contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x33ac070 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33abff0 + const char * contains 44 bytes in 2 blocks (ref 0) d=(nil) 0x33abde0 + msDFSR-ReplicationGroupType contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33abe60 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33abbf0 + ;CN=ms-DFSR-ReplicationGroup,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 130 bytes in 1 blocks (ref 0) d=(nil) 0x33abcf0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33abc80 + 1.2.840.113556.1.6.13.4.5 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33abb60 + msDFSR-ReplicationGroup contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33abad0 + ms-DFSR-ReplicationGroup contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33aba40 + struct dsdb_class contains 963 bytes in 23 blocks (ref 0) d=(nil) 0x33aab50 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345c9c0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345c940 + ms-DFSR-Member contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ab7e0 + ms-DFSR-Member contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ab760 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33ab670 + const char * contains 32 bytes in 2 blocks (ref 0) d=(nil) 0x33ab570 + msDFSR-Topology contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ab5f0 + const char * contains 149 bytes in 7 blocks (ref 0) d=(nil) 0x33ab1c0 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33ab4f0 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33ab470 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33ab3f0 + msDFSR-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ab370 + serverReference contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ab2f0 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33ab270 + const char * contains 41 bytes in 2 blocks (ref 0) d=(nil) 0x33ab0b0 + msDFSR-ComputerReference contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33ab130 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33aaec0 + ;CN=ms-DFSR-Member,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x33aafc0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33aaf50 + 1.2.840.113556.1.6.13.4.9 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33aae30 + msDFSR-Member contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33aadb0 + ms-DFSR-Member contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33aad30 + struct dsdb_class contains 1041 bytes in 23 blocks (ref 0) d=(nil) 0x33a9e10 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345cac0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345ca40 + ms-DFSR-LocalSettings contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33aaad0 + ms-DFSR-LocalSettings contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33aaa50 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33aa960 + const char * contains 25 bytes in 2 blocks (ref 0) d=(nil) 0x33aa860 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33aa8e0 + const char * contains 240 bytes in 9 blocks (ref 0) d=(nil) 0x33aa370 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33aa7e0 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33aa760 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33aa6e0 + msDFSR-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33aa660 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33aa5e0 + msDFSR-CommonStagingPath contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33aa550 + msDFSR-CommonStagingSizeInMb contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33aa4c0 + msDFSR-StagingCleanupTriggerInPercent contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x33aa430 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33aa180 + ;CN=ms-DFSR-LocalSettings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33aa280 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33aa210 + 1.2.840.113556.1.6.13.4.1 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33aa0f0 + msDFSR-LocalSettings contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33aa070 + ms-DFSR-LocalSettings contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33a9ff0 + struct dsdb_class contains 908 bytes in 19 blocks (ref 0) d=(nil) 0x33a9320 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345cbc0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345cb40 + ms-DFSR-GlobalSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a9d90 + ms-DFSR-GlobalSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a9d10 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33a9c20 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33a9b20 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a9ba0 + const char * contains 101 bytes in 5 blocks (ref 0) d=(nil) 0x33a9880 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a9aa0 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a9a20 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33a99a0 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a9920 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a9690 + ;CN=ms-DFSR-GlobalSettings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 128 bytes in 1 blocks (ref 0) d=(nil) 0x33a9790 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a9720 + 1.2.840.113556.1.6.13.4.4 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33a9600 + msDFSR-GlobalSettings contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33a9580 + ms-DFSR-GlobalSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a9500 + struct dsdb_class contains 1247 bytes in 29 blocks (ref 0) d=(nil) 0x33a8170 + ms-DFSR-ContentSet contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a92a0 + ms-DFSR-ContentSet contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a9220 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33a9130 + const char * contains 31 bytes in 2 blocks (ref 0) d=(nil) 0x33a9030 + msDFSR-Content contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a90b0 + const char * contains 487 bytes in 17 blocks (ref 0) d=(nil) 0x33a86d0 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a8fb0 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a8f30 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33a8eb0 + msDFSR-DirectoryFilter contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a8e30 + msDFSR-FileFilter contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a8db0 + msDFSR-DfsPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a8d30 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33a8cb0 + msDFSR-RootSizeInMb contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a8c30 + msDFSR-StagingSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a8bb0 + msDFSR-ConflictSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33a8b20 + msDFSR-Priority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a8aa0 + msDFSR-DeletedSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a8a20 + msDFSR-DefaultCompressionExclusionFilter contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x33a8980 + msDFSR-OnDemandExclusionFileFilter contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x33a88f0 + msDFSR-OnDemandExclusionDirectoryFilter contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x33a8850 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a87d0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a84e0 + ;CN=ms-DFSR-ContentSet,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33a85e0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a8570 + 1.2.840.113556.1.6.13.4.7 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33a8450 + msDFSR-ContentSet contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a83d0 + ms-DFSR-ContentSet contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a8350 + struct dsdb_class contains 887 bytes in 19 blocks (ref 0) d=(nil) 0x33a7670 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345ccc0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345cc40 + ms-DFSR-Content contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a80f0 + ms-DFSR-Content contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a8070 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33a7f80 + const char * contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x33a7e70 + msDFSR-ReplicationGroup contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33a7ef0 + const char * contains 101 bytes in 5 blocks (ref 0) d=(nil) 0x33a7bd0 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a7df0 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a7d70 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33a7cf0 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a7c70 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a79e0 + ;CN=ms-DFSR-Content,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x33a7ae0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a7a70 + 1.2.840.113556.1.6.13.4.6 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33a7950 + msDFSR-Content contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a78d0 + ms-DFSR-Content contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a7850 + struct dsdb_class contains 1079 bytes in 26 blocks (ref 0) d=(nil) 0x33a66b0 + ms-DFSR-Connection contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a75f0 + ms-DFSR-Connection contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a7570 + D:(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;DA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;CO)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33a7480 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x33a7380 + msDFSR-Member contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33a7400 + const char * contains 292 bytes in 12 blocks (ref 0) d=(nil) 0x33a6d10 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a7300 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a7280 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33a7200 + msDFSR-Schedule contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a7180 + msDFSR-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a7100 + msDFSR-RdcMinFileSizeInKb contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33a7070 + msDFSR-RdcEnabled contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a6ff0 + msDFSR-Enabled contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a6f70 + msDFSR-Priority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a6ef0 + msDFSR-DisablePacketPrivacy contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33a6e60 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a6de0 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x33a6c10 + fromServer contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33a6c90 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a6a20 + ;CN=ms-DFSR-Connection,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x33a6b20 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a6ab0 + 1.2.840.113556.1.6.13.4.10 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33a6990 + msDFSR-Connection contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a6910 + ms-DFSR-Connection contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a6890 + struct dsdb_class contains 1058 bytes in 25 blocks (ref 0) d=(nil) 0x33a58b0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345cdd0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345cd40 + ms-DFS-Namespace-v2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a6630 + ms-DFS-Namespace-v2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a65b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33a64e0 + const char * contains 38 bytes in 2 blocks (ref 0) d=(nil) 0x33a63e0 + msDFS-NamespaceAnchor contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33a6460 + const char * contains 32 bytes in 2 blocks (ref 0) d=(nil) 0x33a62e0 + msDFS-Commentv2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a6360 + const char * contains 246 bytes in 9 blocks (ref 0) d=(nil) 0x33a5df0 + msDFS-Propertiesv2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a6260 + msDFS-TargetListv2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a61e0 + msDFS-Ttlv2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33a6160 + msDFS-LastModifiedv2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33a60e0 + msDFS-NamespaceIdentityGUIDv2 contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33a6050 + msDFS-GenerationGUIDv2 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a5fd0 + msDFS-SchemaMinorVersion contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33a5f40 + msDFS-SchemaMajorVersion contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33a5eb0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a5c10 + ;CN=ms-DFS-Namespace-v2,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33a5d00 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a5c90 + 1.2.840.113556.1.5.258 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a5b90 + msDFS-Namespacev2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a5b10 + ms-DFS-Namespace-v2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a5a90 + struct dsdb_class contains 856 bytes in 16 blocks (ref 0) d=(nil) 0x33a4f40 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345cee0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345ce60 + ms-DFS-Namespace-Anchor contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33a5820 + ms-DFS-Namespace-Anchor contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33a5790 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33a56a0 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x33a55a0 + dfsConfiguration contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a5620 + const char * contains 41 bytes in 2 blocks (ref 0) d=(nil) 0x33a5490 + msDFS-SchemaMajorVersion contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33a5510 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a52b0 + ;CN=ms-DFS-Namespace-Anchor,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x33a53a0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a5330 + 1.2.840.113556.1.5.257 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a5230 + msDFS-NamespaceAnchor contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33a51b0 + ms-DFS-Namespace-Anchor contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33a5120 + struct dsdb_class contains 1046 bytes in 25 blocks (ref 0) d=(nil) 0x33a4020 + ms-DFS-Link-v2 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a4ec0 + ms-DFS-Link-v2 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a4e40 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33a4d70 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33a4c70 + msDFS-Namespacev2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a4cf0 + const char * contains 105 bytes in 4 blocks (ref 0) d=(nil) 0x33a4a40 + msDFS-ShortNameLinkPathv2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33a4be0 + msDFS-LinkSecurityDescriptorv2 contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33a4b50 + msDFS-Commentv2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a4ad0 + const char * contains 238 bytes in 9 blocks (ref 0) d=(nil) 0x33a4560 + msDFS-LinkPathv2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a49c0 + msDFS-Propertiesv2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a4940 + msDFS-TargetListv2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a48c0 + msDFS-Ttlv2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33a4840 + msDFS-LastModifiedv2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33a47c0 + msDFS-LinkIdentityGUIDv2 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33a4730 + msDFS-NamespaceIdentityGUIDv2 contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33a46a0 + msDFS-GenerationGUIDv2 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a4620 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a4380 + ;CN=ms-DFS-Link-v2,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x33a4470 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a4400 + 1.2.840.113556.1.5.259 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a4300 + msDFS-Linkv2 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33a4280 + ms-DFS-Link-v2 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a4200 + struct dsdb_class contains 941 bytes in 20 blocks (ref 0) d=(nil) 0x33a33b0 + ms-DFS-Deleted-Link-v2 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a3fa0 + ms-DFS-Deleted-Link-v2 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a3f20 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33a3e50 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33a3d50 + msDFS-Namespacev2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a3dd0 + const char * contains 66 bytes in 3 blocks (ref 0) d=(nil) 0x33a3bb0 + msDFS-ShortNameLinkPathv2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33a3cc0 + msDFS-Commentv2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a3c40 + const char * contains 133 bytes in 5 blocks (ref 0) d=(nil) 0x33a38f0 + msDFS-LinkPathv2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a3b30 + msDFS-LastModifiedv2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33a3ab0 + msDFS-LinkIdentityGUIDv2 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33a3a20 + msDFS-NamespaceIdentityGUIDv2 contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33a3990 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a3710 + ;CN=ms-DFS-Deleted-Link-v2,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 128 bytes in 1 blocks (ref 0) d=(nil) 0x33a3800 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a3790 + 1.2.840.113556.1.5.260 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a3690 + msDFS-DeletedLinkv2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a3610 + ms-DFS-Deleted-Link-v2 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a3590 + struct dsdb_class contains 860 bytes in 18 blocks (ref 0) d=(nil) 0x33a2870 + ms-COM-PartitionSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a3330 + ms-COM-PartitionSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a32b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33a31e0 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x33a2fd0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a3160 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a30e0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a3060 + const char * contains 94 bytes in 4 blocks (ref 0) d=(nil) 0x33a2db0 + msCOM-ObjectId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a2f50 + msCOM-DefaultPartitionLink contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33a2ec0 + msCOM-PartitionLink contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a2e40 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a2bd0 + ;CN=ms-COM-PartitionSet,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33a2cc0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a2c50 + 1.2.840.113556.1.5.194 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a2b50 + msCOM-PartitionSet contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a2ad0 + ms-COM-PartitionSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a2a50 + struct dsdb_class contains 782 bytes in 16 blocks (ref 0) d=(nil) 0x33a1e50 + ms-COM-Partition contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a27f0 + ms-COM-Partition contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a2770 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33a26a0 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x33a2490 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a2620 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a25a0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a2520 + const char * contains 31 bytes in 2 blocks (ref 0) d=(nil) 0x33a2390 + msCOM-ObjectId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a2410 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a21b0 + ;CN=ms-COM-Partition,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x33a22a0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a2230 + 1.2.840.113556.1.5.193 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a2130 + msCOM-Partition contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a20b0 + ms-COM-Partition contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a2030 + struct dsdb_class contains 1246 bytes in 38 blocks (ref 0) d=(nil) 0x33a08a0 + Meeting contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33a1dd0 + Meeting contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33a1d50 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33a1c80 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33a1b80 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a1c00 + const char * contains 556 bytes in 24 blocks (ref 0) d=(nil) 0x33a0ed0 + meetingAdvertiseScope contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33a1b00 + meetingApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a1a80 + meetingBandwidth contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a1a00 + meetingBlob contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33a1980 + meetingContactInfo contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a1900 + meetingDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a1880 + meetingEndTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a1800 + meetingID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a1780 + meetingIP contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a1700 + meetingIsEncrypted contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33a1680 + meetingKeyword contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a1600 + meetingLanguage contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a1580 + meetingLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a1500 + meetingMaxParticipants contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a1480 + meetingOriginator contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a1400 + meetingOwner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33a1380 + meetingProtocol contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33a1300 + meetingRating contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33a1280 + meetingRecurrence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a1200 + meetingScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33a1180 + meetingStartTime contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a1100 + meetingType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33a1080 + meetingURL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33a1000 + const char * contains 28 bytes in 2 blocks (ref 0) d=(nil) 0x33a0dd0 + meetingName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33a0e50 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33a0c00 + ;CN=Meeting,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 113 bytes in 1 blocks (ref 0) d=(nil) 0x33a0cf0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33a0c80 + 1.2.840.113556.1.5.104 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33a0b80 + meeting contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33a0b00 + Meeting contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33a0a80 + struct dsdb_class contains 1066 bytes in 30 blocks (ref 0) d=(nil) 0x339f730 + Mail-Recipient contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a0820 + Mail-Recipient contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33a07a0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33a06d0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33a05d0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a0650 + const char * contains 160 bytes in 7 blocks (ref 0) d=(nil) 0x33a0210 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33a0550 + msExchAssistantName contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33a04d0 + msExchLabeledURI contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a0450 + secretary contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33a03d0 + userSMIMECertificate contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33a0350 + msDS-PhoneticDisplayName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33a02c0 + const char * contains 192 bytes in 9 blocks (ref 0) d=(nil) 0x339fd60 + info contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x33a01a0 + garbageCollPeriod contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a0120 + legacyExchangeDN contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33a00a0 + showInAddressBook contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33a0020 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x339ffa0 + textEncodedORAddress contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x339ff20 + userCert contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x339fea0 + userCertificate contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x339fe20 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x339fc70 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339fcf0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x339fa90 + ;CN=Mail-Recipient,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x339fb80 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339fb10 + 1.2.840.113556.1.3.46 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x339fa10 + mailRecipient contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x339f990 + Mail-Recipient contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x339f910 + struct dsdb_class contains 4079 bytes in 18 blocks (ref 0) d=(nil) 0x339ed20 + const char * contains 1704 bytes in 1 blocks (ref 0) d=(nil) 0x345d620 + const char * contains 1616 bytes in 1 blocks (ref 0) d=(nil) 0x345cf60 + Lost-And-Found contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x339f6b0 + Lost-And-Found contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x339f630 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x339f560 + const char * contains 60 bytes in 4 blocks (ref 0) d=(nil) 0x339f360 + dMD contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x339f4f0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x339f470 + configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x339f3f0 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x339f260 + moveTreeState contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x339f2e0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x339f080 + ;CN=Lost-And-Found,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x339f170 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339f100 + 1.2.840.113556.1.5.139 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x339f000 + lostAndFound contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x339ef80 + Lost-And-Found contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x339ef00 + struct dsdb_class contains 932 bytes in 26 blocks (ref 0) d=(nil) 0x339dfa0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x345dde0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x345dd40 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3435960 + Locality contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x339eca0 + Locality contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x339ec20 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x339eb50 + const char * contains 107 bytes in 6 blocks (ref 0) d=(nil) 0x339e830 + locality contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x339ead0 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x339ea50 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x339e9d0 + country contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x339e950 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x339e8d0 + const char * contains 70 bytes in 5 blocks (ref 0) d=(nil) 0x339e5b0 + searchGuide contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x339e7b0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x339e730 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339e6c0 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x339e650 + const char * contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x339e4c0 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x339e540 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x339e450 + ;CN=Locality,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 114 bytes in 1 blocks (ref 0) d=(nil) 0x339e370 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x339e300 + 2.5.6.3 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x339e280 + locality contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x339e200 + Locality contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x339e180 + struct dsdb_class contains 838 bytes in 14 blocks (ref 0) d=(nil) 0x339d760 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345df20 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345de80 + Link-Track-Volume-Table contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x339df10 + Link-Track-Volume-Table contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x339de80 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x339ddb0 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x339dcb0 + fileLinkTracking contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x339dd30 + fileLinkTracking contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x339dad0 + ;CN=Link-Track-Volume-Table,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x339dbc0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339db50 + 1.2.840.113556.1.5.90 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x339da50 + linkTrackVolumeTable contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x339d9d0 + Link-Track-Volume-Table contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x339d940 + struct dsdb_class contains 902 bytes in 21 blocks (ref 0) d=(nil) 0x339cab0 + Link-Track-Vol-Entry contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x339d6e0 + Link-Track-Vol-Entry contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x339d660 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY) contains 75 bytes in 1 blocks (ref 0) d=(nil) 0x339d5a0 + const char * contains 37 bytes in 2 blocks (ref 0) d=(nil) 0x339d4a0 + linkTrackVolumeTable contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x339d520 + const char * contains 185 bytes in 9 blocks (ref 0) d=(nil) 0x339d060 + currMachineId contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x339d420 + linkTrackSecret contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x339d3a0 + objectCount contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x339d320 + seqNotification contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x339d2a0 + timeRefresh contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x339d220 + timeVolChange contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x339d1a0 + volTableGUID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x339d120 + volTableIdxGUID contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x339ce10 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x339cff0 + ;CN=Link-Track-Vol-Entry,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x339cf00 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339ce90 + 1.2.840.113556.1.5.92 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x339cd90 + linkTrackVolEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x339cd10 + Link-Track-Vol-Entry contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x339cc90 + struct dsdb_class contains 849 bytes in 18 blocks (ref 0) d=(nil) 0x339bf80 + Link-Track-OMT-Entry contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x339ca30 + Link-Track-OMT-Entry contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x339c9b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x339c8e0 + const char * contains 41 bytes in 2 blocks (ref 0) d=(nil) 0x339c7d0 + linkTrackObjectMoveTable contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x339c850 + const char * contains 110 bytes in 6 blocks (ref 0) d=(nil) 0x339c530 + birthLocation contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x339c750 + currentLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x339c6d0 + oMTGuid contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x339c650 + oMTIndxGuid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x339c5d0 + timeRefresh contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x339c2e0 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x339c4c0 + ;CN=Link-Track-OMT-Entry,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x339c3d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339c360 + 1.2.840.113556.1.5.93 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x339c260 + linkTrackOMTEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x339c1e0 + Link-Track-OMT-Entry contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x339c160 + struct dsdb_class contains 862 bytes in 14 blocks (ref 0) d=(nil) 0x339b730 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345e060 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345dfc0 + Link-Track-Object-Move-Table contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x339bef0 + Link-Track-Object-Move-Table contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x339be60 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x339bd90 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x339bc90 + fileLinkTracking contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x339bd10 + fileLinkTracking contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x339bab0 + ;CN=Link-Track-Object-Move-Table,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 134 bytes in 1 blocks (ref 0) d=(nil) 0x339bba0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339bb30 + 1.2.840.113556.1.5.91 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x339ba30 + linkTrackObjectMoveTable contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x339b9a0 + Link-Track-Object-Move-Table contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x339b910 + struct dsdb_class contains 781 bytes in 14 blocks (ref 0) d=(nil) 0x339ae70 + Licensing-Site-Settings contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x339b6a0 + Licensing-Site-Settings contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x339b610 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x339b540 + const char * contains 21 bytes in 2 blocks (ref 0) d=(nil) 0x339b450 + site contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x339b4d0 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x339b160 + siteServer contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x339b3d0 + applicationSiteSettings contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x339b340 + ;CN=Licensing-Site-Settings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x339b250 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339b1e0 + 1.2.840.113556.1.5.78 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x339b0e0 + licensingSiteSettings contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x339aa80 + Licensing-Site-Settings contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x339b050 + struct dsdb_class contains 1020 bytes in 11 blocks (ref 0) d=(nil) 0x339a740 + const char * contains 400 bytes in 1 blocks (ref 0) d=(nil) 0x3436e00 + Leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x339ae00 + Leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x339ad90 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x339acc0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x339ac50 + ;CN=Leaf,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 110 bytes in 1 blocks (ref 0) d=(nil) 0x339ab70 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x339ab00 + 1.2.840.113556.1.5.20 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x339aa00 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x339a990 + Leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x339a920 + struct dsdb_class contains 907 bytes in 25 blocks (ref 0) d=(nil) 0x33998a0 + IpService contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x339a6c0 + IpService contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x339a640 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x339a570 + const char * contains 86 bytes in 5 blocks (ref 0) d=(nil) 0x339a2e0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x339a4f0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x339a470 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x339a400 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x339a380 + const char * contains 115 bytes in 6 blocks (ref 0) d=(nil) 0x3399fc0 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x339a260 + msSFU30Aliases contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x339a1e0 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x339a160 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x339a0e0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x339a060 + const char * contains 67 bytes in 4 blocks (ref 0) d=(nil) 0x3399e40 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3399f50 + ipServicePort contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3399ed0 + ipServiceProtocol contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3399c00 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3399dd0 + ;CN=IpService,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x3399cf0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3399c80 + 1.3.6.1.1.1.2.3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3399b80 + ipService contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3399b00 + IpService contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3399a80 + struct dsdb_class contains 708 bytes in 17 blocks (ref 0) d=(nil) 0x3398e60 + Ipsec-Policy contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3399820 + Ipsec-Policy contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33997a0 + D: contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3399730 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x3399520 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33996b0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3399630 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33995b0 + const char * contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x3399390 + ipsecISAKMPReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33994a0 + ipsecNFAReference contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3399420 + ipsecBase contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33991c0 + ;CN=Ipsec-Policy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 118 bytes in 1 blocks (ref 0) d=(nil) 0x33992b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3399240 + 1.2.840.113556.1.5.98 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3399140 + ipsecPolicy contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33990c0 + Ipsec-Policy contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3399040 + struct dsdb_class contains 708 bytes in 17 blocks (ref 0) d=(nil) 0x3398410 + Ipsec-NFA contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3398de0 + Ipsec-NFA contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3398d60 + D: contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3398cf0 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x3398ae0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3398c70 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3398bf0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3398b70 + const char * contains 77 bytes in 3 blocks (ref 0) d=(nil) 0x3398940 + ipsecFilterReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3398a60 + ipsecNegotiationPolicyReference contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x33989d0 + ipsecBase contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3398770 + ;CN=Ipsec-NFA,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x3398860 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33987f0 + 1.2.840.113556.1.5.121 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33986f0 + ipsecNFA contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3398670 + Ipsec-NFA contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33985f0 + struct dsdb_class contains 785 bytes in 17 blocks (ref 0) d=(nil) 0x3397970 + Ipsec-Negotiation-Policy contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3398380 + Ipsec-Negotiation-Policy contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33982f0 + D: contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3398280 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x3398070 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3398200 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3398180 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3398100 + const char * contains 80 bytes in 3 blocks (ref 0) d=(nil) 0x3397ec0 + iPSECNegotiationPolicyAction contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3397fe0 + iPSECNegotiationPolicyType contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3397f50 + ipsecBase contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3397ce0 + ;CN=Ipsec-Negotiation-Policy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 130 bytes in 1 blocks (ref 0) d=(nil) 0x3397dd0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3397d60 + 1.2.840.113556.1.5.119 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3397c60 + ipsecNegotiationPolicy contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3397be0 + Ipsec-Negotiation-Policy contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3397b50 + struct dsdb_class contains 680 bytes in 14 blocks (ref 0) d=(nil) 0x33970b0 + Ipsec-ISAKMP-Policy contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33978f0 + Ipsec-ISAKMP-Policy contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3397870 + D: contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3397800 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x33975f0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3397780 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3397700 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3397680 + ipsecBase contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3397410 + ;CN=Ipsec-ISAKMP-Policy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x3397500 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3397490 + 1.2.840.113556.1.5.120 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3397390 + ipsecISAKMPPolicy contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3397310 + Ipsec-ISAKMP-Policy contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3397290 + struct dsdb_class contains 646 bytes in 14 blocks (ref 0) d=(nil) 0x3396890 + Ipsec-Filter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3397030 + Ipsec-Filter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3396fb0 + D: contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3396f40 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x33961b0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3396ec0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3396e40 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3396dc0 + ipsecBase contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3396bf0 + ;CN=Ipsec-Filter,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 118 bytes in 1 blocks (ref 0) d=(nil) 0x3396ce0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3396c70 + 1.2.840.113556.1.5.118 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3396b70 + ipsecFilter contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3396af0 + Ipsec-Filter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3396a70 + struct dsdb_class contains 723 bytes in 17 blocks (ref 0) d=(nil) 0x3395e40 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3436b80 + Ipsec-Base contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3396810 + Ipsec-Base contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3396790 + D: contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3396720 + const char * contains 111 bytes in 6 blocks (ref 0) d=(nil) 0x3396400 + ipsecData contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33966a0 + ipsecDataType contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3396620 + ipsecID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33965a0 + ipsecName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3396520 + ipsecOwnersReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33964a0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3396390 + ;CN=Ipsec-Base,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x33962b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3396240 + 1.2.840.113556.1.5.7000.56 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3396120 + ipsecBase contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33960a0 + Ipsec-Base contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3396020 + struct dsdb_class contains 889 bytes in 24 blocks (ref 0) d=(nil) 0x3395020 + IpProtocol contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3395dc0 + IpProtocol contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3395d40 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3395c70 + const char * contains 86 bytes in 5 blocks (ref 0) d=(nil) 0x33959e0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3395bf0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3395b70 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3395b00 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3395a80 + const char * contains 115 bytes in 6 blocks (ref 0) d=(nil) 0x33956c0 + msSFU30Aliases contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3395960 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33958e0 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3395860 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33957e0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3395760 + const char * contains 44 bytes in 3 blocks (ref 0) d=(nil) 0x33955c0 + ipProtocolNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3395380 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3395650 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3395550 + ;CN=IpProtocol,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x3395470 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3395400 + 1.3.6.1.1.1.2.4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3395300 + ipProtocol contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3395280 + IpProtocol contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3395200 + struct dsdb_class contains 945 bytes in 28 blocks (ref 0) d=(nil) 0x3394000 + IpNetwork contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3394fa0 + IpNetwork contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3394f20 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3394e50 + const char * contains 86 bytes in 5 blocks (ref 0) d=(nil) 0x3394bc0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3394dd0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3394d50 + nisMap contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3394ce0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3394c60 + const char * contains 177 bytes in 10 blocks (ref 0) d=(nil) 0x33946a0 + msSFU30Aliases contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3394b40 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3394ac0 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3394a40 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33949c0 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x3394950 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33948e0 + ipNetmaskNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3394860 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33947e0 + manager contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3394760 + const char * contains 43 bytes in 3 blocks (ref 0) d=(nil) 0x33945a0 + ipNetworkNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3394360 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3394630 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3394530 + ;CN=IpNetwork,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x3394450 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33943e0 + 1.3.6.1.1.1.2.7 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33942e0 + ipNetwork contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3394260 + IpNetwork contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33941e0 + struct dsdb_class contains 722 bytes in 17 blocks (ref 0) d=(nil) 0x33935d0 + IpHost contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3393f90 + IpHost contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3393f20 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3393e50 + const char * contains 98 bytes in 7 blocks (ref 0) d=(nil) 0x3393b50 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x3393de0 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3393d70 + ipHostNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3393cf0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3393c70 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3393c00 + manager contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3393910 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3393ae0 + ;CN=IpHost,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x3393a00 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3393990 + 1.3.6.1.1.1.2.6 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3393890 + ipHost contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3393820 + IpHost contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33937b0 + struct dsdb_class contains 811 bytes in 14 blocks (ref 0) d=(nil) 0x3392d80 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345e180 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345e100 + Inter-Site-Transport-Container contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x3393540 + Inter-Site-Transport-Container contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x33934b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33933e0 + const char * contains 31 bytes in 2 blocks (ref 0) d=(nil) 0x3393100 + sitesContainer contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3393360 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33932f0 + ;CN=Inter-Site-Transport-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 136 bytes in 1 blocks (ref 0) d=(nil) 0x33931f0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3393180 + 1.2.840.113556.1.5.140 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3393080 + interSiteTransportContainer contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3392ff0 + Inter-Site-Transport-Container contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x3392f60 + struct dsdb_class contains 903 bytes in 20 blocks (ref 0) d=(nil) 0x3392240 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345e290 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345e200 + Inter-Site-Transport contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3392d00 + Inter-Site-Transport contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3392c80 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3392bb0 + const char * contains 44 bytes in 2 blocks (ref 0) d=(nil) 0x3392aa0 + interSiteTransportContainer contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3392b20 + const char * contains 45 bytes in 3 blocks (ref 0) d=(nil) 0x3392910 + options contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3392a20 + replInterval contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33929a0 + const char * contains 67 bytes in 3 blocks (ref 0) d=(nil) 0x33927f0 + transportAddressAttribute contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3392880 + transportDLLName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33925a0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3392780 + ;CN=Inter-Site-Transport,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x3392690 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3392620 + 1.2.840.113556.1.5.141 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3392520 + interSiteTransport contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33924a0 + Inter-Site-Transport contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3392420 + struct dsdb_class contains 1212 bytes in 29 blocks (ref 0) d=(nil) 0x33911e0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345e3b0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345e320 + Intellimirror-SCP contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33921c0 + Intellimirror-SCP contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3392140 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3392070 + const char * contains 52 bytes in 3 blocks (ref 0) d=(nil) 0x3391ee0 + intellimirrorGroup contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3391ff0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3391f70 + const char * contains 404 bytes in 14 blocks (ref 0) d=(nil) 0x33917b0 + netbootAllowNewClients contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3391e60 + netbootAnswerOnlyValidClients contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x3391dd0 + netbootAnswerRequests contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3391d50 + netbootCurrentClientCount contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3391cc0 + netbootIntelliMirrorOSes contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3391c30 + netbootLimitClients contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3391bb0 + netbootLocallyInstalledOSes contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3391b20 + netbootMachineFilePath contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3391aa0 + netbootMaxClients contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3391a20 + netbootNewMachineNamingPolicy contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x3391990 + netbootNewMachineOU contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3391910 + netbootServer contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3391890 + netbootTools contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3391540 + serviceAdministrationPoint contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3391720 + ;CN=Intellimirror-SCP,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x3391630 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33915c0 + 1.2.840.113556.1.5.151 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33914c0 + intellimirrorSCP contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3391440 + Intellimirror-SCP contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33913c0 + struct dsdb_class contains 812 bytes in 16 blocks (ref 0) d=(nil) 0x33908c0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345e4c0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345e440 + Intellimirror-Group contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3391160 + Intellimirror-Group contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33910e0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;CCDC;;;CO)(A;;RPLCLORC;;;AU) contains 107 bytes in 1 blocks (ref 0) d=(nil) 0x3391000 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x3390e70 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3390f80 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3390f00 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3390c20 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3390e00 + ;CN=Intellimirror-Group,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x3390d10 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3390ca0 + 1.2.840.113556.1.5.152 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3390ba0 + intellimirrorGroup contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3390b20 + Intellimirror-Group contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3390aa0 + struct dsdb_class contains 729 bytes in 16 blocks (ref 0) d=(nil) 0x338ff90 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345e540 + Infrastructure-Update contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3390840 + Infrastructure-Update contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33907c0 + D:(A;;GA;;;SY) contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3390740 + const char * contains 52 bytes in 3 blocks (ref 0) d=(nil) 0x33905c0 + domain contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33906d0 + infrastructureUpdate contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3390650 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x33902f0 + dNReferenceUpdate contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3390540 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33904d0 + ;CN=Infrastructure-Update,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x33903e0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3390370 + 1.2.840.113556.1.5.175 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3390270 + infrastructureUpdate contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33901f0 + Infrastructure-Update contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3390170 + struct dsdb_class contains 2370 bytes in 44 blocks (ref 0) d=(nil) 0x338e410 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x345e660 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345e5c0 + inetOrgPerson contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338ff10 + inetOrgPerson contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338fe90 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPLCLORC;;;PS)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;CR;ab721a54-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;CR;ab721a56-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;RPWP;77B5B886-944A-11d1-AEBD-0000F80367C1;;PS)(OA;;RPWP;E45795B2-9455-11d1-AEBD-0000F80367C1;;PS)(OA;;RPWP;E45795B3-9455-11d1-AEBD-0000F80367C1;;PS)(OA;;RP;037088f8-0ae1-11d2-b422-00a0c968f939;;RS)(OA;;RP;4c164200-20c0-11d0-a768-00aa006e0529;;RS)(OA;;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;;RS)(A;;RC;;;AU)(OA;;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;;AU)(OA;;RP;77B5B886-944A-11d1-AEBD-0000F80367C1;;AU)(OA;;RP;E45795B3-9455-11d1-AEBD-0000F80367C1;;AU)(OA;;RP;e48d0154-bcf8-11d1-8702-00c04fb96050;;AU)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;WD)(OA;;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;;RS)(OA;;RPWP;bf967a7f-0de6-11d0-a285-00aa003049e2;;CA)(OA;;RP;46a9b11d-60ae-405a-b7e8-ff8a58d456d2;;S-1-5-32-560)(OA;;WPRP;6db69a1c-9422-11d1-aebd-0000f80367c1;;S-1-5-32-561)(OA;;WPRP;5805bc62-bdc9-4428-a5e2-856a0f4c185e;;S-1-5-32-561) contains 1114 bytes in 1 blocks (ref 0) d=(nil) 0x338f9c0 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x338f7b0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338f940 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338f8c0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338f840 + const char * contains 529 bytes in 28 blocks (ref 0) d=(nil) 0x338e950 + audio contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x338f740 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x338f6c0 + carLicense contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x338f640 + departmentNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x338f5c0 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x338f540 + employeeNumber contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x338f4c0 + employeeType contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x338f440 + givenName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338f3c0 + homePhone contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338f340 + homePostalAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x338f2c0 + initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x338f240 + jpegPhoto contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338f1c0 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x338f140 + mail contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x338f0d0 + manager contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x338f050 + mobile contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x338efe0 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x338ef70 + pager contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x338ef00 + photo contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x338ee90 + preferredLanguage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x338ee10 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x338ed90 + secretary contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338ed10 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x338eca0 + userCertificate contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x338ec20 + userPKCS12 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x338eba0 + userSMIMECertificate contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x338eb20 + x500uniqueIdentifier contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x338eaa0 + user contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x338e780 + ;CN=Person,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x338e870 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338e800 + 2.16.840.1.113730.3.2.2 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x338e6f0 + inetOrgPerson contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338e670 + inetOrgPerson contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338e5f0 + struct dsdb_class contains 875 bytes in 20 blocks (ref 0) d=(nil) 0x338d7d0 + Index-Server-Catalog contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x338e390 + Index-Server-Catalog contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x338e310 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x338e240 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x338e0b0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338e1c0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338e140 + const char * contains 87 bytes in 5 blocks (ref 0) d=(nil) 0x338de10 + friendlyNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338e030 + indexedScopes contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338dfb0 + queryPoint contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x338df30 + uNCName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x338deb0 + const char * contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x338dd10 + creator contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x338dd90 + connectionPoint contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x338db30 + ;CN=Index-Server-Catalog,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x338dc20 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338dbb0 + 1.2.840.113556.1.5.130 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x338dab0 + indexServerCatalog contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338da30 + Index-Server-Catalog contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x338d9b0 + struct dsdb_class contains 698 bytes in 13 blocks (ref 0) d=(nil) 0x338cf50 + IEEE802Device contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338d750 + IEEE802Device contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338d6d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x338d600 + const char * contains 38 bytes in 3 blocks (ref 0) d=(nil) 0x338d480 + macAddress contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x338d580 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338d510 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x338d2b0 + ;CN=IEEE802Device,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x338d3a0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338d330 + 1.3.6.1.1.1.2.11 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x338d230 + ieee802Device contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338d1b0 + IEEE802Device contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338d130 + struct dsdb_class contains 3002 bytes in 20 blocks (ref 0) d=(nil) 0x338c370 + const char * contains 992 bytes in 1 blocks (ref 0) d=(nil) 0x345eb30 + const char * contains 960 bytes in 1 blocks (ref 0) d=(nil) 0x345e700 + Group-Policy-Container contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x338ced0 + Group-Policy-Container contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x338ce50 + D:P(A;CI;RPWPCCDCLCLOLORCWOWDSDDTSW;;;DA)(A;CI;RPWPCCDCLCLOLORCWOWDSDDTSW;;;EA)(A;CI;RPWPCCDCLCLOLORCWOWDSDDTSW;;;CO)(A;CI;RPWPCCDCLCLORCWOWDSDDTSW;;;SY)(A;CI;RPLCLORC;;;AU)(OA;CI;CR;edacfd8f-ffb3-11d1-b41d-00a0c968f939;;AU)(A;CI;LCRPLORC;;;ED) contains 245 bytes in 1 blocks (ref 0) d=(nil) 0x338ccf0 + const char * contains 183 bytes in 8 blocks (ref 0) d=(nil) 0x338c8b0 + flags contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x338cc80 + gPCFileSysPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x338cc00 + gPCFunctionalityVersion contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x338cb70 + gPCMachineExtensionNames contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x338cae0 + gPCUserExtensionNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x338ca60 + gPCWQLFilter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x338c9e0 + versionNumber contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338c960 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338c6d0 + ;CN=Group-Policy-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 128 bytes in 1 blocks (ref 0) d=(nil) 0x338c7c0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338c750 + 1.2.840.113556.1.5.157 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x338c650 + groupPolicyContainer contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x338c5d0 + Group-Policy-Container contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x338c550 + struct dsdb_class contains 946 bytes in 24 blocks (ref 0) d=(nil) 0x338b520 + groupOfUniqueNames contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338c2f0 + groupOfUniqueNames contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338c270 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPLCLORC;;;PS) contains 147 bytes in 1 blocks (ref 0) d=(nil) 0x338c170 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x338bf60 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338c0f0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338c070 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338bff0 + const char * contains 104 bytes in 7 blocks (ref 0) d=(nil) 0x338bbe0 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x338bee0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x338be60 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x338bdf0 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338bd80 + owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x338bd10 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x338bc90 + const char * contains 40 bytes in 3 blocks (ref 0) d=(nil) 0x338ba60 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338bb70 + uniqueMember contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x338baf0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x338b880 + ;CN=groupOfUniqueNames,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x338b970 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338b900 + 2.5.6.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x338b800 + groupOfUniqueNames contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338b780 + groupOfUniqueNames contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338b700 + struct dsdb_class contains 863 bytes in 24 blocks (ref 0) d=(nil) 0x338a720 + Group-Of-Names contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x338b4a0 + Group-Of-Names contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x338b420 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x338b350 + const char * contains 91 bytes in 5 blocks (ref 0) d=(nil) 0x338b0b0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338b2d0 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x338b250 + locality contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x338b1d0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338b150 + const char * contains 84 bytes in 6 blocks (ref 0) d=(nil) 0x338adc0 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x338b030 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x338afc0 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338af50 + owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x338aee0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x338ae60 + const char * contains 34 bytes in 3 blocks (ref 0) d=(nil) 0x338ac50 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338ad50 + member contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x338ace0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x338abe0 + ;CN=Group-Of-Names,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x338aaf0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x338aa80 + 2.5.6.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x338aa00 + groupOfNames contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x338a980 + Group-Of-Names contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x338a900 + struct dsdb_class contains 1674 bytes in 52 blocks (ref 0) d=(nil) 0x3388ae0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345ef80 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345c820 + Group contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x338a6b0 + Group contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x338a640 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPLCLORC;;;PS)(OA;;CR;ab721a55-1e2f-11d0-9819-00aa0040529b;;AU)(OA;;RP;46a9b11d-60ae-405a-b7e8-ff8a58d456d2;;S-1-5-32-560) contains 255 bytes in 1 blocks (ref 0) d=(nil) 0x338a4d0 + const char * contains 169 bytes in 8 blocks (ref 0) d=(nil) 0x338a0a0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338a450 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338a3d0 + builtinDomain contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x338a350 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x338a2d0 + msDS-AzAdminManager contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x338a250 + msDS-AzApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338a1d0 + msDS-AzScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x338a150 + const char * contains 80 bytes in 4 blocks (ref 0) d=(nil) 0x3389e90 + msSFU30PosixMember contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x338a020 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3389fa0 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3389f20 + const char * contains 498 bytes in 21 blocks (ref 0) d=(nil) 0x3389380 + adminCount contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3389e10 + controlAccessRights contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3389d90 + desktopProfile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3389d10 + mail contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3389ca0 + groupAttributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3389c20 + groupMembershipSAM contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3389ba0 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3389b20 + member contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3389ab0 + msDS-AzLDAPQuery contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3389a30 + msDS-NonMembers contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33899b0 + nonSecurityMember contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3389930 + nTGroupMembers contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33898b0 + operatorCount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3389830 + primaryGroupToken contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33897b0 + msDS-AzObjectGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3389730 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33896b0 + msDS-AzBizRule contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3389630 + msDS-AzBizRuleLanguage contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33895b0 + msDS-AzLastImportedBizRulePath contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x3389520 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33894a0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3389280 + groupType contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3389300 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x3389180 + posixGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3389200 + const char * contains 56 bytes in 3 blocks (ref 0) d=(nil) 0x3388ff0 + securityPrincipal contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3389100 + mailRecipient contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3389080 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3388e20 + ;CN=Group,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 111 bytes in 1 blocks (ref 0) d=(nil) 0x3388f10 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3388ea0 + 1.2.840.113556.1.5.8 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3388da0 + group contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x3388d30 + Group contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x3388cc0 + struct dsdb_class contains 818 bytes in 20 blocks (ref 0) d=(nil) 0x3387ef0 + FT-Dfs contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3388a70 + FT-Dfs contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3388a00 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO)(A;;RPLCLORC;;;AU) contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x3388910 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x3388810 + dfsConfiguration contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3388890 + const char * contains 59 bytes in 4 blocks (ref 0) d=(nil) 0x3388600 + keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3388790 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3388710 + uNCName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3388690 + const char * contains 61 bytes in 4 blocks (ref 0) d=(nil) 0x3388400 + pKT contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3388590 + pKTGuid contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3388510 + remoteServerName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3388490 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3388230 + ;CN=FT-Dfs,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x3388320 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33882b0 + 1.2.840.113556.1.5.43 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33881b0 + fTDfs contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x3388140 + FT-Dfs contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33880d0 + struct dsdb_class contains 787 bytes in 14 blocks (ref 0) d=(nil) 0x33876d0 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345f0a0 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345f000 + friendlyCountry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3387e70 + friendlyCountry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3387df0 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x3387d20 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x3387c30 + co contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3387cb0 + country contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3387a40 + ;CN=friendlyCountry,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 121 bytes in 1 blocks (ref 0) d=(nil) 0x3387b40 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3387ad0 + 0.9.2342.19200300.100.4.18 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33879b0 + friendlyCountry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3387930 + friendlyCountry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33878b0 + struct dsdb_class contains 1407 bytes in 16 blocks (ref 0) d=(nil) 0x3386a30 + Foreign-Security-Principal contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3387640 + Foreign-Security-Principal contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33875b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPLCLORC;;;PS)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;CR;ab721a54-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;CR;ab721a56-1e2f-11d0-9819-00aa0040529b;;PS)(OA;;RPWP;77B5B886-944A-11d1-AEBD-0000F80367C1;;PS)(OA;;RPWP;E45795B2-9455-11d1-AEBD-0000F80367C1;;PS)(OA;;RPWP;E45795B3-9455-11d1-AEBD-0000F80367C1;;PS)(A;;RC;;;AU)(OA;;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;;AU)(OA;;RP;77B5B886-944A-11d1-AEBD-0000F80367C1;;AU)(OA;;RP;E45795B3-9455-11d1-AEBD-0000F80367C1;;AU)(OA;;RP;e48d0154-bcf8-11d1-8702-00c04fb96050;;AU)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;WD) contains 686 bytes in 1 blocks (ref 0) d=(nil) 0x3387290 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3387190 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3387210 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x3387090 + foreignIdentifier contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3387110 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3386f90 + objectSid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3387010 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3386db0 + ;CN=Foreign-Security-Principal,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 132 bytes in 1 blocks (ref 0) d=(nil) 0x3386ea0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3386e30 + 1.2.840.113556.1.5.76 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3386d30 + foreignSecurityPrincipal contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3386ca0 + Foreign-Security-Principal contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3386c10 + struct dsdb_class contains 750 bytes in 12 blocks (ref 0) d=(nil) 0x33861f0 + File-Link-Tracking-Entry contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33869a0 + File-Link-Tracking-Entry contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3386910 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3386840 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x3386740 + fileLinkTracking contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33867c0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3386560 + ;CN=File-Link-Tracking-Entry,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 130 bytes in 1 blocks (ref 0) d=(nil) 0x3386650 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33865e0 + 1.2.840.113556.1.5.59 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33864e0 + fileLinkTrackingEntry contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3386460 + File-Link-Tracking-Entry contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33863d0 + struct dsdb_class contains 802 bytes in 15 blocks (ref 0) d=(nil) 0x33859e0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x345f260 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x345f140 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3436c20 + File-Link-Tracking contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3386170 + File-Link-Tracking contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33860f0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3386020 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3385f20 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3385fa0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3385d40 + ;CN=File-Link-Tracking,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x3385e30 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3385dc0 + 1.2.840.113556.1.5.52 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3385cc0 + fileLinkTracking contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3385c40 + File-Link-Tracking contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3385bc0 + struct dsdb_class contains 730 bytes in 13 blocks (ref 0) d=(nil) 0x3385120 + Dynamic-Object contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3385960 + Dynamic-Object contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33858e0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3385810 + const char * contains 56 bytes in 3 blocks (ref 0) d=(nil) 0x3385680 + entryTTL contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3385790 + msDS-Entry-Time-To-Die contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3385710 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3385490 + ;CN=Dynamic-Object,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x3385590 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3385520 + 1.3.6.1.4.1.1466.101.119.2 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3385400 + dynamicObject contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3385380 + Dynamic-Object contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3385300 + struct dsdb_class contains 901 bytes in 19 blocks (ref 0) d=(nil) 0x3384540 + DS-UI-Settings contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33850a0 + DS-UI-Settings contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3385020 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3384f50 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3384e50 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3384ed0 + const char * contains 206 bytes in 7 blocks (ref 0) d=(nil) 0x3384a80 + dSUIAdminMaximum contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3384dd0 + dSUIAdminNotification contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3384d50 + dSUIShellMaximum contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3384cd0 + msDS-FilterContainers contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3384c50 + msDS-Security-Group-Extra-Classes contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x3384bc0 + msDS-Non-Security-Group-Extra-Classes contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x3384b30 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33848a0 + ;CN=DS-UI-Settings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x3384990 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3384920 + 1.2.840.113556.1.5.183 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3384820 + dSUISettings contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33847a0 + DS-UI-Settings contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3384720 + struct dsdb_class contains 693 bytes in 15 blocks (ref 0) d=(nil) 0x3383c00 + DSA contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33844d0 + DSA contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3384460 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3384390 + const char * contains 40 bytes in 3 blocks (ref 0) d=(nil) 0x3384210 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3384310 + server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33842a0 + const char * contains 37 bytes in 2 blocks (ref 0) d=(nil) 0x3384110 + knowledgeInformation contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3384190 + applicationEntity contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3383f40 + ;CN=DSA,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 109 bytes in 1 blocks (ref 0) d=(nil) 0x3384030 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3383fc0 + 2.5.6.13 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3383ec0 + dSA contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3383e50 + DSA contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3383de0 + struct dsdb_class contains 737 bytes in 12 blocks (ref 0) d=(nil) 0x33833d0 + domainRelatedObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3383b80 + domainRelatedObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3383b00 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x3383a30 + const char * contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x3383930 + associatedDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33839b0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3383740 + ;CN=domainRelatedObject,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x3383840 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33837d0 + 0.9.2342.19200300.100.4.17 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33836b0 + domainRelatedObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3383630 + domainRelatedObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33835b0 + struct dsdb_class contains 1316 bytes in 40 blocks (ref 0) d=(nil) 0x3381df0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345f370 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345f2f0 + Domain-Policy contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3383350 + Domain-Policy contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33832d0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3383200 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x3382ff0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3383180 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3383100 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3383080 + const char * contains 548 bytes in 24 blocks (ref 0) d=(nil) 0x3382320 + authenticationOptions contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3382f70 + defaultLocalPolicyObject contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3382ee0 + domainCAs contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3382e60 + domainPolicyReference contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3382de0 + domainWidePolicy contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3382d60 + eFSPolicy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3382ce0 + forceLogoff contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3382c60 + ipsecPolicyReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3382be0 + lockOutObservationWindow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3382b50 + lockoutDuration contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3382ad0 + lockoutThreshold contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3382a50 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33829d0 + maxPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3382950 + maxRenewAge contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33828d0 + maxTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3382850 + minPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33827d0 + minPwdLength contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3382750 + minTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33826d0 + proxyLifetime contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3382650 + publicKeyPolicy contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33825d0 + pwdHistoryLength contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3382550 + pwdProperties contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33824d0 + qualityOfService contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3382450 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3382150 + ;CN=Domain-Policy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x3382240 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33821d0 + 1.2.840.113556.1.5.18 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33820d0 + domainPolicy contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3382050 + Domain-Policy contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3381fd0 + struct dsdb_class contains 4429 bytes in 22 blocks (ref 0) d=(nil) 0x33806e0 + const char * contains 408 bytes in 1 blocks (ref 0) d=(nil) 0x345f5f0 + const char * contains 392 bytes in 1 blocks (ref 0) d=(nil) 0x345f3f0 + Domain-DNS contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3381d70 + Domain-DNS contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3381cf0 + D:(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;S-1-5-21-2848215498-2472035911-1947525656-498)(A;;RP;;;WD)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6aa-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ab-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;1131f6ac-9c07-11d1-f79f-00c04fc2dcd2;;BA)(A;;RPLCLORC;;;AU)(A;;RPWPCRLCLOCCRCWDWOSW;;;DA)(A;CI;RPWPCRLCLOCCRCWDWOSDSW;;;BA)(A;;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;SY)(A;CI;RPWPCRLCLOCCDCRCWDWOSDDTSW;;;EA)(A;CI;LC;;;RU)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;;RP;c7407360-20bf-11d0-a768-00aa006e0529;;RU)(OA;CIIO;RPLCLORC;;bf967a9c-0de6-11d0-a285-00aa003049e2;RU)(A;;RPRC;;;RU)(OA;CIIO;RPLCLORC;;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(A;;LCRPLORC;;;ED)(OA;CIIO;RP;037088f8-0ae1-11d2-b422-00a0c968f939;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RP;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RP;4c164200-20c0-11d0-a768-00aa006e0529;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;CIIO;RPLCLORC;;4828CC14-1437-45bc-9B07-AD6F015E5F28;RU)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;RU)(OA;;RP;b8119fd0-04f6-4762-ab7a-4986c76b3f9a;;AU)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0de6-11d0-a285-00aa003049e2;ED)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;DD)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;ED)(OA;;CR;1131f6ad-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;;CR;89e95b76-444d-4c62-991a-0facbeda640c;;BA)(OA;;CR;e2a36dc9-ae17-47c3-b58b-be34c55ba633;;S-1-5-32-557)(OA;;CR;280f369c-67c7-438e-ae98-1d46f3c6f541;;AU)(OA;;CR;ccc2dc7d-a6ad-4a7a-8846-c04e3cc53501;;AU)(OA;;CR;05c74c5e-4deb-43b4-bd9f-86664c2a7fd5;;AU)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;ED)(OA;;CR;1131f6ae-9c07-11d1-f79f-00c04fc2dcd2;;BA)(OA;CIIO;CRRPWP;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)S:(AU;SA;WDWOWP;;;WD)(AU;SA;CR;;;BA)(AU;SA;CR;;;DU)(OU;CISA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)(OU;CISA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD) contains 2870 bytes in 1 blocks (ref 0) d=(nil) 0x3381150 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3381050 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33810d0 + const char * contains 148 bytes in 6 blocks (ref 0) d=(nil) 0x3380d10 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3380fd0 + msDS-AllowedDNSSuffixes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3380f40 + msDS-Behavior-Version contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3380ec0 + msDS-USNLastSyncSuccess contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3380e30 + msDS-EnabledFeature contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3380db0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3380c10 + samDomain contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3380c90 + domain contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3380a40 + ;CN=Domain-DNS,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x3380b30 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3380ac0 + 1.2.840.113556.1.5.67 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33809c0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3380940 + Domain-DNS contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33808c0 + struct dsdb_class contains 684 bytes in 17 blocks (ref 0) d=(nil) 0x337fe80 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x345f890 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345f800 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3436cb0 + Domain contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3380670 + Domain contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3380600 + const char * contains 44 bytes in 3 blocks (ref 0) d=(nil) 0x3380480 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3380580 + domain contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3380510 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x3380390 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3380410 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33801c0 + ;CN=Domain-DNS,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x33802b0 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3380240 + 1.2.840.113556.1.5.66 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3380140 + domain contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33800d0 + Domain contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3380060 + struct dsdb_class contains 849 bytes in 22 blocks (ref 0) d=(nil) 0x337f150 + documentSeries contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x337fe00 + documentSeries contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x337fd80 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x337fcb0 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x337fb20 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x337fc30 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x337fbb0 + const char * contains 99 bytes in 7 blocks (ref 0) d=(nil) 0x337f7a0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x337faa0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x337fa20 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x337f9b0 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x337f940 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337f8d0 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x337f850 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x337f6b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337f730 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337f4c0 + ;CN=documentSeries,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x337f5c0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337f550 + 0.9.2342.19200300.100.4.9 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x337f430 + documentSeries contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x337f3b0 + documentSeries contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x337f330 + struct dsdb_class contains 934 bytes in 26 blocks (ref 0) d=(nil) 0x337e200 + document contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337f0d0 + document contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337f050 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x337ef80 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x337edf0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x337ef00 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x337ee80 + const char * contains 233 bytes in 13 blocks (ref 0) d=(nil) 0x337e750 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337ed80 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x337ed00 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x337ec80 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x337ec10 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x337eba0 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337eb30 + documentTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x337eab0 + documentVersion contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x337ea30 + documentAuthor contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x337e9b0 + documentLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x337e930 + documentPublisher contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x337e8b0 + documentIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x337e830 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337e570 + ;CN=document,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 114 bytes in 1 blocks (ref 0) d=(nil) 0x337e670 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337e600 + 0.9.2342.19200300.100.4.6 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x337e4e0 + document contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337e460 + document contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337e3e0 + struct dsdb_class contains 948 bytes in 23 blocks (ref 0) d=(nil) 0x337d520 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345f9a0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345f920 + Dns-Zone contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337e180 + Dns-Zone contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337e100 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;ED)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;CC;;;AU)(A;;RPLCLORC;;;WD)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO) contains 177 bytes in 1 blocks (ref 0) d=(nil) 0x337dfe0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x337dee0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x337df60 + const char * contains 148 bytes in 7 blocks (ref 0) d=(nil) 0x337db30 + dnsAllowDynamic contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x337de60 + dnsAllowXFR contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x337dde0 + dnsNotifySecondaries contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x337dd60 + dNSProperty contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x337dce0 + dnsSecureSecondaries contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x337dc60 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x337dbe0 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x337d880 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337dac0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337da50 + ;CN=Dns-Zone,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 114 bytes in 1 blocks (ref 0) d=(nil) 0x337d970 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337d900 + 1.2.840.113556.1.5.85 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x337d800 + dnsZone contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x337d780 + Dns-Zone contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337d700 + struct dsdb_class contains 822 bytes in 18 blocks (ref 0) d=(nil) 0x337c9f0 + Dns-Node contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337d4a0 + Dns-Node contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337d420 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;ED)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;CO)(A;;RPLCLORC;;;WD) contains 165 bytes in 1 blocks (ref 0) d=(nil) 0x337d310 + const char * contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x337d210 + dnsZone contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x337d290 + const char * contains 68 bytes in 4 blocks (ref 0) d=(nil) 0x337d000 + dNSProperty contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x337d190 + dnsRecord contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x337d110 + dNSTombstoned contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x337d090 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x337cd50 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337cf90 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337cf20 + ;CN=Dns-Node,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 114 bytes in 1 blocks (ref 0) d=(nil) 0x337ce40 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337cdd0 + 1.2.840.113556.1.5.86 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x337ccd0 + dnsNode contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x337cc50 + Dns-Node contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337cbd0 + struct dsdb_class contains 899 bytes in 24 blocks (ref 0) d=(nil) 0x337bd10 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345fab0 + const char * contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x345fa20 + DMD contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337c980 + DMD contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337c910 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x337c840 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x337c740 + configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x337c7c0 + const char * contains 164 bytes in 8 blocks (ref 0) d=(nil) 0x337c300 + dmdName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x337c6c0 + msDS-IntId contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x337c640 + msDs-Schema-Extensions contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x337c5c0 + prefixMap contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x337c540 + schemaInfo contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x337c4c0 + schemaUpdate contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x337c440 + msDS-USNLastSyncSuccess contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x337c3b0 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x337c050 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337c290 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337c220 + ;CN=DMD,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 109 bytes in 1 blocks (ref 0) d=(nil) 0x337c140 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337c0d0 + 1.2.840.113556.1.3.9 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x337bfd0 + dMD contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337bf60 + DMD contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337bef0 + struct dsdb_class contains 941 bytes in 23 blocks (ref 0) d=(nil) 0x337afc0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3436370 + Display-Template contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x337bc90 + Display-Template contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x337bc10 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x337bb40 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x337ba40 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x337bac0 + const char * contains 201 bytes in 8 blocks (ref 0) d=(nil) 0x337b5e0 + addressEntryDisplayTable contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x337b9b0 + addressEntryDisplayTableMSDOS contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x337b920 + helpData16 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x337b8a0 + helpData32 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x337b820 + helpFileName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x337b7a0 + originalDisplayTable contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x337b720 + originalDisplayTableMSDOS contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x337b690 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x337b320 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337b570 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337b500 + ;CN=Display-Template,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x337b410 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337b3a0 + 1.2.840.113556.1.3.59 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x337b2a0 + displayTemplate contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x337b220 + Display-Template contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x337b1a0 + struct dsdb_class contains 1100 bytes in 29 blocks (ref 0) d=(nil) 0x3379eb0 + Display-Specifier contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x337af40 + Display-Specifier contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x337aec0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x337adf0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x337acf0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x337ad70 + const char * contains 390 bytes in 17 blocks (ref 0) d=(nil) 0x337a460 + adminContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x337ac70 + adminMultiselectPropertyPages contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x337abe0 + adminPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x337ab60 + attributeDisplayNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x337aae0 + classDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x337aa60 + contextMenu contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x337a9e0 + createDialog contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x337a960 + createWizardExt contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x337a8e0 + creationWizard contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x337a860 + extraColumns contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x337a7e0 + iconPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x337a760 + queryFilter contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x337a6e0 + scopeFlags contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x337a660 + shellContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x337a5e0 + shellPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x337a560 + treatAsLeaf contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x337a210 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x337a3f0 + ;CN=Display-Specifier,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x337a300 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x337a290 + 1.2.840.113556.1.5.84 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x337a190 + displaySpecifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x337a110 + Display-Specifier contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x337a090 + struct dsdb_class contains 1205 bytes in 38 blocks (ref 0) d=(nil) 0x3378900 + DHCP-Class contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3379e30 + DHCP-Class contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3379db0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3379ce0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3379be0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3379c60 + const char * contains 437 bytes in 21 blocks (ref 0) d=(nil) 0x33790c0 + dhcpClasses contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3379b60 + dhcpMask contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3379ae0 + dhcpMaxKey contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3379a60 + dhcpObjDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33799e0 + dhcpObjName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3379960 + dhcpOptions contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33798e0 + dhcpProperties contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3379860 + dhcpRanges contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33797e0 + dhcpReservations contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3379760 + dhcpServers contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33796e0 + dhcpSites contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3379660 + dhcpState contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33795e0 + dhcpSubnets contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3379560 + dhcpUpdateTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33794e0 + mscopeId contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3379460 + networkAddress contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33793e0 + optionDescription contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3379360 + optionsLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33792e0 + superScopeDescription contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3379260 + superScopes contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33791e0 + const char * contains 92 bytes in 5 blocks (ref 0) d=(nil) 0x3378ea0 + dhcpFlags contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3379040 + dhcpIdentification contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3378fc0 + dhcpType contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3378f40 + dhcpUniqueKey contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3378c60 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3378e30 + ;CN=DHCP-Class,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x3378d50 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3378ce0 + 1.2.840.113556.1.5.132 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3378be0 + dHCPClass contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3378b60 + DHCP-Class contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3378ae0 + struct dsdb_class contains 776 bytes in 15 blocks (ref 0) d=(nil) 0x3378070 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345fbe0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345fb50 + Dfs-Configuration contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3378880 + Dfs-Configuration contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3378800 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3378730 + const char * contains 44 bytes in 3 blocks (ref 0) d=(nil) 0x3378620 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33786b0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33783d0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33785b0 + ;CN=Dfs-Configuration,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 123 bytes in 1 blocks (ref 0) d=(nil) 0x33784c0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3378450 + 1.2.840.113556.1.5.42 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3378350 + dfsConfiguration contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33782d0 + Dfs-Configuration contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3378250 + struct dsdb_class contains 981 bytes in 33 blocks (ref 0) d=(nil) 0x3376e20 + Device contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3378000 + Device contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3377f90 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3377ec0 + const char * contains 92 bytes in 5 blocks (ref 0) d=(nil) 0x3377c20 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3377e40 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3377dc0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3377d40 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3377cc0 + const char * contains 95 bytes in 5 blocks (ref 0) d=(nil) 0x3377980 + msSFU30Aliases contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3377ba0 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3377b20 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3377aa0 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3377a20 + const char * contains 90 bytes in 7 blocks (ref 0) d=(nil) 0x3377610 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x3377910 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x33778a0 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3377830 + owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33777c0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3377740 + serialNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33776c0 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x3377520 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33775a0 + const char * contains 68 bytes in 4 blocks (ref 0) d=(nil) 0x33773a0 + bootableDevice contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33774a0 + ieee802Device contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3377160 + ipHost contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3377430 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3377330 + ;CN=Device,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x3377250 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33771e0 + 2.5.6.14 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33770e0 + device contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3377070 + Device contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3377000 + struct dsdb_class contains 854 bytes in 21 blocks (ref 0) d=(nil) 0x33762a0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345fcf0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x345fc70 + Cross-Ref-Container contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3376da0 + Cross-Ref-Container contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3376d20 + D:(A;;GA;;;SY) contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3376ca0 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x3376ba0 + configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3376c20 + const char * contains 172 bytes in 7 blocks (ref 0) d=(nil) 0x3376870 + msDS-Behavior-Version contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3376b20 + msDS-ExecuteScriptPassword contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3376610 + msDS-UpdateScript contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3376aa0 + uPNSuffixes contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3376a20 + msDS-SPNSuffixes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33769a0 + msDS-EnabledFeature contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3376920 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3376800 + ;CN=Cross-Ref-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x3376710 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33766a0 + 1.2.840.113556.1.5.7000.53 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3376580 + crossRefContainer contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3376500 + Cross-Ref-Container contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3376480 + struct dsdb_class contains 1115 bytes in 30 blocks (ref 0) d=(nil) 0x3375100 + Cross-Ref contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3376220 + Cross-Ref contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33761a0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33760d0 + const char * contains 34 bytes in 2 blocks (ref 0) d=(nil) 0x3375fd0 + crossRefContainer contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3376050 + const char * contains 387 bytes in 14 blocks (ref 0) d=(nil) 0x3375810 + msDS-Behavior-Version contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3375f50 + msDS-DnsRootAlias contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3375ed0 + msDS-NC-Replica-Locations contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3375e40 + msDS-Replication-Notify-First-DSA-Delay contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3375da0 + msDS-Replication-Notify-Subsequent-DSA-Delay contains 45 bytes in 1 blocks (ref 0) d=(nil) 0x3375d00 + msDS-SDReferenceDomain contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3375c80 + Enabled contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3375c00 + nETBIOSName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3375b80 + nTMixedDomain contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3375b00 + rootTrust contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3375a80 + superiorDNSRoot contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3375a00 + trustParent contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3375980 + msDS-NC-RO-Replica-Locations contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x33758f0 + const char * contains 50 bytes in 4 blocks (ref 0) d=(nil) 0x33756a0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33757a0 + dnsRoot contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3375460 + nCName contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3375730 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3375630 + ;CN=Cross-Ref,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x3375550 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33754e0 + 1.2.840.113556.1.3.11 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33753e0 + crossRef contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3375360 + Cross-Ref contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33752e0 + struct dsdb_class contains 914 bytes in 20 blocks (ref 0) d=(nil) 0x33744b0 + CRL-Distribution-Point contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3375080 + CRL-Distribution-Point contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3375000 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3374f30 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3374e30 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3374eb0 + const char * contains 174 bytes in 6 blocks (ref 0) d=(nil) 0x3374ad0 + authorityRevocationList contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3374da0 + certificateAuthorityObject contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3374d10 + certificateRevocationList contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3374c80 + cRLPartitionedRevocationList contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3374bf0 + deltaRevocationList contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3374b70 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x3374810 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3374a60 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33749f0 + ;CN=CRL-Distribution-Point,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 128 bytes in 1 blocks (ref 0) d=(nil) 0x3374900 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3374890 + 2.5.6.19 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3374790 + cRLDistributionPoint contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3374710 + CRL-Distribution-Point contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3374690 + struct dsdb_class contains 820 bytes in 21 blocks (ref 0) d=(nil) 0x33739c0 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345fe10 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x345fd70 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34363f0 + Country contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3374430 + Country contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33743b0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33742e0 + const char * contains 47 bytes in 3 blocks (ref 0) d=(nil) 0x3374150 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3374260 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33741e0 + const char * contains 39 bytes in 3 blocks (ref 0) d=(nil) 0x3373fd0 + searchGuide contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33740d0 + co contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3374060 + const char * contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x3373ee0 + c contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x3373f60 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3373e70 + ;CN=Country,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 113 bytes in 1 blocks (ref 0) d=(nil) 0x3373d90 + c contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x3373d20 + 2.5.6.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3373ca0 + country contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3373c20 + Country contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3373ba0 + struct dsdb_class contains 821 bytes in 17 blocks (ref 0) d=(nil) 0x3372f20 + Control-Access-Right contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3373940 + Control-Access-Right contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33738c0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33737f0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33736f0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3373770 + const char * contains 97 bytes in 5 blocks (ref 0) d=(nil) 0x33734d0 + appliesTo contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3373670 + localizationDisplayId contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33735f0 + rightsGuid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3373570 + validAccesses contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3373280 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3373460 + ;CN=Control-Access-Right,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x3373370 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3373300 + 1.2.840.113556.1.5.77 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3373200 + controlAccessRight contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3373180 + Control-Access-Right contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3373100 + struct dsdb_class contains 2989 bytes in 32 blocks (ref 0) d=(nil) 0x3371e80 + const char * contains 992 bytes in 1 blocks (ref 0) d=(nil) 0x34602e0 + const char * contains 960 bytes in 1 blocks (ref 0) d=(nil) 0x345feb0 + const char * contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x3436470 + Container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3372ea0 + Container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3372e20 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3372d50 + const char * contains 240 bytes in 12 blocks (ref 0) d=(nil) 0x3372720 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3372cd0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3372c50 + configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3372bd0 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3372b50 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3372ad0 + nTDSService contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3372a50 + server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33729e0 + subnet contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3372970 + msDS-AzAdminManager contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33728f0 + msDS-AzApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3372870 + msDS-AzScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33727f0 + const char * contains 37 bytes in 2 blocks (ref 0) d=(nil) 0x3372620 + msDS-ObjectReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33726a0 + const char * contains 56 bytes in 3 blocks (ref 0) d=(nil) 0x3372490 + defaultClassStore contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33725a0 + schemaVersion contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3372520 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x33721e0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3372420 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33723b0 + ;CN=Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 115 bytes in 1 blocks (ref 0) d=(nil) 0x33722d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3372260 + 1.2.840.113556.1.3.23 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3372160 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33720e0 + Container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3372060 + struct dsdb_class contains 859 bytes in 23 blocks (ref 0) d=(nil) 0x3371210 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34607c0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x345f1d0 + Contact contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3371e00 + Contact contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3371d80 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3371cb0 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x3371b20 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3371c30 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3371bb0 + const char * contains 36 bytes in 2 blocks (ref 0) d=(nil) 0x3371a20 + msDS-SourceObjectDN contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3371aa0 + const char * contains 22 bytes in 2 blocks (ref 0) d=(nil) 0x3371930 + notes contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33719b0 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x3371840 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33718c0 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x3371740 + mailRecipient contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33717c0 + organizationalPerson contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3371570 + ;CN=Person,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 112 bytes in 1 blocks (ref 0) d=(nil) 0x3371660 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33715f0 + 1.2.840.113556.1.5.15 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33714f0 + contact contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3371470 + Contact contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33713f0 + struct dsdb_class contains 1359 bytes in 22 blocks (ref 0) d=(nil) 0x3370680 + const char * contains 184 bytes in 1 blocks (ref 0) d=(nil) 0x3439ba0 + const char * contains 184 bytes in 1 blocks (ref 0) d=(nil) 0x34373a0 + const char * contains 184 bytes in 1 blocks (ref 0) d=(nil) 0x34369c0 + Connection-Point contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3371190 + Connection-Point contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3371110 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3371040 + const char * contains 43 bytes in 3 blocks (ref 0) d=(nil) 0x3370eb0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3370fc0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3370f40 + const char * contains 65 bytes in 4 blocks (ref 0) d=(nil) 0x3370ca0 + keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3370e30 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3370db0 + msDS-Settings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3370d30 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x33709e0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3370c30 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3370bc0 + ;CN=Connection-Point,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x3370ad0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3370a60 + 1.2.840.113556.1.5.14 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3370960 + connectionPoint contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33708e0 + Connection-Point contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3370860 + struct dsdb_class contains 971 bytes in 20 blocks (ref 0) d=(nil) 0x336fb90 + const char * contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x3460920 + const char * contains 88 bytes in 1 blocks (ref 0) d=(nil) 0x3460850 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3370600 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3370580 + D:(A;;RPWPCRCCDCLCLORCWOWDSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 89 bytes in 1 blocks (ref 0) d=(nil) 0x33704b0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33703b0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3370430 + const char * contains 73 bytes in 4 blocks (ref 0) d=(nil) 0x33701a0 + gPLink contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3370340 + gPOptions contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33702c0 + msDS-USNLastSyncSuccess contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3370230 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x336fef0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3370130 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33700c0 + ;CN=Configuration,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 119 bytes in 1 blocks (ref 0) d=(nil) 0x336ffe0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x336ff70 + 1.2.840.113556.1.5.12 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336fe70 + configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x336fdf0 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x336fd70 + struct dsdb_class contains 3914 bytes in 92 blocks (ref 0) d=(nil) 0x336d200 + const char * contains 304 bytes in 1 blocks (ref 0) d=(nil) 0x3460b90 + const char * contains 288 bytes in 1 blocks (ref 0) d=(nil) 0x3460a00 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3439730 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3439560 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34394e0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3439210 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34392d0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3439190 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3438380 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3437dd0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3437a50 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34379d0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34384a0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3437120 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34370a0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3436800 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3437950 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3436890 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34362f0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3436020 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34360e0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3435fa0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34351d0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3434930 + Computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336fb10 + Computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336fa90 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPCRLCLORCSDDT;;;CO)(OA;;WP;4c164200-20c0-11d0-a768-00aa006e0529;;CO)(A;;RPLCLORC;;;AU)(OA;;CR;ab721a53-1e2f-11d0-9819-00aa0040529b;;WD)(A;;CCDC;;;PS)(OA;;CCDC;bf967aa8-0de6-11d0-a285-00aa003049e2;;PO)(OA;;RPWP;bf967a7f-0de6-11d0-a285-00aa003049e2;;CA)(OA;;SW;f3a64788-5306-11d1-a9c5-0000f80367c1;;PS)(OA;;RPWP;77B5B886-944A-11d1-AEBD-0000F80367C1;;PS)(OA;;SW;72e39547-7b18-11d1-adef-00c04fd8d5cd;;PS)(OA;;SW;72e39547-7b18-11d1-adef-00c04fd8d5cd;;CO)(OA;;SW;f3a64788-5306-11d1-a9c5-0000f80367c1;;CO)(OA;;WP;3e0abfd0-126a-11d0-a060-00aa006c33ed;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;;WP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;;WP;bf967950-0de6-11d0-a285-00aa003049e2;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;;WP;bf967953-0de6-11d0-a285-00aa003049e2;bf967a86-0de6-11d0-a285-00aa003049e2;CO)(OA;;RP;46a9b11d-60ae-405a-b7e8-ff8a58d456d2;;S-1-5-32-560) contains 1013 bytes in 1 blocks (ref 0) d=(nil) 0x336f630 + const char * contains 71 bytes in 4 blocks (ref 0) d=(nil) 0x336f420 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x336f5b0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336f530 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x336f4b0 + const char * contains 95 bytes in 5 blocks (ref 0) d=(nil) 0x336f180 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336f3a0 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x336f320 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x336f2a0 + msSFU30Aliases contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x336f220 + const char * contains 1220 bytes in 47 blocks (ref 0) d=(nil) 0x336d820 + msTSSecondaryDesktopBL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x336f100 + msTSPrimaryDesktopBL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x336f080 + catalogs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336f000 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x336ef90 + defaultLocalPolicyObject contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x336ef00 + dNSHostName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336ee80 + localPolicyFlags contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x336ee00 + location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336ed80 + machineRole contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336ed00 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x336ec80 + msDS-AdditionalDnsHostName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x336ebf0 + msDS-AdditionalSamAccountName contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x336eb60 + netbootGUID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336eae0 + netbootInitialization contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336ea60 + netbootMachineFilePath contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x336e9e0 + netbootMirrorDataFile contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336e960 + netbootSIFFile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x336e8e0 + networkAddress contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x336e860 + operatingSystem contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x336e7e0 + operatingSystemHotfix contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336e760 + operatingSystemServicePack contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x336e6d0 + operatingSystemVersion contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x336e650 + physicalLocationObject contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x336e5d0 + policyReplicationFlags contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x336e550 + rIDSetReferences contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x336e4d0 + siteGUID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336e450 + volumeCount contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336e3d0 + msDS-KrbTgtLink contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x336e350 + msDS-ExecuteScriptPassword contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x336e2c0 + msDS-RevealedUsers contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336e240 + msDS-RevealedList contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x336e1c0 + msDS-AuthenticatedAtDC contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x336e140 + msDS-isGC contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x336e0c0 + msDS-isRODC contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336e040 + msDS-SiteName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x336dfc0 + msDS-PromotionSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x336df40 + msDS-NeverRevealGroup contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336dec0 + msDS-RevealOnDemandGroup contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x336de30 + msTPM-OwnerInformation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x336ddb0 + msTSProperty01 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x336dd30 + msTSProperty02 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x336dcb0 + msDS-IsUserCachableAtRodc contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x336dc20 + msDS-HostServiceAccount contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x336db90 + msTSEndpointPlugin contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336db10 + msTSEndpointType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x336da90 + msTSEndpointData contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x336da10 + const char * contains 23 bytes in 2 blocks (ref 0) d=(nil) 0x336d730 + ipHost contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x336d7b0 + user contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x336d560 + ;CN=Computer,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 114 bytes in 1 blocks (ref 0) d=(nil) 0x336d650 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x336d5e0 + 1.2.840.113556.1.3.30 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336d4e0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336d460 + Computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336d3e0 + struct dsdb_class contains 834 bytes in 18 blocks (ref 0) d=(nil) 0x336c6f0 + Com-Connection-Point contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x336d180 + Com-Connection-Point contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x336d100 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x336d030 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x336cf30 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x336cfb0 + const char * contains 79 bytes in 4 blocks (ref 0) d=(nil) 0x336cd20 + marshalledInterface contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x336ceb0 + moniker contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x336ce30 + monikerDisplayName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336cdb0 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x336cc30 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x336ccb0 + connectionPoint contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x336ca50 + ;CN=Com-Connection-Point,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x336cb40 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x336cad0 + 1.2.840.113556.1.5.11 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336c9d0 + comConnectionPoint contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336c950 + Com-Connection-Point contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x336c8d0 + struct dsdb_class contains 1010 bytes in 26 blocks (ref 0) d=(nil) 0x336b8b0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3460dd0 + const char * contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x3460d30 + Class-Store contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336c670 + Class-Store contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336c5f0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x336c520 + const char * contains 155 bytes in 9 blocks (ref 0) d=(nil) 0x336c080 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x336c4a0 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x336c420 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336c3a0 + classStore contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x336c320 + user contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x336c2b0 + group contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x336c240 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336c1c0 + domainPolicy contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x336c140 + const char * contains 105 bytes in 5 blocks (ref 0) d=(nil) 0x336bde0 + appSchemaVersion contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x336c000 + lastUpdateSequence contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336bf80 + nextLevelStore contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x336bf00 + versionNumber contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x336be80 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x336bc10 + ;CN=Class-Store,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 117 bytes in 1 blocks (ref 0) d=(nil) 0x336bd00 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x336bc90 + 1.2.840.113556.1.5.44 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336bb90 + classStore contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x336bb10 + Class-Store contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336ba90 + struct dsdb_class contains 1162 bytes in 38 blocks (ref 0) d=(nil) 0x336a360 + Class-Schema contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x336b830 + Class-Schema contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x336b7b0 + D:S: contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x336b740 + const char * contains 20 bytes in 2 blocks (ref 0) d=(nil) 0x336b650 + dMD contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x336b6d0 + const char * contains 436 bytes in 19 blocks (ref 0) d=(nil) 0x336ac30 + auxiliaryClass contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x336b5d0 + classDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x336b550 + defaultHidingValue contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336b4d0 + defaultSecurityDescriptor contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x336b440 + isDefunct contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x336b3c0 + lDAPDisplayName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x336b340 + mayContain contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x336b2c0 + msDS-IntId contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x336b240 + msDs-Schema-Extensions contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x336b1c0 + mustContain contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336b140 + possSuperiors contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x336b0c0 + rDNAttID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336b040 + schemaFlagsEx contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x336afc0 + systemAuxiliaryClass contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x336af40 + systemMayContain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x336aec0 + systemMustContain contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x336ae40 + systemOnly contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x336adc0 + systemPossSuperiors contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x336ad40 + const char * contains 135 bytes in 7 blocks (ref 0) d=(nil) 0x336a890 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x336abc0 + defaultObjectCategory contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336ab40 + governsID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x336aac0 + objectClassCategory contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x336aa40 + schemaIDGUID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x336a9c0 + subClassOf contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x336a940 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x336a6c0 + ;CN=Class-Schema,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 118 bytes in 1 blocks (ref 0) d=(nil) 0x336a7b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x336a740 + 1.2.840.113556.1.3.13 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x336a640 + classSchema contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x336a5c0 + Class-Schema contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x336a540 + struct dsdb_class contains 907 bytes in 21 blocks (ref 0) d=(nil) 0x3369690 + Class-Registration contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336a2e0 + Class-Registration contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x336a260 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x336a190 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x336a090 + classStore contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x336a110 + const char * contains 190 bytes in 9 blocks (ref 0) d=(nil) 0x3369bd0 + cOMCLSID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x336a010 + cOMInterfaceID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3369f90 + cOMOtherProgId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3369f10 + cOMProgID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3369e90 + cOMTreatAsClassId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3369e10 + implementedCategories contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3369d90 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3369d10 + requiredCategories contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3369c90 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x33699f0 + ;CN=Class-Registration,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x3369ae0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3369a70 + 1.2.840.113556.1.5.10 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3369970 + classRegistration contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33698f0 + Class-Registration contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3369870 + struct dsdb_class contains 1416 bytes in 41 blocks (ref 0) d=(nil) 0x3367ec0 + Certification-Authority contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3369600 + Certification-Authority contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3369570 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x33694a0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x33693a0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3369420 + const char * contains 582 bytes in 24 blocks (ref 0) d=(nil) 0x33686c0 + cACertificateDN contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3369320 + cAConnect contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33692a0 + cAUsages contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3369220 + cAWEBURL contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33691a0 + certificateTemplates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3369120 + cRLObject contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33690a0 + crossCertificatePair contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3369020 + currentParentCA contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3368fa0 + deltaRevocationList contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3368f20 + dNSHostName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3368ea0 + domainID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3368e20 + domainPolicyObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3368da0 + enrollmentProviders contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3368d20 + parentCA contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3368ca0 + parentCACertificateChain contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3368c10 + pendingCACertificates contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3368b90 + pendingParentCA contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3368b10 + previousCACertificates contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3368a90 + previousParentCA contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3368a10 + searchGuide contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3368990 + signatureAlgorithms contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3368910 + supportedApplicationContext contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3368880 + teletexTerminalIdentifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33687f0 + const char * contains 107 bytes in 5 blocks (ref 0) d=(nil) 0x3368410 + authorityRevocationList contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3368630 + cACertificate contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33685b0 + certificateRevocationList contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3368520 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33684b0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3368230 + ;CN=Certification-Authority,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 129 bytes in 1 blocks (ref 0) d=(nil) 0x3368320 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33682b0 + 2.5.6.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33681b0 + certificationAuthority contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3368130 + Certification-Authority contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33680a0 + struct dsdb_class contains 823 bytes in 17 blocks (ref 0) d=(nil) 0x3367410 + Category-Registration contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3367e40 + Category-Registration contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3367dc0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3367cf0 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x3367bf0 + classStore contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3367c70 + const char * contains 91 bytes in 5 blocks (ref 0) d=(nil) 0x3367950 + categoryId contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3367b70 + localeID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3367af0 + localizedDescription contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3367a70 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33679f0 + leaf contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3367770 + ;CN=Category-Registration,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 127 bytes in 1 blocks (ref 0) d=(nil) 0x3367860 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33677f0 + 1.2.840.113556.1.5.74 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33676f0 + categoryRegistration contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3367670 + Category-Registration contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33675f0 + struct dsdb_class contains 834 bytes in 16 blocks (ref 0) d=(nil) 0x3366b10 + const char * contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x3460f20 + const char * contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x3460e70 + Builtin-Domain contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3367390 + Builtin-Domain contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3367310 + D:(A;;RPLCLORC;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 75 bytes in 1 blocks (ref 0) d=(nil) 0x3367250 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3367150 + domainDNS contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33671d0 + const char * contains 30 bytes in 2 blocks (ref 0) d=(nil) 0x3367050 + samDomainBase contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33670d0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3366e70 + ;CN=Builtin-Domain,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x3366f60 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3366ef0 + 1.2.840.113556.1.5.4 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3366df0 + builtinDomain contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3366d70 + Builtin-Domain contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3366cf0 + struct dsdb_class contains 723 bytes in 14 blocks (ref 0) d=(nil) 0x3366200 + BootableDevice contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3366a90 + BootableDevice contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3366a10 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3366940 + const char * contains 58 bytes in 4 blocks (ref 0) d=(nil) 0x3366740 + bootFile contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33668c0 + bootParameter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3366840 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33667d0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3366560 + ;CN=BootableDevice,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 120 bytes in 1 blocks (ref 0) d=(nil) 0x3366650 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33665e0 + 1.3.6.1.1.1.2.12 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33664e0 + bootableDevice contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3366460 + BootableDevice contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33663e0 + struct dsdb_class contains 1128 bytes in 37 blocks (ref 0) d=(nil) 0x3364d50 + Attribute-Schema contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3366180 + Attribute-Schema contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3366100 + D:S: contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3366090 + const char * contains 20 bytes in 2 blocks (ref 0) d=(nil) 0x3365fa0 + dMD contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3366020 + const char * contains 369 bytes in 17 blocks (ref 0) d=(nil) 0x33656b0 + attributeSecurityGUID contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3365f20 + classDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3365ea0 + extendedCharsAllowed contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3365e20 + isDefunct contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3365da0 + isEphemeral contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3365d20 + isMemberOfPartialAttributeSet contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x3365c90 + linkID contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3365c20 + mAPIID contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3365bb0 + msDS-IntId contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3365b30 + msDs-Schema-Extensions contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3365ab0 + oMObjectClass contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3365a30 + rangeLower contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33659b0 + rangeUpper contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3365930 + schemaFlagsEx contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33658b0 + searchFlags contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3365830 + systemOnly contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33657b0 + const char * contains 148 bytes in 8 blocks (ref 0) d=(nil) 0x3365290 + attributeID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3365630 + attributeSyntax contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33655b0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3365540 + isSingleValued contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33654c0 + lDAPDisplayName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3365440 + oMSyntax contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33653c0 + schemaIDGUID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3365340 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33650b0 + ;CN=Attribute-Schema,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x33651a0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3365130 + 1.2.840.113556.1.3.14 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3365030 + attributeSchema contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3364fb0 + Attribute-Schema contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3364f30 + struct dsdb_class contains 948 bytes in 23 blocks (ref 0) d=(nil) 0x3363f90 + Application-Version contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3364cd0 + Application-Version contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3364c50 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3364b80 + const char * contains 70 bytes in 4 blocks (ref 0) d=(nil) 0x3364970 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3364b00 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3364a80 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3364a00 + const char * contains 167 bytes in 9 blocks (ref 0) d=(nil) 0x33644d0 + appSchemaVersion contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33648f0 + vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3364880 + versionNumber contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3364800 + versionNumberHi contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3364780 + versionNumberLo contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3364700 + keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3364680 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3364600 + owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x3364590 + applicationSettings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33642f0 + ;CN=Application-Version,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x33643e0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3364370 + 1.2.840.113556.1.5.216 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3364270 + applicationVersion contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33641f0 + Application-Version contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3364170 + struct dsdb_class contains 825 bytes in 16 blocks (ref 0) d=(nil) 0x33635c0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3436510 + Application-Site-Settings contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3363f00 + Application-Site-Settings contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3363e70 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3363da0 + const char * contains 21 bytes in 2 blocks (ref 0) d=(nil) 0x3363cb0 + site contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x3363d30 + const char * contains 57 bytes in 3 blocks (ref 0) d=(nil) 0x3363b20 + applicationName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3363c30 + notificationList contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3363bb0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3363940 + ;CN=Application-Site-Settings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 131 bytes in 1 blocks (ref 0) d=(nil) 0x3363a30 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33639c0 + 1.2.840.113556.1.5.68 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33638c0 + applicationSiteSettings contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3363830 + Application-Site-Settings contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33637a0 + struct dsdb_class contains 769 bytes in 16 blocks (ref 0) d=(nil) 0x3362c60 + const char * contains 56 bytes in 1 blocks (ref 0) d=(nil) 0x34366c0 + Application-Settings contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3363540 + Application-Settings contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33634c0 + const char * contains 23 bytes in 2 blocks (ref 0) d=(nil) 0x33633d0 + server contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3363450 + const char * contains 79 bytes in 4 blocks (ref 0) d=(nil) 0x33631c0 + applicationName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3363350 + msDS-Settings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33632d0 + notificationList contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3363250 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3362fd0 + ;CN=Application-Settings,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 126 bytes in 1 blocks (ref 0) d=(nil) 0x33630d0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3363060 + 1.2.840.113556.1.5.7000.49 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3362f40 + applicationSettings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3362ec0 + Application-Settings contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3362e40 + struct dsdb_class contains 884 bytes in 23 blocks (ref 0) d=(nil) 0x3361fd0 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3461060 + const char * contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3460fd0 + Application-Process contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3362be0 + Application-Process contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3362b60 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3362a90 + const char * contains 91 bytes in 5 blocks (ref 0) d=(nil) 0x33627f0 + computer contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3362a10 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3362990 + organization contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3362910 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3362890 + const char * contains 45 bytes in 4 blocks (ref 0) d=(nil) 0x3362600 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x3362780 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3362710 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3362690 + const char * contains 19 bytes in 2 blocks (ref 0) d=(nil) 0x3362510 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3362590 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3362330 + ;CN=Application-Process,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x3362420 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33623b0 + 2.5.6.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33622b0 + applicationProcess contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3362230 + Application-Process contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33621b0 + struct dsdb_class contains 910 bytes in 24 blocks (ref 0) d=(nil) 0x3361230 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34365a0 + Application-Entity contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3361f50 + Application-Entity contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3361ed0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3361e00 + const char * contains 80 bytes in 4 blocks (ref 0) d=(nil) 0x3361bf0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3361d80 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3361d00 + applicationProcess contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3361c80 + const char * contains 91 bytes in 6 blocks (ref 0) d=(nil) 0x33618f0 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x3361b80 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x3361b10 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3361aa0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3361a20 + supportedApplicationContext contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3361990 + const char * contains 47 bytes in 3 blocks (ref 0) d=(nil) 0x3361770 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3361880 + presentationAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3361800 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3361590 + ;CN=Application-Entity,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 124 bytes in 1 blocks (ref 0) d=(nil) 0x3361680 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3361610 + 2.5.6.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3361510 + applicationEntity contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3361490 + Application-Entity contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3361410 + struct dsdb_class contains 894 bytes in 20 blocks (ref 0) d=(nil) 0x33605e0 + Address-Template contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33611b0 + Address-Template contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3361130 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x3361060 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x3360f60 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3360fe0 + const char * contains 149 bytes in 6 blocks (ref 0) d=(nil) 0x3360c20 + addressSyntax contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3360ee0 + addressType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3360e60 + perMsgDialogDisplayTable contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3360dd0 + perRecipDialogDisplayTable contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3360d40 + proxyGenerationEnabled contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3360cc0 + const char * contains 28 bytes in 2 blocks (ref 0) d=(nil) 0x3360b20 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3360ba0 + displayTemplate contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3360940 + ;CN=Address-Template,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x3360a30 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33609c0 + 1.2.840.113556.1.3.58 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33608c0 + addressTemplate contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3360840 + Address-Template contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33607c0 + struct dsdb_class contains 909 bytes in 19 blocks (ref 0) d=(nil) 0x335fb10 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3461170 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x34610f0 + Address-Book-Container contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3360560 + Address-Book-Container contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33604e0 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU)(OA;;CR;a1990816-4298-11d1-ade2-00c04fd8d5cd;;AU) contains 142 bytes in 1 blocks (ref 0) d=(nil) 0x33603e0 + const char * contains 59 bytes in 3 blocks (ref 0) d=(nil) 0x3360250 + configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3360360 + addressBookContainer contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33602e0 + const char * contains 32 bytes in 2 blocks (ref 0) d=(nil) 0x3360150 + purportedSearch contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33601d0 + const char * contains 28 bytes in 2 blocks (ref 0) d=(nil) 0x3360050 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33600d0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335fe70 + ;CN=Address-Book-Container,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 128 bytes in 1 blocks (ref 0) d=(nil) 0x335ff60 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x335fef0 + 1.2.840.113556.1.5.125 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335fdf0 + addressBookContainer contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x335fd70 + Address-Book-Container contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335fcf0 + struct dsdb_class contains 1466 bytes in 39 blocks (ref 0) d=(nil) 0x335e410 + ACS-Subnet contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x335fa90 + ACS-Subnet contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x335fa10 + D:(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 93 bytes in 1 blocks (ref 0) d=(nil) 0x335f940 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x335f840 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x335f8c0 + const char * contains 790 bytes in 27 blocks (ref 0) d=(nil) 0x335e940 + aCSAllocableRSVPBandwidth contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x335f7b0 + aCSCacheTimeout contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x335f730 + aCSDSBMDeadTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x335f6b0 + aCSDSBMPriority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x335f630 + aCSDSBMRefresh contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x335f5b0 + aCSEnableACSService contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x335f530 + aCSEnableRSVPAccounting contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x335f4a0 + aCSEnableRSVPMessageLogging contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x335f410 + aCSEventLogLevel contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x335f390 + aCSMaxDurationPerFlow contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x335f310 + aCSMaxNoOfAccountFiles contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335f290 + aCSMaxNoOfLogFiles contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x335f210 + aCSMaxPeakBandwidth contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x335f190 + aCSMaxPeakBandwidthPerFlow contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x335f100 + aCSMaxSizeOfRSVPAccountFile contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x335f070 + aCSMaxSizeOfRSVPLogFile contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x335efe0 + aCSMaxTokenRatePerFlow contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335ef60 + aCSNonReservedMaxSDUSize contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x335eed0 + aCSNonReservedMinPolicedSize contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x335ee40 + aCSNonReservedPeakRate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335edc0 + aCSNonReservedTokenSize contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x335ed30 + aCSNonReservedTxLimit contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x335ecb0 + aCSNonReservedTxSize contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x335ec30 + aCSRSVPAccountFilesLocation contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x335eba0 + aCSRSVPLogFilesLocation contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x335eb10 + aCSServerList contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x335ea90 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335e770 + ;CN=ACS-Subnet,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x335e860 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x335e7f0 + 1.2.840.113556.1.5.138 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335e6f0 + aCSSubnet contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x335e670 + ACS-Subnet contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x335e5f0 + struct dsdb_class contains 883 bytes in 18 blocks (ref 0) d=(nil) 0x335d8c0 + ACS-Resource-Limits contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x335e390 + ACS-Resource-Limits contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x335e310 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x335e240 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x335e140 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x335e1c0 + const char * contains 159 bytes in 6 blocks (ref 0) d=(nil) 0x335de00 + aCSAllocableRSVPBandwidth contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x335e0b0 + aCSMaxPeakBandwidth contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x335e030 + aCSMaxPeakBandwidthPerFlow contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x335dfa0 + aCSServiceType contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x335df20 + aCSMaxTokenRatePerFlow contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335dea0 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335dc20 + ;CN=ACS-Resource-Limits,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 125 bytes in 1 blocks (ref 0) d=(nil) 0x335dd10 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x335dca0 + 1.2.840.113556.1.5.191 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335dba0 + aCSResourceLimits contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x335db20 + ACS-Resource-Limits contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x335daa0 + struct dsdb_class contains 1169 bytes in 30 blocks (ref 0) d=(nil) 0x335c700 + ACS-Policy contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x335d840 + ACS-Policy contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x335d7c0 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x335d6f0 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x335d5f0 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x335d670 + const char * contains 489 bytes in 18 blocks (ref 0) d=(nil) 0x335cca0 + aCSAggregateTokenRatePerUser contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x335d560 + aCSDirection contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x335d4e0 + aCSIdentityName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x335d460 + aCSMaxAggregatePeakRatePerUser contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x335d3d0 + aCSMaxDurationPerFlow contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x335d350 + aCSMaxPeakBandwidthPerFlow contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x335d2c0 + aCSMaxTokenBucketPerFlow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x335d230 + aCSMaxTokenRatePerFlow contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335d1b0 + aCSMinimumPolicedSize contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x335d130 + aCSMaximumSDUSize contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x335d0b0 + aCSMinimumLatency contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x335d030 + aCSMinimumDelayVariation contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x335cfa0 + aCSPermissionBits contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x335cf20 + aCSPriority contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x335cea0 + aCSServiceType contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x335ce20 + aCSTimeOfDay contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x335cda0 + aCSTotalNoOfFlows contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x335ca60 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335cc30 + ;CN=ACS-Policy,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 116 bytes in 1 blocks (ref 0) d=(nil) 0x335cb50 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x335cae0 + 1.2.840.113556.1.5.137 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335c9e0 + aCSPolicy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x335c960 + ACS-Policy contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x335c8e0 + struct dsdb_class contains 796 bytes in 21 blocks (ref 0) d=(nil) 0x335ba90 + account contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x335c680 + account contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x335c600 + D:(A;;RPWPCRCCDCLCLOLORCWOWDSDDTDTSW;;;DA)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;SY)(A;;RPLCLORC;;;AU) contains 97 bytes in 1 blocks (ref 0) d=(nil) 0x335c530 + const char * contains 53 bytes in 3 blocks (ref 0) d=(nil) 0x335be00 + container contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x335c4b0 + organizationalUnit contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x335c430 + const char * contains 100 bytes in 8 blocks (ref 0) d=(nil) 0x335c050 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x335c3b0 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x335c330 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x335c2c0 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x335c250 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x335c1e0 + host contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x335c170 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335c100 + top contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335bfe0 + ;CN=account,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 113 bytes in 1 blocks (ref 0) d=(nil) 0x335bf00 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x335be90 + 0.9.2342.19200300.100.4.5 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x335bd70 + account contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x335bcf0 + account contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x335bc70 + struct dsdb_attribute contains 348 bytes in 9 blocks (ref 0) d=(nil) 0x335b590 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x335ba00 + X509-Cert contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x335b980 + X509-Cert contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x335b900 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335b390 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x335b880 + 2.5.4.36 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x335b800 + userCertificate contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x335b780 + X509-Cert contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x335b700 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x335b020 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x335b500 + x500uniqueIdentifier contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x335b480 + x500uniqueIdentifier contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x335b400 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x335b310 + 2.5.4.45 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x335b290 + x500uniqueIdentifier contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x335b210 + x500uniqueIdentifier contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x335b190 + struct dsdb_attribute contains 356 bytes in 10 blocks (ref 0) d=(nil) 0x335aab0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x335af90 + X121-Address contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x335af10 + X121-Address contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x335ae90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335ae20 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335a8b0 + 2.5.5.6 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x335ada0 + 2.5.4.24 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x335ad20 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x335aca0 + X121-Address contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x335ac20 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x335a550 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x335aa20 + WWW-Page-Other contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x335a9a0 + WWW-Page-Other contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x335a920 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x335a830 + 1.2.840.113556.1.4.749 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335a7b0 + url contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335a740 + WWW-Page-Other contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x335a6c0 + struct dsdb_attribute contains 374 bytes in 10 blocks (ref 0) d=(nil) 0x3359fe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x335a4c0 + WWW-Home-Page contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x335a440 + WWW-Home-Page contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x335a350 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x335a3d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33593e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x335a2d0 + 1.2.840.113556.1.2.464 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x335a250 + wWWHomePage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x335a1d0 + WWW-Home-Page contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x335a150 + struct dsdb_attribute contains 383 bytes in 8 blocks (ref 0) d=(nil) 0x3359ae0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3359f50 + Winsock-Addresses contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3359ed0 + Winsock-Addresses contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3359e50 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3359dd0 + 1.2.840.113556.1.4.142 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3359d50 + winsockAddresses contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3359cd0 + Winsock-Addresses contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3359c50 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x33595e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3359a50 + When-Created contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33599d0 + When-Created contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3359950 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33598d0 + 1.2.840.113556.1.2.2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3359850 + whenCreated contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33597d0 + When-Created contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3359750 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x3359070 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3359550 + When-Changed contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33594d0 + When-Changed contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3359450 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3359360 + 1.2.840.113556.1.2.3 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33592e0 + whenChanged contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3359260 + When-Changed contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33591e0 + struct dsdb_attribute contains 404 bytes in 11 blocks (ref 0) d=(nil) 0x3358b00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3358fe0 + Well-Known-Objects contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3358f60 + Well-Known-Objects contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3358ee0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3358e70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3358400 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2e300b0 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3358df0 + 1.2.840.113556.1.4.618 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3358d70 + wellKnownObjects contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3358cf0 + Well-Known-Objects contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3358c70 + struct dsdb_attribute contains 351 bytes in 8 blocks (ref 0) d=(nil) 0x3358600 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3358a70 + Wbem-Path contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33589f0 + Wbem-Path contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3358970 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33588f0 + 1.2.840.113556.1.4.301 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3358870 + wbemPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33587f0 + Wbem-Path contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3358770 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x3358090 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3358570 + Volume-Count contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33584f0 + Volume-Count contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3358470 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3358380 + 1.2.840.113556.1.4.507 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3358300 + volumeCount contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3358280 + Volume-Count contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3358200 + struct dsdb_attribute contains 393 bytes in 10 blocks (ref 0) d=(nil) 0x3357ab0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3358000 + Vol-Table-Idx-GUID contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3357f80 + Vol-Table-Idx-GUID contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3357e90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3357f10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3357e20 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3357da0 + 1.2.840.113556.1.4.334 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3357d20 + volTableIdxGUID contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3357ca0 + Vol-Table-Idx-GUID contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3357c20 + struct dsdb_attribute contains 378 bytes in 10 blocks (ref 0) d=(nil) 0x3357540 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3357a20 + Vol-Table-GUID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33579a0 + Vol-Table-GUID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33578b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3357930 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3356940 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3357830 + 1.2.840.113556.1.4.336 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33577b0 + volTableGUID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3357730 + Vol-Table-GUID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33576b0 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x3357040 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33574b0 + Version-Number-Lo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3357430 + Version-Number-Lo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33573b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3357330 + 1.2.840.113556.1.4.329 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33572b0 + versionNumberLo contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3357230 + Version-Number-Lo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33571b0 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x3356b40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3356fb0 + Version-Number-Hi contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3356f30 + Version-Number-Hi contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3356eb0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3356e30 + 1.2.840.113556.1.4.328 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3356db0 + versionNumberHi contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3356d30 + Version-Number-Hi contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3356cb0 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x3356650 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3356ab0 + Version-Number contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3356a30 + Version-Number contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33569b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33568c0 + 1.2.840.113556.1.4.141 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3356840 + versionNumber contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33567c0 + Version-Number contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33563f0 + struct dsdb_attribute contains 348 bytes in 10 blocks (ref 0) d=(nil) 0x33560a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33565c0 + Vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3356550 + Vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x33564e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3356470 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3356380 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3356300 + 1.2.840.113556.1.4.255 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3356280 + vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3356210 + Vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x3354060 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x3355b90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3356010 + Valid-Accesses contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3355f90 + Valid-Accesses contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3355f10 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3355e90 + 1.2.840.113556.1.4.1356 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3355e00 + validAccesses contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3355d80 + Valid-Accesses contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3355d00 + struct dsdb_attribute contains 355 bytes in 8 blocks (ref 0) d=(nil) 0x3355690 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3355b00 + USN-Source contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3355a80 + USN-Source contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3355a00 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3355980 + 1.2.840.113556.1.4.896 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3355900 + uSNSource contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3355880 + USN-Source contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3355800 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x3355190 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3355600 + USN-Last-Obj-Rem contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3355580 + USN-Last-Obj-Rem contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3355500 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3355480 + 1.2.840.113556.1.2.121 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3355400 + uSNLastObjRem contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3355380 + USN-Last-Obj-Rem contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3355300 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x3354d10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3355100 + USN-Intersite contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3355080 + USN-Intersite contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3355000 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3354f80 + 1.2.840.113556.1.2.469 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3354f00 + USNIntersite contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3354e80 + USN-Intersite contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3354ae0 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x3354760 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3354c80 + USN-DSA-Last-Obj-Removed contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3354bf0 + USN-DSA-Last-Obj-Removed contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3354b60 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3354a60 + 1.2.840.113556.1.2.267 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33549e0 + uSNDSALastObjRemoved contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3354960 + USN-DSA-Last-Obj-Removed contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33548d0 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x3354260 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33546d0 + USN-Created contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3354650 + USN-Created contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33545d0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3354550 + 1.2.840.113556.1.2.19 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33544d0 + uSNCreated contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3354450 + USN-Created contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33543d0 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x3353cf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33541d0 + USN-Changed contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3354150 + USN-Changed contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33540d0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3353fe0 + 1.2.840.113556.1.2.120 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3353f60 + uSNChanged contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3353ee0 + USN-Changed contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3353e60 + struct dsdb_attribute contains 390 bytes in 10 blocks (ref 0) d=(nil) 0x3353710 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3353c60 + User-Workstations contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3353be0 + User-Workstations contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3353af0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3353b70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3353a80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3353a00 + 1.2.840.113556.1.4.86 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3353980 + userWorkstations contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3353900 + User-Workstations contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3353880 + struct dsdb_attribute contains 407 bytes in 9 blocks (ref 0) d=(nil) 0x3353280 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3353680 + User-SMIME-Certificate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3353600 + User-SMIME-Certificate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3353580 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3352ad0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3353500 + 2.16.840.1.113730.3.140 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3353470 + userSMIMECertificate contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33533f0 + User-SMIME-Certificate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3353050 + struct dsdb_attribute contains 409 bytes in 8 blocks (ref 0) d=(nil) 0x3352cd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33531f0 + User-Shared-Folder-Other contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3353160 + User-Shared-Folder-Other contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33530d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3352fd0 + 1.2.840.113556.1.4.752 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3352f50 + userSharedFolderOther contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3352ed0 + User-Shared-Folder-Other contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3352e40 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x3352760 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3352c40 + User-Shared-Folder contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3352bc0 + User-Shared-Folder contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3352b40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3352a50 + 1.2.840.113556.1.4.751 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33529d0 + userSharedFolder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3352950 + User-Shared-Folder contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33528d0 + struct dsdb_attribute contains 394 bytes in 9 blocks (ref 0) d=(nil) 0x3352260 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33526d0 + User-Principal-Name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3352650 + User-Principal-Name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33525d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3352070 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3352550 + 1.2.840.113556.1.4.656 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33524d0 + userPrincipalName contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3352450 + User-Principal-Name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33523d0 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x3351ce0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3351fe0 + userPKCS12 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33521e0 + userPKCS12 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3352160 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33520e0 + 2.16.840.1.113730.3.1.216 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3351f50 + userPKCS12 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3351ed0 + userPKCS12 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3351e50 + struct dsdb_attribute contains 361 bytes in 10 blocks (ref 0) d=(nil) 0x3351700 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3351c50 + User-Password contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3351bd0 + User-Password contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3351ae0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3351b60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3351a70 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33519f0 + 2.5.4.35 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3351970 + userPassword contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33518f0 + User-Password contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3351870 + struct dsdb_attribute contains 383 bytes in 10 blocks (ref 0) d=(nil) 0x3351190 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3351670 + User-Parameters contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33515f0 + User-Parameters contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3351500 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3351580 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3350f90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3351480 + 1.2.840.113556.1.4.138 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3351400 + userParameters contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3351380 + User-Parameters contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3351300 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x3350c20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3351100 + User-Comment contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3351080 + User-Comment contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3351000 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3350f10 + 1.2.840.113556.1.4.156 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3350e90 + comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3350e10 + User-Comment contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3350d90 + struct dsdb_attribute contains 363 bytes in 10 blocks (ref 0) d=(nil) 0x3350630 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3350930 + userClass contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3350ba0 + userClass contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3350ab0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3350b30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33509c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3350a30 + 0.9.2342.19200300.100.1.8 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33508a0 + userClass contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3350820 + userClass contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33507a0 + struct dsdb_attribute contains 359 bytes in 10 blocks (ref 0) d=(nil) 0x33500c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33505a0 + User-Cert contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3350520 + User-Cert contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3350430 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33504b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334f9c0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33503b0 + 1.2.840.113556.1.4.645 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3350330 + userCert contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33502b0 + User-Cert contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3350230 + struct dsdb_attribute contains 391 bytes in 8 blocks (ref 0) d=(nil) 0x334fbc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3350030 + User-Account-Control contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x334ffb0 + User-Account-Control contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x334ff30 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334feb0 + 1.2.840.113556.1.4.8 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x334fe30 + userAccountControl contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x334fdb0 + User-Account-Control contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x334fd30 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x334f650 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334fb30 + UPN-Suffixes contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334fab0 + UPN-Suffixes contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334fa30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334f940 + 1.2.840.113556.1.4.890 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x334f8c0 + uPNSuffixes contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x334f840 + UPN-Suffixes contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334f7c0 + struct dsdb_attribute contains 402 bytes in 10 blocks (ref 0) d=(nil) 0x334f070 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334f5c0 + Upgrade-Product-Code contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x334f540 + Upgrade-Product-Code contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x334f450 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334f4d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334f3e0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334f360 + 1.2.840.113556.1.4.813 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x334f2e0 + upgradeProductCode contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x334f260 + Upgrade-Product-Code contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x334f1e0 + struct dsdb_attribute contains 381 bytes in 9 blocks (ref 0) d=(nil) 0x334eb00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334efe0 + unstructuredName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334ef60 + unstructuredName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334eee0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334ee70 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334edf0 + 1.2.840.113549.1.9.2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x334ed70 + unstructuredName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334ecf0 + unstructuredName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334ec70 + struct dsdb_attribute contains 394 bytes in 9 blocks (ref 0) d=(nil) 0x334e590 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334ea70 + unstructuredAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x334e9f0 + unstructuredAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x334e970 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334e900 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334e880 + 1.2.840.113549.1.9.8 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x334e800 + unstructuredAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x334e780 + unstructuredAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x334e700 + struct dsdb_attribute contains 389 bytes in 10 blocks (ref 0) d=(nil) 0x334dfa0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334e500 + UnixUserPassword contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334e480 + UnixUserPassword contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334e390 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334e410 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334e320 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334e2a0 + 1.2.840.113556.1.4.1910 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334e210 + unixUserPassword contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334e190 + UnixUserPassword contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334e110 + struct dsdb_attribute contains 380 bytes in 9 blocks (ref 0) d=(nil) 0x334daa0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334df10 + UnixHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x334de90 + UnixHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x334de10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334d8a0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334dd90 + 1.3.6.1.1.1.1.3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x334dd10 + unixHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x334dc90 + UnixHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x334dc10 + struct dsdb_attribute contains 359 bytes in 9 blocks (ref 0) d=(nil) 0x334d530 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334da10 + uniqueMember contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334d990 + uniqueMember contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334d910 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2da5140 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334d820 + 2.5.4.50 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334d7a0 + uniqueMember contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334d720 + uniqueMember contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334d6a0 + struct dsdb_attribute contains 392 bytes in 10 blocks (ref 0) d=(nil) 0x334cfb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334d2b0 + uniqueIdentifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334d4b0 + uniqueIdentifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334d3c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334d440 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334c3b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334d340 + 0.9.2342.19200300.100.1.44 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x334d220 + uniqueIdentifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334d1a0 + uniqueIdentifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334d120 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x334cab0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334cf20 + Unicode-Pwd contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x334cea0 + Unicode-Pwd contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x334ce20 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334cda0 + 1.2.840.113556.1.4.90 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x334cd20 + unicodePwd contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x334cca0 + Unicode-Pwd contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x334cc20 + struct dsdb_attribute contains 347 bytes in 8 blocks (ref 0) d=(nil) 0x334c5b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334ca20 + UNC-Name contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334c9a0 + UNC-Name contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334c920 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334c8a0 + 1.2.840.113556.1.4.137 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x334c820 + uNCName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334c7a0 + UNC-Name contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334c720 + struct dsdb_attribute contains 344 bytes in 8 blocks (ref 0) d=(nil) 0x334c0c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334c520 + UidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x334c4a0 + UidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x334c420 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334c330 + 1.3.6.1.1.1.1.0 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x334c2b0 + uidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x334c230 + UidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x334bf40 + struct dsdb_attribute contains 331 bytes in 8 blocks (ref 0) d=(nil) 0x334bbd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334c030 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334bfc0 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334bed0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334be40 + 0.9.2342.19200300.100.1.1 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x334bdb0 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334bd40 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334afd0 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x334b6d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334bb40 + UAS-Compat contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x334bac0 + UAS-Compat contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x334ba40 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334b9c0 + 1.2.840.113556.1.4.155 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x334b940 + uASCompat contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x334b8c0 + UAS-Compat contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x334b840 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x334b1d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334b640 + Trust-Type contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x334b5c0 + Trust-Type contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x334b540 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334b4c0 + 1.2.840.113556.1.4.136 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x334b440 + trustType contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x334b3c0 + Trust-Type contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x334b340 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x334ac60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334b140 + Trust-Posix-Offset contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x334b0c0 + Trust-Posix-Offset contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x334b040 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334af50 + 1.2.840.113556.1.4.134 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x334aed0 + trustPosixOffset contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x334ae50 + Trust-Posix-Offset contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x334add0 + struct dsdb_attribute contains 375 bytes in 10 blocks (ref 0) d=(nil) 0x334a6f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334abd0 + Trust-Partner contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x334ab50 + Trust-Partner contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x334aa60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x334aae0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3349ff0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x334a9e0 + 1.2.840.113556.1.4.133 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x334a960 + trustPartner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334a8e0 + Trust-Partner contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x334a860 + struct dsdb_attribute contains 372 bytes in 9 blocks (ref 0) d=(nil) 0x334a1f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334a660 + Trust-Parent contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334a5e0 + Trust-Parent contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334a560 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d7cba0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x334a4e0 + 1.2.840.113556.1.4.471 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x334a460 + trustParent contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x334a3e0 + Trust-Parent contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x334a360 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x3349c80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x334a160 + Trust-Direction contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x334a0e0 + Trust-Direction contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x334a060 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3349f70 + 1.2.840.113556.1.4.132 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3349ef0 + trustDirection contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3349e70 + Trust-Direction contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3349df0 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x33496a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3349bf0 + Trust-Auth-Outgoing contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3349b70 + Trust-Auth-Outgoing contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3349a80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3349b00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3349a10 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3349990 + 1.2.840.113556.1.4.135 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3349910 + trustAuthOutgoing contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3349890 + Trust-Auth-Outgoing contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3349810 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x3349130 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3349610 + Trust-Auth-Incoming contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3349590 + Trust-Auth-Incoming contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33494a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3349520 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3348030 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3349420 + 1.2.840.113556.1.4.129 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33493a0 + trustAuthIncoming contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3349320 + Trust-Auth-Incoming contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33492a0 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x3348c30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33490a0 + Trust-Attributes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3349020 + Trust-Attributes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3348fa0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3348f20 + 1.2.840.113556.1.4.470 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3348ea0 + trustAttributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3348e20 + Trust-Attributes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3348da0 + struct dsdb_attribute contains 351 bytes in 8 blocks (ref 0) d=(nil) 0x3348730 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3348ba0 + Tree-Name contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3348b20 + Tree-Name contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3348aa0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3348a20 + 1.2.840.113556.1.4.660 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33489a0 + treeName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3348920 + Tree-Name contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33488a0 + struct dsdb_attribute contains 365 bytes in 8 blocks (ref 0) d=(nil) 0x3348230 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33486a0 + Treat-As-Leaf contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3348620 + Treat-As-Leaf contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33485a0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3348520 + 1.2.840.113556.1.4.806 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33484a0 + treatAsLeaf contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3348420 + Treat-As-Leaf contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33483a0 + struct dsdb_attribute contains 380 bytes in 9 blocks (ref 0) d=(nil) 0x3347cc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33481a0 + Transport-Type contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3348120 + Transport-Type contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33480a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d57ea0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3347fb0 + 1.2.840.113556.1.4.791 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3347f30 + transportType contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3347eb0 + Transport-Type contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3347e30 + struct dsdb_attribute contains 394 bytes in 10 blocks (ref 0) d=(nil) 0x3347750 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3347c30 + Transport-DLL-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3347bb0 + Transport-DLL-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3347ac0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3347b40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3346070 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3347a40 + 1.2.840.113556.1.4.789 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33479c0 + transportDLLName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3347940 + Transport-DLL-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33478c0 + struct dsdb_attribute contains 421 bytes in 8 blocks (ref 0) d=(nil) 0x3347210 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33476c0 + Transport-Address-Attribute contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3347630 + Transport-Address-Attribute contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33475a0 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3347520 + 1.2.840.113556.1.4.895 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33474a0 + transportAddressAttribute contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3347410 + Transport-Address-Attribute contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3347380 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x3346d90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3347180 + Tombstone-Lifetime contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3347100 + Tombstone-Lifetime contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3347080 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3347000 + 1.2.840.113556.1.2.54 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3346f80 + tombstoneLifetime contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3346f00 + Tombstone-Lifetime contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3346b60 + struct dsdb_attribute contains 429 bytes in 8 blocks (ref 0) d=(nil) 0x3346840 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3346d00 + Token-Groups-No-GC-Acceptable contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x3346c70 + Token-Groups-No-GC-Acceptable contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x3346be0 + 2.5.5.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3346610 + 1.2.840.113556.1.4.1303 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3346ad0 + tokenGroupsNoGCAcceptable contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3346a40 + Token-Groups-No-GC-Acceptable contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x33469b0 + struct dsdb_attribute contains 445 bytes in 8 blocks (ref 0) d=(nil) 0x3346270 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33467b0 + Token-Groups-Global-And-Universal contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x3346720 + Token-Groups-Global-And-Universal contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x3346690 + 2.5.5.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3346590 + 1.2.840.113556.1.4.1418 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3346500 + tokenGroupsGlobalAndUniversal contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x3346470 + Token-Groups-Global-And-Universal contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x33463e0 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x3345d70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33461e0 + Token-Groups contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3346160 + Token-Groups contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33460e0 + 2.5.5.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3345ff0 + 1.2.840.113556.1.4.1301 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3345f60 + tokenGroups contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3345ee0 + Token-Groups contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3345b10 + struct dsdb_attribute contains 330 bytes in 10 blocks (ref 0) d=(nil) 0x33457c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3345ce0 + Title contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x3345c70 + Title contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x3345c00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3345b90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3345aa0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3345a20 + 2.5.4.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33459a0 + title contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x3345930 + Title contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x33450c0 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x33452c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3345730 + Time-Vol-Change contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33456b0 + Time-Vol-Change contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3345630 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33455b0 + 1.2.840.113556.1.4.502 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3345530 + timeVolChange contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33454b0 + Time-Vol-Change contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3345430 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x3344dd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3345230 + Time-Refresh contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33451b0 + Time-Refresh contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3345130 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3345040 + 1.2.840.113556.1.4.503 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3344fc0 + timeRefresh contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3344f40 + Time-Refresh contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3344b30 + struct dsdb_attribute contains 416 bytes in 10 blocks (ref 0) d=(nil) 0x3344720 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3344d40 + Text-Encoded-OR-Address contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3344cb0 + Text-Encoded-OR-Address contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3344c20 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3344bb0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3344ac0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3344a30 + 0.9.2342.19200300.100.1.2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33449a0 + textEncodedORAddress contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3344920 + Text-Encoded-OR-Address contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3344890 + struct dsdb_attribute contains 362 bytes in 10 blocks (ref 0) d=(nil) 0x3344150 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3344690 + Text-Country contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3344610 + Text-Country contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3344520 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33445a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33444b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3344430 + 1.2.840.113556.1.2.131 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33443b0 + co contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3344340 + Text-Country contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33442c0 + struct dsdb_attribute contains 379 bytes in 9 blocks (ref 0) d=(nil) 0x3343c50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33440c0 + Terminal-Server contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3344040 + Terminal-Server contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3343fc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3343540 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3343f40 + 1.2.840.113556.1.4.885 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3343ec0 + terminalServer contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3343e40 + Terminal-Server contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3343dc0 + struct dsdb_attribute contains 385 bytes in 9 blocks (ref 0) d=(nil) 0x3343740 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3343bc0 + Template-Roots2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3343b40 + Template-Roots2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3343ac0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d2ab50 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3343a40 + 1.2.840.113556.1.4.2048 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33439b0 + templateRoots2 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3343930 + Template-Roots2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33438b0 + struct dsdb_attribute contains 381 bytes in 9 blocks (ref 0) d=(nil) 0x33431c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33436b0 + Template-Roots contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3343630 + Template-Roots contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33435b0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d1dfb0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33434c0 + 1.2.840.113556.1.4.1346 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3343430 + templateRoots contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33433b0 + Template-Roots contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3343330 + struct dsdb_attribute contains 381 bytes in 10 blocks (ref 0) d=(nil) 0x3342be0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3343130 + Telex-Primary contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33430b0 + Telex-Primary contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3342fc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3343040 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3342f50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3342ed0 + 1.2.840.113556.1.4.648 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3342e50 + primaryTelexNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3342dd0 + Telex-Primary contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3342d50 + struct dsdb_attribute contains 357 bytes in 10 blocks (ref 0) d=(nil) 0x33426f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3342b50 + Telex-Number contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3342ad0 + Telex-Number contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33429e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3342a60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3342450 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3342960 + 2.5.4.21 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33428e0 + telexNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3342860 + Telex-Number contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33424c0 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x33420c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3342660 + Teletex-Terminal-Identifier contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33425d0 + Teletex-Terminal-Identifier contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3342540 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33423d0 + 2.5.4.22 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3342350 + teletexTerminalIdentifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x33422c0 + Teletex-Terminal-Identifier contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3342230 + struct dsdb_attribute contains 373 bytes in 10 blocks (ref 0) d=(nil) 0x3341b50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3342030 + Telephone-Number contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3341fb0 + Telephone-Number contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3341ec0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3341f40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x333ec50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3341e40 + 2.5.4.20 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3341dc0 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3341d40 + Telephone-Number contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3341cc0 + struct dsdb_attribute contains 397 bytes in 8 blocks (ref 0) d=(nil) 0x3341650 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3341ac0 + System-Poss-Superiors contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3341a40 + System-Poss-Superiors contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33419c0 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3341940 + 1.2.840.113556.1.4.195 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33418c0 + systemPossSuperiors contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3341840 + System-Poss-Superiors contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33417c0 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x3341150 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33415c0 + System-Only contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3341540 + System-Only contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33414c0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3341440 + 1.2.840.113556.1.4.170 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33413c0 + systemOnly contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3341340 + System-Only contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33412c0 + struct dsdb_attribute contains 389 bytes in 8 blocks (ref 0) d=(nil) 0x3340c50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33410c0 + System-Must-Contain contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3341040 + System-Must-Contain contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3340fc0 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3340f40 + 1.2.840.113556.1.4.197 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3340ec0 + systemMustContain contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3340e40 + System-Must-Contain contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3340dc0 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x3340750 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3340bc0 + System-May-Contain contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3340b40 + System-May-Contain contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3340ac0 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3340a40 + 1.2.840.113556.1.4.196 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33409c0 + systemMayContain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3340940 + System-May-Contain contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33408c0 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x3340250 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33406c0 + System-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3340640 + System-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33405c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3340540 + 1.2.840.113556.1.4.375 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33404c0 + systemFlags contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3340440 + System-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33403c0 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x333fd50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33401c0 + System-Auxiliary-Class contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3340140 + System-Auxiliary-Class contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33400c0 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3340040 + 1.2.840.113556.1.4.198 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333ffc0 + systemAuxiliaryClass contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x333ff40 + System-Auxiliary-Class contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333fec0 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x333f850 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333fcc0 + Sync-With-SID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x333fc40 + Sync-With-SID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x333fbc0 + 2.5.5.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333fb40 + 1.2.840.113556.1.4.667 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333fac0 + syncWithSID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x333fa40 + Sync-With-SID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x333f9c0 + struct dsdb_attribute contains 387 bytes in 9 blocks (ref 0) d=(nil) 0x333f350 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333f7c0 + Sync-With-Object contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x333f740 + Sync-With-Object contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x333f6c0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2ced360 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333f640 + 1.2.840.113556.1.4.664 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333f5c0 + syncWithObject contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x333f540 + Sync-With-Object contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x333f4c0 + struct dsdb_attribute contains 384 bytes in 9 blocks (ref 0) d=(nil) 0x333ee50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333f2c0 + Sync-Membership contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x333f240 + Sync-Membership contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x333f1c0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2cf1680 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333f140 + 1.2.840.113556.1.4.665 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333f0c0 + syncMembership contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x333f040 + Sync-Membership contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x333efc0 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x333e8e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333edc0 + Sync-Attributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x333ed40 + Sync-Attributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x333ecc0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333ebd0 + 1.2.840.113556.1.4.666 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333eb50 + syncAttributes contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x333ead0 + Sync-Attributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x333ea50 + struct dsdb_attribute contains 332 bytes in 10 blocks (ref 0) d=(nil) 0x333e400 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333e850 + Surname contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333e7d0 + Surname contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333e6e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x333e760 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x333e5f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333e660 + 2.5.4.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333e570 + sn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x333b8b0 + Surname contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333e1d0 + struct dsdb_attribute contains 416 bytes in 8 blocks (ref 0) d=(nil) 0x333dec0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333e370 + Supported-Application-Context contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x333e2e0 + Supported-Application-Context contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x333e250 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333e150 + 2.5.4.30 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333dc90 + supportedApplicationContext contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x333e0c0 + Supported-Application-Context contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x333e030 + struct dsdb_attribute contains 411 bytes in 8 blocks (ref 0) d=(nil) 0x333d900 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333de30 + Supplemental-Credentials contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x333dda0 + Supplemental-Credentials contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x333dd10 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333dc10 + 1.2.840.113556.1.4.125 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333db90 + supplementalCredentials contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333db00 + Supplemental-Credentials contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x333da70 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x333d480 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333d870 + Super-Scopes contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x333d7f0 + Super-Scopes contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x333d770 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333d6f0 + 1.2.840.113556.1.4.710 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333d670 + superScopes contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x333d5f0 + Super-Scopes contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x333d250 + struct dsdb_attribute contains 406 bytes in 8 blocks (ref 0) d=(nil) 0x333ced0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333d3f0 + Super-Scope-Description contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333d360 + Super-Scope-Description contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333d2d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333d1d0 + 1.2.840.113556.1.4.711 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333d150 + superScopeDescription contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x333d0d0 + Super-Scope-Description contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333d040 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x333c9d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333ce40 + Superior-DNS-Root contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333cdc0 + Superior-DNS-Root contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333cd40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333ccc0 + 1.2.840.113556.1.4.532 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333cc40 + superiorDNSRoot contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x333cbc0 + Superior-DNS-Root contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333cb40 + struct dsdb_attribute contains 380 bytes in 9 blocks (ref 0) d=(nil) 0x333c4d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333c940 + SubSchemaSubEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333c8c0 + SubSchemaSubEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333c840 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2cd11b0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333c7c0 + 2.5.18.10 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x333c740 + subSchemaSubEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333c6c0 + SubSchemaSubEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333c640 + struct dsdb_attribute contains 354 bytes in 9 blocks (ref 0) d=(nil) 0x333bfd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333c440 + Sub-Refs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333c3c0 + Sub-Refs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333c340 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2ccce40 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333c2c0 + 1.2.840.113556.1.2.7 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x333c240 + subRefs contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333c1c0 + Sub-Refs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333c140 + struct dsdb_attribute contains 360 bytes in 8 blocks (ref 0) d=(nil) 0x333bad0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333bf40 + Sub-Class-Of contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x333bec0 + Sub-Class-Of contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x333be40 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333bdc0 + 1.2.840.113556.1.2.21 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x333bd40 + subClassOf contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x333bcc0 + Sub-Class-Of contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x333bc40 + struct dsdb_attribute contains 391 bytes in 8 blocks (ref 0) d=(nil) 0x333b530 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333ba40 + Structural-Object-Class contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333b9b0 + Structural-Object-Class contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333b920 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333b830 + 2.5.21.9 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333b7b0 + structuralObjectClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x333b730 + Structural-Object-Class contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333b6a0 + struct dsdb_attribute contains 357 bytes in 10 blocks (ref 0) d=(nil) 0x333af60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333b4a0 + Street-Address contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x333b420 + Street-Address contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x333b330 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x333b3b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x333b240 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333b2b0 + 2.5.4.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333b1c0 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x333b150 + Street-Address contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x333b0d0 + struct dsdb_attribute contains 377 bytes in 10 blocks (ref 0) d=(nil) 0x333aa00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333aed0 + State-Or-Province-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333ae50 + State-Or-Province-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333ad60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x333ade0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x333ac70 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333ace0 + 2.5.4.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x333abf0 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x33389f0 + State-Or-Province-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333ab70 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x333a4f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333a970 + SPN-Mappings contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x333a8f0 + SPN-Mappings contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x333a870 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333a7f0 + 1.2.840.113556.1.4.1347 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333a760 + sPNMappings contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x333a6e0 + SPN-Mappings contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x333a660 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x3339ff0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x333a460 + SMTP-Mail-Address contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333a3e0 + SMTP-Mail-Address contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333a360 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x333a2e0 + 1.2.840.113556.1.4.786 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x333a260 + mailAddress contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x333a1e0 + SMTP-Mail-Address contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x333a160 + struct dsdb_attribute contains 368 bytes in 9 blocks (ref 0) d=(nil) 0x3339af0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3339f60 + Site-Server contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3339ee0 + Site-Server contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3339e60 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2cafbf0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3339de0 + 1.2.840.113556.1.4.494 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3339d60 + siteServer contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3339ce0 + Site-Server contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3339c60 + struct dsdb_attribute contains 379 bytes in 9 blocks (ref 0) d=(nil) 0x33395f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3339a60 + Site-Object-BL contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33399e0 + Site-Object-BL contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3339960 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2cabbf0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33398e0 + 1.2.840.113556.1.4.513 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3339860 + siteObjectBL contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33397e0 + Site-Object-BL contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3339760 + struct dsdb_attribute contains 368 bytes in 9 blocks (ref 0) d=(nil) 0x33390f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3339560 + Site-Object contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33394e0 + Site-Object contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3339460 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2ca78d0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33393e0 + 1.2.840.113556.1.4.512 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3339360 + siteObject contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33392e0 + Site-Object contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3339260 + struct dsdb_attribute contains 360 bytes in 9 blocks (ref 0) d=(nil) 0x3338bf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3339060 + Site-List contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3338fe0 + Site-List contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3338f60 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2ca3570 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3338ee0 + 1.2.840.113556.1.4.821 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3338e60 + siteList contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3338de0 + Site-List contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3338d60 + struct dsdb_attribute contains 379 bytes in 9 blocks (ref 0) d=(nil) 0x3338680 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3338b60 + Site-Link-List contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3338ae0 + Site-Link-List contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3338a60 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2c9f260 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3338970 + 1.2.840.113556.1.4.822 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33388f0 + siteLinkList contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3338870 + Site-Link-List contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33387f0 + struct dsdb_attribute contains 359 bytes in 10 blocks (ref 0) d=(nil) 0x3338110 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33385f0 + Site-GUID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3338570 + Site-GUID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3338480 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3338500 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33333d0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3338400 + 1.2.840.113556.1.4.362 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3338380 + siteGUID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3338300 + Site-GUID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3338280 + struct dsdb_attribute contains 395 bytes in 8 blocks (ref 0) d=(nil) 0x3337c10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3338080 + Signature-Algorithms contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3338000 + Signature-Algorithms contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3337f80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3337f00 + 1.2.840.113556.1.4.824 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3337e80 + signatureAlgorithms contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3337e00 + Signature-Algorithms contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3337d80 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x3337710 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3337b80 + SID-History contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3337b00 + SID-History contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3337a80 + 2.5.5.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3337a00 + 1.2.840.113556.1.4.609 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3337980 + sIDHistory contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3337900 + SID-History contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3337880 + struct dsdb_attribute contains 415 bytes in 8 blocks (ref 0) d=(nil) 0x33371e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3337680 + Show-In-Advanced-View-Only contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33375f0 + Show-In-Advanced-View-Only contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3337560 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33374e0 + 1.2.840.113556.1.2.169 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3337460 + showInAdvancedViewOnly contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33373e0 + Show-In-Advanced-View-Only contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x3337350 + struct dsdb_attribute contains 402 bytes in 9 blocks (ref 0) d=(nil) 0x3336ce0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3337150 + Show-In-Address-Book contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33370d0 + Show-In-Address-Book contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3337050 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2c8a820 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3336fd0 + 1.2.840.113556.1.4.644 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3336f50 + showInAddressBook contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3336ed0 + Show-In-Address-Book contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3336e50 + struct dsdb_attribute contains 383 bytes in 8 blocks (ref 0) d=(nil) 0x33367d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3336c50 + Short-Server-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3336bd0 + Short-Server-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3336b50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3336ad0 + 1.2.840.113556.1.4.1209 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3336a40 + shortServerName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33369c0 + Short-Server-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3336940 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x33362d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3336740 + Shell-Property-Pages contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33366c0 + Shell-Property-Pages contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3336640 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33365c0 + 1.2.840.113556.1.4.563 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3336540 + shellPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33364c0 + Shell-Property-Pages contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3336440 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x3335dd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3336240 + Shell-Context-Menu contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33361c0 + Shell-Context-Menu contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3336140 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33360c0 + 1.2.840.113556.1.4.615 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3336040 + shellContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3335fc0 + Shell-Context-Menu contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3335f40 + struct dsdb_attribute contains 360 bytes in 8 blocks (ref 0) d=(nil) 0x33358d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3335d40 + ShadowWarning contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3335cc0 + ShadowWarning contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3335c40 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3335bc0 + 1.3.6.1.1.1.1.8 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3335b40 + shadowWarning contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3335ac0 + ShadowWarning contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3335a40 + struct dsdb_attribute contains 344 bytes in 8 blocks (ref 0) d=(nil) 0x33353d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3335840 + ShadowMin contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33357c0 + ShadowMin contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3335740 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33356c0 + 1.3.6.1.1.1.1.6 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3335640 + shadowMin contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33355c0 + ShadowMin contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3335540 + struct dsdb_attribute contains 344 bytes in 8 blocks (ref 0) d=(nil) 0x3334ed0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3335340 + ShadowMax contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33352c0 + ShadowMax contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3335240 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33351c0 + 1.3.6.1.1.1.1.7 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3335140 + shadowMax contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33350c0 + ShadowMax contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3335040 + struct dsdb_attribute contains 372 bytes in 8 blocks (ref 0) d=(nil) 0x33349d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3334e40 + ShadowLastChange contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3334dc0 + ShadowLastChange contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3334d40 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3334cc0 + 1.3.6.1.1.1.1.5 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3334c40 + shadowLastChange contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3334bc0 + ShadowLastChange contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3334b40 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x33344d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3334940 + ShadowInactive contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33348c0 + ShadowInactive contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3334840 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33347c0 + 1.3.6.1.1.1.1.9 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3334740 + shadowInactive contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33346c0 + ShadowInactive contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3334640 + struct dsdb_attribute contains 349 bytes in 8 blocks (ref 0) d=(nil) 0x3333fd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3334440 + ShadowFlag contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33343c0 + ShadowFlag contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3334340 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33342c0 + 1.3.6.1.1.1.1.11 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3334240 + shadowFlag contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33341c0 + ShadowFlag contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3334140 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x3333ad0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3333f40 + ShadowExpire contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3333ec0 + ShadowExpire contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3333e40 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3333dc0 + 1.3.6.1.1.1.1.10 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3333d40 + shadowExpire contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3333cc0 + ShadowExpire contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3333c40 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x33335d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3333a40 + Setup-Command contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33339c0 + Setup-Command contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3333940 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33338c0 + 1.2.840.113556.1.4.325 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3333840 + setupCommand contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33337c0 + Setup-Command contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3333740 + struct dsdb_attribute contains 402 bytes in 8 blocks (ref 0) d=(nil) 0x33330e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3333540 + Service-Principal-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33334c0 + Service-Principal-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3333440 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3333350 + 1.2.840.113556.1.4.771 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33332d0 + servicePrincipalName contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3333250 + Service-Principal-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3332e40 + struct dsdb_attribute contains 418 bytes in 10 blocks (ref 0) d=(nil) 0x3332a50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3333050 + Service-Instance-Version contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3332fc0 + Service-Instance-Version contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3332f30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3332ec0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3332dd0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3332d50 + 1.2.840.113556.1.4.199 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3332cd0 + serviceInstanceVersion contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3332c50 + Service-Instance-Version contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3332bc0 + struct dsdb_attribute contains 405 bytes in 10 blocks (ref 0) d=(nil) 0x33324e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33329c0 + Service-DNS-Name-Type contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3332940 + Service-DNS-Name-Type contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3332850 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33328d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x332faa0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33327d0 + 1.2.840.113556.1.4.659 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3332750 + serviceDNSNameType contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33326d0 + Service-DNS-Name-Type contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3332650 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x3331fe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3332450 + Service-DNS-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33323d0 + Service-DNS-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3332350 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33322d0 + 1.2.840.113556.1.4.657 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3332250 + serviceDNSName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33321d0 + Service-DNS-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3332150 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x3331ae0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3331f50 + Service-Class-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3331ed0 + Service-Class-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3331e50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3331dd0 + 1.2.840.113556.1.4.509 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3331d50 + serviceClassName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3331cd0 + Service-Class-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3331c50 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x33315e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3331a50 + Service-Class-Info contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33319d0 + Service-Class-Info contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3331950 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33318d0 + 1.2.840.113556.1.4.123 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3331850 + serviceClassInfo contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33317d0 + Service-Class-Info contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3331750 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x3331160 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3331550 + Service-Class-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33314d0 + Service-Class-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3331450 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33313d0 + 1.2.840.113556.1.4.122 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3331350 + serviceClassID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33312d0 + Service-Class-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3330f30 + struct dsdb_attribute contains 422 bytes in 8 blocks (ref 0) d=(nil) 0x3330ba0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33310d0 + Service-Binding-Information contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3331040 + Service-Binding-Information contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3330fb0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3330eb0 + 1.2.840.113556.1.4.510 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3330e30 + serviceBindingInformation contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3330da0 + Service-Binding-Information contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3330d10 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x33306a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3330b10 + Server-State contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3330a90 + Server-State contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3330a10 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3330990 + 1.2.840.113556.1.4.154 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3330910 + serverState contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3330890 + Server-State contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3330810 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x33301a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3330610 + Server-Role contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3330590 + Server-Role contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3330510 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3330490 + 1.2.840.113556.1.4.157 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3330410 + serverRole contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3330390 + Server-Role contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3330310 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x332fca0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3330110 + Server-Reference-BL contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3330090 + Server-Reference-BL contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3330010 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2c33cf0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332ff90 + 1.2.840.113556.1.4.516 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332ff10 + serverReferenceBL contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x332fe90 + Server-Reference-BL contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x332fe10 + struct dsdb_attribute contains 388 bytes in 9 blocks (ref 0) d=(nil) 0x332f730 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332fc10 + Server-Reference contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x332fb90 + Server-Reference contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x332fb10 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2c2f9c0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332fa20 + 1.2.840.113556.1.4.515 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332f9a0 + serverReference contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x332f920 + Server-Reference contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x332f8a0 + struct dsdb_attribute contains 367 bytes in 10 blocks (ref 0) d=(nil) 0x332f150 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332f6a0 + Server-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332f620 + Server-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332f530 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x332f5b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x332f4c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332f440 + 1.2.840.113556.1.4.223 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332f3c0 + serverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x332f340 + Server-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332f2c0 + struct dsdb_attribute contains 359 bytes in 10 blocks (ref 0) d=(nil) 0x332ebe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332f0c0 + Serial-Number contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x332f040 + Serial-Number contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x332efc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x332ef50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x332d5d0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332eed0 + 2.5.4.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332ee50 + serialNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x332edd0 + Serial-Number contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x332ed50 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x332e6e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332eb50 + Seq-Notification contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x332ead0 + Seq-Notification contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x332ea50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332e9d0 + 1.2.840.113556.1.4.504 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332e950 + seqNotification contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x332e8d0 + Seq-Notification contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x332e850 + struct dsdb_attribute contains 342 bytes in 9 blocks (ref 0) d=(nil) 0x332e1e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332e650 + See-Also contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332e5d0 + See-Also contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332e550 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2c1f020 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332e4d0 + 2.5.4.34 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332e450 + seeAlso contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332e3d0 + See-Also contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332e350 + struct dsdb_attribute contains 391 bytes in 8 blocks (ref 0) d=(nil) 0x332dce0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332e150 + Security-Identifier contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x332e0d0 + Security-Identifier contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x332e050 + 2.5.5.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332dfd0 + 1.2.840.113556.1.4.121 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332df50 + securityIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x332ded0 + Security-Identifier contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x332de50 + struct dsdb_attribute contains 365 bytes in 9 blocks (ref 0) d=(nil) 0x332d7d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332dad0 + secretary contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x332dc60 + secretary contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x332dbe0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2c16d90 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332db60 + 0.9.2342.19200300.100.1.21 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x332da40 + secretary contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x332d9c0 + secretary contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x332d940 + struct dsdb_attribute contains 349 bytes in 8 blocks (ref 0) d=(nil) 0x332d260 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332d740 + Search-Guide contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x332d6c0 + Search-Guide contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x332d640 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332d550 + 2.5.4.14 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332d4d0 + searchGuide contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332d450 + Search-Guide contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x332d3d0 + struct dsdb_attribute contains 366 bytes in 9 blocks (ref 0) d=(nil) 0x332cd60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332d1d0 + Search-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x332d150 + Search-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x332d0d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x332b240 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332d050 + 1.2.840.113556.1.2.334 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332cfd0 + searchFlags contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332cf50 + Search-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x332ced0 + struct dsdb_attribute contains 390 bytes in 8 blocks (ref 0) d=(nil) 0x332c850 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332ccd0 + SD-Rights-Effective contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x332cc50 + SD-Rights-Effective contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x332cbd0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332cb50 + 1.2.840.113556.1.4.1304 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332cac0 + sDRightsEffective contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x332ca40 + SD-Rights-Effective contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x332c9c0 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x332c350 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332c7c0 + Script-Path contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332c740 + Script-Path contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332c6c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332c640 + 1.2.840.113556.1.4.62 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x332c5c0 + scriptPath contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x332c540 + Script-Path contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332c4c0 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x332be40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332c2c0 + Scope-Flags contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332c240 + Scope-Flags contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332c1c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332c140 + 1.2.840.113556.1.4.1354 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332c0b0 + scopeFlags contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x332c030 + Scope-Flags contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332bfb0 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x332b940 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332bdb0 + Schema-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x332bd30 + Schema-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x332bcb0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332bc30 + 1.2.840.113556.1.2.471 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332bbb0 + schemaVersion contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x332bb30 + Schema-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x332bab0 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x332b440 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332b8b0 + Schema-Update contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x332b830 + Schema-Update contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x332b7b0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332b730 + 1.2.840.113556.1.4.481 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332b6b0 + schemaUpdate contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x332b630 + Schema-Update contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x332b5b0 + struct dsdb_attribute contains 360 bytes in 8 blocks (ref 0) d=(nil) 0x332aec0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332b3b0 + Schema-Info contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332b330 + Schema-Info contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332b2b0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332b1c0 + 1.2.840.113556.1.4.1358 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332b130 + schemaInfo contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x332b0b0 + Schema-Info contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x332b030 + struct dsdb_attribute contains 378 bytes in 10 blocks (ref 0) d=(nil) 0x332a950 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332ae30 + Schema-ID-GUID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x332adb0 + Schema-ID-GUID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x332acc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x332ad40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x332a250 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332ac40 + 1.2.840.113556.1.4.148 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332abc0 + schemaIDGUID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x332ab40 + Schema-ID-GUID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x332aac0 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x332a450 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332a8c0 + Schema-Flags-Ex contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x332a840 + Schema-Flags-Ex contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x332a7c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x332a740 + 1.2.840.113556.1.4.120 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332a6c0 + schemaFlagsEx contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x332a640 + Schema-Flags-Ex contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x332a5c0 + struct dsdb_attribute contains 348 bytes in 8 blocks (ref 0) d=(nil) 0x3329ee0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x332a3c0 + Schedule contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332a340 + Schedule contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332a2c0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332a1d0 + 1.2.840.113556.1.4.211 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x332a150 + schedule contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332a0d0 + Schedule contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x332a050 + struct dsdb_attribute contains 391 bytes in 9 blocks (ref 0) d=(nil) 0x33299d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3329e50 + SAM-Domain-Updates contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3329dd0 + SAM-Domain-Updates contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3329d50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33297d0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3329cd0 + 1.2.840.113556.1.4.1969 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3329c40 + samDomainUpdates contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3329bc0 + SAM-Domain-Updates contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3329b40 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x3329460 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3329940 + SAM-Account-Type contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33298c0 + SAM-Account-Type contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3329840 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3329750 + 1.2.840.113556.1.4.302 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33296d0 + sAMAccountType contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3329650 + SAM-Account-Type contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33295d0 + struct dsdb_attribute contains 386 bytes in 10 blocks (ref 0) d=(nil) 0x3328ef0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33293d0 + SAM-Account-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3329350 + SAM-Account-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3329260 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33292e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33250e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33291e0 + 1.2.840.113556.1.4.221 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3329160 + sAMAccountName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33290e0 + SAM-Account-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3329060 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x33289f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3328e60 + rpc-Ns-Transfer-Syntax contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3328de0 + rpc-Ns-Transfer-Syntax contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3328d60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3328ce0 + 1.2.840.113556.1.4.314 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3328c60 + rpcNsTransferSyntax contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3328be0 + rpc-Ns-Transfer-Syntax contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3328b60 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x33284f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3328960 + rpc-Ns-Profile-Entry contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33288e0 + rpc-Ns-Profile-Entry contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3328860 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33287e0 + 1.2.840.113556.1.4.118 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3328760 + rpcNsProfileEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33286e0 + rpc-Ns-Profile-Entry contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3328660 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x3327ff0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3328460 + rpc-Ns-Priority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33283e0 + rpc-Ns-Priority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3328360 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33282e0 + 1.2.840.113556.1.4.117 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3328260 + rpcNsPriority contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33281e0 + rpc-Ns-Priority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3328160 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x3327af0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3327f60 + rpc-Ns-Object-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3327ee0 + rpc-Ns-Object-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3327e60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3327de0 + 1.2.840.113556.1.4.312 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3327d60 + rpcNsObjectID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3327ce0 + rpc-Ns-Object-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3327c60 + struct dsdb_attribute contains 389 bytes in 8 blocks (ref 0) d=(nil) 0x33275f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3327a60 + rpc-Ns-Interface-ID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33279e0 + rpc-Ns-Interface-ID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3327960 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33278e0 + 1.2.840.113556.1.4.115 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3327860 + rpcNsInterfaceID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33277e0 + rpc-Ns-Interface-ID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3327760 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x33270f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3327560 + rpc-Ns-Group contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33274e0 + rpc-Ns-Group contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3327460 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33273e0 + 1.2.840.113556.1.4.114 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3327360 + rpcNsGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33272e0 + rpc-Ns-Group contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3327260 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x3326bf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3327060 + rpc-Ns-Entry-Flags contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3326fe0 + rpc-Ns-Entry-Flags contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3326f60 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3326ee0 + 1.2.840.113556.1.4.754 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3326e60 + rpcNsEntryFlags contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3326de0 + rpc-Ns-Entry-Flags contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3326d60 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x33266f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3326b60 + rpc-Ns-Codeset contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3326ae0 + rpc-Ns-Codeset contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3326a60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33269e0 + 1.2.840.113556.1.4.367 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3326960 + rpcNsCodeset contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33268e0 + rpc-Ns-Codeset contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3326860 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x33261f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3326660 + rpc-Ns-Bindings contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33265e0 + rpc-Ns-Bindings contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3326560 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33264e0 + 1.2.840.113556.1.4.113 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3326460 + rpcNsBindings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33263e0 + rpc-Ns-Bindings contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3326360 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x3325cf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3326160 + rpc-Ns-Annotation contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33260e0 + rpc-Ns-Annotation contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3326060 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3325fe0 + 1.2.840.113556.1.4.366 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3325f60 + rpcNsAnnotation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3325ee0 + rpc-Ns-Annotation contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3325e60 + struct dsdb_attribute contains 364 bytes in 9 blocks (ref 0) d=(nil) 0x33257f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3325c60 + Root-Trust contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3325be0 + Root-Trust contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3325b60 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2bb2ad0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3325ae0 + 1.2.840.113556.1.4.674 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3325a60 + rootTrust contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33259e0 + Root-Trust contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3325960 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x33252e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3325760 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33256e0 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3325660 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33255e0 + 0.9.2342.19200300.100.1.6 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3325550 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33254d0 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3325450 + struct dsdb_attribute contains 362 bytes in 9 blocks (ref 0) d=(nil) 0x3324d70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3325250 + Role-Occupant contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33251d0 + Role-Occupant contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3325150 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2baac80 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3325060 + 2.5.4.33 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3324fe0 + roleOccupant contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3324f60 + Role-Occupant contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3324ee0 + struct dsdb_attribute contains 367 bytes in 10 blocks (ref 0) d=(nil) 0x3324800 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3324ce0 + Rights-Guid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3324c60 + Rights-Guid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3324b70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3324bf0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33227c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3324af0 + 1.2.840.113556.1.4.340 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3324a70 + rightsGuid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33249f0 + Rights-Guid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3324970 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x3324300 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3324770 + RID-Used-Pool contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33246f0 + RID-Used-Pool contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3324670 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33245f0 + 1.2.840.113556.1.4.373 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3324570 + rIDUsedPool contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33244f0 + RID-Used-Pool contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3324470 + struct dsdb_attribute contains 395 bytes in 9 blocks (ref 0) d=(nil) 0x3323e80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3324270 + RID-Set-References contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33241f0 + RID-Set-References contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3324170 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2b9e4e0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33240f0 + 1.2.840.113556.1.4.669 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3324070 + rIDSetReferences contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3323ff0 + RID-Set-References contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3323c50 + struct dsdb_attribute contains 425 bytes in 8 blocks (ref 0) d=(nil) 0x33238c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3323df0 + RID-Previous-Allocation-Pool contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3323d60 + RID-Previous-Allocation-Pool contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3323cd0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3323bd0 + 1.2.840.113556.1.4.372 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3323b50 + rIDPreviousAllocationPool contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3323ac0 + RID-Previous-Allocation-Pool contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3323a30 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x33233c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3323830 + RID-Next-RID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33237b0 + RID-Next-RID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3323730 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33236b0 + 1.2.840.113556.1.4.374 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3323630 + rIDNextRID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33235b0 + RID-Next-RID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3323530 + struct dsdb_attribute contains 407 bytes in 9 blocks (ref 0) d=(nil) 0x3322ec0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3323330 + RID-Manager-Reference contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33232b0 + RID-Manager-Reference contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3323230 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2b92440 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33231b0 + 1.2.840.113556.1.4.368 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3323130 + rIDManagerReference contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33230b0 + RID-Manager-Reference contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3323030 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x33229c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3322e30 + RID-Available-Pool contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3322db0 + RID-Available-Pool contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3322d30 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3322cb0 + 1.2.840.113556.1.4.370 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3322c30 + rIDAvailablePool contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3322bb0 + RID-Available-Pool contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3322b30 + struct dsdb_attribute contains 390 bytes in 8 blocks (ref 0) d=(nil) 0x3322450 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3322930 + RID-Allocation-Pool contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33228b0 + RID-Allocation-Pool contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3322830 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3322740 + 1.2.840.113556.1.4.371 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33226c0 + rIDAllocationPool contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3322640 + RID-Allocation-Pool contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33225c0 + struct dsdb_attribute contains 327 bytes in 8 blocks (ref 0) d=(nil) 0x3322000 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33223c0 + Rid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3322350 + Rid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33222e0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3322260 + 1.2.840.113556.1.4.153 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33221e0 + rid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3322170 + Rid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33218e0 + struct dsdb_attribute contains 347 bytes in 8 blocks (ref 0) d=(nil) 0x3321b80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3321f70 + Revision contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3321ef0 + Revision contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3321e70 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3321df0 + 1.2.840.113556.1.4.145 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3321d70 + revision contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3321cf0 + Revision contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3321950 + struct dsdb_attribute contains 421 bytes in 8 blocks (ref 0) d=(nil) 0x3321550 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3321af0 + Retired-Repl-DSA-Signatures contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3321a60 + Retired-Repl-DSA-Signatures contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33219d0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3321860 + 1.2.840.113556.1.4.673 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33217e0 + retiredReplDSASignatures contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3321750 + Retired-Repl-DSA-Signatures contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x33216c0 + struct dsdb_attribute contains 399 bytes in 10 blocks (ref 0) d=(nil) 0x3320fe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33214c0 + Required-Categories contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3321440 + Required-Categories contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3321350 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33213d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3320de0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33212d0 + 1.2.840.113556.1.4.321 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3321250 + requiredCategories contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33211d0 + Required-Categories contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3321150 + struct dsdb_attribute contains 353 bytes in 9 blocks (ref 0) d=(nil) 0x3320af0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3320f50 + Reps-To contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3320ed0 + Reps-To contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3320e50 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2b76040 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3320d60 + 1.2.840.113556.1.2.83 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3320ce0 + repsTo contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x331e070 + Reps-To contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3320c60 + struct dsdb_attribute contains 361 bytes in 9 blocks (ref 0) d=(nil) 0x33205f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3320a60 + Reps-From contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33209e0 + Reps-From contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3320960 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2b71cc0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33208e0 + 1.2.840.113556.1.2.91 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3320860 + repsFrom contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33207e0 + Reps-From contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3320760 + struct dsdb_attribute contains 359 bytes in 9 blocks (ref 0) d=(nil) 0x33200f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3320560 + Reports contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33204e0 + Reports contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3320460 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2b6db20 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33203e0 + 1.2.840.113556.1.2.436 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3320360 + directReports contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33202e0 + Reports contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3320260 + struct dsdb_attribute contains 392 bytes in 8 blocks (ref 0) d=(nil) 0x331fbf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3320060 + Repl-UpToDate-Vector contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x331ffe0 + Repl-UpToDate-Vector contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x331ff60 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331fee0 + 1.2.840.113556.1.4.4 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x331fe60 + replUpToDateVector contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331fde0 + Repl-UpToDate-Vector contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x331fd60 + struct dsdb_attribute contains 435 bytes in 8 blocks (ref 0) d=(nil) 0x331f730 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331fb60 + Repl-Topology-Stay-Of-Execution contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x331fad0 + Repl-Topology-Stay-Of-Execution contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x331fa40 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x331f9c0 + 1.2.840.113556.1.4.677 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331f500 + replTopologyStayOfExecution contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x331f930 + Repl-Topology-Stay-Of-Execution contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x331f8a0 + struct dsdb_attribute contains 403 bytes in 8 blocks (ref 0) d=(nil) 0x331f180 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331f6a0 + Repl-Property-Meta-Data contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331f610 + Repl-Property-Meta-Data contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331f580 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331f480 + 1.2.840.113556.1.4.3 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x331f400 + replPropertyMetaData contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x331f380 + Repl-Property-Meta-Data contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331f2f0 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x331ec70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331f0f0 + Repl-Interval contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x331f070 + Repl-Interval contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x331eff0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x331ef70 + 1.2.840.113556.1.4.1336 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331eee0 + replInterval contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x331ee60 + Repl-Interval contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x331ede0 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x331e770 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331ebe0 + Replica-Source contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x331eb60 + Replica-Source contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x331eae0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331ea60 + 1.2.840.113556.1.4.109 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331e9e0 + replicaSource contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x331e960 + Replica-Source contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x331e8e0 + struct dsdb_attribute contains 390 bytes in 8 blocks (ref 0) d=(nil) 0x331e270 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331e6e0 + Remote-Storage-GUID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x331e660 + Remote-Storage-GUID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x331e5e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331e560 + 1.2.840.113556.1.4.809 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331e4e0 + remoteStorageGUID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x331e460 + Remote-Storage-GUID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x331e3e0 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x331dd00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331e1e0 + Remote-Source-Type contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331e160 + Remote-Source-Type contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331e0e0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x331dff0 + 1.2.840.113556.1.4.108 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331df70 + remoteSourceType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x331def0 + Remote-Source-Type contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331de70 + struct dsdb_attribute contains 375 bytes in 10 blocks (ref 0) d=(nil) 0x331d790 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331dc70 + Remote-Source contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x331dbf0 + Remote-Source contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x331db00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x331db80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x331d590 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331da80 + 1.2.840.113556.1.4.107 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331da00 + remoteSource contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x331d980 + Remote-Source contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x331d900 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x331d220 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331d700 + Remote-Server-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331d680 + Remote-Server-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331d600 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331d510 + 1.2.840.113556.1.4.105 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331d490 + remoteServerName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x331d410 + Remote-Server-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331d390 + struct dsdb_attribute contains 381 bytes in 10 blocks (ref 0) d=(nil) 0x331ccb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331d190 + Registered-Address contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331d110 + Registered-Address contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331d020 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x331d0a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x331cab0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331cfa0 + 2.5.4.26 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331cf20 + registeredAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x331cea0 + Registered-Address contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331ce20 + struct dsdb_attribute contains 352 bytes in 8 blocks (ref 0) d=(nil) 0x331c7c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331cc20 + RDN-Att-ID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x331cba0 + RDN-Att-ID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x331cb20 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x331ca30 + 1.2.840.113556.1.2.26 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x331c9b0 + rDNAttID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331c930 + RDN-Att-ID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x331c560 + struct dsdb_attribute contains 335 bytes in 10 blocks (ref 0) d=(nil) 0x331c210 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331c730 + RDN contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x331c6c0 + RDN contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x331c650 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x331c5e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x331c4f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331c470 + 1.2.840.113556.1.4.1 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x331c3f0 + name contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x331c380 + RDN contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3319800 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x331bd10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331c180 + Range-Upper contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x331c100 + Range-Upper contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x331c080 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x331c000 + 1.2.840.113556.1.2.35 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x331bf80 + rangeUpper contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x331bf00 + Range-Upper contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x331be80 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x331b810 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331bc80 + Range-Lower contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x331bc00 + Range-Lower contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x331bb80 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x331bb00 + 1.2.840.113556.1.2.34 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x331ba80 + rangeLower contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x331ba00 + Range-Lower contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x331b980 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x331b310 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331b780 + Query-Policy-Object contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x331b700 + Query-Policy-Object contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x331b680 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2b30610 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x331b600 + 1.2.840.113556.1.4.607 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331b580 + queryPolicyObject contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x331b500 + Query-Policy-Object contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x331b480 + struct dsdb_attribute contains 383 bytes in 9 blocks (ref 0) d=(nil) 0x331ae10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331b280 + Query-Policy-BL contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x331b200 + Query-Policy-BL contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x331b180 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2b2c410 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x331b100 + 1.2.840.113556.1.4.608 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331b080 + queryPolicyBL contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x331b000 + Query-Policy-BL contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x331af80 + struct dsdb_attribute contains 356 bytes in 8 blocks (ref 0) d=(nil) 0x331a910 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331ad80 + QueryPoint contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x331ad00 + QueryPoint contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x331ac80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331ac00 + 1.2.840.113556.1.4.680 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331ab80 + queryPoint contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x331ab00 + QueryPoint contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x331aa80 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x331a400 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331a880 + Query-Filter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x331a800 + Query-Filter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x331a780 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x331a700 + 1.2.840.113556.1.4.1355 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331a670 + queryFilter contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x331a5f0 + Query-Filter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x331a570 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x3319f00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x331a370 + Quality-Of-Service contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331a2f0 + Quality-Of-Service contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331a270 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x331a1f0 + 1.2.840.113556.1.4.458 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x331a170 + qualityOfService contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x331a0f0 + Quality-Of-Service contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x331a070 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x3319a00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3319e70 + Pwd-Properties contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3319df0 + Pwd-Properties contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3319d70 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3319cf0 + 1.2.840.113556.1.4.93 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3319c70 + pwdProperties contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3319bf0 + Pwd-Properties contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3319b70 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x3319490 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3319970 + Pwd-Last-Set contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33198f0 + Pwd-Last-Set contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3319870 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3319780 + 1.2.840.113556.1.4.96 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3319700 + pwdLastSet contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3319680 + Pwd-Last-Set contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3319600 + struct dsdb_attribute contains 392 bytes in 10 blocks (ref 0) d=(nil) 0x3318eb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3319400 + Pwd-History-Length contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3319380 + Pwd-History-Length contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3319300 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3319290 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3319220 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33191a0 + 1.2.840.113556.1.4.95 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3319120 + pwdHistoryLength contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33190a0 + Pwd-History-Length contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3319020 + struct dsdb_attribute contains 387 bytes in 10 blocks (ref 0) d=(nil) 0x3318940 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3318e20 + Purported-Search contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3318da0 + Purported-Search contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3318cb0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3318d30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3317d20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3318c30 + 1.2.840.113556.1.4.886 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3318bb0 + purportedSearch contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3318b30 + Purported-Search contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3318ab0 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x3318440 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33188b0 + Public-Key-Policy contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3318830 + Public-Key-Policy contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33187b0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3318730 + 1.2.840.113556.1.4.420 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33186b0 + publicKeyPolicy contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3318630 + Public-Key-Policy contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33185b0 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x3317f40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33183b0 + Proxy-Lifetime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3318330 + Proxy-Lifetime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33182b0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3318230 + 1.2.840.113556.1.4.103 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33181b0 + proxyLifetime contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3318130 + Proxy-Lifetime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33180b0 + struct dsdb_attribute contains 409 bytes in 8 blocks (ref 0) d=(nil) 0x33179a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3317eb0 + Proxy-Generation-Enabled contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3317e20 + Proxy-Generation-Enabled contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3317d90 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3317ca0 + 1.2.840.113556.1.2.523 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3317c20 + proxyGenerationEnabled contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3317ba0 + Proxy-Generation-Enabled contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3317b10 + struct dsdb_attribute contains 383 bytes in 10 blocks (ref 0) d=(nil) 0x3317430 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3317910 + Proxy-Addresses contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3317890 + Proxy-Addresses contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33177a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3317820 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3316d20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3317720 + 1.2.840.113556.1.2.210 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33176a0 + proxyAddresses contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3317620 + Proxy-Addresses contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33175a0 + struct dsdb_attribute contains 401 bytes in 9 blocks (ref 0) d=(nil) 0x3316f20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33173a0 + Proxied-Object-Name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3317320 + Proxied-Object-Name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33172a0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2afb6f0 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3317220 + 1.2.840.113556.1.4.1249 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3317190 + proxiedObjectName contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3317110 + Proxied-Object-Name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3317090 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x33169b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3316e90 + Profile-Path contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3316e10 + Profile-Path contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3316d90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3316ca0 + 1.2.840.113556.1.4.139 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3316c20 + profilePath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3316ba0 + Profile-Path contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3316b20 + struct dsdb_attribute contains 371 bytes in 10 blocks (ref 0) d=(nil) 0x3316440 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3316920 + Product-Code contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33168a0 + Product-Code contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33167b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3316830 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3310d10 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3316730 + 1.2.840.113556.1.4.818 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33166b0 + productCode contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3316630 + Product-Code contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33165b0 + struct dsdb_attribute contains 375 bytes in 8 blocks (ref 0) d=(nil) 0x3315f40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33163b0 + Privilege-Value contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3316330 + Privilege-Value contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33162b0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3316230 + 1.2.840.113556.1.4.635 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33161b0 + privilegeValue contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3316130 + Privilege-Value contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33160b0 + struct dsdb_attribute contains 388 bytes in 9 blocks (ref 0) d=(nil) 0x3315a40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3315eb0 + Privilege-Holder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3315e30 + Privilege-Holder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3315db0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2aeb480 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3315d30 + 1.2.840.113556.1.4.637 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3315cb0 + privilegeHolder contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3315c30 + Privilege-Holder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3315bb0 + struct dsdb_attribute contains 402 bytes in 8 blocks (ref 0) d=(nil) 0x3315540 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33159b0 + Privilege-Display-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3315930 + Privilege-Display-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33158b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3315830 + 1.2.840.113556.1.4.634 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33157b0 + privilegeDisplayName contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3315730 + Privilege-Display-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33156b0 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x3315040 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33154b0 + Privilege-Attributes contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3315430 + Privilege-Attributes contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33153b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3315330 + 1.2.840.113556.1.4.636 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33152b0 + privilegeAttributes contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3315230 + Privilege-Attributes contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33151b0 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x3314b40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3314fb0 + Private-Key contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3314f30 + Private-Key contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3314eb0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3314e30 + 1.2.840.113556.1.4.101 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3314db0 + privateKey contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3314d30 + Private-Key contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3314cb0 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x3314640 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3314ab0 + Prior-Value contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3314a30 + Prior-Value contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33149b0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3314930 + 1.2.840.113556.1.4.100 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33148b0 + priorValue contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3314830 + Prior-Value contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33147b0 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x3314140 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33145b0 + Prior-Set-Time contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3314530 + Prior-Set-Time contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33144b0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3314430 + 1.2.840.113556.1.4.99 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33143b0 + priorSetTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3314330 + Prior-Set-Time contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33142b0 + struct dsdb_attribute contains 347 bytes in 8 blocks (ref 0) d=(nil) 0x3313c40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33140b0 + Priority contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3314030 + Priority contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3313fb0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3313f30 + 1.2.840.113556.1.4.231 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3313eb0 + priority contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3313e30 + Priority contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3313db0 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x3313740 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3313bb0 + Print-Status contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3313b30 + Print-Status contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3313ab0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3313a30 + 1.2.840.113556.1.4.273 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33139b0 + printStatus contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3313930 + Print-Status contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x33138b0 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x3313240 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33136b0 + Print-Start-Time contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3313630 + Print-Start-Time contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33135b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3313530 + 1.2.840.113556.1.4.233 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33134b0 + printStartTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3313430 + Print-Start-Time contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33133b0 + struct dsdb_attribute contains 409 bytes in 8 blocks (ref 0) d=(nil) 0x3312d10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33131b0 + Print-Stapling-Supported contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3313120 + Print-Stapling-Supported contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3313090 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3313010 + 1.2.840.113556.1.4.281 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3312f90 + printStaplingSupported contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3312f10 + Print-Stapling-Supported contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3312e80 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x3312810 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3312c80 + Print-Spooling contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3312c00 + Print-Spooling contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3312b80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3312b00 + 1.2.840.113556.1.4.274 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3312a80 + printSpooling contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3312a00 + Print-Spooling contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3312980 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x3312310 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3312780 + Print-Share-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3312700 + Print-Share-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3312680 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3312600 + 1.2.840.113556.1.4.270 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3312580 + printShareName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3312500 + Print-Share-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3312480 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x3311e10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3312280 + Print-Separator-File contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3312200 + Print-Separator-File contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3312180 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3312100 + 1.2.840.113556.1.4.230 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3312080 + printSeparatorFile contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3312000 + Print-Separator-File contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3311f80 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x3311910 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3311d80 + Print-Rate-Unit contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3311d00 + Print-Rate-Unit contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3311c80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3311c00 + 1.2.840.113556.1.4.286 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3311b80 + printRateUnit contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3311b00 + Print-Rate-Unit contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3311a80 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x3311410 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3311880 + Print-Rate contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3311800 + Print-Rate contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3311780 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3311700 + 1.2.840.113556.1.4.285 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3311680 + printRate contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3311600 + Print-Rate contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3311580 + struct dsdb_attribute contains 400 bytes in 8 blocks (ref 0) d=(nil) 0x3310f10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3311380 + Print-Pages-Per-Minute contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3311300 + Print-Pages-Per-Minute contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3311280 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3311200 + 1.2.840.113556.1.4.631 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3311180 + printPagesPerMinute contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3311100 + Print-Pages-Per-Minute contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3311080 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x3310a20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3310e80 + Print-Owner contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3310e00 + Print-Owner contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3310d80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3310c90 + 1.2.840.113556.1.4.271 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3310c10 + printOwner contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3310b90 + Print-Owner contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3310780 + struct dsdb_attribute contains 434 bytes in 10 blocks (ref 0) d=(nil) 0x33103f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3310990 + Print-Orientations-Supported contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3310900 + Print-Orientations-Supported contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3310870 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3310800 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x330c5b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3310700 + 1.2.840.113556.1.4.240 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3310680 + printOrientationsSupported contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x33105f0 + Print-Orientations-Supported contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3310560 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x330fef0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3310360 + Print-Number-Up contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x33102e0 + Print-Number-Up contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3310260 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33101e0 + 1.2.840.113556.1.4.290 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3310160 + printNumberUp contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33100e0 + Print-Number-Up contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3310060 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x330f9f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330fe60 + Print-Notify contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330fde0 + Print-Notify contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330fd60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x330fce0 + 1.2.840.113556.1.4.272 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330fc60 + printNotify contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x330fbe0 + Print-Notify contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330fb60 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x330f4f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330f960 + Print-Network-Address contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x330f8e0 + Print-Network-Address contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x330f860 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x330f7e0 + 1.2.840.113556.1.4.287 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330f760 + printNetworkAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x330f6e0 + Print-Network-Address contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x330f660 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x330eff0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330f460 + Print-Min-Y-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330f3e0 + Print-Min-Y-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330f360 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330f2e0 + 1.2.840.113556.1.4.280 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330f260 + printMinYExtent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x330f1e0 + Print-Min-Y-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330f160 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x330eaf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330ef60 + Print-Min-X-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330eee0 + Print-Min-X-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330ee60 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330ede0 + 1.2.840.113556.1.4.279 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330ed60 + printMinXExtent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x330ece0 + Print-Min-X-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330ec60 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x330e5f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330ea60 + Print-Memory contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330e9e0 + Print-Memory contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330e960 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330e8e0 + 1.2.840.113556.1.4.282 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330e860 + printMemory contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x330e7e0 + Print-Memory contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330e760 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x330e0f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330e560 + Print-Media-Supported contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x330e4e0 + Print-Media-Supported contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x330e460 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x330e3e0 + 1.2.840.113556.1.4.299 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330e360 + printMediaSupported contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x330e2e0 + Print-Media-Supported contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x330e260 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x330dbf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330e060 + Print-Media-Ready contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x330dfe0 + Print-Media-Ready contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x330df60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x330dee0 + 1.2.840.113556.1.4.289 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330de60 + printMediaReady contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x330dde0 + Print-Media-Ready contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x330dd60 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x330d6f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330db60 + Print-Max-Y-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330dae0 + Print-Max-Y-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330da60 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330d9e0 + 1.2.840.113556.1.4.278 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330d960 + printMaxYExtent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x330d8e0 + Print-Max-Y-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330d860 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x330d1f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330d660 + Print-Max-X-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330d5e0 + Print-Max-X-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330d560 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330d4e0 + 1.2.840.113556.1.4.277 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330d460 + printMaxXExtent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x330d3e0 + Print-Max-X-Extent contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x330d360 + struct dsdb_attribute contains 432 bytes in 8 blocks (ref 0) d=(nil) 0x330ccb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330d160 + Print-Max-Resolution-Supported contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x330d0d0 + Print-Max-Resolution-Supported contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x330d040 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330cfc0 + 1.2.840.113556.1.4.238 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330cf40 + printMaxResolutionSupported contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x330ceb0 + Print-Max-Resolution-Supported contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x330ce20 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x330c7b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330cc20 + Print-Max-Copies contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x330cba0 + Print-Max-Copies contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x330cb20 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330caa0 + 1.2.840.113556.1.4.241 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330ca20 + printMaxCopies contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x330c9a0 + Print-Max-Copies contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x330c920 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x330c240 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330c720 + Print-MAC-Address contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x330c6a0 + Print-MAC-Address contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x330c620 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x330c530 + 1.2.840.113556.1.4.288 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330c4b0 + printMACAddress contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x330c430 + Print-MAC-Address contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x330c3b0 + struct dsdb_attribute contains 379 bytes in 10 blocks (ref 0) d=(nil) 0x330bcd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330c1b0 + Print-Language contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x330c130 + Print-Language contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x330c040 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x330c0c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3306520 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x330bfc0 + 1.2.840.113556.1.4.246 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330bf40 + printLanguage contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x330bec0 + Print-Language contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x330be40 + struct dsdb_attribute contains 404 bytes in 8 blocks (ref 0) d=(nil) 0x330b7a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330bc40 + Print-Keep-Printed-Jobs contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330bbb0 + Print-Keep-Printed-Jobs contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330bb20 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330baa0 + 1.2.840.113556.1.4.275 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330ba20 + printKeepPrintedJobs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x330b9a0 + Print-Keep-Printed-Jobs contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330b910 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x330b2a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330b710 + Print-Form-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x330b690 + Print-Form-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x330b610 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x330b590 + 1.2.840.113556.1.4.235 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330b510 + printFormName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x330b490 + Print-Form-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x330b410 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x330ada0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330b210 + Printer-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330b190 + Printer-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330b110 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x330b090 + 1.2.840.113556.1.4.300 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330b010 + printerName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x330af90 + Printer-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330af10 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x330a8a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330ad10 + Print-End-Time contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x330ac90 + Print-End-Time contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x330ac10 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330ab90 + 1.2.840.113556.1.4.234 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330ab10 + printEndTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x330aa90 + Print-End-Time contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x330aa10 + struct dsdb_attribute contains 402 bytes in 8 blocks (ref 0) d=(nil) 0x330a390 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330a810 + Print-Duplex-Supported contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330a790 + Print-Duplex-Supported contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330a710 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330a690 + 1.2.840.113556.1.4.1311 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330a600 + printDuplexSupported contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x330a580 + Print-Duplex-Supported contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330a500 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x3309e90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x330a300 + Print-Color contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x330a280 + Print-Color contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x330a200 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x330a180 + 1.2.840.113556.1.4.243 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x330a100 + printColor contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x330a080 + Print-Color contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x330a000 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x3309990 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3309e00 + Print-Collate contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3309d80 + Print-Collate contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3309d00 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3309c80 + 1.2.840.113556.1.4.242 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3309c00 + printCollate contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3309b80 + Print-Collate contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3309b00 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x3309490 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3309900 + Print-Bin-Names contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3309880 + Print-Bin-Names contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3309800 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3309780 + 1.2.840.113556.1.4.237 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3309700 + printBinNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3309680 + Print-Bin-Names contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3309600 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x3308f90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3309400 + Print-Attributes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3309380 + Print-Attributes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3309300 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3309280 + 1.2.840.113556.1.4.247 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3309200 + printAttributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3309180 + Print-Attributes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3309100 + struct dsdb_attribute contains 390 bytes in 8 blocks (ref 0) d=(nil) 0x3308a80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3308f00 + Primary-Group-Token contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3308e80 + Primary-Group-Token contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3308e00 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3308d80 + 1.2.840.113556.1.4.1412 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3308cf0 + primaryGroupToken contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3308c70 + Primary-Group-Token contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3308bf0 + struct dsdb_attribute contains 376 bytes in 8 blocks (ref 0) d=(nil) 0x3308580 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33089f0 + Primary-Group-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3308970 + Primary-Group-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33088f0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3308870 + 1.2.840.113556.1.4.98 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33087f0 + primaryGroupID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3308770 + Primary-Group-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33086f0 + struct dsdb_attribute contains 395 bytes in 9 blocks (ref 0) d=(nil) 0x3308100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33084f0 + Previous-Parent-CA contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3308470 + Previous-Parent-CA contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33083f0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2a417f0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3308370 + 1.2.840.113556.1.4.694 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33082f0 + previousParentCA contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3308270 + Previous-Parent-CA contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3307ed0 + struct dsdb_attribute contains 410 bytes in 8 blocks (ref 0) d=(nil) 0x3307b50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3308070 + Previous-CA-Certificates contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3307fe0 + Previous-CA-Certificates contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3307f50 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3307e50 + 1.2.840.113556.1.4.692 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3307dd0 + previousCACertificates contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3307d50 + Previous-CA-Certificates contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3307cc0 + struct dsdb_attribute contains 391 bytes in 9 blocks (ref 0) d=(nil) 0x3307650 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3307ac0 + Presentation-Address contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3307a40 + Presentation-Address contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33079c0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2a399f0 + 2.5.5.13 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3307940 + 2.5.4.29 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33078c0 + presentationAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3307840 + Presentation-Address contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33077c0 + struct dsdb_attribute contains 355 bytes in 8 blocks (ref 0) d=(nil) 0x3307150 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33075c0 + Prefix-Map contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x3307540 + Prefix-Map contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33074c0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3307440 + 1.2.840.113556.1.4.538 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33073c0 + prefixMap contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3307340 + Prefix-Map contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33072c0 + struct dsdb_attribute contains 371 bytes in 9 blocks (ref 0) d=(nil) 0x3306c50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33070c0 + Preferred-OU contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3307040 + Preferred-OU contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3306fc0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2a31a00 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3306f40 + 1.2.840.113556.1.4.97 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3306ec0 + preferredOU contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3306e40 + Preferred-OU contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3306dc0 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x3306740 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3306bc0 + preferredLanguage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3306b40 + preferredLanguage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3306ac0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3306a40 + 2.16.840.1.113730.3.1.39 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x33069b0 + preferredLanguage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3306930 + preferredLanguage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x33068b0 + struct dsdb_attribute contains 399 bytes in 8 blocks (ref 0) d=(nil) 0x3306190 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33066b0 + Preferred-Delivery-Method contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3306620 + Preferred-Delivery-Method contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3306590 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33064a0 + 2.5.4.28 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3306420 + preferredDeliveryMethod contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3306390 + Preferred-Delivery-Method contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x3306300 + struct dsdb_attribute contains 368 bytes in 10 blocks (ref 0) d=(nil) 0x3305bb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3306100 + Post-Office-Box contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3306080 + Post-Office-Box contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3305f90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3306010 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3305f20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3305ea0 + 2.5.4.18 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3305e20 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3305da0 + Post-Office-Box contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3305d20 + struct dsdb_attribute contains 353 bytes in 10 blocks (ref 0) d=(nil) 0x33055d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3305b20 + Postal-Code contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3305aa0 + Postal-Code contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33059b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3305a30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3305940 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33058c0 + 2.5.4.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3305840 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x33057c0 + Postal-Code contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3305740 + struct dsdb_attribute contains 365 bytes in 10 blocks (ref 0) d=(nil) 0x3305060 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3305540 + Postal-Address contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33054c0 + Postal-Address contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33053d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3305450 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3303f40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3305350 + 2.5.4.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33052d0 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3305250 + Postal-Address contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x33051d0 + struct dsdb_attribute contains 368 bytes in 8 blocks (ref 0) d=(nil) 0x3304b60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3304fd0 + Poss-Superiors contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3304f50 + Poss-Superiors contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3304ed0 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3304e50 + 1.2.840.113556.1.2.8 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3304dd0 + possSuperiors contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3304d50 + Poss-Superiors contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3304cd0 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x3304660 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3304ad0 + Possible-Inferiors contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3304a50 + Possible-Inferiors contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33049d0 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3304950 + 1.2.840.113556.1.4.915 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33048d0 + possibleInferiors contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3304850 + Possible-Inferiors contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33047d0 + struct dsdb_attribute contains 351 bytes in 8 blocks (ref 0) d=(nil) 0x3304160 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33045d0 + Port-Name contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3304550 + Port-Name contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33044d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3304450 + 1.2.840.113556.1.4.228 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33043d0 + portName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3304350 + Port-Name contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x33042d0 + struct dsdb_attribute contains 409 bytes in 8 blocks (ref 0) d=(nil) 0x3303bc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33040d0 + Policy-Replication-Flags contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3304040 + Policy-Replication-Flags contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3303fb0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3303ec0 + 1.2.840.113556.1.4.633 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3303e40 + policyReplicationFlags contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3303dc0 + Policy-Replication-Flags contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3303d30 + struct dsdb_attribute contains 355 bytes in 10 blocks (ref 0) d=(nil) 0x3303660 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3303b30 + PKT-Guid contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3303ab0 + PKT-Guid contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33039c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3303a40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3303950 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33038d0 + 1.2.840.113556.1.4.205 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3303850 + pKTGuid contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33037d0 + PKT-Guid contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3303470 + struct dsdb_attribute contains 332 bytes in 9 blocks (ref 0) d=(nil) 0x3303120 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x33035d0 + PKT contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3303560 + PKT contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x33034f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3303400 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3303380 + 1.2.840.113556.1.4.206 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3303300 + pKT contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3303290 + PKT contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3300680 + struct dsdb_attribute contains 387 bytes in 8 blocks (ref 0) d=(nil) 0x3302c10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3303090 + PKI-Overlap-Period contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3303010 + PKI-Overlap-Period contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3302f90 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3302f10 + 1.2.840.113556.1.4.1332 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3302e80 + pKIOverlapPeriod contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3302e00 + PKI-Overlap-Period contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3302d80 + struct dsdb_attribute contains 397 bytes in 8 blocks (ref 0) d=(nil) 0x3302700 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3302b80 + PKI-Max-Issuing-Depth contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3302b00 + PKI-Max-Issuing-Depth contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3302a80 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3302a00 + 1.2.840.113556.1.4.1329 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3302970 + pKIMaxIssuingDepth contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x33028f0 + PKI-Max-Issuing-Depth contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3302870 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x33021f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3302670 + PKI-Key-Usage contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x33025f0 + PKI-Key-Usage contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3302570 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33024f0 + 1.2.840.113556.1.4.1328 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3302460 + pKIKeyUsage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x33023e0 + PKI-Key-Usage contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3302360 + struct dsdb_attribute contains 402 bytes in 8 blocks (ref 0) d=(nil) 0x3301ce0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3302160 + PKI-Extended-Key-Usage contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x33020e0 + PKI-Extended-Key-Usage contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3302060 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3301fe0 + 1.2.840.113556.1.4.1333 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3301f50 + pKIExtendedKeyUsage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3301ed0 + PKI-Extended-Key-Usage contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3301e50 + struct dsdb_attribute contains 399 bytes in 8 blocks (ref 0) d=(nil) 0x33017d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3301c50 + PKI-Expiration-Period contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3301bd0 + PKI-Expiration-Period contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3301b50 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3301ad0 + 1.2.840.113556.1.4.1331 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3301a40 + pKIExpirationPeriod contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33019c0 + PKI-Expiration-Period contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3301940 + struct dsdb_attribute contains 399 bytes in 8 blocks (ref 0) d=(nil) 0x33012c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3301740 + PKI-Enrollment-Access contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33016c0 + PKI-Enrollment-Access contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3301640 + 2.5.5.15 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x33015c0 + 1.2.840.113556.1.4.1335 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3301530 + pKIEnrollmentAccess contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x33014b0 + PKI-Enrollment-Access contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3301430 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x3300db0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3301230 + PKI-Default-Key-Spec contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x33011b0 + PKI-Default-Key-Spec contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3301130 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33010b0 + 1.2.840.113556.1.4.1327 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3301020 + pKIDefaultKeySpec contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3300fa0 + PKI-Default-Key-Spec contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3300f20 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x3300920 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3300d20 + PKI-Default-CSPs contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3300ca0 + PKI-Default-CSPs contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3300c20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3300ba0 + 1.2.840.113556.1.4.1334 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3300b10 + pKIDefaultCSPs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3300a90 + PKI-Default-CSPs contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x33006f0 + struct dsdb_attribute contains 407 bytes in 8 blocks (ref 0) d=(nil) 0x33002f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3300890 + PKI-Critical-Extensions contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3300800 + PKI-Critical-Extensions contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3300770 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3300600 + 1.2.840.113556.1.4.1330 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3300570 + pKICriticalExtensions contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x33004f0 + PKI-Critical-Extensions contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3300460 + struct dsdb_attribute contains 361 bytes in 10 blocks (ref 0) d=(nil) 0x32ffd70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3300260 + Picture contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33001e0 + Picture contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x33000f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3300170 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ffb50 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3300070 + 2.16.840.1.113730.3.1.35 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32fffe0 + thumbnailPhoto contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32fff60 + Picture contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ffee0 + struct dsdb_attribute contains 419 bytes in 9 blocks (ref 0) d=(nil) 0x32ff850 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ffce0 + Physical-Location-Object contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ffc50 + Physical-Location-Object contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ffbc0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x29d8ae0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ffad0 + 1.2.840.113556.1.4.514 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ffa50 + physicalLocationObject contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ff5b0 + Physical-Location-Object contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ff9c0 + struct dsdb_attribute contains 423 bytes in 10 blocks (ref 0) d=(nil) 0x32ff230 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ff7c0 + Physical-Delivery-Office-Name contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32ff730 + Physical-Delivery-Office-Name contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32ff6a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ff630 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ff540 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ff4c0 + 2.5.4.19 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ff0b0 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32ff430 + Physical-Delivery-Office-Name contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32ff3a0 + struct dsdb_attribute contains 339 bytes in 8 blocks (ref 0) d=(nil) 0x32fecd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ff1a0 + photo contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x32ff130 + photo contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x32ff040 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fefb0 + 0.9.2342.19200300.100.1.7 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32fef20 + photo contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x32feeb0 + photo contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x32fee40 + struct dsdb_attribute contains 390 bytes in 10 blocks (ref 0) d=(nil) 0x32fe6e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fec40 + Phone-Pager-Primary contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32febc0 + Phone-Pager-Primary contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32fead0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32feb50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fea60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fe9d0 + 0.9.2342.19200300.100.1.42 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32fe940 + pager contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x32fe8d0 + Phone-Pager-Primary contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32fe850 + struct dsdb_attribute contains 385 bytes in 10 blocks (ref 0) d=(nil) 0x32fe100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fe650 + Phone-Pager-Other contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32fe5d0 + Phone-Pager-Other contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32fe4e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fe560 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fe470 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fe3f0 + 1.2.840.113556.1.2.118 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32fe370 + otherPager contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32fe2f0 + Phone-Pager-Other contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32fe270 + struct dsdb_attribute contains 391 bytes in 10 blocks (ref 0) d=(nil) 0x32fdb20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fe070 + Phone-Office-Other contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fdff0 + Phone-Office-Other contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fdf00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fdf80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fde90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fde10 + 1.2.840.113556.1.2.18 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32fdd90 + otherTelephone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32fdd10 + Phone-Office-Other contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fdc90 + struct dsdb_attribute contains 394 bytes in 10 blocks (ref 0) d=(nil) 0x32fd530 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fda90 + Phone-Mobile-Primary contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32fda10 + Phone-Mobile-Primary contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32fd920 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fd9a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fd8b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fd820 + 0.9.2342.19200300.100.1.41 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32fd790 + mobile contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x32fd720 + Phone-Mobile-Primary contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32fd6a0 + struct dsdb_attribute contains 389 bytes in 10 blocks (ref 0) d=(nil) 0x32fcf50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fd4a0 + Phone-Mobile-Other contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fd420 + Phone-Mobile-Other contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fd330 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fd3b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fd2c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fd240 + 1.2.840.113556.1.4.647 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32fd1c0 + otherMobile contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32fd140 + Phone-Mobile-Other contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fd0c0 + struct dsdb_attribute contains 408 bytes in 10 blocks (ref 0) d=(nil) 0x32fc960 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fcec0 + Phone-ISDN-Primary contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fce40 + Phone-ISDN-Primary contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fcd50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fcdd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fcce0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fcc60 + 1.2.840.113556.1.4.649 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32fcbe0 + primaryInternationalISDNNumber contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32fcb50 + Phone-ISDN-Primary contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fcad0 + struct dsdb_attribute contains 375 bytes in 9 blocks (ref 0) d=(nil) 0x32fc460 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fc8d0 + Phone-Ip-Primary contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32fc850 + Phone-Ip-Primary contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32fc7d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fc260 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fc750 + 1.2.840.113556.1.4.721 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32fc6d0 + ipPhone contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32fc650 + Phone-Ip-Primary contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32fc5d0 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x32fbef0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fc3d0 + Phone-Ip-Other contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32fc350 + Phone-Ip-Other contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32fc2d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fc1e0 + 1.2.840.113556.1.4.722 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32fc160 + otherIpPhone contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32fc0e0 + Phone-Ip-Other contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32fc060 + struct dsdb_attribute contains 391 bytes in 10 blocks (ref 0) d=(nil) 0x32fb8f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fbe60 + Phone-Home-Primary contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fbde0 + Phone-Home-Primary contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fbcf0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fbd70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fbc80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fbbf0 + 0.9.2342.19200300.100.1.20 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32fbb60 + homePhone contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32fbae0 + Phone-Home-Primary contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32fba60 + struct dsdb_attribute contains 386 bytes in 10 blocks (ref 0) d=(nil) 0x32fb310 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fb860 + Phone-Home-Other contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32fb7e0 + Phone-Home-Other contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32fb6f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fb770 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fb680 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fb600 + 1.2.840.113556.1.2.277 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32fb580 + otherHomePhone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32fb500 + Phone-Home-Other contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32fb480 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x32fad20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fb280 + Phone-Fax-Other contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32fb200 + Phone-Fax-Other contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32fb110 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fb190 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fb0a0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fb020 + 1.2.840.113556.1.4.646 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32fafa0 + otherFacsimileTelephoneNumber contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32faf10 + Phone-Fax-Other contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32fae90 + struct dsdb_attribute contains 379 bytes in 10 blocks (ref 0) d=(nil) 0x32fa7c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fac90 + Personal-Title contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32fac10 + Personal-Title contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32fab20 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32faba0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32faab0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32faa30 + 1.2.840.113556.1.2.615 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32fa9b0 + personalTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32fa930 + Personal-Title contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32fa520 + struct dsdb_attribute contains 440 bytes in 10 blocks (ref 0) d=(nil) 0x32fa1a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fa730 + Per-Recip-Dialog-Display-Table contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32fa6a0 + Per-Recip-Dialog-Display-Table contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32fa610 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fa5a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32fa4b0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32fa430 + 1.2.840.113556.1.2.326 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f9f00 + perRecipDialogDisplayTable contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32fa3a0 + Per-Recip-Dialog-Display-Table contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32fa310 + struct dsdb_attribute contains 432 bytes in 10 blocks (ref 0) d=(nil) 0x32f9b70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32fa110 + Per-Msg-Dialog-Display-Table contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32fa080 + Per-Msg-Dialog-Display-Table contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32f9ff0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f9f80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f6180 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f9e80 + 1.2.840.113556.1.2.325 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f9e00 + perMsgDialogDisplayTable contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f9d70 + Per-Msg-Dialog-Display-Table contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32f9ce0 + struct dsdb_attribute contains 391 bytes in 9 blocks (ref 0) d=(nil) 0x32f96f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f9ae0 + Pending-Parent-CA contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32f9a60 + Pending-Parent-CA contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32f99e0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2990e20 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f9960 + 1.2.840.113556.1.4.695 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f98e0 + pendingParentCA contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32f9860 + Pending-Parent-CA contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32f94c0 + struct dsdb_attribute contains 406 bytes in 8 blocks (ref 0) d=(nil) 0x32f9140 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f9660 + Pending-CA-Certificates contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f95d0 + Pending-CA-Certificates contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f9540 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f9440 + 1.2.840.113556.1.4.693 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f93c0 + pendingCACertificates contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32f9340 + Pending-CA-Certificates contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f92b0 + struct dsdb_attribute contains 347 bytes in 8 blocks (ref 0) d=(nil) 0x32f8cc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f90b0 + Pek-List contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f9030 + Pek-List contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f8fb0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f8f30 + 1.2.840.113556.1.4.865 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f8eb0 + pekList contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f8e30 + Pek-List contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f8a90 + struct dsdb_attribute contains 405 bytes in 8 blocks (ref 0) d=(nil) 0x32f8710 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f8c30 + Pek-Key-Change-Interval contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f8ba0 + Pek-Key-Change-Interval contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f8b10 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f8a10 + 1.2.840.113556.1.4.866 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f8990 + pekKeyChangeInterval contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32f8910 + Pek-Key-Change-Interval contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f8880 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x32f8290 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f8680 + Partial-Attribute-Set contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32f8600 + Partial-Attribute-Set contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32f8580 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f8500 + 1.2.840.113556.1.4.640 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f8480 + partialAttributeSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32f8400 + Partial-Attribute-Set contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32f8060 + struct dsdb_attribute contains 437 bytes in 8 blocks (ref 0) d=(nil) 0x32f7cd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f8200 + Partial-Attribute-Deletion-List contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x32f8170 + Partial-Attribute-Deletion-List contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x32f80e0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f7fe0 + 1.2.840.113556.1.4.663 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f7f60 + partialAttributeDeletionList contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32f7ed0 + Partial-Attribute-Deletion-List contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x32f7e40 + struct dsdb_attribute contains 360 bytes in 8 blocks (ref 0) d=(nil) 0x32f7840 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f7c40 + Parent-GUID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32f7bc0 + Parent-GUID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32f7b40 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f7ac0 + 1.2.840.113556.1.4.1224 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f7a30 + parentGUID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32f79b0 + Parent-GUID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32f7610 + struct dsdb_attribute contains 421 bytes in 8 blocks (ref 0) d=(nil) 0x32f7280 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f77b0 + Parent-CA-Certificate-Chain contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32f7720 + Parent-CA-Certificate-Chain contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32f7690 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f7590 + 1.2.840.113556.1.4.685 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f7510 + parentCACertificateChain contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f7480 + Parent-CA-Certificate-Chain contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32f73f0 + struct dsdb_attribute contains 360 bytes in 9 blocks (ref 0) d=(nil) 0x32f6d80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f71f0 + Parent-CA contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32f7170 + Parent-CA contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32f70f0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2971120 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f7070 + 1.2.840.113556.1.4.557 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f6ff0 + parentCA contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f6f70 + Parent-CA contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32f6ef0 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x32f6880 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f6cf0 + Package-Type contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32f6c70 + Package-Type contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32f6bf0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f6b70 + 1.2.840.113556.1.4.324 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f6af0 + packageType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32f6a70 + Package-Type contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32f69f0 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x32f6380 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f67f0 + Package-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32f6770 + Package-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32f66f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f6670 + 1.2.840.113556.1.4.326 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f65f0 + packageName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32f6570 + Package-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32f64f0 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x32f5e10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f62f0 + Package-Flags contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32f6270 + Package-Flags contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32f61f0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f6100 + 1.2.840.113556.1.4.327 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f6080 + packageFlags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32f6000 + Package-Flags contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32f5f80 + struct dsdb_attribute contains 331 bytes in 9 blocks (ref 0) d=(nil) 0x32f5950 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f5d80 + Owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x32f5d10 + Owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x32f5ca0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2961610 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f5c20 + 2.5.4.32 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f5ba0 + owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x32f5b30 + Owner contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x32f5ac0 + struct dsdb_attribute contains 428 bytes in 11 blocks (ref 0) d=(nil) 0x32f5330 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f58c0 + Other-Well-Known-Objects contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f5830 + Other-Well-Known-Objects contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f57a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f5730 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f56c0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x295d330 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f5640 + 1.2.840.113556.1.4.1359 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f55b0 + otherWellKnownObjects contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32f5530 + Other-Well-Known-Objects contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f54a0 + struct dsdb_attribute contains 366 bytes in 10 blocks (ref 0) d=(nil) 0x32f4db0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f50b0 + Other-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32f52b0 + Other-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32f51c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f5240 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f4bb0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f5140 + 2.16.840.1.113730.3.1.34 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f5020 + middleName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32f4fa0 + Other-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32f4f20 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x32f48c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f4d20 + Other-Mailbox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32f4ca0 + Other-Mailbox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32f4c20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f4b30 + 1.2.840.113556.1.4.651 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f4ab0 + otherMailbox contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32f4a30 + Other-Mailbox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32f4620 + struct dsdb_attribute contains 417 bytes in 10 blocks (ref 0) d=(nil) 0x32f42b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f4830 + Other-Login-Workstations contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f47a0 + Other-Login-Workstations contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f4710 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f46a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f45b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f4530 + 1.2.840.113556.1.4.91 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32f44b0 + otherLoginWorkstations contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f4010 + Other-Login-Workstations contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f4420 + struct dsdb_attribute contains 433 bytes in 10 blocks (ref 0) d=(nil) 0x32f3c10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f4220 + Original-Display-Table-MSDOS contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32f4190 + Original-Display-Table-MSDOS contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32f4100 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f4090 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f3fa0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f3f20 + 1.2.840.113556.1.2.214 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f3ea0 + originalDisplayTableMSDOS contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32f3e10 + Original-Display-Table-MSDOS contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32f3d80 + struct dsdb_attribute contains 410 bytes in 10 blocks (ref 0) d=(nil) 0x32f3630 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f3b80 + Original-Display-Table contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f3b00 + Original-Display-Table contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f3a10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f3a90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f39a0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f3920 + 1.2.840.113556.1.2.445 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f38a0 + originalDisplayTable contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32f3820 + Original-Display-Table contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f37a0 + struct dsdb_attribute contains 362 bytes in 10 blocks (ref 0) d=(nil) 0x32f30e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f35a0 + Organization-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32f3520 + Organization-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32f3430 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f34b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f33c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f3340 + 2.5.4.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f32c0 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x32f3250 + Organization-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32f2e40 + struct dsdb_attribute contains 384 bytes in 10 blocks (ref 0) d=(nil) 0x32f2a60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f3050 + Organizational-Unit-Name contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f2fc0 + Organizational-Unit-Name contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f2f30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f2ec0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f2dd0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f2d50 + 2.5.4.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f2cd0 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x32f2c60 + Organizational-Unit-Name contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f2bd0 + struct dsdb_attribute contains 408 bytes in 10 blocks (ref 0) d=(nil) 0x32f24e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f27e0 + organizationalStatus contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32f29e0 + organizationalStatus contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32f28f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32f2970 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32efa40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f2870 + 0.9.2342.19200300.100.1.45 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32f2750 + organizationalStatus contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32f26d0 + organizationalStatus contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32f2650 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x32f1fe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f2450 + Options-Location contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32f23d0 + Options-Location contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32f2350 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f22d0 + 1.2.840.113556.1.4.713 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f2250 + optionsLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32f21d0 + Options-Location contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32f2150 + struct dsdb_attribute contains 343 bytes in 8 blocks (ref 0) d=(nil) 0x32f1ae0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f1f50 + Options contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f1ed0 + Options contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f1e50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f1dd0 + 1.2.840.113556.1.4.307 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f1d50 + options contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f1cd0 + Options contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f1c50 + struct dsdb_attribute contains 387 bytes in 8 blocks (ref 0) d=(nil) 0x32f15e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f1a50 + Option-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32f19d0 + Option-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32f1950 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f18d0 + 1.2.840.113556.1.4.712 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f1850 + optionDescription contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32f17d0 + Option-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32f1750 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x32f1160 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f1550 + Operator-Count contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32f14d0 + Operator-Count contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32f1450 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32f13d0 + 1.2.840.113556.1.4.144 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f1350 + operatorCount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32f12d0 + Operator-Count contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32f0f30 + struct dsdb_attribute contains 410 bytes in 8 blocks (ref 0) d=(nil) 0x32f0c30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f10d0 + Operating-System-Version contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f1040 + Operating-System-Version contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f0fb0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f0eb0 + 1.2.840.113556.1.4.364 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f0e30 + operatingSystemVersion contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f0a00 + Operating-System-Version contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32f0da0 + struct dsdb_attribute contains 429 bytes in 8 blocks (ref 0) d=(nil) 0x32f06f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f0ba0 + Operating-System-Service-Pack contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32f0b10 + Operating-System-Service-Pack contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32f0a80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f0980 + 1.2.840.113556.1.4.365 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f04c0 + operatingSystemServicePack contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32f08f0 + Operating-System-Service-Pack contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32f0860 + struct dsdb_attribute contains 406 bytes in 8 blocks (ref 0) d=(nil) 0x32f0140 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f0660 + Operating-System-Hotfix contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f05d0 + Operating-System-Hotfix contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f0540 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32f0440 + 1.2.840.113556.1.4.415 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32f03c0 + operatingSystemHotfix contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32f0340 + Operating-System-Hotfix contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f02b0 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x32efc40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32f00b0 + Operating-System contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32f0030 + Operating-System contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32effb0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32eff30 + 1.2.840.113556.1.4.363 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32efeb0 + operatingSystem contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32efe30 + Operating-System contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32efdb0 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x32ef6d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32efbb0 + OncRpcNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32efb30 + OncRpcNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32efab0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ef9c0 + 1.3.6.1.1.1.1.18 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32ef940 + oncRpcNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32ef8c0 + OncRpcNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32ef840 + struct dsdb_attribute contains 374 bytes in 10 blocks (ref 0) d=(nil) 0x32ef0f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ef640 + OMT-Indx-Guid contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32ef5c0 + OMT-Indx-Guid contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32ef4d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ef550 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ef460 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ef3e0 + 1.2.840.113556.1.4.333 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ef360 + oMTIndxGuid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32ef2e0 + OMT-Indx-Guid contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32ef260 + struct dsdb_attribute contains 355 bytes in 10 blocks (ref 0) d=(nil) 0x32eeb80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ef060 + OMT-Guid contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32eefe0 + OMT-Guid contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32eeef0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32eef70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ee480 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32eee70 + 1.2.840.113556.1.4.505 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32eedf0 + oMTGuid contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32eed70 + OMT-Guid contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32eecf0 + struct dsdb_attribute contains 350 bytes in 8 blocks (ref 0) d=(nil) 0x32ee680 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32eeaf0 + OM-Syntax contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32eea70 + OM-Syntax contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32ee9f0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ee970 + 1.2.840.113556.1.2.231 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ee8f0 + oMSyntax contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ee870 + OM-Syntax contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32ee7f0 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x32ee110 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ee5f0 + OM-Object-Class contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32ee570 + OM-Object-Class contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32ee4f0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ee400 + 1.2.840.113556.1.2.218 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ee380 + oMObjectClass contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32ee300 + OM-Object-Class contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32ee280 + struct dsdb_attribute contains 383 bytes in 10 blocks (ref 0) d=(nil) 0x32edba0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ee080 + OEM-Information contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32ee000 + OEM-Information contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32edf10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32edf90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ed9a0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ede90 + 1.2.840.113556.1.4.151 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ede10 + oEMInformation contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32edd90 + OEM-Information contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32edd10 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x32ed630 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32edb10 + Object-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32eda90 + Object-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32eda10 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ed920 + 1.2.840.113556.1.2.76 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ed8a0 + objectVersion contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32ed820 + Object-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32ed7a0 + struct dsdb_attribute contains 363 bytes in 10 blocks (ref 0) d=(nil) 0x32ed050 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ed5a0 + Object-Sid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32ed520 + Object-Sid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32ed430 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ed4b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ed3c0 + 2.5.5.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ed340 + 1.2.840.113556.1.4.146 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ed2c0 + objectSid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32ed240 + Object-Sid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32ed1c0 + struct dsdb_attribute contains 365 bytes in 10 blocks (ref 0) d=(nil) 0x32ecae0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ecfc0 + Object-Guid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32ecf40 + Object-Guid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32ece50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32eced0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ec3e0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ecdd0 + 1.2.840.113556.1.4.2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32ecd50 + objectGUID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32eccd0 + Object-Guid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32ecc50 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x32ec5e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32eca50 + Object-Count contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32ec9d0 + Object-Count contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32ec950 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ec8d0 + 1.2.840.113556.1.4.506 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ec850 + objectCount contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32ec7d0 + Object-Count contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32ec750 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x32ec070 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ec550 + Object-Classes contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32ec4d0 + Object-Classes contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32ec450 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ec360 + 2.5.21.6 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ec2e0 + objectClasses contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32ec260 + Object-Classes contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32ec1e0 + struct dsdb_attribute contains 405 bytes in 10 blocks (ref 0) d=(nil) 0x32ebb00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ebfe0 + Object-Class-Category contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ebf60 + Object-Class-Category contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ebee0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ebe70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32eaf00 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ebdf0 + 1.2.840.113556.1.2.370 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ebd70 + objectClassCategory contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32ebcf0 + Object-Class-Category contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ebc70 + struct dsdb_attribute contains 347 bytes in 8 blocks (ref 0) d=(nil) 0x32eb600 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32eba70 + Object-Class contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32eb9f0 + Object-Class contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32eb970 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32eb8f0 + 2.5.4.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32eb870 + objectClass contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32eb7f0 + Object-Class contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32eb770 + struct dsdb_attribute contains 384 bytes in 9 blocks (ref 0) d=(nil) 0x32eb100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32eb570 + Object-Category contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32eb4f0 + Object-Category contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32eb470 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x28e1850 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32eb3f0 + 1.2.840.113556.1.4.782 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32eb370 + objectCategory contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32eb2f0 + Object-Category contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32eb270 + struct dsdb_attribute contains 367 bytes in 9 blocks (ref 0) d=(nil) 0x32eab90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32eb070 + Obj-Dist-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32eaff0 + Obj-Dist-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32eaf70 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x28dd260 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32eae80 + 2.5.4.49 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32eae00 + distinguishedName contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ead80 + Obj-Dist-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32ead00 + struct dsdb_attribute contains 410 bytes in 10 blocks (ref 0) d=(nil) 0x32ea620 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32eab00 + NT-Security-Descriptor contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32eaa80 + NT-Security-Descriptor contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ea990 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32eaa10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e8b20 + 2.5.5.15 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ea910 + 1.2.840.113556.1.2.281 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ea890 + nTSecurityDescriptor contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32ea810 + NT-Security-Descriptor contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ea790 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x32ea120 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ea590 + Nt-Pwd-History contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32ea510 + Nt-Pwd-History contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32ea490 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ea410 + 1.2.840.113556.1.4.94 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ea390 + ntPwdHistory contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32ea310 + Nt-Pwd-History contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32ea290 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x32e9c20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ea090 + NT-Mixed-Domain contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32ea010 + NT-Mixed-Domain contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32e9f90 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e9f10 + 1.2.840.113556.1.4.357 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e9e90 + nTMixedDomain contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32e9e10 + NT-Mixed-Domain contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32e9d90 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x32e9720 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e9b90 + NT-Group-Members contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e9b10 + NT-Group-Members contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e9a90 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e9a10 + 1.2.840.113556.1.4.89 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e9990 + nTGroupMembers contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e9910 + NT-Group-Members contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e9890 + struct dsdb_attribute contains 392 bytes in 9 blocks (ref 0) d=(nil) 0x32e9220 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e9690 + Notification-List contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32e9610 + Notification-List contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32e9590 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x28c8c10 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e9510 + 1.2.840.113556.1.4.303 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e9490 + notificationList contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e9410 + Notification-List contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32e9390 + struct dsdb_attribute contains 410 bytes in 9 blocks (ref 0) d=(nil) 0x32e8d20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e9190 + Non-Security-Member-BL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e9110 + Non-Security-Member-BL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e9090 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x28c4c90 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e9010 + 1.2.840.113556.1.4.531 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e8f90 + nonSecurityMemberBL contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32e8f10 + Non-Security-Member-BL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e8e90 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x32e87b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e8c90 + Non-Security-Member contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32e8c10 + Non-Security-Member contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32e8b90 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x28c0ae0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e8aa0 + 1.2.840.113556.1.4.530 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e8a20 + nonSecurityMember contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32e89a0 + Non-Security-Member contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32e8920 + struct dsdb_attribute contains 381 bytes in 9 blocks (ref 0) d=(nil) 0x32e8240 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e8720 + NisNetgroupTriple contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32e86a0 + NisNetgroupTriple contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32e8620 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e85b0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e8530 + 1.3.6.1.1.1.1.14 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e84b0 + nisNetgroupTriple contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32e8430 + NisNetgroupTriple contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32e83b0 + struct dsdb_attribute contains 353 bytes in 9 blocks (ref 0) d=(nil) 0x32e7cd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e81b0 + NisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32e8130 + NisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32e80b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e8040 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e7fc0 + 1.3.6.1.1.1.1.26 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e7f40 + nisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32e7ec0 + NisMapName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32e7e40 + struct dsdb_attribute contains 357 bytes in 9 blocks (ref 0) d=(nil) 0x32e77d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e7c40 + NisMapEntry contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32e7bc0 + NisMapEntry contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32e7b40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e70d0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e7ac0 + 1.3.6.1.1.1.1.27 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e7a40 + nisMapEntry contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32e79c0 + NisMapEntry contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32e7940 + struct dsdb_attribute contains 345 bytes in 8 blocks (ref 0) d=(nil) 0x32e72d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e7740 + Next-Rid contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e76c0 + Next-Rid contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e7640 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e75c0 + 1.2.840.113556.1.4.88 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e7540 + nextRid contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e74c0 + Next-Rid contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e7440 + struct dsdb_attribute contains 387 bytes in 9 blocks (ref 0) d=(nil) 0x32e6d60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e7240 + Next-Level-Store contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e71c0 + Next-Level-Store contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e7140 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x28acdb0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e7050 + 1.2.840.113556.1.4.214 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e6fd0 + nextLevelStore contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e6f50 + Next-Level-Store contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e6ed0 + struct dsdb_attribute contains 382 bytes in 10 blocks (ref 0) d=(nil) 0x32e67f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e6cd0 + Network-Address contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32e6c50 + Network-Address contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32e6bd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e6b60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e28b0 + 2.5.5.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e6ae0 + 1.2.840.113556.1.2.459 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e6a60 + networkAddress contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e69e0 + Network-Address contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32e6960 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x32e62f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e6760 + netboot-Tools contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32e66e0 + netboot-Tools contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32e6660 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e65e0 + 1.2.840.113556.1.4.858 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e6560 + netbootTools contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32e64e0 + netboot-Tools contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32e6460 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x32e5de0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e6260 + Netboot-SIF-File contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e61e0 + Netboot-SIF-File contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e6160 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e60e0 + 1.2.840.113556.1.4.1240 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e6050 + netbootSIFFile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e5fd0 + Netboot-SIF-File contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32e5f50 + struct dsdb_attribute contains 380 bytes in 9 blocks (ref 0) d=(nil) 0x32e58e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e5d50 + netboot-Server contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e5cd0 + netboot-Server contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e5c50 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x289cf10 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e5bd0 + 1.2.840.113556.1.4.860 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e5b50 + netbootServer contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32e5ad0 + netboot-Server contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e5a50 + struct dsdb_attribute contains 379 bytes in 9 blocks (ref 0) d=(nil) 0x32e53e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e5850 + netboot-SCP-BL contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e57d0 + netboot-SCP-BL contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e5750 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2898d80 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e56d0 + 1.2.840.113556.1.4.864 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e5650 + netbootSCPBL contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32e55d0 + netboot-SCP-BL contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32e5550 + struct dsdb_attribute contains 410 bytes in 9 blocks (ref 0) d=(nil) 0x32e4f60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e5350 + netboot-New-Machine-OU contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e52d0 + netboot-New-Machine-OU contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e5250 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2894d50 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e51d0 + 1.2.840.113556.1.4.856 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e5150 + netbootNewMachineOU contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32e50d0 + netboot-New-Machine-OU contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e4d30 + struct dsdb_attribute contains 444 bytes in 8 blocks (ref 0) d=(nil) 0x32e4a20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e4ed0 + netboot-New-Machine-Naming-Policy contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32e4e40 + netboot-New-Machine-Naming-Policy contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32e4db0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e4cb0 + 1.2.840.113556.1.4.855 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e47f0 + netbootNewMachineNamingPolicy contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32e4c20 + netboot-New-Machine-Naming-Policy contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32e4b90 + struct dsdb_attribute contains 410 bytes in 8 blocks (ref 0) d=(nil) 0x32e4460 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e4990 + Netboot-Mirror-Data-File contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32e4900 + Netboot-Mirror-Data-File contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32e4870 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e4770 + 1.2.840.113556.1.4.1241 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e46e0 + netbootMirrorDataFile contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e4660 + Netboot-Mirror-Data-File contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32e45d0 + struct dsdb_attribute contains 389 bytes in 8 blocks (ref 0) d=(nil) 0x32e3fe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e43d0 + netboot-Max-Clients contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32e4350 + netboot-Max-Clients contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32e42d0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e4250 + 1.2.840.113556.1.4.851 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e41d0 + netbootMaxClients contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32e4150 + netboot-Max-Clients contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32e3db0 + struct dsdb_attribute contains 413 bytes in 8 blocks (ref 0) d=(nil) 0x32e3ab0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e3f50 + Netboot-Machine-File-Path contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32e3ec0 + Netboot-Machine-File-Path contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32e3e30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e3d30 + 1.2.840.113556.1.4.361 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e3cb0 + netbootMachineFilePath contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e3880 + Netboot-Machine-File-Path contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32e3c20 + struct dsdb_attribute contains 433 bytes in 8 blocks (ref 0) d=(nil) 0x32e34f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e3a20 + netboot-Locally-Installed-OSes contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32e3990 + netboot-Locally-Installed-OSes contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32e3900 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e3800 + 1.2.840.113556.1.4.859 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e3780 + netbootLocallyInstalledOSes contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32e36f0 + netboot-Locally-Installed-OSes contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32e3660 + struct dsdb_attribute contains 397 bytes in 8 blocks (ref 0) d=(nil) 0x32e3070 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e3460 + netboot-Limit-Clients contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e33e0 + netboot-Limit-Clients contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e3360 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e32e0 + 1.2.840.113556.1.4.850 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e3260 + netbootLimitClients contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32e31e0 + netboot-Limit-Clients contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e2e40 + struct dsdb_attribute contains 418 bytes in 8 blocks (ref 0) d=(nil) 0x32e2ab0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e2fe0 + netboot-IntelliMirror-OSes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32e2f50 + netboot-IntelliMirror-OSes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32e2ec0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e2dc0 + 1.2.840.113556.1.4.857 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e2d40 + netbootIntelliMirrorOSes contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32e2cb0 + netboot-IntelliMirror-OSes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32e2c20 + struct dsdb_attribute contains 403 bytes in 8 blocks (ref 0) d=(nil) 0x32e2540 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e2a20 + Netboot-Initialization contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e29a0 + Netboot-Initialization contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e2920 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e2830 + 1.2.840.113556.1.4.358 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e27b0 + netbootInitialization contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e2730 + Netboot-Initialization contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e26b0 + struct dsdb_attribute contains 371 bytes in 10 blocks (ref 0) d=(nil) 0x32e1fd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e24b0 + Netboot-GUID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32e2430 + Netboot-GUID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32e2340 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e23c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e0e00 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e22c0 + 1.2.840.113556.1.4.359 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e2240 + netbootGUID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32e21c0 + Netboot-GUID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32e2140 + struct dsdb_attribute contains 424 bytes in 8 blocks (ref 0) d=(nil) 0x32e1a90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e1f40 + netboot-Current-Client-Count contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32e1eb0 + netboot-Current-Client-Count contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32e1e20 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e1da0 + 1.2.840.113556.1.4.852 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e1d20 + netbootCurrentClientCount contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32e1c90 + netboot-Current-Client-Count contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32e1c00 + struct dsdb_attribute contains 405 bytes in 8 blocks (ref 0) d=(nil) 0x32e1560 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e1a00 + netboot-Answer-Requests contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e1970 + netboot-Answer-Requests contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e18e0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e1860 + 1.2.840.113556.1.4.853 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e17e0 + netbootAnswerRequests contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e1760 + netboot-Answer-Requests contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e16d0 + struct dsdb_attribute contains 443 bytes in 8 blocks (ref 0) d=(nil) 0x32e1020 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e14d0 + netboot-Answer-Only-Valid-Clients contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32e1440 + netboot-Answer-Only-Valid-Clients contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32e13b0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e1330 + 1.2.840.113556.1.4.854 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e12b0 + netbootAnswerOnlyValidClients contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32e1220 + netboot-Answer-Only-Valid-Clients contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32e1190 + struct dsdb_attribute contains 412 bytes in 8 blocks (ref 0) d=(nil) 0x32e0a80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e0f90 + netboot-Allow-New-Clients contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32e0f00 + netboot-Allow-New-Clients contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32e0e70 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e0d80 + 1.2.840.113556.1.4.849 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e0d00 + netbootAllowNewClients contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32e0c80 + netboot-Allow-New-Clients contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32e0bf0 + struct dsdb_attribute contains 370 bytes in 10 blocks (ref 0) d=(nil) 0x32e0510 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e09f0 + NETBIOS-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32e0970 + NETBIOS-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32e0880 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e0900 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32e0310 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32e0800 + 1.2.840.113556.1.4.87 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e0780 + nETBIOSName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32e0700 + NETBIOS-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32e0680 + struct dsdb_attribute contains 351 bytes in 9 blocks (ref 0) d=(nil) 0x32e0020 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32e0480 + NC-Name contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e0400 + NC-Name contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e0380 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2859790 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e0290 + 1.2.840.113556.1.2.16 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32e0210 + nCName contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x32d3850 + NC-Name contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32e0190 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x32dfb20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dff90 + Name-Service-Flags contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32dff10 + Name-Service-Flags contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32dfe90 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32dfe10 + 1.2.840.113556.1.4.753 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32dfd90 + nameServiceFlags contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32dfd10 + Name-Service-Flags contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32dfc90 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x32df620 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dfa90 + Must-Contain contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32dfa10 + Must-Contain contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32df990 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32df910 + 1.2.840.113556.1.2.24 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32df890 + mustContain contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32df810 + Must-Contain contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32df790 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x32df110 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32df590 + ms-WMI-TargetType contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32df510 + ms-WMI-TargetType contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32df490 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32df410 + 1.2.840.113556.1.4.1649 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32df380 + msWMI-TargetType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32df300 + ms-WMI-TargetType contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32df280 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x32dec00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32df080 + ms-WMI-TargetPath contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32df000 + ms-WMI-TargetPath contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32def80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32def00 + 1.2.840.113556.1.4.1648 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dee70 + msWMI-TargetPath contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32dedf0 + ms-WMI-TargetPath contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ded70 + struct dsdb_attribute contains 392 bytes in 8 blocks (ref 0) d=(nil) 0x32de6f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32deb70 + ms-WMI-TargetObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32deaf0 + ms-WMI-TargetObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32dea70 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32de9f0 + 1.2.840.113556.1.4.1647 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32de960 + msWMI-TargetObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32de8e0 + ms-WMI-TargetObject contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32de860 + struct dsdb_attribute contains 404 bytes in 8 blocks (ref 0) d=(nil) 0x32de1e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32de660 + ms-WMI-TargetNameSpace contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32de5e0 + ms-WMI-TargetNameSpace contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32de560 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32de4e0 + 1.2.840.113556.1.4.1646 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32de450 + msWMI-TargetNameSpace contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32de3d0 + ms-WMI-TargetNameSpace contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32de350 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x32ddd50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32de150 + ms-WMI-TargetClass contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32de0d0 + ms-WMI-TargetClass contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32de050 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ddfd0 + 1.2.840.113556.1.4.1645 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ddf40 + msWMI-TargetClass contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ddec0 + ms-WMI-TargetClass contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32ddb20 + struct dsdb_attribute contains 412 bytes in 8 blocks (ref 0) d=(nil) 0x32dd780 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ddcc0 + ms-WMI-stringValidValues contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ddc30 + ms-WMI-stringValidValues contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ddba0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ddaa0 + 1.2.840.113556.1.4.1637 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dda10 + msWMI-StringValidValues contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dd980 + ms-WMI-stringValidValues contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32dd8f0 + struct dsdb_attribute contains 396 bytes in 8 blocks (ref 0) d=(nil) 0x32dd2f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dd6f0 + ms-WMI-stringDefault contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32dd670 + ms-WMI-stringDefault contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32dd5f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32dd570 + 1.2.840.113556.1.4.1636 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dd4e0 + msWMI-StringDefault contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32dd460 + ms-WMI-stringDefault contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32dd0c0 + struct dsdb_attribute contains 416 bytes in 8 blocks (ref 0) d=(nil) 0x32dcd20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dd260 + ms-WMI-SourceOrganization contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32dd1d0 + ms-WMI-SourceOrganization contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32dd140 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32dd040 + 1.2.840.113556.1.4.1644 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dcfb0 + msWMI-SourceOrganization contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32dcf20 + ms-WMI-SourceOrganization contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32dce90 + struct dsdb_attribute contains 380 bytes in 8 blocks (ref 0) d=(nil) 0x32dc810 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dcc90 + ms-WMI-ScopeGuid contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32dcc10 + ms-WMI-ScopeGuid contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32dcb90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32dcb10 + 1.2.840.113556.1.4.1686 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dca80 + msWMI-ScopeGuid contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32dca00 + ms-WMI-ScopeGuid contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32dc980 + struct dsdb_attribute contains 396 bytes in 8 blocks (ref 0) d=(nil) 0x32dc300 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dc780 + ms-WMI-QueryLanguage contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32dc700 + ms-WMI-QueryLanguage contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32dc680 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32dc600 + 1.2.840.113556.1.4.1643 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dc570 + msWMI-QueryLanguage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32dc4f0 + ms-WMI-QueryLanguage contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32dc470 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x32dbdf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dc270 + ms-WMI-Query contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32dc1f0 + ms-WMI-Query contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32dc170 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32dc0f0 + 1.2.840.113556.1.4.1642 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dc060 + msWMI-Query contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32dbfe0 + ms-WMI-Query contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32dbf60 + struct dsdb_attribute contains 392 bytes in 8 blocks (ref 0) d=(nil) 0x32db8e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dbd60 + ms-WMI-PropertyName contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32dbce0 + ms-WMI-PropertyName contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32dbc60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32dbbe0 + 1.2.840.113556.1.4.1641 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dbb50 + msWMI-PropertyName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32dbad0 + ms-WMI-PropertyName contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32dba50 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x32db3d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32db850 + ms-WMI-Parm4 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32db7d0 + ms-WMI-Parm4 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32db750 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32db6d0 + 1.2.840.113556.1.4.1685 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32db640 + msWMI-Parm4 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32db5c0 + ms-WMI-Parm4 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32db540 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x32daec0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32db340 + ms-WMI-Parm3 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32db2c0 + ms-WMI-Parm3 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32db240 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32db1c0 + 1.2.840.113556.1.4.1684 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32db130 + msWMI-Parm3 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32db0b0 + ms-WMI-Parm3 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32db030 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x32da9b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dae30 + ms-WMI-Parm2 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32dadb0 + ms-WMI-Parm2 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32dad30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32dacb0 + 1.2.840.113556.1.4.1683 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32dac20 + msWMI-Parm2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32daba0 + ms-WMI-Parm2 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32dab20 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x32da4a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32da920 + ms-WMI-Parm1 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32da8a0 + ms-WMI-Parm1 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32da820 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32da7a0 + 1.2.840.113556.1.4.1682 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32da710 + msWMI-Parm1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32da690 + ms-WMI-Parm1 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32da610 + struct dsdb_attribute contains 404 bytes in 8 blocks (ref 0) d=(nil) 0x32d9f90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32da410 + ms-WMI-NormalizedClass contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32da390 + ms-WMI-NormalizedClass contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32da310 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32da290 + 1.2.840.113556.1.4.1640 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32da200 + msWMI-NormalizedClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32da180 + ms-WMI-NormalizedClass contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32da100 + struct dsdb_attribute contains 360 bytes in 8 blocks (ref 0) d=(nil) 0x32d9a80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d9f00 + ms-WMI-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32d9e80 + ms-WMI-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32d9e00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d9d80 + 1.2.840.113556.1.4.1639 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d9cf0 + msWMI-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32d9c70 + ms-WMI-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32d9bf0 + struct dsdb_attribute contains 356 bytes in 8 blocks (ref 0) d=(nil) 0x32d9570 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d99f0 + ms-WMI-Mof contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32d9970 + ms-WMI-Mof contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32d98f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d9870 + 1.2.840.113556.1.4.1638 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d97e0 + msWMI-Mof contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32d9760 + ms-WMI-Mof contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32d96e0 + struct dsdb_attribute contains 399 bytes in 8 blocks (ref 0) d=(nil) 0x32d9060 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d94e0 + ms-WMI-intValidValues contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32d9460 + ms-WMI-intValidValues contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32d93e0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d9360 + 1.2.840.113556.1.4.1631 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d92d0 + msWMI-IntValidValues contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32d9250 + ms-WMI-intValidValues contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32d91d0 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x32d8b50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d8fd0 + ms-WMI-intMin contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d8f50 + ms-WMI-intMin contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d8ed0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d8e50 + 1.2.840.113556.1.4.1630 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d8dc0 + msWMI-IntMin contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32d8d40 + ms-WMI-intMin contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d8cc0 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x32d8640 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d8ac0 + ms-WMI-intMax contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d8a40 + ms-WMI-intMax contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d89c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d8940 + 1.2.840.113556.1.4.1629 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d88b0 + msWMI-IntMax contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32d8830 + ms-WMI-intMax contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d87b0 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x32d8130 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d85b0 + ms-WMI-intFlags4 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d8530 + ms-WMI-intFlags4 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d84b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d8430 + 1.2.840.113556.1.4.1681 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d83a0 + msWMI-intFlags4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32d8320 + ms-WMI-intFlags4 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d82a0 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x32d7c20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d80a0 + ms-WMI-intFlags3 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d8020 + ms-WMI-intFlags3 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d7fa0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d7f20 + 1.2.840.113556.1.4.1680 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d7e90 + msWMI-intFlags3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32d7e10 + ms-WMI-intFlags3 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d7d90 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x32d7710 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d7b90 + ms-WMI-intFlags2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d7b10 + ms-WMI-intFlags2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d7a90 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d7a10 + 1.2.840.113556.1.4.1679 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d7980 + msWMI-intFlags2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32d7900 + ms-WMI-intFlags2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d7880 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x32d7200 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d7680 + ms-WMI-intFlags1 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d7600 + ms-WMI-intFlags1 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d7580 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d7500 + 1.2.840.113556.1.4.1678 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d7470 + msWMI-intFlags1 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32d73f0 + ms-WMI-intFlags1 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d7370 + struct dsdb_attribute contains 383 bytes in 8 blocks (ref 0) d=(nil) 0x32d6cf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d7170 + ms-WMI-intDefault contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32d70f0 + ms-WMI-intDefault contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32d7070 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d6ff0 + 1.2.840.113556.1.4.1628 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d6f60 + msWMI-IntDefault contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d6ee0 + ms-WMI-intDefault contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32d6e60 + struct dsdb_attribute contains 404 bytes in 8 blocks (ref 0) d=(nil) 0x32d67e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d6c60 + ms-WMI-int8ValidValues contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32d6be0 + ms-WMI-int8ValidValues contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32d6b60 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d6ae0 + 1.2.840.113556.1.4.1635 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d6a50 + msWMI-Int8ValidValues contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32d69d0 + ms-WMI-int8ValidValues contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32d6950 + struct dsdb_attribute contains 372 bytes in 8 blocks (ref 0) d=(nil) 0x32d62d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d6750 + ms-WMI-int8Min contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32d66d0 + ms-WMI-int8Min contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32d6650 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d65d0 + 1.2.840.113556.1.4.1634 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d6540 + msWMI-Int8Min contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d64c0 + ms-WMI-int8Min contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32d6440 + struct dsdb_attribute contains 372 bytes in 8 blocks (ref 0) d=(nil) 0x32d5dc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d6240 + ms-WMI-int8Max contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32d61c0 + ms-WMI-int8Max contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32d6140 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d60c0 + 1.2.840.113556.1.4.1633 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d6030 + msWMI-Int8Max contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d5fb0 + ms-WMI-int8Max contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32d5f30 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x32d58b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d5d30 + ms-WMI-int8Default contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32d5cb0 + ms-WMI-int8Default contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32d5c30 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d5bb0 + 1.2.840.113556.1.4.1632 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d5b20 + msWMI-Int8Default contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32d5aa0 + ms-WMI-int8Default contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32d5a20 + struct dsdb_attribute contains 352 bytes in 8 blocks (ref 0) d=(nil) 0x32d53a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d5820 + ms-WMI-ID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32d57a0 + ms-WMI-ID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32d5720 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d56a0 + 1.2.840.113556.1.4.1627 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d5610 + msWMI-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d5590 + ms-WMI-ID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32d5510 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x32d4e90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d5310 + ms-WMI-Genus contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32d5290 + ms-WMI-Genus contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32d5210 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d5190 + 1.2.840.113556.1.4.1677 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d5100 + msWMI-Genus contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32d5080 + ms-WMI-Genus contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32d5000 + struct dsdb_attribute contains 392 bytes in 8 blocks (ref 0) d=(nil) 0x32d4980 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d4e00 + ms-WMI-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32d4d80 + ms-WMI-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32d4d00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d4c80 + 1.2.840.113556.1.4.1626 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d4bf0 + msWMI-CreationDate contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32d4b70 + ms-WMI-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32d4af0 + struct dsdb_attribute contains 404 bytes in 8 blocks (ref 0) d=(nil) 0x32d4470 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d48f0 + ms-WMI-ClassDefinition contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32d4870 + ms-WMI-ClassDefinition contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32d47f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d4770 + 1.2.840.113556.1.4.1625 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d46e0 + msWMI-ClassDefinition contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32d4660 + ms-WMI-ClassDefinition contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32d45e0 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x32d3f60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d43e0 + ms-WMI-Class contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32d4360 + ms-WMI-Class contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32d42e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d4260 + 1.2.840.113556.1.4.1676 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d41d0 + msWMI-Class contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32d4150 + ms-WMI-Class contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32d40d0 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x32d3a50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d3ed0 + ms-WMI-ChangeDate contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32d3e50 + ms-WMI-ChangeDate contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32d3dd0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d3d50 + 1.2.840.113556.1.4.1624 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d3cc0 + msWMI-ChangeDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d3c40 + ms-WMI-ChangeDate contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32d3bc0 + struct dsdb_attribute contains 368 bytes in 8 blocks (ref 0) d=(nil) 0x32d34d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d39c0 + ms-WMI-Author contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d3940 + ms-WMI-Author contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d38c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d37d0 + 1.2.840.113556.1.4.1623 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d3740 + msWMI-Author contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32d36c0 + ms-WMI-Author contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32d3640 + struct dsdb_attribute contains 402 bytes in 10 blocks (ref 0) d=(nil) 0x32d2f50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d3440 + ms-TS-Work-Directory contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32d33c0 + ms-TS-Work-Directory contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32d32d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32d3350 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32d1da0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d3250 + 1.2.840.113556.1.4.1989 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d31c0 + msTSWorkDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32d3140 + ms-TS-Work-Directory contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32d30c0 + struct dsdb_attribute contains 419 bytes in 9 blocks (ref 0) d=(nil) 0x32d2a10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d2ec0 + ms-TS-Secondary-Desktops contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32d2e30 + ms-TS-Secondary-Desktops contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32d2da0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x27b5bb0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d2d20 + 1.2.840.113556.1.4.2075 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d2c90 + msTSSecondaryDesktops contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32d2c10 + ms-TS-Secondary-Desktops contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32d2b80 + struct dsdb_attribute contains 426 bytes in 9 blocks (ref 0) d=(nil) 0x32d24d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d2980 + ms-TS-Secondary-Desktop-BL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32d28f0 + ms-TS-Secondary-Desktop-BL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32d2860 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x27b1940 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d27e0 + 1.2.840.113556.1.4.2078 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d2750 + msTSSecondaryDesktopBL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32d26d0 + ms-TS-Secondary-Desktop-BL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32d2640 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x32d1fc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d2440 + ms-TS-Remote-Control contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32d23c0 + ms-TS-Remote-Control contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32d2340 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d22c0 + 1.2.840.113556.1.4.1980 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d2230 + msTSRemoteControl contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32d21b0 + ms-TS-Remote-Control contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32d2130 + struct dsdb_attribute contains 413 bytes in 8 blocks (ref 0) d=(nil) 0x32d1a10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d1f30 + ms-TS-Reconnection-Action contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32d1ea0 + ms-TS-Reconnection-Action contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32d1e10 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d1d20 + 1.2.840.113556.1.4.1984 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d1c90 + msTSReconnectionAction contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32d1c10 + ms-TS-Reconnection-Action contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32d1b80 + struct dsdb_attribute contains 387 bytes in 10 blocks (ref 0) d=(nil) 0x32d1420 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d1980 + MS-TS-Property02 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d1900 + MS-TS-Property02 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d1810 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32d1890 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32d17a0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d1720 + 1.2.840.113556.1.4.1992 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d1690 + msTSProperty02 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32d1610 + MS-TS-Property02 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d1590 + struct dsdb_attribute contains 387 bytes in 10 blocks (ref 0) d=(nil) 0x32d0e30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d1390 + MS-TS-Property01 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d1310 + MS-TS-Property01 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d1220 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32d12a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32d11b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d1130 + 1.2.840.113556.1.4.1991 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d10a0 + msTSProperty01 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32d1020 + MS-TS-Property01 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32d0fa0 + struct dsdb_attribute contains 394 bytes in 10 blocks (ref 0) d=(nil) 0x32d08b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d0da0 + ms-TS-Profile-Path contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32d0d20 + ms-TS-Profile-Path contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32d0c30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32d0cb0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32cf1e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32d0bb0 + 1.2.840.113556.1.4.1976 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d0b20 + msTSProfilePath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32d0aa0 + ms-TS-Profile-Path contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32d0a20 + struct dsdb_attribute contains 418 bytes in 9 blocks (ref 0) d=(nil) 0x32d0370 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d0820 + ms-TS-Primary-Desktop-BL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32d0790 + ms-TS-Primary-Desktop-BL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32d0700 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2799590 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d0680 + 1.2.840.113556.1.4.2074 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d05f0 + msTSPrimaryDesktopBL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32d0570 + ms-TS-Primary-Desktop-BL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32d04e0 + struct dsdb_attribute contains 407 bytes in 9 blocks (ref 0) d=(nil) 0x32cfe60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d02e0 + ms-TS-Primary-Desktop contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32d0260 + ms-TS-Primary-Desktop contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32d01e0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2795430 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32d0160 + 1.2.840.113556.1.4.2073 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32d00d0 + msTSPrimaryDesktop contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32d0050 + ms-TS-Primary-Desktop contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cffd0 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x32cf950 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cfdd0 + ms-TS-Max-Idle-Time contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32cfd50 + ms-TS-Max-Idle-Time contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32cfcd0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32cfc50 + 1.2.840.113556.1.4.1983 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cfbc0 + msTSMaxIdleTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32cfb40 + ms-TS-Max-Idle-Time contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32cfac0 + struct dsdb_attribute contains 424 bytes in 8 blocks (ref 0) d=(nil) 0x32cf400 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cf8c0 + ms-TS-Max-Disconnection-Time contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32cf830 + ms-TS-Max-Disconnection-Time contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32cf7a0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32cf720 + 1.2.840.113556.1.4.1981 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cf690 + msTSMaxDisconnectionTime contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32cf600 + ms-TS-Max-Disconnection-Time contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32cf570 + struct dsdb_attribute contains 412 bytes in 8 blocks (ref 0) d=(nil) 0x32cee50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cf370 + ms-TS-Max-Connection-Time contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32cf2e0 + ms-TS-Max-Connection-Time contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32cf250 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32cf160 + 1.2.840.113556.1.4.1982 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cf0d0 + msTSMaxConnectionTime contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cf050 + ms-TS-Max-Connection-Time contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32cefc0 + struct dsdb_attribute contains 391 bytes in 10 blocks (ref 0) d=(nil) 0x32ce860 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cedc0 + MS-TS-ManagingLS4 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ced40 + MS-TS-ManagingLS4 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32cec50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32cecd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32cebe0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ceb60 + 1.2.840.113556.1.4.2008 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cead0 + msTSManagingLS4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32cea50 + MS-TS-ManagingLS4 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ce9d0 + struct dsdb_attribute contains 391 bytes in 10 blocks (ref 0) d=(nil) 0x32ce270 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ce7d0 + MS-TS-ManagingLS3 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ce750 + MS-TS-ManagingLS3 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ce660 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ce6e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ce5f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ce570 + 1.2.840.113556.1.4.2005 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ce4e0 + msTSManagingLS3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32ce460 + MS-TS-ManagingLS3 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ce3e0 + struct dsdb_attribute contains 391 bytes in 10 blocks (ref 0) d=(nil) 0x32cdcf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ce1e0 + MS-TS-ManagingLS2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ce160 + MS-TS-ManagingLS2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ce070 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32ce0f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32cdaf0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cdff0 + 1.2.840.113556.1.4.2002 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cdf60 + msTSManagingLS2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32cdee0 + MS-TS-ManagingLS2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32cde60 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x32cd770 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cdc60 + MS-TS-ManagingLS contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32cdbe0 + MS-TS-ManagingLS contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32cdb60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cda70 + 1.2.840.113556.1.4.1995 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cd9e0 + msTSManagingLS contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32cd960 + MS-TS-ManagingLS contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32cd8e0 + struct dsdb_attribute contains 395 bytes in 10 blocks (ref 0) d=(nil) 0x32cd180 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cd6e0 + MS-TSLS-Property02 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32cd660 + MS-TSLS-Property02 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32cd570 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32cd5f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32cd500 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cd480 + 1.2.840.113556.1.4.2010 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cd3f0 + msTSLSProperty02 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32cd370 + MS-TSLS-Property02 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32cd2f0 + struct dsdb_attribute contains 395 bytes in 10 blocks (ref 0) d=(nil) 0x32ccc00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cd0f0 + MS-TSLS-Property01 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32cd070 + MS-TSLS-Property01 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32ccf80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32cd000 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x23ec0c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ccf00 + 1.2.840.113556.1.4.2009 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cce70 + msTSLSProperty01 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32ccdf0 + MS-TSLS-Property01 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32ccd70 + struct dsdb_attribute contains 407 bytes in 10 blocks (ref 0) d=(nil) 0x32cc6f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ccb70 + MS-TS-LicenseVersion4 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ccaf0 + MS-TS-LicenseVersion4 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cca70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2b12b70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f75290 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cc9f0 + 1.2.840.113556.1.4.2007 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cc960 + msTSLicenseVersion4 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32cc8e0 + MS-TS-LicenseVersion4 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cc860 + struct dsdb_attribute contains 407 bytes in 10 blocks (ref 0) d=(nil) 0x32cc1e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cc660 + MS-TS-LicenseVersion3 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cc5e0 + MS-TS-LicenseVersion3 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cc560 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fd2290 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2c84a50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cc4e0 + 1.2.840.113556.1.4.2004 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cc450 + msTSLicenseVersion3 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32cc3d0 + MS-TS-LicenseVersion3 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cc350 + struct dsdb_attribute contains 407 bytes in 10 blocks (ref 0) d=(nil) 0x32cbcd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cc150 + MS-TS-LicenseVersion2 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cc0d0 + MS-TS-LicenseVersion2 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cc050 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3045270 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196cbe0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cbfd0 + 1.2.840.113556.1.4.2001 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cbf40 + msTSLicenseVersion2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32cbec0 + MS-TS-LicenseVersion2 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cbe40 + struct dsdb_attribute contains 395 bytes in 8 blocks (ref 0) d=(nil) 0x32cb7c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cbc40 + MS-TS-LicenseVersion contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32cbbc0 + MS-TS-LicenseVersion contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32cbb40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cbac0 + 1.2.840.113556.1.4.1994 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cba30 + msTSLicenseVersion contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32cb9b0 + MS-TS-LicenseVersion contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32cb930 + struct dsdb_attribute contains 406 bytes in 10 blocks (ref 0) d=(nil) 0x32cb2b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cb730 + ms-TS-Initial-Program contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cb6b0 + ms-TS-Initial-Program contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cb630 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ab5140 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f70d80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cb5b0 + 1.2.840.113556.1.4.1990 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cb520 + msTSInitialProgram contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32cb4a0 + ms-TS-Initial-Program contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32cb420 + struct dsdb_attribute contains 386 bytes in 10 blocks (ref 0) d=(nil) 0x32cada0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cb220 + ms-TS-Home-Drive contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32cb1a0 + ms-TS-Home-Drive contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32cb120 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x21928e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x236e5e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cb0a0 + 1.2.840.113556.1.4.1978 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cb010 + msTSHomeDrive contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32caf90 + ms-TS-Home-Drive contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32caf10 + struct dsdb_attribute contains 402 bytes in 10 blocks (ref 0) d=(nil) 0x32ca890 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cad10 + ms-TS-Home-Directory contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32cac90 + ms-TS-Home-Directory contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32cac10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x23cff40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x23e8c20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32cab90 + 1.2.840.113556.1.4.1977 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32cab00 + msTSHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32caa80 + ms-TS-Home-Directory contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32caa00 + struct dsdb_attribute contains 383 bytes in 8 blocks (ref 0) d=(nil) 0x32ca380 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ca800 + MS-TS-ExpireDate4 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ca780 + MS-TS-ExpireDate4 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ca700 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ca680 + 1.2.840.113556.1.4.2006 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ca5f0 + msTSExpireDate4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32ca570 + MS-TS-ExpireDate4 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ca4f0 + struct dsdb_attribute contains 383 bytes in 8 blocks (ref 0) d=(nil) 0x32c9e70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ca2f0 + MS-TS-ExpireDate3 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ca270 + MS-TS-ExpireDate3 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ca1f0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ca170 + 1.2.840.113556.1.4.2003 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ca0e0 + msTSExpireDate3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32ca060 + MS-TS-ExpireDate3 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c9fe0 + struct dsdb_attribute contains 383 bytes in 8 blocks (ref 0) d=(nil) 0x32c9960 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c9de0 + MS-TS-ExpireDate2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c9d60 + MS-TS-ExpireDate2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c9ce0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c9c60 + 1.2.840.113556.1.4.2000 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c9bd0 + msTSExpireDate2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32c9b50 + MS-TS-ExpireDate2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c9ad0 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x32c9450 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c98d0 + MS-TS-ExpireDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c9850 + MS-TS-ExpireDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c97d0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c9750 + 1.2.840.113556.1.4.1993 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c96c0 + msTSExpireDate contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32c9640 + MS-TS-ExpireDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c95c0 + struct dsdb_attribute contains 389 bytes in 8 blocks (ref 0) d=(nil) 0x32c8f40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c93c0 + ms-TS-Endpoint-Type contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32c9340 + ms-TS-Endpoint-Type contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32c92c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32c9240 + 1.2.840.113556.1.4.2071 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c91b0 + msTSEndpointType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c9130 + ms-TS-Endpoint-Type contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32c90b0 + struct dsdb_attribute contains 406 bytes in 10 blocks (ref 0) d=(nil) 0x32c8a30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c8eb0 + ms-TS-Endpoint-Plugin contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c8e30 + ms-TS-Endpoint-Plugin contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c8db0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x254ffd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x259f3d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c8d30 + 1.2.840.113556.1.4.2072 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c8ca0 + msTSEndpointPlugin contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32c8c20 + ms-TS-Endpoint-Plugin contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c8ba0 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x32c8520 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c89a0 + ms-TS-Endpoint-Data contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32c8920 + ms-TS-Endpoint-Data contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32c88a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fda030 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x30bfa00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c8820 + 1.2.840.113556.1.4.2070 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c8790 + msTSEndpointData contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c8710 + ms-TS-Endpoint-Data contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32c8690 + struct dsdb_attribute contains 427 bytes in 8 blocks (ref 0) d=(nil) 0x32c7fd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c8490 + ms-TS-Default-To-Main-Printer contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32c8400 + ms-TS-Default-To-Main-Printer contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32c8370 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32c82f0 + 1.2.840.113556.1.4.1988 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c8260 + msTSDefaultToMainPrinter contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32c81d0 + ms-TS-Default-To-Main-Printer contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32c8140 + struct dsdb_attribute contains 424 bytes in 8 blocks (ref 0) d=(nil) 0x32c7a80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c7f40 + ms-TS-Connect-Printer-Drives contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32c7eb0 + ms-TS-Connect-Printer-Drives contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32c7e20 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32c7da0 + 1.2.840.113556.1.4.1987 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c7d10 + msTSConnectPrinterDrives contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32c7c80 + ms-TS-Connect-Printer-Drives contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x32c7bf0 + struct dsdb_attribute contains 420 bytes in 8 blocks (ref 0) d=(nil) 0x32c7530 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c79f0 + ms-TS-Connect-Client-Drives contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32c7960 + ms-TS-Connect-Client-Drives contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32c78d0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32c7850 + 1.2.840.113556.1.4.1986 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c77c0 + msTSConnectClientDrives contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c7730 + ms-TS-Connect-Client-Drives contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32c76a0 + struct dsdb_attribute contains 432 bytes in 8 blocks (ref 0) d=(nil) 0x32c6fe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c74a0 + ms-TS-Broken-Connection-Action contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32c7410 + ms-TS-Broken-Connection-Action contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32c7380 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32c7300 + 1.2.840.113556.1.4.1985 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c7270 + msTSBrokenConnectionAction contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32c71e0 + ms-TS-Broken-Connection-Action contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32c7150 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x32c6b50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c6f50 + ms-TS-Allow-Logon contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c6ed0 + ms-TS-Allow-Logon contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c6e50 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32c6dd0 + 1.2.840.113556.1.4.1979 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c6d40 + msTSAllowLogon contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32c6cc0 + ms-TS-Allow-Logon contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c6920 + struct dsdb_attribute contains 412 bytes in 9 blocks (ref 0) d=(nil) 0x32c6610 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c6ac0 + ms-TPM-OwnerInformation contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c6a30 + ms-TPM-OwnerInformation contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c69a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19be460 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c68a0 + 1.2.840.113556.1.4.1966 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c6810 + msTPM-OwnerInformation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32c63e0 + ms-TPM-OwnerInformation contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c6780 + struct dsdb_attribute contains 406 bytes in 9 blocks (ref 0) d=(nil) 0x32c6050 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c6580 + ms-TAPI-Unique-Identifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32c64f0 + ms-TAPI-Unique-Identifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32c6460 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x23cf310 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c6360 + 1.2.840.113556.1.4.1698 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c62d0 + msTAPI-uid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32c6250 + ms-TAPI-Unique-Identifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32c61c0 + struct dsdb_attribute contains 391 bytes in 8 blocks (ref 0) d=(nil) 0x32c5b40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c5fc0 + ms-TAPI-Protocol-Id contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32c5f40 + ms-TAPI-Protocol-Id contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32c5ec0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c5e40 + 1.2.840.113556.1.4.1699 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c5db0 + msTAPI-ProtocolId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c5d30 + ms-TAPI-Protocol-Id contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32c5cb0 + struct dsdb_attribute contains 387 bytes in 8 blocks (ref 0) d=(nil) 0x32c56b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c5ab0 + ms-TAPI-Ip-Address contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32c5a30 + ms-TAPI-Ip-Address contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32c59b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c5930 + 1.2.840.113556.1.4.1701 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c58a0 + msTAPI-IpAddress contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c5820 + ms-TAPI-Ip-Address contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32c5480 + struct dsdb_attribute contains 407 bytes in 8 blocks (ref 0) d=(nil) 0x32c50f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c5620 + ms-TAPI-Conference-Blob contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c5590 + ms-TAPI-Conference-Blob contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c5500 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c5400 + 1.2.840.113556.1.4.1700 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c5370 + msTAPI-ConferenceBlob contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c52f0 + ms-TAPI-Conference-Blob contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c5260 + struct dsdb_attribute contains 365 bytes in 8 blocks (ref 0) d=(nil) 0x32c4be0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c5060 + MS-SQL-Vines contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32c4fe0 + MS-SQL-Vines contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32c4f60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c4ee0 + 1.2.840.113556.1.4.1379 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c4e50 + mS-SQL-Vines contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32c4dd0 + MS-SQL-Vines contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32c4d50 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x32c46d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c4b50 + MS-SQL-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32c4ad0 + MS-SQL-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32c4a50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c49d0 + 1.2.840.113556.1.4.1388 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c4940 + mS-SQL-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32c48c0 + MS-SQL-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32c4840 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x32c4180 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c4640 + MS-SQL-UnicodeSortOrder contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c45b0 + MS-SQL-UnicodeSortOrder contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c4520 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32c44a0 + 1.2.840.113556.1.4.1372 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c4410 + mS-SQL-UnicodeSortOrder contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c4380 + MS-SQL-UnicodeSortOrder contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c42f0 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x32c3c70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c40f0 + MS-SQL-Type contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c4070 + MS-SQL-Type contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c3ff0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c3f70 + 1.2.840.113556.1.4.1391 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c3ee0 + mS-SQL-Type contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c3e60 + MS-SQL-Type contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c3de0 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x32c3760 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c3be0 + MS-SQL-ThirdParty contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c3b60 + MS-SQL-ThirdParty contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c3ae0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32c3a60 + 1.2.840.113556.1.4.1407 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c39d0 + mS-SQL-ThirdParty contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c3950 + MS-SQL-ThirdParty contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32c38d0 + struct dsdb_attribute contains 365 bytes in 8 blocks (ref 0) d=(nil) 0x32c3250 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c36d0 + MS-SQL-TCPIP contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32c3650 + MS-SQL-TCPIP contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32c35d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c3550 + 1.2.840.113556.1.4.1377 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c34c0 + mS-SQL-TCPIP contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32c3440 + MS-SQL-TCPIP contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32c33c0 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x32c2d40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c31c0 + MS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32c3140 + MS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32c30c0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c3040 + 1.2.840.113556.1.4.1380 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c2fb0 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32c2f30 + MS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32c2eb0 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x32c2830 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c2cb0 + MS-SQL-SPX contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32c2c30 + MS-SQL-SPX contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32c2bb0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c2b30 + 1.2.840.113556.1.4.1376 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c2aa0 + mS-SQL-SPX contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32c2a20 + MS-SQL-SPX contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x32c29a0 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x32c2320 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c27a0 + MS-SQL-SortOrder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c2720 + MS-SQL-SortOrder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c26a0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c2620 + 1.2.840.113556.1.4.1371 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c2590 + mS-SQL-SortOrder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c2510 + MS-SQL-SortOrder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c2490 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x32c1e10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c2290 + MS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c2210 + MS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c2190 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c2110 + 1.2.840.113556.1.4.1396 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c2080 + mS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c2000 + MS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c1f80 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x32c1900 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c1d80 + MS-SQL-ServiceAccount contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c1d00 + MS-SQL-ServiceAccount contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c1c80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c1c00 + 1.2.840.113556.1.4.1369 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c1b70 + mS-SQL-ServiceAccount contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c1af0 + MS-SQL-ServiceAccount contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c1a70 + struct dsdb_attribute contains 405 bytes in 8 blocks (ref 0) d=(nil) 0x32c13f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c1870 + MS-SQL-RegisteredOwner contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32c17f0 + MS-SQL-RegisteredOwner contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32c1770 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c16f0 + 1.2.840.113556.1.4.1364 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c1660 + mS-SQL-RegisteredOwner contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32c15e0 + MS-SQL-RegisteredOwner contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32c1560 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x32c0ee0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c1360 + MS-SQL-Publisher contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c12e0 + MS-SQL-Publisher contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c1260 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c11e0 + 1.2.840.113556.1.4.1402 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c1150 + mS-SQL-Publisher contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c10d0 + MS-SQL-Publisher contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c1050 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x32c09d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c0e50 + MS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c0dd0 + MS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c0d50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c0cd0 + 1.2.840.113556.1.4.1384 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c0c40 + mS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c0bc0 + MS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32c0b40 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x32c04c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c0940 + MS-SQL-NamedPipe contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c08c0 + MS-SQL-NamedPipe contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c0840 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c07c0 + 1.2.840.113556.1.4.1374 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c0730 + mS-SQL-NamedPipe contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c06b0 + MS-SQL-NamedPipe contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32c0630 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x32bffb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c0430 + MS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c03b0 + MS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c0330 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32c02b0 + 1.2.840.113556.1.4.1363 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32c0220 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c01a0 + MS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32c0120 + struct dsdb_attribute contains 397 bytes in 8 blocks (ref 0) d=(nil) 0x32bfaa0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bff20 + MS-SQL-MultiProtocol contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32bfea0 + MS-SQL-MultiProtocol contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32bfe20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bfda0 + 1.2.840.113556.1.4.1375 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bfd10 + mS-SQL-MultiProtocol contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32bfc90 + MS-SQL-MultiProtocol contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32bfc10 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x32bf590 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bfa10 + MS-SQL-Memory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32bf990 + MS-SQL-Memory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32bf910 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bf890 + 1.2.840.113556.1.4.1367 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bf800 + mS-SQL-Memory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32bf780 + MS-SQL-Memory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32bf700 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x32bf080 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bf500 + MS-SQL-Location contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bf480 + MS-SQL-Location contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bf400 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bf380 + 1.2.840.113556.1.4.1366 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bf2f0 + mS-SQL-Location contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bf270 + MS-SQL-Location contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bf1f0 + struct dsdb_attribute contains 405 bytes in 8 blocks (ref 0) d=(nil) 0x32bebf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32beff0 + MS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32bef70 + MS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32beef0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bee70 + 1.2.840.113556.1.4.1381 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bede0 + mS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32bed60 + MS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32be9c0 + struct dsdb_attribute contains 417 bytes in 8 blocks (ref 0) d=(nil) 0x32be620 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32beb60 + MS-SQL-LastDiagnosticDate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32bead0 + MS-SQL-LastDiagnosticDate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32bea40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32be940 + 1.2.840.113556.1.4.1399 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32be8b0 + mS-SQL-LastDiagnosticDate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32be820 + MS-SQL-LastDiagnosticDate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32be790 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x32be110 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32be590 + MS-SQL-LastBackupDate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32be510 + MS-SQL-LastBackupDate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32be490 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32be410 + 1.2.840.113556.1.4.1398 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32be380 + mS-SQL-LastBackupDate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32be300 + MS-SQL-LastBackupDate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32be280 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x32bdc00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32be080 + MS-SQL-Language contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32be000 + MS-SQL-Language contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bdf80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bdf00 + 1.2.840.113556.1.4.1389 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bde70 + mS-SQL-Language contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bddf0 + MS-SQL-Language contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bdd70 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x32bd6f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bdb70 + MS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bdaf0 + MS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bda70 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bd9f0 + 1.2.840.113556.1.4.1401 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bd960 + mS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bd8e0 + MS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bd860 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x32bd1e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bd660 + MS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32bd5e0 + MS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32bd560 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bd4e0 + 1.2.840.113556.1.4.1382 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bd450 + mS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32bd3d0 + MS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32bd350 + struct dsdb_attribute contains 424 bytes in 8 blocks (ref 0) d=(nil) 0x32bcc90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bd150 + MS-SQL-InformationDirectory contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32bd0c0 + MS-SQL-InformationDirectory contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32bd030 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32bcfb0 + 1.2.840.113556.1.4.1392 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bcf20 + mS-SQL-InformationDirectory contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32bce90 + MS-SQL-InformationDirectory contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32bce00 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x32bc780 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bcc00 + MS-SQL-GPSLongitude contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32bcb80 + MS-SQL-GPSLongitude contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32bcb00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bca80 + 1.2.840.113556.1.4.1386 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bc9f0 + mS-SQL-GPSLongitude contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32bc970 + MS-SQL-GPSLongitude contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32bc8f0 + struct dsdb_attribute contains 389 bytes in 8 blocks (ref 0) d=(nil) 0x32bc270 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bc6f0 + MS-SQL-GPSLatitude contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32bc670 + MS-SQL-GPSLatitude contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32bc5f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bc570 + 1.2.840.113556.1.4.1385 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bc4e0 + mS-SQL-GPSLatitude contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32bc460 + MS-SQL-GPSLatitude contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32bc3e0 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x32bbd60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bc1e0 + MS-SQL-GPSHeight contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32bc160 + MS-SQL-GPSHeight contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32bc0e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bc060 + 1.2.840.113556.1.4.1387 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bbfd0 + mS-SQL-GPSHeight contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32bbf50 + MS-SQL-GPSHeight contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32bbed0 + struct dsdb_attribute contains 389 bytes in 8 blocks (ref 0) d=(nil) 0x32bb850 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bbcd0 + MS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32bbc50 + MS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32bbbd0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bbb50 + 1.2.840.113556.1.4.1390 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bbac0 + mS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32bba40 + MS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32bb9c0 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x32bb340 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bb7c0 + MS-SQL-Database contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bb740 + MS-SQL-Database contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bb6c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bb640 + 1.2.840.113556.1.4.1393 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bb5b0 + mS-SQL-Database contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bb530 + MS-SQL-Database contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32bb4b0 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x32bae30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bb2b0 + MS-SQL-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32bb230 + MS-SQL-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32bb1b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bb130 + 1.2.840.113556.1.4.1397 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bb0a0 + mS-SQL-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32bb020 + MS-SQL-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32bafa0 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x32ba920 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bada0 + MS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32bad20 + MS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32baca0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32bac20 + 1.2.840.113556.1.4.1365 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32bab90 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32bab10 + MS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32baa90 + struct dsdb_attribute contains 397 bytes in 8 blocks (ref 0) d=(nil) 0x32ba410 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ba890 + MS-SQL-ConnectionURL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32ba810 + MS-SQL-ConnectionURL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32ba790 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ba710 + 1.2.840.113556.1.4.1383 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ba680 + mS-SQL-ConnectionURL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32ba600 + MS-SQL-ConnectionURL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32ba580 + struct dsdb_attribute contains 380 bytes in 8 blocks (ref 0) d=(nil) 0x32b9f00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ba380 + MS-SQL-Clustered contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32ba300 + MS-SQL-Clustered contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32ba280 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ba200 + 1.2.840.113556.1.4.1373 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ba170 + mS-SQL-Clustered contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32ba0f0 + MS-SQL-Clustered contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32ba070 + struct dsdb_attribute contains 392 bytes in 8 blocks (ref 0) d=(nil) 0x32b99f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b9e70 + MS-SQL-CharacterSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b9df0 + MS-SQL-CharacterSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b9d70 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b9cf0 + 1.2.840.113556.1.4.1370 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b9c60 + mS-SQL-CharacterSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b9be0 + MS-SQL-CharacterSet contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b9b60 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x32b94e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b9960 + MS-SQL-Build contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32b98e0 + MS-SQL-Build contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32b9860 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b97e0 + 1.2.840.113556.1.4.1368 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b9750 + mS-SQL-Build contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32b96d0 + MS-SQL-Build contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32b9650 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x32b8fd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b9450 + MS-SQL-Applications contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b93d0 + MS-SQL-Applications contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b9350 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b92d0 + 1.2.840.113556.1.4.1400 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b9240 + mS-SQL-Applications contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b91c0 + MS-SQL-Applications contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b9140 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x32b8ac0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b8f40 + MS-SQL-AppleTalk contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32b8ec0 + MS-SQL-AppleTalk contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32b8e40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b8dc0 + 1.2.840.113556.1.4.1378 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b8d30 + mS-SQL-AppleTalk contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32b8cb0 + MS-SQL-AppleTalk contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32b8c30 + struct dsdb_attribute contains 472 bytes in 8 blocks (ref 0) d=(nil) 0x32b8530 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b8a30 + MS-SQL-AllowSnapshotFilesFTPDownloading contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x32b8990 + MS-SQL-AllowSnapshotFilesFTPDownloading contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x32b88f0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b8870 + 1.2.840.113556.1.4.1406 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b87e0 + mS-SQL-AllowSnapshotFilesFTPDownloading contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x32b8740 + MS-SQL-AllowSnapshotFilesFTPDownloading contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x32b86a0 + struct dsdb_attribute contains 468 bytes in 8 blocks (ref 0) d=(nil) 0x32b7fe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b84a0 + MS-SQL-AllowQueuedUpdatingSubscription contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x32b8410 + MS-SQL-AllowQueuedUpdatingSubscription contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x32b8380 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b8300 + 1.2.840.113556.1.4.1405 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b8270 + mS-SQL-AllowQueuedUpdatingSubscription contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x32b81e0 + MS-SQL-AllowQueuedUpdatingSubscription contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x32b8150 + struct dsdb_attribute contains 448 bytes in 8 blocks (ref 0) d=(nil) 0x32b7a90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b7f50 + MS-SQL-AllowKnownPullSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32b7ec0 + MS-SQL-AllowKnownPullSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32b7e30 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b7db0 + 1.2.840.113556.1.4.1403 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b7d20 + mS-SQL-AllowKnownPullSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32b7c90 + MS-SQL-AllowKnownPullSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32b7c00 + struct dsdb_attribute contains 480 bytes in 8 blocks (ref 0) d=(nil) 0x32b7500 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b7a00 + MS-SQL-AllowImmediateUpdatingSubscription contains 42 bytes in 1 blocks (ref 0) d=(nil) 0x32b7960 + MS-SQL-AllowImmediateUpdatingSubscription contains 42 bytes in 1 blocks (ref 0) d=(nil) 0x32b78c0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b7840 + 1.2.840.113556.1.4.1404 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b77b0 + mS-SQL-AllowImmediateUpdatingSubscription contains 42 bytes in 1 blocks (ref 0) d=(nil) 0x32b7710 + MS-SQL-AllowImmediateUpdatingSubscription contains 42 bytes in 1 blocks (ref 0) d=(nil) 0x32b7670 + struct dsdb_attribute contains 448 bytes in 8 blocks (ref 0) d=(nil) 0x32b6fb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b7470 + MS-SQL-AllowAnonymousSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32b73e0 + MS-SQL-AllowAnonymousSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32b7350 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b72d0 + 1.2.840.113556.1.4.1394 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b7240 + mS-SQL-AllowAnonymousSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32b71b0 + MS-SQL-AllowAnonymousSubscription contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x32b7120 + struct dsdb_attribute contains 365 bytes in 8 blocks (ref 0) d=(nil) 0x32b6aa0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b6f20 + MS-SQL-Alias contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32b6ea0 + MS-SQL-Alias contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32b6e20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b6da0 + 1.2.840.113556.1.4.1395 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b6d10 + mS-SQL-Alias contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32b6c90 + MS-SQL-Alias contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x32b6c10 + struct dsdb_attribute contains 397 bytes in 9 blocks (ref 0) d=(nil) 0x32b6610 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b6890 + msSFU-30-Yp-Servers contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b6a20 + msSFU-30-Yp-Servers contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b69a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2dd4e20 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b6920 + 1.2.840.113556.1.6.18.1.341 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b6800 + msSFU30YpServers contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32b6780 + msSFU-30-Yp-Servers contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b6470 + struct dsdb_attribute contains 422 bytes in 9 blocks (ref 0) d=(nil) 0x32b60d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b6580 + msSFU-30-Search-Container contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32b64f0 + msSFU-30-Search-Container contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32b6360 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2f1b180 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b63f0 + 1.2.840.113556.1.6.18.1.300 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b62d0 + msSFU30SearchContainer contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32b5f30 + msSFU-30-Search-Container contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32b6240 + struct dsdb_attribute contains 426 bytes in 9 blocks (ref 0) d=(nil) 0x32b5b80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b6040 + msSFU-30-Search-Attributes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32b5fb0 + msSFU-30-Search-Attributes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32b5ea0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2f29060 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b59e0 + 1.2.840.113556.1.6.18.1.304 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b5e10 + msSFU30SearchAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b5d80 + msSFU-30-Search-Attributes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32b5cf0 + struct dsdb_attribute contains 426 bytes in 9 blocks (ref 0) d=(nil) 0x32b55b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b5af0 + msSFU-30-Result-Attributes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32b5a60 + msSFU-30-Result-Attributes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32b58d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2fa8540 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b5960 + 1.2.840.113556.1.6.18.1.305 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b5840 + msSFU30ResultAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b57b0 + msSFU-30-Result-Attributes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32b5720 + struct dsdb_attribute contains 422 bytes in 9 blocks (ref 0) d=(nil) 0x32b5070 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b5520 + msSFU-30-Posix-Member-Of contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32b5490 + msSFU-30-Posix-Member-Of contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32b5380 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x264db00 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b5410 + 1.2.840.113556.1.6.18.1.347 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b52f0 + msSFU30PosixMemberOf contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32b5270 + msSFU-30-Posix-Member-Of contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32b51e0 + struct dsdb_attribute contains 411 bytes in 9 blocks (ref 0) d=(nil) 0x32b4b60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b4e60 + msSFU-30-Posix-Member contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32b4ff0 + msSFU-30-Posix-Member contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32b4f70 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2649b40 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b4ef0 + 1.2.840.113556.1.6.18.1.346 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b4dd0 + msSFU30PosixMember contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32b4d50 + msSFU-30-Posix-Member contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32b4cd0 + struct dsdb_attribute contains 406 bytes in 9 blocks (ref 0) d=(nil) 0x32b4650 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b4950 + msSFU-30-Order-Number contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32b4ae0 + msSFU-30-Order-Number contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32b4a60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2fb1260 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b49e0 + 1.2.840.113556.1.6.18.1.308 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b48c0 + msSFU30OrderNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32b4840 + msSFU-30-Order-Number contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32b47c0 + struct dsdb_attribute contains 436 bytes in 9 blocks (ref 0) d=(nil) 0x32b4100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b45c0 + msSFU-30-NSMAP-Field-Position contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32b4530 + msSFU-30-NSMAP-Field-Position contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32b4420 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31002a0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b44b0 + 1.2.840.113556.1.6.18.1.345 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b4390 + msSFU30NSMAPFieldPosition contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32b4300 + msSFU-30-NSMAP-Field-Position contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32b4270 + struct dsdb_attribute contains 397 bytes in 9 blocks (ref 0) d=(nil) 0x32b3bf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b3ef0 + msSFU-30-Nis-Domain contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b4080 + msSFU-30-Nis-Domain contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b4000 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31e9500 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b3f80 + 1.2.840.113556.1.6.18.1.339 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b3e60 + msSFU30NisDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32b3de0 + msSFU-30-Nis-Domain contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b3d60 + struct dsdb_attribute contains 447 bytes in 9 blocks (ref 0) d=(nil) 0x32b36a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b3b60 + msSFU-30-Netgroup-User-At-Domain contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x32b3ad0 + msSFU-30-Netgroup-User-At-Domain contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x32b39c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31ed990 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b3a50 + 1.2.840.113556.1.6.18.1.349 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b3930 + msSFU30NetgroupUserAtDomain contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b38a0 + msSFU-30-Netgroup-User-At-Domain contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x32b3810 + struct dsdb_attribute contains 447 bytes in 9 blocks (ref 0) d=(nil) 0x32b3150 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b3610 + msSFU-30-Netgroup-Host-At-Domain contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x32b3580 + msSFU-30-Netgroup-Host-At-Domain contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x32b3470 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x325f4b0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b3500 + 1.2.840.113556.1.6.18.1.348 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b33e0 + msSFU30NetgroupHostAtDomain contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b3350 + msSFU-30-Netgroup-Host-At-Domain contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x32b32c0 + struct dsdb_attribute contains 374 bytes in 9 blocks (ref 0) d=(nil) 0x32b2c40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b2f40 + msSFU-30-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32b30d0 + msSFU-30-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32b3050 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x326c1c0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b2fd0 + 1.2.840.113556.1.6.18.1.309 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b2eb0 + msSFU30Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x32b2e30 + msSFU-30-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x32b2db0 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x32b2700 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b2bb0 + msSFU-30-Max-Uid-Number contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b2b20 + msSFU-30-Max-Uid-Number contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b2a10 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b2aa0 + 1.2.840.113556.1.6.18.1.343 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b2980 + msSFU30MaxUidNumber contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b2900 + msSFU-30-Max-Uid-Number contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b2870 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x32b2240 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b2670 + msSFU-30-Max-Gid-Number contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b25e0 + msSFU-30-Max-Gid-Number contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b24d0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b2560 + 1.2.840.113556.1.6.18.1.342 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b2440 + msSFU30MaxGidNumber contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b20a0 + msSFU-30-Max-Gid-Number contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b23b0 + struct dsdb_attribute contains 429 bytes in 9 blocks (ref 0) d=(nil) 0x32b1c70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b21b0 + msSFU-30-Master-Server-Name contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b2120 + msSFU-30-Master-Server-Name contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b1f90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b34450 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b2020 + 1.2.840.113556.1.6.18.1.307 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b1f00 + msSFU30MasterServerName contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b1e70 + msSFU-30-Master-Server-Name contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b1de0 + struct dsdb_attribute contains 398 bytes in 9 blocks (ref 0) d=(nil) 0x32b1760 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b1a60 + msSFU-30-Map-Filter contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b1bf0 + msSFU-30-Map-Filter contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b1b70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1cc29b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b1af0 + 1.2.840.113556.1.6.18.1.306 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b19d0 + msSFU30MapFilter contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32b1950 + msSFU-30-Map-Filter contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b18d0 + struct dsdb_attribute contains 397 bytes in 9 blocks (ref 0) d=(nil) 0x32b12d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b1550 + msSFU-30-Key-Values contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b16e0 + msSFU-30-Key-Values contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b1660 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e5fab0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b15e0 + 1.2.840.113556.1.6.18.1.324 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b14c0 + msSFU30KeyValues contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32b1440 + msSFU-30-Key-Values contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32b1130 + struct dsdb_attribute contains 414 bytes in 9 blocks (ref 0) d=(nil) 0x32b0d10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b1240 + msSFU-30-Key-Attributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b11b0 + msSFU-30-Key-Attributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b1020 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ecfc20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b10b0 + 1.2.840.113556.1.6.18.1.301 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b0f90 + msSFU30KeyAttributes contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x32b0f10 + msSFU-30-Key-Attributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b0e80 + struct dsdb_attribute contains 424 bytes in 8 blocks (ref 0) d=(nil) 0x32b0840 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b0c80 + msSFU-30-Is-Valid-Container contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b0bf0 + msSFU-30-Is-Valid-Container contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b0b60 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32b06a0 + 1.2.840.113556.1.6.18.1.350 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b0ad0 + msSFU30IsValidContainer contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b0a40 + msSFU-30-Is-Valid-Container contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b09b0 + struct dsdb_attribute contains 441 bytes in 9 blocks (ref 0) d=(nil) 0x32b02f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b07b0 + msSFU-30-Intra-Field-Separator contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32b0720 + msSFU-30-Intra-Field-Separator contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32b0610 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f041d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b0150 + 1.2.840.113556.1.6.18.1.303 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32b0580 + msSFU30IntraFieldSeparator contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32b04f0 + msSFU-30-Intra-Field-Separator contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32b0460 + struct dsdb_attribute contains 418 bytes in 9 blocks (ref 0) d=(nil) 0x32afd30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32b0260 + msSFU-30-Field-Separator contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32b01d0 + msSFU-30-Field-Separator contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32b0040 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fe99e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32b00d0 + 1.2.840.113556.1.6.18.1.302 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32affb0 + msSFU30FieldSeparator contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32aff30 + msSFU-30-Field-Separator contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32afea0 + struct dsdb_attribute contains 386 bytes in 9 blocks (ref 0) d=(nil) 0x32af820 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32afb20 + msSFU-30-Domains contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32afcb0 + msSFU-30-Domains contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32afc30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2018700 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32afbb0 + 1.2.840.113556.1.6.18.1.340 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32afa90 + msSFU30Domains contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32afa10 + msSFU-30-Domains contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32af990 + struct dsdb_attribute contains 405 bytes in 9 blocks (ref 0) d=(nil) 0x32af310 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32af610 + msSFU-30-Crypt-Method contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32af7a0 + msSFU-30-Crypt-Method contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32af720 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x202fdc0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32af6a0 + 1.2.840.113556.1.6.18.1.352 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32af580 + msSFU30CryptMethod contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x32af500 + msSFU-30-Crypt-Method contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32af480 + struct dsdb_attribute contains 386 bytes in 9 blocks (ref 0) d=(nil) 0x32aee80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32af100 + msSFU-30-Aliases contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32af290 + msSFU-30-Aliases contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32af210 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2057d50 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32af190 + 1.2.840.113556.1.6.18.1.323 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32af070 + msSFU30Aliases contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x32aeff0 + msSFU-30-Aliases contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x32aec50 + struct dsdb_attribute contains 432 bytes in 8 blocks (ref 0) d=(nil) 0x32ae8c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aedf0 + ms-RRAS-Vendor-Attribute-Entry contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32aed60 + ms-RRAS-Vendor-Attribute-Entry contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32aecd0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32aebd0 + 1.2.840.113556.1.4.883 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32aeb50 + msRRASVendorAttributeEntry contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32aeac0 + ms-RRAS-Vendor-Attribute-Entry contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32aea30 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x32ae3c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ae830 + ms-RRAS-Attribute contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ae7b0 + ms-RRAS-Attribute contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ae730 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32ae6b0 + 1.2.840.113556.1.4.884 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32ae630 + msRRASAttribute contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x32ae5b0 + ms-RRAS-Attribute contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32ae530 + struct dsdb_attribute contains 400 bytes in 8 blocks (ref 0) d=(nil) 0x32adeb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ae330 + msRASSavedFramedRoute contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ae2b0 + msRASSavedFramedRoute contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ae230 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ae1b0 + 1.2.840.113556.1.4.1191 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ae120 + msRASSavedFramedRoute contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ae0a0 + msRASSavedFramedRoute contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x32ae020 + struct dsdb_attribute contains 416 bytes in 8 blocks (ref 0) d=(nil) 0x32ad960 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ade20 + msRASSavedFramedIPAddress contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32add90 + msRASSavedFramedIPAddress contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32add00 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32adc80 + 1.2.840.113556.1.4.1190 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32adbf0 + msRASSavedFramedIPAddress contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32adb60 + msRASSavedFramedIPAddress contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32adad0 + struct dsdb_attribute contains 412 bytes in 8 blocks (ref 0) d=(nil) 0x32ad410 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ad8d0 + msRASSavedCallbackNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ad840 + msRASSavedCallbackNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ad7b0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ad730 + 1.2.840.113556.1.4.1189 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ad6a0 + msRASSavedCallbackNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ad610 + msRASSavedCallbackNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ad580 + struct dsdb_attribute contains 392 bytes in 8 blocks (ref 0) d=(nil) 0x32acf00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ad380 + msRADIUSServiceType contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32ad300 + msRADIUSServiceType contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32ad280 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ad200 + 1.2.840.113556.1.4.1171 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ad170 + msRADIUSServiceType contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32ad0f0 + msRADIUSServiceType contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32ad070 + struct dsdb_attribute contains 439 bytes in 9 blocks (ref 0) d=(nil) 0x32ac9b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ace70 + ms-RADIUS-SavedFramedIpv6Route contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32acde0 + ms-RADIUS-SavedFramedIpv6Route contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32acd50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x21bbd30 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32accd0 + 1.2.840.113556.1.4.1918 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32acc40 + msRADIUS-SavedFramedIpv6Route contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32acbb0 + ms-RADIUS-SavedFramedIpv6Route contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32acb20 + struct dsdb_attribute contains 443 bytes in 9 blocks (ref 0) d=(nil) 0x32ac460 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ac920 + ms-RADIUS-SavedFramedIpv6Prefix contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x32ac890 + ms-RADIUS-SavedFramedIpv6Prefix contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x32ac800 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x22c0fe0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ac780 + 1.2.840.113556.1.4.1916 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ac6f0 + msRADIUS-SavedFramedIpv6Prefix contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32ac660 + ms-RADIUS-SavedFramedIpv6Prefix contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x32ac5d0 + struct dsdb_attribute contains 447 bytes in 9 blocks (ref 0) d=(nil) 0x32abf10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ac3d0 + ms-RADIUS-SavedFramedInterfaceId contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x32ac340 + ms-RADIUS-SavedFramedInterfaceId contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x32ac2b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2401310 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ac230 + 1.2.840.113556.1.4.1914 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ac1a0 + msRADIUS-SavedFramedInterfaceId contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x32ac110 + ms-RADIUS-SavedFramedInterfaceId contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x32ac080 + struct dsdb_attribute contains 392 bytes in 8 blocks (ref 0) d=(nil) 0x32aba00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32abe80 + msRADIUSFramedRoute contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32abe00 + msRADIUSFramedRoute contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32abd80 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32abd00 + 1.2.840.113556.1.4.1158 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32abc70 + msRADIUSFramedRoute contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32abbf0 + msRADIUSFramedRoute contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32abb70 + struct dsdb_attribute contains 419 bytes in 9 blocks (ref 0) d=(nil) 0x32ab4b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ab970 + ms-RADIUS-FramedIpv6Route contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32ab8e0 + ms-RADIUS-FramedIpv6Route contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32ab850 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x249ad40 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ab7d0 + 1.2.840.113556.1.4.1917 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ab740 + msRADIUS-FramedIpv6Route contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32ab6b0 + ms-RADIUS-FramedIpv6Route contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32ab620 + struct dsdb_attribute contains 423 bytes in 9 blocks (ref 0) d=(nil) 0x32aaf60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ab420 + ms-RADIUS-FramedIpv6Prefix contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32ab390 + ms-RADIUS-FramedIpv6Prefix contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32ab300 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x25cebe0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32ab280 + 1.2.840.113556.1.4.1915 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32ab1f0 + msRADIUS-FramedIpv6Prefix contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x32ab160 + ms-RADIUS-FramedIpv6Prefix contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32ab0d0 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x32aaa10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aaed0 + msRADIUSFramedIPAddress contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aae40 + msRADIUSFramedIPAddress contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aadb0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32aad30 + 1.2.840.113556.1.4.1153 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aaca0 + msRADIUSFramedIPAddress contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aac10 + msRADIUSFramedIPAddress contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aab80 + struct dsdb_attribute contains 427 bytes in 9 blocks (ref 0) d=(nil) 0x32aa4c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aa980 + ms-RADIUS-FramedInterfaceId contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32aa8f0 + ms-RADIUS-FramedInterfaceId contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32aa860 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2b27090 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32aa7e0 + 1.2.840.113556.1.4.1913 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aa750 + msRADIUS-FramedInterfaceId contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x32aa6c0 + ms-RADIUS-FramedInterfaceId contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32aa630 + struct dsdb_attribute contains 404 bytes in 8 blocks (ref 0) d=(nil) 0x32a9fb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aa430 + msRADIUSCallbackNumber contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32aa3b0 + msRADIUSCallbackNumber contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32aa330 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32aa2b0 + 1.2.840.113556.1.4.1145 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32aa220 + msRADIUSCallbackNumber contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32aa1a0 + msRADIUSCallbackNumber contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x32aa120 + struct dsdb_attribute contains 435 bytes in 8 blocks (ref 0) d=(nil) 0x32a9a60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32a9f20 + ms-PKI-Template-Schema-Version contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32a9e90 + ms-PKI-Template-Schema-Version contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32a9e00 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32a9d80 + 1.2.840.113556.1.4.1434 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32a9cf0 + msPKI-Template-Schema-Version contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x32a9c60 + ms-PKI-Template-Schema-Version contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32a9bd0 + struct dsdb_attribute contains 435 bytes in 8 blocks (ref 0) d=(nil) 0x32a9740 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32a99d0 + ms-PKI-Template-Minor-Revision contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32a9940 + ms-PKI-Template-Minor-Revision contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32a98b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1e88110 + 1.2.840.113556.1.4.1435 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23e0120 + msPKI-Template-Minor-Revision contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x23e0090 + ms-PKI-Template-Minor-Revision contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x23c3aa0 + struct dsdb_attribute contains 420 bytes in 8 blocks (ref 0) d=(nil) 0x32a95d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23c3a10 + ms-PKI-Supersede-Templates contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1d7d170 + ms-PKI-Supersede-Templates contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1d7d0e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1e88090 + 1.2.840.113556.1.4.1437 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x217a140 + msPKI-Supersede-Templates contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x217a0b0 + ms-PKI-Supersede-Templates contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x21d37f0 + struct dsdb_attribute contains 384 bytes in 9 blocks (ref 0) d=(nil) 0x32a9460 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21d3760 + ms-PKI-Site-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2362020 + ms-PKI-Site-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2361fa0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2db3300 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2629710 + 1.2.840.113556.1.4.2077 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2629680 + msPKI-Site-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a43050 + ms-PKI-Site-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1b5ccb0 + struct dsdb_attribute contains 407 bytes in 8 blocks (ref 0) d=(nil) 0x32a92f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a42fc0 + ms-PKI-RoamingTimeStamp contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a6ea50 + ms-PKI-RoamingTimeStamp contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e9c0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1b5cc30 + 1.2.840.113556.1.4.1892 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bd28d0 + msPKIRoamingTimeStamp contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1bd2850 + ms-PKI-RoamingTimeStamp contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cce920 + struct dsdb_attribute contains 391 bytes in 8 blocks (ref 0) d=(nil) 0x32a9180 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cce890 + ms-PKI-RA-Signature contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1d4beb0 + ms-PKI-RA-Signature contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1d4be30 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1e8cb40 + 1.2.840.113556.1.4.1429 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e8cab0 + msPKI-RA-Signature contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1ec0030 + ms-PKI-RA-Signature contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1ebffb0 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x32a9010 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f14200 + ms-PKI-RA-Policies contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1f14180 + ms-PKI-RA-Policies contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1ff9d30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1ff9cb0 + 1.2.840.113556.1.4.1438 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x200cfb0 + msPKI-RA-Policies contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x200cf30 + ms-PKI-RA-Policies contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x214d380 + struct dsdb_attribute contains 436 bytes in 8 blocks (ref 0) d=(nil) 0x32a8ea0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2104c30 + ms-PKI-RA-Application-Policies contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x2104ba0 + ms-PKI-RA-Application-Policies contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x214d400 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21db580 + 1.2.840.113556.1.4.1675 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21db4f0 + msPKI-RA-Application-Policies contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x21eb660 + ms-PKI-RA-Application-Policies contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x21eb5d0 + struct dsdb_attribute contains 407 bytes in 8 blocks (ref 0) d=(nil) 0x32a8d30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2286f90 + ms-PKI-Private-Key-Flag contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2286f00 + ms-PKI-Private-Key-Flag contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22c09a0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x22c0920 + 1.2.840.113556.1.4.1431 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x230a750 + msPKI-Private-Key-Flag contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x230a6d0 + ms-PKI-Private-Key-Flag contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x231abe0 + struct dsdb_attribute contains 408 bytes in 9 blocks (ref 0) d=(nil) 0x32a8bc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x231ab50 + ms-PKI-OID-User-Notice contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x232b280 + ms-PKI-OID-User-Notice contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x232b200 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a59580 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2463210 + 1.2.840.113556.1.4.1673 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2463180 + msPKI-OID-User-Notice contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2543ce0 + ms-PKI-OID-User-Notice contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x264bf70 + struct dsdb_attribute contains 415 bytes in 9 blocks (ref 0) d=(nil) 0x32a8a50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2543c50 + ms-PKI-OID-LocalizedName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x25f2ea0 + ms-PKI-OID-LocalizedName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x25f2e10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x214d230 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x264bef0 + 1.2.840.113556.1.4.1712 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a6fcf0 + msPKI-OIDLocalizedName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a6fc70 + ms-PKI-OID-LocalizedName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19e9b00 + struct dsdb_attribute contains 376 bytes in 9 blocks (ref 0) d=(nil) 0x32a88e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19e9a70 + ms-PKI-OID-CPS contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1aa0ac0 + ms-PKI-OID-CPS contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1aa0a40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x21d3e30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2658310 + 1.2.840.113556.1.4.1672 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2658280 + msPKI-OID-CPS contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2726c70 + ms-PKI-OID-CPS contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2726bf0 + struct dsdb_attribute contains 395 bytes in 8 blocks (ref 0) d=(nil) 0x32a8770 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x196a410 + ms-PKI-OID-Attribute contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x196a390 + ms-PKI-OID-Attribute contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1a8f640 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1a8f5c0 + 1.2.840.113556.1.4.1671 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28f3f40 + msPKI-OID-Attribute contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x28f3ec0 + ms-PKI-OID-Attribute contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2e46c60 + struct dsdb_attribute contains 407 bytes in 8 blocks (ref 0) d=(nil) 0x32a8600 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e46bd0 + ms-PKI-Minimal-Key-Size contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20a8a60 + ms-PKI-Minimal-Key-Size contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20a89d0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x23e86d0 + 1.2.840.113556.1.4.1433 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23e8640 + msPKI-Minimal-Key-Size contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x24c24e0 + ms-PKI-Minimal-Key-Size contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3173250 + struct dsdb_attribute contains 420 bytes in 9 blocks (ref 0) d=(nil) 0x32a8490 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31731c0 + ms-PKI-Enrollment-Servers contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x316e1b0 + ms-PKI-Enrollment-Servers contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x316e120 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x22075b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x24c2460 + 1.2.840.113556.1.4.2076 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ddc920 + msPKI-Enrollment-Servers contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2ddc890 + ms-PKI-Enrollment-Servers contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2ee1ce0 + struct dsdb_attribute contains 403 bytes in 8 blocks (ref 0) d=(nil) 0x32a8320 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ee1c50 + ms-PKI-Enrollment-Flag contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f69800 + ms-PKI-Enrollment-Flag contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f69780 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1a3afa0 + 1.2.840.113556.1.4.1430 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a3af10 + msPKI-Enrollment-Flag contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1bb16c0 + ms-PKI-Enrollment-Flag contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1bb1640 + struct dsdb_attribute contains 413 bytes in 9 blocks (ref 0) d=(nil) 0x32a81b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f60fd0 + ms-PKI-DPAPIMasterKeys contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1f60f50 + ms-PKI-DPAPIMasterKeys contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2736230 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x25852f0 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x27361b0 + 1.2.840.113556.1.4.1893 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28f0850 + msPKIDPAPIMasterKeys contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x28f07d0 + ms-PKI-DPAPIMasterKeys contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28f9010 + struct dsdb_attribute contains 452 bytes in 9 blocks (ref 0) d=(nil) 0x32a8040 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28f8f80 + ms-PKI-Credential-Roaming-Tokens contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x2d41700 + ms-PKI-Credential-Roaming-Tokens contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x2d41670 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2581170 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x31e8cb0 + 1.2.840.113556.1.4.2050 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f63fe0 + msPKI-CredentialRoamingTokens contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2f63f50 + ms-PKI-Credential-Roaming-Tokens contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x30a0400 + struct dsdb_attribute contains 412 bytes in 8 blocks (ref 0) d=(nil) 0x32a7ed0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30a0370 + ms-PKI-Cert-Template-OID contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x309b2b0 + ms-PKI-Cert-Template-OID contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x309b220 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a370e0 + 1.2.840.113556.1.4.1436 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31e8c20 + msPKI-Cert-Template-OID contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3210e50 + ms-PKI-Cert-Template-OID contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3210dc0 + struct dsdb_attribute contains 416 bytes in 8 blocks (ref 0) d=(nil) 0x32a7d60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19e19a0 + ms-PKI-Certificate-Policy contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19e1910 + ms-PKI-Certificate-Policy contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1a37160 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1bb6110 + 1.2.840.113556.1.4.1439 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bb6080 + msPKI-Certificate-Policy contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1dce130 + ms-PKI-Certificate-Policy contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1dce0a0 + struct dsdb_attribute contains 427 bytes in 8 blocks (ref 0) d=(nil) 0x32a7bf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e4f180 + ms-PKI-Certificate-Name-Flag contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1e4f0f0 + ms-PKI-Certificate-Name-Flag contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2169880 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x22abd20 + 1.2.840.113556.1.4.1432 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21697f0 + msPKI-Certificate-Name-Flag contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2171c70 + ms-PKI-Certificate-Name-Flag contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2171be0 + struct dsdb_attribute contains 464 bytes in 8 blocks (ref 0) d=(nil) 0x32a7a80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22a7bd0 + ms-PKI-Certificate-Application-Policy contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x22a7b40 + ms-PKI-Certificate-Application-Policy contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x22abda0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x25eeb70 + 1.2.840.113556.1.4.1674 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25eeae0 + msPKI-Certificate-Application-Policy contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x26253d0 + ms-PKI-Certificate-Application-Policy contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x2625340 + struct dsdb_attribute contains 425 bytes in 9 blocks (ref 0) d=(nil) 0x32a7910 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x272e4e0 + ms-PKI-AccountCredentials contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x272e450 + ms-PKI-AccountCredentials contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x29bd570 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x256d2b0 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x29bd4f0 + 1.2.840.113556.1.4.1894 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29dae60 + msPKIAccountCredentials contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29dadd0 + ms-PKI-AccountCredentials contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2b6bc60 + struct dsdb_attribute contains 416 bytes in 8 blocks (ref 0) d=(nil) 0x32a77a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b6bbd0 + msNPSavedCallingStationID contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2c3e690 + msNPSavedCallingStationID contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2c3e600 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e86ac0 + 1.2.840.113556.1.4.1130 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e86a30 + msNPSavedCallingStationID contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2ead060 + msNPSavedCallingStationID contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2eacfd0 + struct dsdb_attribute contains 396 bytes in 8 blocks (ref 0) d=(nil) 0x32a7630 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ed83f0 + msNPCallingStationID contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2ed8370 + msNPCallingStationID contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2fb9680 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2fb9600 + 1.2.840.113556.1.4.1124 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fd4d20 + msNPCallingStationID contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2fd4ca0 + msNPCallingStationID contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3036730 + struct dsdb_attribute contains 392 bytes in 8 blocks (ref 0) d=(nil) 0x32a74c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30366a0 + msNPCalledStationID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3060190 + msNPCalledStationID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3060110 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x310d890 + 1.2.840.113556.1.4.1123 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x310d800 + msNPCalledStationID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3108940 + msNPCalledStationID contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x31088c0 + struct dsdb_attribute contains 376 bytes in 8 blocks (ref 0) d=(nil) 0x32a7350 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3132890 + msNPAllowDialin contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3132810 + msNPAllowDialin contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x31e4000 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x31e3f80 + 1.2.840.113556.1.4.1119 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x323f5b0 + msNPAllowDialin contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x323f530 + msNPAllowDialin contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1fb5e30 + struct dsdb_attribute contains 457 bytes in 9 blocks (ref 0) d=(nil) 0x32a71e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3262d00 + ms-net-ieee-8023-GP-PolicyReserved contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x3262c70 + ms-net-ieee-8023-GP-PolicyReserved contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1fb5eb0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x232b8f0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a77260 + 1.2.840.113556.1.4.1956 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19f54e0 + ms-net-ieee-8023-GP-PolicyReserved contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x19f5450 + ms-net-ieee-8023-GP-PolicyReserved contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1a1fb90 + struct dsdb_attribute contains 441 bytes in 9 blocks (ref 0) d=(nil) 0x32a7070 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a1fb00 + ms-net-ieee-8023-GP-PolicyGUID contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1a27850 + ms-net-ieee-8023-GP-PolicyGUID contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1a277c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b70c40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1adc800 + 1.2.840.113556.1.4.1954 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a771d0 + ms-net-ieee-8023-GP-PolicyGUID contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1a836b0 + ms-net-ieee-8023-GP-PolicyGUID contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1a83620 + struct dsdb_attribute contains 441 bytes in 9 blocks (ref 0) d=(nil) 0x32a6f00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ad8a10 + ms-net-ieee-8023-GP-PolicyData contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1ad8980 + ms-net-ieee-8023-GP-PolicyData contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1adc880 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ccb390 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1e77b60 + 1.2.840.113556.1.4.1955 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c92cd0 + ms-net-ieee-8023-GP-PolicyData contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1c92c40 + ms-net-ieee-8023-GP-PolicyData contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1ccaaf0 + struct dsdb_attribute contains 461 bytes in 9 blocks (ref 0) d=(nil) 0x32a6d90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ccaa60 + ms-net-ieee-80211-GP-PolicyReserved contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1db5ba0 + ms-net-ieee-80211-GP-PolicyReserved contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1db5b10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e46fc0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1f5d110 + 1.2.840.113556.1.4.1953 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e77ad0 + ms-net-ieee-80211-GP-PolicyReserved contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1ef7750 + ms-net-ieee-80211-GP-PolicyReserved contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1ef76c0 + struct dsdb_attribute contains 445 bytes in 9 blocks (ref 0) d=(nil) 0x32a6c20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f03860 + ms-net-ieee-80211-GP-PolicyGUID contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x1f037d0 + ms-net-ieee-80211-GP-PolicyGUID contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x1f5d190 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e4fa10 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x220ac60 + 1.2.840.113556.1.4.1951 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20b0120 + ms-net-ieee-80211-GP-PolicyGUID contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x20b0090 + ms-net-ieee-80211-GP-PolicyGUID contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x20c3a70 + struct dsdb_attribute contains 445 bytes in 9 blocks (ref 0) d=(nil) 0x32a6ab0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20c39e0 + ms-net-ieee-80211-GP-PolicyData contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x20cf540 + ms-net-ieee-80211-GP-PolicyData contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x20cf4b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x209bd80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x220abe0 + 1.2.840.113556.1.4.1952 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22207f0 + ms-net-ieee-80211-GP-PolicyData contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2220760 + ms-net-ieee-80211-GP-PolicyData contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2245bf0 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x32a6940 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2245b60 + MSMQ-Version contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x226e220 + MSMQ-Version contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x226e1a0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2344d20 + 1.2.840.113556.1.4.942 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2344ca0 + mSMQVersion contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x234d770 + MSMQ-Version contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x234d6f0 + struct dsdb_attribute contains 375 bytes in 10 blocks (ref 0) d=(nil) 0x32a67d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23b77a0 + MSMQ-User-Sid contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x23b7720 + MSMQ-User-Sid contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x24cece0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2381dc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x28f98a0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x24cec60 + 1.2.840.113556.1.4.1337 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25778f0 + mSMQUserSid contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2577870 + MSMQ-User-Sid contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x257f5e0 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x32a6660 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x257f550 + MSMQ-Transactional contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x25c6f80 + MSMQ-Transactional contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x25c6f00 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x262cec0 + 1.2.840.113556.1.4.926 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x262ce40 + mSMQTransactional contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x265fa50 + MSMQ-Transactional contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x265f9d0 + struct dsdb_attribute contains 363 bytes in 10 blocks (ref 0) d=(nil) 0x32a64f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x266b820 + MSMQ-Sites contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x266b7a0 + MSMQ-Sites contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x27afdb0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2953db0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x299be00 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x27afd30 + 1.2.840.113556.1.4.927 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2844510 + mSMQSites contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2844490 + MSMQ-Sites contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2883850 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x32a6380 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28837c0 + MSMQ-Site-Name-Ex contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x287ff10 + MSMQ-Site-Name-Ex contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x287fe90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2947110 + 1.2.840.113556.1.4.1416 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2947080 + mSMQSiteNameEx contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2952fd0 + MSMQ-Site-Name-Ex contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2952f50 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x32a6210 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29c1b70 + MSMQ-Site-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x29c1af0 + MSMQ-Site-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x29d70e0 + 2.5.5.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x29d7060 + 1.2.840.113556.1.4.965 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a239d0 + mSMQSiteName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2a23950 + MSMQ-Site-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2a1f6f0 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x32a60a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a1f660 + MSMQ-Site-ID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2a3c020 + MSMQ-Site-ID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2a3bfa0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2cd7970 + 1.2.840.113556.1.4.953 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2cd78f0 + mSMQSiteID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2ce6ea0 + MSMQ-Site-ID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2ce6e20 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x32a5f30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d2d670 + MSMQ-Site-Gates-Mig contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2d2d5f0 + MSMQ-Site-Gates-Mig contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2dd91a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25251a0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2dd9120 + 1.2.840.113556.1.4.1310 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e61ae0 + mSMQSiteGatesMig contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2e61a60 + MSMQ-Site-Gates-Mig contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2e6b760 + struct dsdb_attribute contains 383 bytes in 9 blocks (ref 0) d=(nil) 0x32a5dc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e6b6d0 + MSMQ-Site-Gates contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2e79540 + MSMQ-Site-Gates contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2e794c0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2521150 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2ea7e10 + 1.2.840.113556.1.4.945 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ea7d90 + mSMQSiteGates contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2ecaf70 + MSMQ-Site-Gates contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2ecaef0 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x32a5c50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ec59d0 + MSMQ-Site-Foreign contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ec5950 + MSMQ-Site-Foreign contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2f03670 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2f035f0 + 1.2.840.113556.1.4.961 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f11480 + mSMQSiteForeign contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2f11400 + MSMQ-Site-Foreign contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2f3e3b0 + struct dsdb_attribute contains 367 bytes in 9 blocks (ref 0) d=(nil) 0x32a5ae0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f3e320 + MSMQ-Site-2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2f4d150 + MSMQ-Site-2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2f4d0d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25192e0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2f964f0 + 1.2.840.113556.1.4.944 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f96470 + mSMQSite2 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2f91ce0 + MSMQ-Site-2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2f91c60 + struct dsdb_attribute contains 367 bytes in 9 blocks (ref 0) d=(nil) 0x32a5970 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fac9e0 + MSMQ-Site-1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2fac960 + MSMQ-Site-1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2fcf810 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25152e0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2fcf790 + 1.2.840.113556.1.4.943 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x300c280 + mSMQSite1 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x300c200 + MSMQ-Site-1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3015f80 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x32a5800 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3015ef0 + MSMQ-Sign-Key contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x303b5a0 + MSMQ-Sign-Key contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x303b520 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x305bc80 + 1.2.840.113556.1.4.937 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x305bc00 + mSMQSignKey contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3084220 + MSMQ-Sign-Key contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x30ad640 + struct dsdb_attribute contains 421 bytes in 9 blocks (ref 0) d=(nil) 0x32a5690 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3084190 + MSMQ-Sign-Certificates-Mig contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x307fb20 + MSMQ-Sign-Certificates-Mig contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x307fa90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x29caeb0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30ad5c0 + 1.2.840.113556.1.4.967 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x30d11a0 + mSMQSignCertificatesMig contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30d1110 + MSMQ-Sign-Certificates-Mig contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x30ecdb0 + struct dsdb_attribute contains 406 bytes in 9 blocks (ref 0) d=(nil) 0x32a5520 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30ecd20 + MSMQ-Sign-Certificates contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x30fb700 + MSMQ-Sign-Certificates contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x30fb680 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x29d31f0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x313b680 + 1.2.840.113556.1.4.947 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x313b600 + mSMQSignCertificates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3148bb0 + MSMQ-Sign-Certificates contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3148b30 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x32a53b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3156ce0 + MSMQ-Service-Type contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3156c60 + MSMQ-Service-Type contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x318fe70 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x318fdf0 + 1.2.840.113556.1.4.930 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x31a67c0 + mSMQServiceType contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x31a6740 + MSMQ-Service-Type contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x31bdd60 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x32a5240 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31bdcd0 + MSMQ-Services contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x31cd190 + MSMQ-Services contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x31cd110 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x32078c0 + 1.2.840.113556.1.4.950 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3207840 + mSMQServices contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3214ce0 + MSMQ-Services contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x3214c60 + struct dsdb_attribute contains 391 bytes in 8 blocks (ref 0) d=(nil) 0x32a50d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3243bc0 + MSMQ-Secured-Source contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3243b40 + MSMQ-Secured-Source contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x326b940 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x326b8c0 + 1.2.840.113556.1.4.1713 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3278f80 + MSMQ-SecuredSource contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3278f00 + MSMQ-Secured-Source contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x32952e0 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x32a4f60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3295250 + MSMQ-Routing-Services contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1e3a250 + MSMQ-Routing-Services contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1e3a1d0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3224ea0 + 1.2.840.113556.1.4.1227 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3224e10 + mSMQRoutingServices contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19c2850 + MSMQ-Routing-Services contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19c27d0 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x32a4df0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ddaa0 + MSMQ-Routing-Service contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19dda20 + MSMQ-Routing-Service contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1a04d70 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1a04cf0 + 1.2.840.113556.1.4.1237 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a102a0 + mSMQRoutingService contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1a10220 + MSMQ-Routing-Service contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1a17ed0 + struct dsdb_attribute contains 425 bytes in 10 blocks (ref 0) d=(nil) 0x32a4c80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a10750 + MSMQ-Recipient-FormatName contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1a106c0 + MSMQ-Recipient-FormatName contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1a17f50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x29db6d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2b6c4d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a27c90 + 1.2.840.113556.1.4.1695 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a27c00 + msMQ-Recipient-FormatName contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1a2f520 + MSMQ-Recipient-FormatName contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1a2f490 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x32a4b10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a33390 + MSMQ-Quota contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1a33310 + MSMQ-Quota contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1a4a7d0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1a4a750 + 1.2.840.113556.1.4.919 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1a5dda0 + mSMQQuota contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1a5dd20 + MSMQ-Quota contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1a65630 + struct dsdb_attribute contains 382 bytes in 10 blocks (ref 0) d=(nil) 0x32a49a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a655a0 + MSMQ-Queue-Type contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e4d0 + MSMQ-Queue-Type contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e450 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2c21d50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2cc3600 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a94270 + 1.2.840.113556.1.4.917 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1a941f0 + mSMQQueueType contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1a989d0 + MSMQ-Queue-Type contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a98950 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x32a4830 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1aa89e0 + MSMQ-Queue-Quota contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1aa8960 + MSMQ-Queue-Quota contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1b28a70 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1b289f0 + 1.2.840.113556.1.4.962 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1b688e0 + mSMQQueueQuota contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1b68860 + MSMQ-Queue-Quota contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1b703d0 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x32a46c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b70340 + MSMQ-Queue-Name-Ext contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1b85010 + MSMQ-Queue-Name-Ext contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1b84f90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2d41ed0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2d77740 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1bda430 + 1.2.840.113556.1.4.1243 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bda3a0 + mSMQQueueNameExt contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c1ac50 + MSMQ-Queue-Name-Ext contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1c1abd0 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x32a4550 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c6dac0 + MSMQ-Queue-Journal-Quota contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1c6da30 + MSMQ-Queue-Journal-Quota contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1ce3100 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1ce3080 + 1.2.840.113556.1.4.963 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1cfb790 + mSMQQueueJournalQuota contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1cfb710 + MSMQ-Queue-Journal-Quota contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1d0b660 + struct dsdb_attribute contains 362 bytes in 10 blocks (ref 0) d=(nil) 0x32a43e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d0b5d0 + MSMQ-QM-ID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1d854c0 + MSMQ-QM-ID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1d85440 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2dedb40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2e6c000 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1e42420 + 1.2.840.113556.1.4.951 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1e423a0 + mSMQQMID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1e46720 + MSMQ-QM-ID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1e466a0 + struct dsdb_attribute contains 393 bytes in 10 blocks (ref 0) d=(nil) 0x32a4270 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e4ae60 + MSMQ-Privacy-Level contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1e4ade0 + MSMQ-Privacy-Level contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1e88530 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ecb690 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ede0a0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1e884b0 + 1.2.840.113556.1.4.924 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1ec7820 + mSMQPrivacyLevel contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1ec77a0 + MSMQ-Privacy-Level contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf620 + struct dsdb_attribute contains 403 bytes in 9 blocks (ref 0) d=(nil) 0x32a4100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf590 + MSMQ-Prev-Site-Gates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1eea770 + MSMQ-Prev-Site-Gates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1eea6f0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x24d0690 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1f0ff10 + 1.2.840.113556.1.4.1225 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f0fe80 + mSMQPrevSiteGates contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1f340b0 + MSMQ-Prev-Site-Gates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1f34030 + struct dsdb_attribute contains 374 bytes in 10 blocks (ref 0) d=(nil) 0x32a3f90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f58200 + MSMQ-Owner-ID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1f58180 + MSMQ-Owner-ID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2033cd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ef1370 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2f5bd90 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2033c50 + 1.2.840.113556.1.4.925 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2077a80 + mSMQOwnerID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2077a00 + MSMQ-Owner-ID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x20900c0 + struct dsdb_attribute contains 418 bytes in 9 blocks (ref 0) d=(nil) 0x32a3e20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2090030 + MSMQ-Out-Routing-Servers contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x20a04d0 + MSMQ-Out-Routing-Servers contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x20a0440 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x24c8050 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x20b7e00 + 1.2.840.113556.1.4.928 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20b7d80 + mSMQOutRoutingServers contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x20bfc70 + MSMQ-Out-Routing-Servers contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x20bfbe0 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x32a3cb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20c7820 + MSMQ-OS-Type contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x20c77a0 + MSMQ-OS-Type contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x20d6cc0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x20d6c40 + 1.2.840.113556.1.4.935 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x211bbf0 + mSMQOSType contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x211bb70 + MSMQ-OS-Type contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x212a880 + struct dsdb_attribute contains 365 bytes in 8 blocks (ref 0) d=(nil) 0x32a3b40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x212a7f0 + MSMQ-Nt4-Stub contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2148f30 + MSMQ-Nt4-Stub contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2148eb0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x21cb5d0 + 1.2.840.113556.1.4.960 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x21cb550 + mSMQNt4Stub contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x21f3520 + MSMQ-Nt4-Stub contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x21f34a0 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x32a39d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2202f70 + MSMQ-Nt4-Flags contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2202ef0 + MSMQ-Nt4-Flags contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2234760 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x22346e0 + 1.2.840.113556.1.4.964 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2230850 + mSMQNt4Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x22307d0 + MSMQ-Nt4-Flags contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x223d780 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x32a3860 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x223d6f0 + MSMQ-Name-Style contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2238ba0 + MSMQ-Name-Style contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2238b20 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x22764b0 + 1.2.840.113556.1.4.939 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2276430 + mSMQNameStyle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x227e9c0 + MSMQ-Name-Style contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x227e940 + struct dsdb_attribute contains 408 bytes in 9 blocks (ref 0) d=(nil) 0x32a36f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x229f840 + MSMQ-Multicast-Address contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x229f7c0 + MSMQ-Multicast-Address contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x22b8380 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2f69f30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x22b8300 + 1.2.840.113556.1.4.1714 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2302290 + MSMQ-MulticastAddress contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2302210 + MSMQ-Multicast-Address contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x23337c0 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x32a3580 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2333730 + MSMQ-Migrated contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x233bdb0 + MSMQ-Migrated contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x233bd30 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x238e330 + 1.2.840.113556.1.4.952 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x238e2b0 + mSMQMigrated contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x239e930 + MSMQ-Migrated contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x239e8b0 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x32a3410 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23af020 + MSMQ-Long-Lived contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x23aefa0 + MSMQ-Long-Lived contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x23f8a80 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x23f8a00 + 1.2.840.113556.1.4.941 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2428a40 + mSMQLongLived contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x24289c0 + MSMQ-Long-Lived contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2475ec0 + struct dsdb_attribute contains 375 bytes in 10 blocks (ref 0) d=(nil) 0x32a32a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2475e30 + MSMQ-Label-Ex contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x248e890 + MSMQ-Label-Ex contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x248e810 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2f72a80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2f84930 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x24df1b0 + 1.2.840.113556.1.4.1415 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24df120 + mSMQLabelEx contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x25579e0 + MSMQ-Label-Ex contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2557960 + struct dsdb_attribute contains 362 bytes in 10 blocks (ref 0) d=(nil) 0x32a3130 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25678a0 + MSMQ-Label contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2567820 + MSMQ-Label contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x257b420 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2fcbe10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3029370 + 2.5.5.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x257b3a0 + 1.2.840.113556.1.4.922 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2587c40 + mSMQLabel contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2587bc0 + MSMQ-Label contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x25a7500 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x32a2fc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25a7470 + MSMQ-Journal-Quota contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x25bf280 + MSMQ-Journal-Quota contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x25bf200 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x25f6810 + 1.2.840.113556.1.4.921 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x25f6790 + mSMQJournalQuota contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2615c20 + MSMQ-Journal-Quota contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2615ba0 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x32a2e50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x261d740 + MSMQ-Journal contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x261d6c0 + MSMQ-Journal contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x263c600 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x263c580 + 1.2.840.113556.1.4.918 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2644270 + mSMQJournal contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x26441f0 + MSMQ-Journal contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2653fd0 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x32a2ce0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2653f40 + MSMQ-Interval2 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x265bcd0 + MSMQ-Interval2 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x265bc50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x269e7b0 + 1.2.840.113556.1.4.1309 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x269e720 + mSMQInterval2 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x26c1290 + MSMQ-Interval2 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x26c1210 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x32a2b70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x271af10 + MSMQ-Interval1 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x271ae90 + MSMQ-Interval1 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2756b40 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2756ac0 + 1.2.840.113556.1.4.1308 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2766b90 + mSMQInterval1 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2766b10 + MSMQ-Interval1 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2787e60 + struct dsdb_attribute contains 414 bytes in 9 blocks (ref 0) d=(nil) 0x32a2a00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2787dd0 + MSMQ-In-Routing-Servers contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x278fb50 + MSMQ-In-Routing-Servers contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x278fac0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2490290 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x286be90 + 1.2.840.113556.1.4.929 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x286be10 + mSMQInRoutingServers contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2874080 + MSMQ-In-Routing-Servers contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2873ff0 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x32a2890 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x287bc40 + MSMQ-Foreign contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x287bbc0 + MSMQ-Foreign contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x28cee90 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x28cee10 + 1.2.840.113556.1.4.934 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28db4d0 + mSMQForeign contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x28db450 + MSMQ-Foreign contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x28d6d50 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x32a2720 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28d6cc0 + MSMQ-Encrypt-Key contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x28df7b0 + MSMQ-Encrypt-Key contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x28df730 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x291e3e0 + 1.2.840.113556.1.4.936 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x291e360 + mSMQEncryptKey contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2926220 + MSMQ-Encrypt-Key contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x29261a0 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x32a25b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2939b40 + MSMQ-Ds-Services contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2939ac0 + MSMQ-Ds-Services contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x297f7a0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x297f720 + 1.2.840.113556.1.4.1228 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2997590 + mSMQDsServices contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2997510 + MSMQ-Ds-Services contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x29a8360 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x32a2440 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29a82d0 + MSMQ-Ds-Service contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x29b4fb0 + MSMQ-Ds-Service contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x29b4f30 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x29ca7a0 + 1.2.840.113556.1.4.1238 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29ca710 + mSMQDsService contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x29d23f0 + MSMQ-Ds-Service contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x29d2370 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x32a22d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29ced50 + MSMQ-Digests-Mig contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x29cecd0 + MSMQ-Digests-Mig contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x29eb510 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x29eb490 + 1.2.840.113556.1.4.966 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a0b3b0 + mSMQDigestsMig contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2a0b330 + MSMQ-Digests-Mig contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2a1afe0 + struct dsdb_attribute contains 371 bytes in 10 blocks (ref 0) d=(nil) 0x32a2160 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a1af50 + MSMQ-Digests contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2a16bb0 + MSMQ-Digests contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2a16b30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x307b5a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3097080 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2af9d00 + 1.2.840.113556.1.4.948 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2af9c80 + mSMQDigests contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2af5790 + MSMQ-Digests contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2af5710 + struct dsdb_attribute contains 433 bytes in 8 blocks (ref 0) d=(nil) 0x32a1ff0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b3b450 + MSMQ-Dependent-Client-Services contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x2b3b3c0 + MSMQ-Dependent-Client-Services contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x2c8d1e0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2c8d160 + 1.2.840.113556.1.4.1226 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cbe8d0 + mSMQDependentClientServices contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2cbe840 + MSMQ-Dependent-Client-Services contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x2cba510 + struct dsdb_attribute contains 429 bytes in 8 blocks (ref 0) d=(nil) 0x32a1e80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cba480 + MSMQ-Dependent-Client-Service contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2cc2d90 + MSMQ-Dependent-Client-Service contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2cc2d00 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2d0fc40 + 1.2.840.113556.1.4.1239 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d0fbb0 + mSMQDependentClientService contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2d0ba80 + MSMQ-Dependent-Client-Service contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2d0b9f0 + struct dsdb_attribute contains 365 bytes in 8 blocks (ref 0) d=(nil) 0x32a1d10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d183e0 + MSMQ-CSP-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2d18360 + MSMQ-CSP-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2d49f20 + 2.5.5.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2d49ea0 + 1.2.840.113556.1.4.940 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d76ea0 + mSMQCSPName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2d76e20 + MSMQ-CSP-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2dc38b0 + struct dsdb_attribute contains 350 bytes in 8 blocks (ref 0) d=(nil) 0x32a1ba0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2dc3820 + MSMQ-Cost contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2dd4580 + MSMQ-Cost contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2dd4500 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2ded290 + 1.2.840.113556.1.4.946 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ded210 + mSMQCost contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2e2dd20 + MSMQ-Cost contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2e2dca0 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x32a1a30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e4f240 + MSMQ-Computer-Type-Ex contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2e4f1c0 + MSMQ-Computer-Type-Ex contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2e66ab0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2e66a30 + 1.2.840.113556.1.4.1417 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e74ce0 + mSMQComputerTypeEx contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2e74c60 + MSMQ-Computer-Type-Ex contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2e70190 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x32a18c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e70100 + MSMQ-Computer-Type contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2e7db20 + MSMQ-Computer-Type contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2e7daa0 + 2.5.5.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e990c0 + 1.2.840.113556.1.4.933 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2e99040 + mSMQComputerType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2e94300 + MSMQ-Computer-Type contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2e94280 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x32a1750 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e9e130 + MSMQ-Base-Priority contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2e9e0b0 + MSMQ-Base-Priority contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2eb8070 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2eb7ff0 + 1.2.840.113556.1.4.920 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2eb1330 + mSMQBasePriority contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2eb12b0 + MSMQ-Base-Priority contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2ec1320 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x32a15e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ec1290 + MSMQ-Authenticate contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ebc480 + MSMQ-Authenticate contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ebc400 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2ed3ff0 + 1.2.840.113556.1.4.923 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ed3f70 + mSMQAuthenticate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2ecf080 + MSMQ-Authenticate contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ecf000 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x32a1470 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2edd980 + Msi-Script-Size contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2edd900 + Msi-Script-Size contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2ef0ac0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2ef0a40 + 1.2.840.113556.1.4.846 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2eeb630 + msiScriptSize contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2eeb5b0 + Msi-Script-Size contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2efa350 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x32a1300 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2efa2c0 + Msi-Script-Path contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2ef54b0 + Msi-Script-Path contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2ef5430 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2f1a920 + 1.2.840.113556.1.4.15 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2f1a8a0 + msiScriptPath contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2f287c0 + Msi-Script-Path contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2f28740 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x32a1190 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f31da0 + Msi-Script-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2f31d20 + Msi-Script-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2f46f90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2f46f10 + 1.2.840.113556.1.4.845 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f56bc0 + msiScriptName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2f56b40 + Msi-Script-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2f5fb70 + struct dsdb_attribute contains 355 bytes in 8 blocks (ref 0) d=(nil) 0x32a1020 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f5fae0 + Msi-Script contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2f5b4f0 + Msi-Script contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2f5b470 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2f721d0 + 1.2.840.113556.1.4.814 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f72150 + msiScript contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2f840b0 + Msi-Script contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2f84030 + struct dsdb_attribute contains 403 bytes in 9 blocks (ref 0) d=(nil) 0x32a0eb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f7fc70 + ms-Imaging-PSP-String contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2f7fbf0 + ms-Imaging-PSP-String contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2f9ee20 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x314e000 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2f9eda0 + 1.2.840.113556.1.4.2054 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f9a6d0 + msImaging-PSPString contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2f9a650 + ms-Imaging-PSP-String contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2fb0400 + struct dsdb_attribute contains 415 bytes in 8 blocks (ref 0) d=(nil) 0x32a0d40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fa7cd0 + ms-Imaging-PSP-Identifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2fa7c40 + ms-Imaging-PSP-Identifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2fb0480 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2fbd8c0 + 1.2.840.113556.1.4.2053 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fbd830 + msImaging-PSPIdentifier contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fcb580 + ms-Imaging-PSP-Identifier contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2fcb4f0 + struct dsdb_attribute contains 383 bytes in 10 blocks (ref 0) d=(nil) 0x32a0bd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fc6a00 + ms-IIS-FTP-Root contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2fc6980 + ms-IIS-FTP-Root contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2fde9c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3173af0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3203a80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2fde940 + 1.2.840.113556.1.4.1785 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fe7a80 + msIIS-FTPRoot contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2fe7a00 + ms-IIS-FTP-Root contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2ff0d30 + struct dsdb_attribute contains 379 bytes in 10 blocks (ref 0) d=(nil) 0x32a0a60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ff0ca0 + ms-IIS-FTP-Dir contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2fec310 + ms-IIS-FTP-Dir contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2fec290 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3229670 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3232700 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3028ae0 + 1.2.840.113556.1.4.1786 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3028a50 + msIIS-FTPDir contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3032160 + ms-IIS-FTP-Dir contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x30320e0 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x32a08f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x302d0e0 + Msi-File-List contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x302d060 + Msi-File-List contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x30449d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3044950 + 1.2.840.113556.1.4.671 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3040290 + msiFileList contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3040210 + Msi-File-List contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x304e180 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x32a0780 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x304e0f0 + ms-ieee-80211-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3052490 + ms-ieee-80211-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3052410 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30696a0 + 1.2.840.113556.1.4.1823 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3069610 + msieee80211-ID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3064690 + ms-ieee-80211-ID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3064610 + struct dsdb_attribute contains 405 bytes in 8 blocks (ref 0) d=(nil) 0x32a0610 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3071f80 + ms-ieee-80211-Data-Type contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3071ef0 + ms-ieee-80211-Data-Type contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x308d030 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x308cfb0 + 1.2.840.113556.1.4.1822 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3088670 + msieee80211-DataType contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x30885f0 + ms-ieee-80211-Data-Type contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30967f0 + struct dsdb_attribute contains 387 bytes in 8 blocks (ref 0) d=(nil) 0x32a04a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3096760 + ms-ieee-80211-Data contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x30915d0 + ms-ieee-80211-Data contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3091550 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30a8d20 + 1.2.840.113556.1.4.1821 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30a8c90 + msieee80211-Data contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x30a4700 + ms-ieee-80211-Data contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x30a4680 + struct dsdb_attribute contains 388 bytes in 9 blocks (ref 0) d=(nil) 0x32a0330 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30b2200 + ms-FVE-VolumeGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x30b2180 + ms-FVE-VolumeGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x30df0a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3256060 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30df020 + 1.2.840.113556.1.4.1998 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30e8910 + msFVE-VolumeGuid contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x30e8890 + ms-FVE-VolumeGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x30f2740 + struct dsdb_attribute contains 412 bytes in 9 blocks (ref 0) d=(nil) 0x32a01c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30e3890 + ms-FVE-RecoveryPassword contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30e3800 + ms-FVE-RecoveryPassword contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30f27c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x252bbc0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30f69c0 + 1.2.840.113556.1.4.1964 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30f6930 + msFVE-RecoveryPassword contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3104810 + ms-FVE-RecoveryPassword contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3104780 + struct dsdb_attribute contains 396 bytes in 9 blocks (ref 0) d=(nil) 0x32a0050 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30ff9a0 + ms-FVE-RecoveryGuid contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x30ff920 + ms-FVE-RecoveryGuid contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x31176f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2773910 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3117670 + 1.2.840.113556.1.4.1965 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31205e0 + msFVE-RecoveryGuid contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3120560 + ms-FVE-RecoveryGuid contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x31292b0 + struct dsdb_attribute contains 388 bytes in 9 blocks (ref 0) d=(nil) 0x329fee0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3129220 + ms-FVE-KeyPackage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3124d30 + ms-FVE-KeyPackage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3124cb0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2048540 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x31444d0 + 1.2.840.113556.1.4.1999 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3144440 + msFVE-KeyPackage contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x313f9b0 + ms-FVE-KeyPackage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x313f930 + struct dsdb_attribute contains 396 bytes in 8 blocks (ref 0) d=(nil) 0x329fd70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x314d760 + ms-FRS-Topology-Pref contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x314d6e0 + ms-FRS-Topology-Pref contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3151e60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3151de0 + 1.2.840.113556.1.4.1692 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x315b4a0 + msFRS-Topology-Pref contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x315b420 + ms-FRS-Topology-Pref contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3169bf0 + struct dsdb_attribute contains 393 bytes in 9 blocks (ref 0) d=(nil) 0x329fc00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3169b60 + ms-FRS-Hub-Member contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3165200 + ms-FRS-Hub-Member contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3165180 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x24128c0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x317caa0 + 1.2.840.113556.1.4.1693 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x317ca10 + msFRS-Hub-Member contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3185f70 + ms-FRS-Hub-Member contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3185ef0 + struct dsdb_attribute contains 380 bytes in 9 blocks (ref 0) d=(nil) 0x329fa90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31813c0 + ms-Exch-Owner-BL contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3181340 + ms-Exch-Owner-BL contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x31a0ff0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x240e700 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x31a0f70 + 1.2.840.113556.1.2.104 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x31afbc0 + ownerBL contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x31afb40 + ms-Exch-Owner-BL contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x31ab2f0 + struct dsdb_attribute contains 394 bytes in 10 blocks (ref 0) d=(nil) 0x329f920 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31ab260 + ms-Exch-LabeledURI contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x31c2390 + ms-Exch-LabeledURI contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x31c2310 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ddd1c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2e79df0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x31c8370 + 1.2.840.113556.1.2.593 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x31c82f0 + msExchLabeledURI contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x31d5f70 + ms-Exch-LabeledURI contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x31ed110 + struct dsdb_attribute contains 417 bytes in 10 blocks (ref 0) d=(nil) 0x329f7b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31d5ee0 + ms-Exch-House-Identifier contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x31daa90 + ms-Exch-House-Identifier contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x31daa00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1de2650 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2de9a30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x31ed090 + 1.2.840.113556.1.2.596 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x31f5ea0 + msExchHouseIdentifier contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x31f5e20 + ms-Exch-House-Identifier contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x32031f0 + struct dsdb_attribute contains 409 bytes in 10 blocks (ref 0) d=(nil) 0x329f640 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3203160 + ms-Exch-Assistant-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x31fe820 + ms-Exch-Assistant-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x31fe7a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2f24db0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a83c00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3228dd0 + 1.2.840.113556.1.2.444 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3228d50 + msExchAssistantName contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x323aff0 + ms-Exch-Assistant-Name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x324d670 + struct dsdb_attribute contains 421 bytes in 8 blocks (ref 0) d=(nil) 0x329f4d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x323af60 + ms-DS-USN-Last-Sync-Success contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32360f0 + ms-DS-USN-Last-Sync-Success contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3236060 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x325eb80 + 1.2.840.113556.1.4.2055 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x324d5e0 + msDS-USNLastSyncSuccess contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3255810 + ms-DS-USN-Last-Sync-Success contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3255780 + struct dsdb_attribute contains 472 bytes in 8 blocks (ref 0) d=(nil) 0x329f360 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3251500 + ms-DS-User-Password-Expiry-Time-Computed contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x3251460 + ms-DS-User-Password-Expiry-Time-Computed contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x325ec00 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x32746d0 + 1.2.840.113556.1.4.1996 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3274640 + msDS-UserPasswordExpiryTimeComputed contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x3286650 + ms-DS-User-Password-Expiry-Time-Computed contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x32865b0 + struct dsdb_attribute contains 455 bytes in 8 blocks (ref 0) d=(nil) 0x329f1f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32811d0 + ms-DS-User-Account-Control-Computed contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x3281140 + ms-DS-User-Account-Control-Computed contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x2e82730 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e826b0 + 1.2.840.113556.1.4.1460 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f08760 + msDS-User-Account-Control-Computed contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x2f086d0 + ms-DS-User-Account-Control-Computed contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x306de70 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x329f080 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x306dde0 + ms-DS-UpdateScript contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x31d20b0 + ms-DS-UpdateScript contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x31d2030 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x325a990 + 1.2.840.113556.1.4.1721 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x325a900 + msDS-UpdateScript contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1966110 + ms-DS-UpdateScript contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2a24260 + struct dsdb_attribute contains 429 bytes in 8 blocks (ref 0) d=(nil) 0x329ef10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1966080 + ms-DS-Trust-Forest-Trust-Info contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1964470 + ms-DS-Trust-Forest-Trust-Info contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19643e0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2a241e0 + 1.2.840.113556.1.4.1702 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b12ae0 + msDS-TrustForestTrustInfo contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1f75200 + ms-DS-Trust-Forest-Trust-Info contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1fd2200 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x329eda0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c849c0 + ms-DS-Top-Quota-Usage contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2d52010 + ms-DS-Top-Quota-Usage contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2d51f90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30608a0 + 1.2.840.113556.1.4.1850 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30451e0 + msDS-TopQuotaUsage contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3060820 + ms-DS-Top-Quota-Usage contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x217a790 + struct dsdb_attribute contains 433 bytes in 10 blocks (ref 0) d=(nil) 0x329ec30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x196cb50 + ms-DS-Tombstone-Quota-Factor contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1ab50b0 + ms-DS-Tombstone-Quota-Factor contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1f70cf0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x26c9470 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ec1b90 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x217a710 + 1.2.840.113556.1.4.1847 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2192850 + msDS-TombstoneQuotaFactor contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x236e550 + ms-DS-Tombstone-Quota-Factor contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x23cfeb0 + struct dsdb_attribute contains 425 bytes in 9 blocks (ref 0) d=(nil) 0x329eac0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23e8b90 + ms-DS-Tasks-For-Az-Task-BL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x254ff40 + ms-DS-Tasks-For-Az-Task-BL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x259f340 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23e1cc0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x21001e0 + 1.2.840.113556.1.4.1811 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fd9fa0 + msDS-TasksForAzTaskBL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2100160 + ms-DS-Tasks-For-Az-Task-BL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x30bf970 + struct dsdb_attribute contains 414 bytes in 9 blocks (ref 0) d=(nil) 0x329e950 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19be3d0 + ms-DS-Tasks-For-Az-Task contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23cf280 + ms-DS-Tasks-For-Az-Task contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23ec030 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23ddb00 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2de1330 + 1.2.840.113556.1.4.1810 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2dd4d90 + msDS-TasksForAzTask contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2de12b0 + ms-DS-Tasks-For-Az-Task contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f1b0f0 + struct dsdb_attribute contains 425 bytes in 9 blocks (ref 0) d=(nil) 0x329e7e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f28fd0 + ms-DS-Tasks-For-Az-Role-BL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2fa84b0 + ms-DS-Tasks-For-Az-Role-BL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2fb11d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23d9870 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3117f90 + 1.2.840.113556.1.4.1815 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3100210 + msDS-TasksForAzRoleBL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3117f10 + ms-DS-Tasks-For-Az-Role-BL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x31e9470 + struct dsdb_attribute contains 414 bytes in 9 blocks (ref 0) d=(nil) 0x329e670 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31ed900 + ms-DS-Tasks-For-Az-Role contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x325f420 + ms-DS-Tasks-For-Az-Role contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x326c130 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23d5690 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1b5bfc0 + 1.2.840.113556.1.4.1814 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b343c0 + msDS-TasksForAzRole contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1b5bf40 + ms-DS-Tasks-For-Az-Role contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cc2920 + struct dsdb_attribute contains 441 bytes in 8 blocks (ref 0) d=(nil) 0x329e500 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e5fa20 + ms-DS-Supported-Encryption-Types contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x1ecfb90 + ms-DS-Supported-Encryption-Types contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x1f04140 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x207fa30 + 1.2.840.113556.1.4.1963 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fe9950 + msDS-SupportedEncryptionTypes contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2018670 + ms-DS-Supported-Encryption-Types contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x202fd30 + struct dsdb_attribute contains 391 bytes in 9 blocks (ref 0) d=(nil) 0x329e390 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2057cc0 + ms-DS-SPN-Suffixes contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x207f9b0 + ms-DS-SPN-Suffixes contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x21a2f50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x308d8e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21a2ed0 + 1.2.840.113556.1.4.1715 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21bbca0 + msDS-SPNSuffixes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2218700 + ms-DS-SPN-Suffixes contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2218680 + struct dsdb_attribute contains 410 bytes in 10 blocks (ref 0) d=(nil) 0x329e220 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22c0f50 + ms-DS-Source-Object-DN contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x231b240 + ms-DS-Source-Object-DN contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x231b1c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x30a95d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x316a490 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2424c10 + 1.2.840.113556.1.4.1879 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2401280 + msDS-SourceObjectDN contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2424b90 + ms-DS-Source-Object-DN contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x251f460 + struct dsdb_attribute contains 372 bytes in 8 blocks (ref 0) d=(nil) 0x329e0b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x249acb0 + ms-DS-SiteName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x251f3e0 + ms-DS-SiteName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x25b6eb0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x25b6e30 + 1.2.840.113556.1.4.1961 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25ceb50 + msDS-SiteName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x274e030 + ms-DS-SiteName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x274dfb0 + struct dsdb_attribute contains 392 bytes in 8 blocks (ref 0) d=(nil) 0x329df40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b27000 + ms-DS-Site-Affinity contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2b64380 + ms-DS-Site-Affinity contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2b64300 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a08d50 + 1.2.840.113556.1.4.1443 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2db3270 + msDS-Site-Affinity contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1a08cd0 + ms-DS-Site-Affinity contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1d71190 + struct dsdb_attribute contains 376 bytes in 9 blocks (ref 0) d=(nil) 0x329ddd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a594f0 + ms-DS-Settings contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1d71110 + ms-DS-Settings contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2110a50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31d6810 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21109d0 + 1.2.840.113556.1.4.1697 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x214d1a0 + msDS-Settings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x266be50 + ms-DS-Settings contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x266bdd0 + struct dsdb_attribute contains 452 bytes in 8 blocks (ref 0) d=(nil) 0x329dc60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21d3da0 + ms-DS-Security-Group-Extra-Classes contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x2207520 + ms-DS-Security-Group-Extra-Classes contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x232b860 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x26304f0 + 1.2.840.113556.1.4.1688 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b70bb0 + msDS-Security-Group-Extra-Classes contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1ccb300 + ms-DS-Security-Group-Extra-Classes contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1e46f30 + struct dsdb_attribute contains 437 bytes in 10 blocks (ref 0) d=(nil) 0x329daf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e4f980 + ms-DS-Secondary-KrbTgt-Number contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x209bcf0 + ms-DS-Secondary-KrbTgt-Number contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2381d30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3281ee0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e6c260 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2630470 + 1.2.840.113556.1.4.1929 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28f9810 + msDS-SecondaryKrbTgtNumber contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2953d20 + ms-DS-Secondary-KrbTgt-Number contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x299bd70 + struct dsdb_attribute contains 423 bytes in 9 blocks (ref 0) d=(nil) 0x329d980 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29cae20 + ms-DS-SD-Reference-Domain contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x29d3160 + ms-DS-SD-Reference-Domain contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x29db640 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23b0bb0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2dc84d0 + 1.2.840.113556.1.4.1711 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b6c440 + msDS-SDReferenceDomain contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2dc8450 + ms-DS-SD-Reference-Domain contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2c21cc0 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x329d810 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cc3570 + ms-ds-Schema-Extensions contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d41e40 + ms-ds-Schema-Extensions contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d776b0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2e62370 + 1.2.840.113556.1.4.1440 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2dedab0 + msDs-Schema-Extensions contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2e622f0 + ms-ds-Schema-Extensions contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e6bf70 + struct dsdb_attribute contains 431 bytes in 9 blocks (ref 0) d=(nil) 0x329d6a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ecb600 + ms-DS-Reveal-OnDemand-Group contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2ede010 + ms-DS-Reveal-OnDemand-Group contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2ef12e0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23a8a00 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2f9f690 + 1.2.840.113556.1.4.1928 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f5bd00 + msDS-RevealOnDemandGroup contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2f69ea0 + ms-DS-Reveal-OnDemand-Group contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2f729f0 + struct dsdb_attribute contains 405 bytes in 9 blocks (ref 0) d=(nil) 0x329d530 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f848a0 + ms-DS-Revealed-Users contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2f9f610 + ms-DS-Revealed-Users contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2fb9da0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x23a4660 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2fb9d20 + 1.2.840.113556.1.4.1924 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fcbd80 + msDS-RevealedUsers contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2fdf0d0 + ms-DS-Revealed-Users contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2fdf050 + struct dsdb_attribute contains 411 bytes in 9 blocks (ref 0) d=(nil) 0x329d3c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30292e0 + ms-DS-Revealed-List-BL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x303be30 + ms-DS-Revealed-List-BL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x303bdb0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23a0310 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x30803a0 + 1.2.840.113556.1.4.1975 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x307b510 + msDS-RevealedListBL contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3080320 + ms-DS-Revealed-List-BL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x30d1a30 + struct dsdb_attribute contains 402 bytes in 9 blocks (ref 0) d=(nil) 0x329d250 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3096ff0 + ms-DS-Revealed-List contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x30d19b0 + ms-DS-Revealed-List contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3120e70 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x239c150 + 2.5.5.14 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3120df0 + 1.2.840.113556.1.4.1940 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x314df70 + msDS-RevealedList contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x315bd30 + ms-DS-Revealed-List contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x315bcb0 + struct dsdb_attribute contains 400 bytes in 9 blocks (ref 0) d=(nil) 0x329d0e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3173a60 + ms-DS-Revealed-DSAs contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x31867d0 + ms-DS-Revealed-DSAs contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3186750 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2398090 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x3215570 + 1.2.840.113556.1.4.1930 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32039f0 + msDS-RevealedDSAs contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x32154f0 + ms-DS-Revealed-DSAs contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3286ec0 + struct dsdb_attribute contains 441 bytes in 8 blocks (ref 0) d=(nil) 0x329cf70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x32295e0 + ms-DS-Retired-Repl-NC-Signatures contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x3232670 + ms-DS-Retired-Repl-NC-Signatures contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x3255fd0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3286e40 + 1.2.840.113556.1.4.1826 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2dfa620 + msDS-RetiredReplNCSignatures contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2e2adb0 + ms-DS-Retired-Repl-NC-Signatures contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x1c273b0 + struct dsdb_attribute contains 400 bytes in 9 blocks (ref 0) d=(nil) 0x329ce00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1dda150 + ms-DS-Resultant-PSO contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x252bb40 + ms-DS-Resultant-PSO contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2773890 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x238fd00 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x20484c0 + 1.2.840.113556.1.4.2022 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x257bc60 + msDS-ResultantPSO contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ddd140 + ms-DS-Resultant-PSO contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2e79d70 + struct dsdb_attribute contains 464 bytes in 8 blocks (ref 0) d=(nil) 0x329cc90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30df8d0 + ms-DS-Required-Forest-Behavior-Version contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x30e9140 + ms-DS-Required-Forest-Behavior-Version contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x189ce20 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1de25d0 + 1.2.840.113556.1.4.2079 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1dea9e0 + msDS-RequiredForestBehaviorVersion contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1eeb530 + ms-DS-Required-Forest-Behavior-Version contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x1f44a90 + struct dsdb_attribute contains 464 bytes in 8 blocks (ref 0) d=(nil) 0x329cb20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fc67d0 + ms-DS-Required-Domain-Behavior-Version contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x1fde450 + ms-DS-Required-Domain-Behavior-Version contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x21ebc50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2de99b0 + 1.2.840.113556.1.4.2066 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27c7ba0 + msDS-RequiredDomainBehaviorVersion contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x2ba12c0 + ms-DS-Required-Domain-Behavior-Version contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x2bd8c00 + struct dsdb_attribute contains 417 bytes in 8 blocks (ref 0) d=(nil) 0x329c9b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2be92c0 + ms-DS-Repl-Value-Meta-Data contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2c99be0 + ms-DS-Repl-Value-Meta-Data contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2d1cb90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2f24d30 + 1.2.840.113556.1.4.1708 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2287580 + msDS-ReplValueMetaData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1a83b80 + ms-DS-Repl-Value-Meta-Data contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1a94aa0 + struct dsdb_attribute contains 495 bytes in 8 blocks (ref 0) d=(nil) 0x329c840 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d174c0 + ms-DS-Replication-Notify-Subsequent-DSA-Delay contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x1e36460 + ms-DS-Replication-Notify-Subsequent-DSA-Delay contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x1eef7c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x26c93f0 + 1.2.840.113556.1.4.1664 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2802760 + msDS-Replication-Notify-Subsequent-DSA-Delay contains 45 bytes in 1 blocks (ref 0) d=(nil) 0x284c680 + ms-DS-Replication-Notify-Subsequent-DSA-Delay contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x28dfff0 + struct dsdb_attribute contains 475 bytes in 8 blocks (ref 0) d=(nil) 0x329c6d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29b57e0 + ms-DS-Replication-Notify-First-DSA-Delay contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x29c23a0 + ms-DS-Replication-Notify-First-DSA-Delay contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x2bb5820 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2ec1b10 + 1.2.840.113556.1.4.1663 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ed90a0 + msDS-Replication-Notify-First-DSA-Delay contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2f3e8d0 + ms-DS-Replication-Notify-First-DSA-Delay contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x30167a0 + struct dsdb_attribute contains 403 bytes in 8 blocks (ref 0) d=(nil) 0x329c560 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3032990 + ms-DS-ReplicationEpoch contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x308d860 + ms-DS-ReplicationEpoch contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x30a9550 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x316a410 + 1.2.840.113556.1.4.1720 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31abb20 + msDS-ReplicationEpoch contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x31d6790 + ms-DS-ReplicationEpoch contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3281e60 + struct dsdb_attribute contains 429 bytes in 9 blocks (ref 0) d=(nil) 0x329c3f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c152b0 + MS-DS-Replicates-NC-Reason contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1bad760 + MS-DS-Replicates-NC-Reason contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2b67a90 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2373aa0 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x29c5c60 + 1.2.840.113556.1.4.1408 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bc6010 + mS-DS-ReplicatesNCReason contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1eb76c0 + MS-DS-Replicates-NC-Reason contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1efbd70 + struct dsdb_attribute contains 433 bytes in 8 blocks (ref 0) d=(nil) 0x329c280 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x215d860 + ms-DS-Repl-Attribute-Meta-Data contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x2351cf0 + ms-DS-Repl-Attribute-Meta-Data contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x295f530 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2dbf440 + 1.2.840.113556.1.4.1707 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fa3130 + msDS-ReplAttributeMetaData contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1f64de0 + ms-DS-Repl-Attribute-Meta-Data contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1fa5450 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x329c110 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1895bb0 + ms-DS-Quota-Used contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1af0280 + ms-DS-Quota-Used contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1afcc10 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1c3a510 + 1.2.840.113556.1.4.1849 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c7a320 + msDS-QuotaUsed contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1c7f240 + ms-DS-Quota-Used contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c9eba0 + struct dsdb_attribute contains 399 bytes in 10 blocks (ref 0) d=(nil) 0x329bfa0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cd2d30 + ms-DS-Quota-Trustee contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1d12e70 + ms-DS-Quota-Trustee contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1e78100 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e6c1f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19b5b00 + 2.5.5.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1f3be10 + 1.2.840.113556.1.4.1844 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f9d780 + msDS-QuotaTrustee contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1fb51d0 + ms-DS-Quota-Trustee contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2005370 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x19b6270 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x205bbf0 + ms-DS-Quota-Effective contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x20879d0 + ms-DS-Quota-Effective contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x20e2c50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2466300 + 1.2.840.113556.1.4.1848 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24ab340 + msDS-QuotaEffective contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x24cae40 + ms-DS-Quota-Effective contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19b63e0 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x19b5ef0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2605930 + ms-DS-Quota-Amount contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x287b880 + ms-DS-Quota-Amount contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x290dcf0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b61f0 + 1.2.840.113556.1.4.1845 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b6160 + msDS-QuotaAmount contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19b60e0 + ms-DS-Quota-Amount contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19b6060 + struct dsdb_attribute contains 403 bytes in 9 blocks (ref 0) d=(nil) 0x19b5b70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x296f190 + ms-DS-PSO-Applies-To contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2986ef0 + ms-DS-PSO-Applies-To contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x29ace60 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x235b550 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b5e70 + 1.2.840.113556.1.4.2020 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b5de0 + msDS-PSOAppliesTo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19b5d60 + ms-DS-PSO-Applies-To contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19b5ce0 + struct dsdb_attribute contains 392 bytes in 9 blocks (ref 0) d=(nil) 0x19b5800 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29fed80 + ms-DS-PSO-Applied contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2a06bb0 + ms-DS-PSO-Applied contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ad18a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23571c0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b5a80 + 1.2.840.113556.1.4.2021 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b59f0 + msDS-PSOApplied contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19b5970 + ms-DS-PSO-Applied contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2c093a0 + struct dsdb_attribute contains 415 bytes in 9 blocks (ref 0) d=(nil) 0x19b5470 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b84440 + ms-DS-Promotion-Settings contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2b88fb0 + ms-DS-Promotion-Settings contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2c01400 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32677a0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19b5780 + 1.2.840.113556.1.4.1962 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b56f0 + msDS-PromotionSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19b5670 + ms-DS-Promotion-Settings contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19b55e0 + struct dsdb_attribute contains 395 bytes in 8 blocks (ref 0) d=(nil) 0x19b50f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c1cf10 + ms-DS-Principal-Name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2d45f70 + ms-DS-Principal-Name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2d934a0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19b53f0 + 1.2.840.113556.1.4.1865 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b5360 + msDS-PrincipalName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19b52e0 + ms-DS-Principal-Name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19b5260 + struct dsdb_attribute contains 417 bytes in 9 blocks (ref 0) d=(nil) 0x19b4de0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e1aa40 + ms-DS-Preferred-GC-Site contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e4b730 + ms-DS-Preferred-GC-Site contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2efe990 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x234aff0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b5070 + 1.2.840.113556.1.4.1444 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b4fe0 + msDS-Preferred-GC-Site contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1b953d0 + ms-DS-Preferred-GC-Site contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b4f50 + struct dsdb_attribute contains 418 bytes in 10 blocks (ref 0) d=(nil) 0x19b4ad0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30ba660 + ms-DS-Phonetic-Last-Name contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x31f1700 + ms-DS-Phonetic-Last-Name contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3231f70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3267730 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x288b7c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19b4d60 + 1.2.840.113556.1.4.1943 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b4cd0 + msDS-PhoneticLastName contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2ab1ff0 + ms-DS-Phonetic-Last-Name contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19b4c40 + struct dsdb_attribute contains 422 bytes in 10 blocks (ref 0) d=(nil) 0x19b4750 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22760f0 + ms-DS-Phonetic-First-Name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x27328b0 + ms-DS-Phonetic-First-Name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2c4ad70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x288b750 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19b4a60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19b49e0 + 1.2.840.113556.1.4.1942 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b4950 + msDS-PhoneticFirstName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x204c3a0 + ms-DS-Phonetic-First-Name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19b48c0 + struct dsdb_attribute contains 430 bytes in 10 blocks (ref 0) d=(nil) 0x19b43c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c91860 + ms-DS-Phonetic-Display-Name contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2cff3f0 + ms-DS-Phonetic-Display-Name contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1d44190 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x203fd80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19b46e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1bdeb30 + 1.2.840.113556.1.4.1946 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b4650 + msDS-PhoneticDisplayName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19b45c0 + ms-DS-Phonetic-Display-Name contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19b4530 + struct dsdb_attribute contains 423 bytes in 10 blocks (ref 0) d=(nil) 0x19b4030 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31d15c0 + ms-DS-Phonetic-Department contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1ab05b0 + ms-DS-Phonetic-Department contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x293a820 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2cbf100 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19b4350 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2aaa300 + 1.2.840.113556.1.4.1944 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b42c0 + msDS-PhoneticDepartment contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b4230 + ms-DS-Phonetic-Department contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19b41a0 + struct dsdb_attribute contains 430 bytes in 10 blocks (ref 0) d=(nil) 0x19b3c90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2643c60 + ms-DS-Phonetic-Company-Name contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x26dff00 + ms-DS-Phonetic-Company-Name contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x28b2dd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2905a80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19b3880 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19b3fb0 + 1.2.840.113556.1.4.1945 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b3f20 + msDS-PhoneticCompanyName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19b3e90 + ms-DS-Phonetic-Company-Name contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19b3e00 + struct dsdb_attribute contains 459 bytes in 8 blocks (ref 0) d=(nil) 0x19b38f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2dd0020 + MS-DS-Per-User-Trust-Tombstones-Quota contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x2dd8690 + MS-DS-Per-User-Trust-Tombstones-Quota contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x306d370 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b3c10 + 1.2.840.113556.1.4.1790 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b3b80 + msDS-PerUserTrustTombstonesQuota contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x19b3af0 + MS-DS-Per-User-Trust-Tombstones-Quota contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x19b3a60 + struct dsdb_attribute contains 416 bytes in 8 blocks (ref 0) d=(nil) 0x19b34f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1afbea0 + MS-DS-Per-User-Trust-Quota contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2322a30 + MS-DS-Per-User-Trust-Quota contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x26a9d60 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b3800 + 1.2.840.113556.1.4.1788 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b3770 + msDS-PerUserTrustQuota contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19b36f0 + MS-DS-Per-User-Trust-Quota contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19b3660 + struct dsdb_attribute contains 453 bytes in 9 blocks (ref 0) d=(nil) 0x19b3150 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ae8280 + ms-DS-Password-Settings-Precedence contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1b08dc0 + ms-DS-Password-Settings-Precedence contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1bba560 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19b30e0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b3470 + 1.2.840.113556.1.4.2023 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b33e0 + msDS-PasswordSettingsPrecedence contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x19b3350 + ms-DS-Password-Settings-Precedence contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x19b32c0 + struct dsdb_attribute contains 488 bytes in 8 blocks (ref 0) d=(nil) 0x19b2d20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1db9f20 + ms-DS-Password-Reversible-Encryption-Enabled contains 45 bytes in 1 blocks (ref 0) d=(nil) 0x1f70ac0 + ms-DS-Password-Reversible-Encryption-Enabled contains 45 bytes in 1 blocks (ref 0) d=(nil) 0x1f78d50 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b3060 + 1.2.840.113556.1.4.2016 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b2fd0 + msDS-PasswordReversibleEncryptionEnabled contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x19b2f30 + ms-DS-Password-Reversible-Encryption-Enabled contains 45 bytes in 1 blocks (ref 0) d=(nil) 0x19b2e90 + struct dsdb_attribute contains 437 bytes in 10 blocks (ref 0) d=(nil) 0x19b2980 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21e32b0 + ms-DS-Password-History-Length contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x22d8c90 + ms-DS-Password-History-Length contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x24feff0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x25271b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19b2570 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b2ca0 + 1.2.840.113556.1.4.2014 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b2c10 + msDS-PasswordHistoryLength contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19b2b80 + ms-DS-Password-History-Length contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19b2af0 + struct dsdb_attribute contains 445 bytes in 8 blocks (ref 0) d=(nil) 0x19b25e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x278f530 + ms-DS-Password-Complexity-Enabled contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x279f740 + ms-DS-Password-Complexity-Enabled contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x288f9d0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b2900 + 1.2.840.113556.1.4.2015 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b2870 + msDS-PasswordComplexityEnabled contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x19b27e0 + ms-DS-Password-Complexity-Enabled contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x19b2750 + struct dsdb_attribute contains 396 bytes in 8 blocks (ref 0) d=(nil) 0x19b2270 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2935aa0 + ms-DS-Other-Settings contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x29a4930 + ms-DS-Other-Settings contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x29e2f40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19b24f0 + 1.2.840.113556.1.4.1621 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b2460 + msDS-Other-Settings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19b23e0 + ms-DS-Other-Settings contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2c5e5e0 + struct dsdb_attribute contains 430 bytes in 10 blocks (ref 0) d=(nil) 0x19b1ed0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b0ec70 + ms-DS-Optional-Feature-GUID contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2b22790 + ms-DS-Optional-Feature-GUID contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2b99090 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ba9670 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19adbd0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19b21f0 + 1.2.840.113556.1.4.2062 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b2160 + msDS-OptionalFeatureGUID contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19b20d0 + ms-DS-Optional-Feature-GUID contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19b2040 + struct dsdb_attribute contains 425 bytes in 8 blocks (ref 0) d=(nil) 0x19b1b30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d204c0 + ms-DS-Optional-Feature-Flags contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2d6ee30 + ms-DS-Optional-Feature-Flags contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2d832b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b1e50 + 1.2.840.113556.1.4.2063 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b1dc0 + msDS-OptionalFeatureFlags contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19b1d30 + ms-DS-Optional-Feature-Flags contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x19b1ca0 + struct dsdb_attribute contains 445 bytes in 9 blocks (ref 0) d=(nil) 0x19b1790 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2dfdc30 + ms-DS-Operations-For-Az-Task-BL contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2e2a1e0 + ms-DS-Operations-For-Az-Task-BL contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2ffa1a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x230c290 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b1ab0 + 1.2.840.113556.1.4.1809 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b1a20 + msDS-OperationsForAzTaskBL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19b1990 + ms-DS-Operations-For-Az-Task-BL contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x19b1900 + struct dsdb_attribute contains 434 bytes in 9 blocks (ref 0) d=(nil) 0x19b13f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31fa110 + ms-DS-Operations-For-Az-Task contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x324caf0 + ms-DS-Operations-For-Az-Task contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3259e90 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23080a0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b1710 + 1.2.840.113556.1.4.1808 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b1680 + msDS-OperationsForAzTask contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19b15f0 + ms-DS-Operations-For-Az-Task contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x19b1560 + struct dsdb_attribute contains 445 bytes in 9 blocks (ref 0) d=(nil) 0x19b1050 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e02540 + ms-DS-Operations-For-Az-Role-BL contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x20105b0 + ms-DS-Operations-For-Az-Role-BL contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x227a2a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2303e20 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b1370 + 1.2.840.113556.1.4.1813 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b12e0 + msDS-OperationsForAzRoleBL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19b1250 + ms-DS-Operations-For-Az-Role-BL contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x19b11c0 + struct dsdb_attribute contains 434 bytes in 9 blocks (ref 0) d=(nil) 0x19b0cb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x275e0b0 + ms-DS-Operations-For-Az-Role contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1c1b460 + ms-DS-Operations-For-Az-Role contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1f58ed0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22ffc60 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b0fd0 + 1.2.840.113556.1.4.1812 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b0f40 + msDS-OperationsForAzRole contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19b0eb0 + ms-DS-Operations-For-Az-Role contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x19b0e20 + struct dsdb_attribute contains 419 bytes in 9 blocks (ref 0) d=(nil) 0x19b0920 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31a6fd0 + ms-DS-OIDToGroup-Link-BL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x3279780 + ms-DS-OIDToGroup-Link-BL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x328d0e0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22fb8d0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b0c30 + 1.2.840.113556.1.4.2052 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b0ba0 + msDS-OIDToGroupLinkBl contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19b0b20 + ms-DS-OIDToGroup-Link-BL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19b0a90 + struct dsdb_attribute contains 408 bytes in 9 blocks (ref 0) d=(nil) 0x19b05a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b6c200 + ms-DS-OIDToGroup-Link contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b74540 + ms-DS-OIDToGroup-Link contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b78ed0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22f75d0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b08a0 + 1.2.840.113556.1.4.2051 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b0810 + msDS-OIDToGroupLink contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19b0790 + ms-DS-OIDToGroup-Link contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19b0710 + struct dsdb_attribute contains 423 bytes in 9 blocks (ref 0) d=(nil) 0x19b0210 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c3e6e0 + ms-DS-Object-Reference-BL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1c8ace0 + ms-DS-Object-Reference-BL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1d2c160 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22f3510 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b0520 + 1.2.840.113556.1.4.1841 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b0490 + msDS-ObjectReferenceBL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19b0410 + ms-DS-Object-Reference-BL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19b0380 + struct dsdb_attribute contains 412 bytes in 9 blocks (ref 0) d=(nil) 0x19aff10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e7f900 + ms-DS-Object-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1ee68d0 + ms-DS-Object-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1f24020 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22ef550 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b0190 + 1.2.840.113556.1.4.1840 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b0100 + msDS-ObjectReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19b0080 + ms-DS-Object-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20088d0 + struct dsdb_attribute contains 468 bytes in 8 blocks (ref 0) d=(nil) 0x19afb70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f99410 + ms-DS-Non-Security-Group-Extra-Classes contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x1fa8eb0 + ms-DS-Non-Security-Group-Extra-Classes contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x2000d00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19afe90 + 1.2.840.113556.1.4.1689 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19afe00 + msDS-Non-Security-Group-Extra-Classes contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x19afd70 + ms-DS-Non-Security-Group-Extra-Classes contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x19afce0 + struct dsdb_attribute contains 403 bytes in 9 blocks (ref 0) d=(nil) 0x19af7f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20cef20 + ms-DS-Non-Members-BL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x20f4d10 + ms-DS-Non-Members-BL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x219a7b0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22e7550 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19afaf0 + 1.2.840.113556.1.4.1794 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19afa60 + msDS-NonMembersBL contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19af9e0 + ms-DS-Non-Members-BL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19af960 + struct dsdb_attribute contains 392 bytes in 9 blocks (ref 0) d=(nil) 0x19af470 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22e0fc0 + ms-DS-Non-Members contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x245e9a0 + ms-DS-Non-Members contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x24930b0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22e3120 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19af770 + 1.2.840.113556.1.4.1793 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19af6e0 + msDS-NonMembers contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19af660 + ms-DS-Non-Members contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19af5e0 + struct dsdb_attribute contains 419 bytes in 9 blocks (ref 0) d=(nil) 0x19af0e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2597200 + ms-DS-Never-Reveal-Group contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x25b6c00 + ms-DS-Never-Reveal-Group contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x25c2590 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22dee30 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19af3f0 + 1.2.840.113556.1.4.1926 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19af360 + msDS-NeverRevealGroup contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19af2e0 + ms-DS-Never-Reveal-Group contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19af250 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x19aed60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2755fc0 + ms-DS-NC-Type contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x276eb20 + ms-DS-NC-Type contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2776e80 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19af060 + 1.2.840.113556.1.4.2024 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19aefd0 + msDS-NcType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19aef50 + ms-DS-NC-Type contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19aeed0 + struct dsdb_attribute contains 453 bytes in 9 blocks (ref 0) d=(nil) 0x19ae9c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x283c350 + ms-DS-NC-RO-Replica-Locations-BL contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x2850570 + ms-DS-NC-RO-Replica-Locations-BL contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x286f190 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22d6c80 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19aece0 + 1.2.840.113556.1.4.1968 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19aec50 + msDS-NC-RO-Replica-Locations-BL contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x19aebc0 + ms-DS-NC-RO-Replica-Locations-BL contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x19aeb30 + struct dsdb_attribute contains 441 bytes in 9 blocks (ref 0) d=(nil) 0x19ae6a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28e3da0 + ms-DS-NC-RO-Replica-Locations contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x28ec570 + ms-DS-NC-RO-Replica-Locations contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x28fd400 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22d29b0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x29a3d60 + 1.2.840.113556.1.4.1967 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ae930 + msDS-NC-RO-Replica-Locations contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x19ae8a0 + ms-DS-NC-RO-Replica-Locations contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19ae810 + struct dsdb_attribute contains 441 bytes in 8 blocks (ref 0) d=(nil) 0x19ae380 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2972be0 + ms-DS-NC-Repl-Outbound-Neighbors contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x298aa90 + ms-DS-NC-Repl-Outbound-Neighbors contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x299f690 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2a9e010 + 1.2.840.113556.1.4.1706 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ae610 + msDS-NCReplOutboundNeighbors contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x19ae580 + ms-DS-NC-Repl-Outbound-Neighbors contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x19ae4f0 + struct dsdb_attribute contains 437 bytes in 8 blocks (ref 0) d=(nil) 0x19adfe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a2bca0 + ms-DS-NC-Repl-Inbound-Neighbors contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2a4bc00 + ms-DS-NC-Repl-Inbound-Neighbors contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2a67fe0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19ae300 + 1.2.840.113556.1.4.1705 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ae270 + msDS-NCReplInboundNeighbors contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19ae1e0 + ms-DS-NC-Repl-Inbound-Neighbors contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x19ae150 + struct dsdb_attribute contains 429 bytes in 9 blocks (ref 0) d=(nil) 0x19adc40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ac9c60 + ms-DS-NC-Replica-Locations contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2afe5e0 + ms-DS-NC-Replica-Locations contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2b0e0a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22c6480 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19adf60 + 1.2.840.113556.1.4.1661 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19aded0 + msDS-NC-Replica-Locations contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19ade40 + ms-DS-NC-Replica-Locations contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19addb0 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x19ad850 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b36e80 + ms-DS-NC-Repl-Cursors contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2b8c340 + ms-DS-NC-Repl-Cursors contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2b9c510 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19adb50 + 1.2.840.113556.1.4.1704 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19adac0 + msDS-NCReplCursors contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19ada40 + ms-DS-NC-Repl-Cursors contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19ad9c0 + struct dsdb_attribute contains 437 bytes in 10 blocks (ref 0) d=(nil) 0x19ad4c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bd8020 + ms-DS-Minimum-Password-Length contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2bec760 + ms-DS-Minimum-Password-Length contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2c2d870 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2c35ed0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19ad7e0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2ce3360 + 1.2.840.113556.1.4.2013 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ad750 + msDS-MinimumPasswordLength contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19ad6c0 + ms-DS-Minimum-Password-Length contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19ad630 + struct dsdb_attribute contains 422 bytes in 9 blocks (ref 0) d=(nil) 0x19ad120 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ca1fd0 + ms-DS-Minimum-Password-Age contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2cc6d60 + ms-DS-Minimum-Password-Age contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2ccf1e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19acd10 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19ad440 + 1.2.840.113556.1.4.2012 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ad3b0 + msDS-MinimumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ad320 + ms-DS-Minimum-Password-Age contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19ad290 + struct dsdb_attribute contains 433 bytes in 9 blocks (ref 0) d=(nil) 0x19acd80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d396d0 + ms-DS-Members-For-Az-Role-BL contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2d3d7e0 + ms-DS-Members-For-Az-Role-BL contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2d59ed0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22b5cd0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19ad0a0 + 1.2.840.113556.1.4.1807 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ad010 + msDS-MembersForAzRoleBL contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19acf80 + ms-DS-Members-For-Az-Role-BL contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x19acef0 + struct dsdb_attribute contains 422 bytes in 9 blocks (ref 0) d=(nil) 0x19ac980 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d7f930 + ms-DS-Members-For-Az-Role contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2db3040 + ms-DS-Members-For-Az-Role contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2dbb1f0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22b1930 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19acc90 + 1.2.840.113556.1.4.1806 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19acc00 + msDS-MembersForAzRole contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19acb80 + ms-DS-Members-For-Az-Role contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19acaf0 + struct dsdb_attribute contains 382 bytes in 9 blocks (ref 0) d=(nil) 0x19ac610 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2de0530 + ms-DS-Max-Values contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2de8de0 + ms-DS-Max-Values contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2df57d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19ac910 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19ac890 + 1.2.840.113556.1.4.1842 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ac800 + msDs-MaxValues contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19ac780 + ms-DS-Max-Values contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2f8d3d0 + struct dsdb_attribute contains 422 bytes in 9 blocks (ref 0) d=(nil) 0x19ac270 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e81c40 + ms-DS-Maximum-Password-Age contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2ee6e80 + ms-DS-Maximum-Password-Age contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2f24160 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19abe80 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19ac590 + 1.2.840.113556.1.4.2011 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ac500 + msDS-MaximumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ac470 + ms-DS-Maximum-Password-Age contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19ac3e0 + struct dsdb_attribute contains 392 bytes in 9 blocks (ref 0) d=(nil) 0x19abef0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30c33b0 + ms-DS-Mastered-By contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x3160a70 + ms-DS-Mastered-By contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x31b92c0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22a5390 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19ac1f0 + 1.2.840.113556.1.4.1837 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ac160 + msDs-masteredBy contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19ac0e0 + ms-DS-Mastered-By contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19ac060 + struct dsdb_attribute contains 422 bytes in 8 blocks (ref 0) d=(nil) 0x19abae0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3210350 + MS-DS-Machine-Account-Quota contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3224380 + MS-DS-Machine-Account-Quota contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x322cfd0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19abe00 + 1.2.840.113556.1.4.1411 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19abd70 + ms-DS-MachineAccountQuota contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19abce0 + MS-DS-Machine-Account-Quota contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19abc50 + struct dsdb_attribute contains 436 bytes in 9 blocks (ref 0) d=(nil) 0x19ab6d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x326ffa0 + ms-DS-Logon-Time-Sync-Interval contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x19f0ac0 + ms-DS-Logon-Time-Sync-Interval contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x19fc4a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19aba70 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19ab9f0 + 1.2.840.113556.1.4.1784 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ab960 + msDS-LogonTimeSyncInterval contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19ab8d0 + ms-DS-Logon-Time-Sync-Interval contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x19ab840 + struct dsdb_attribute contains 414 bytes in 10 blocks (ref 0) d=(nil) 0x19ab350 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b1c380 + ms-DS-Lockout-Threshold contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c96dc0 + ms-DS-Lockout-Threshold contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d34ab0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1d3bf40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19ab660 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19ab5e0 + 1.2.840.113556.1.4.2019 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ab550 + msDS-LockoutThreshold contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x21f7880 + ms-DS-Lockout-Threshold contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ab4c0 + struct dsdb_attribute contains 446 bytes in 9 blocks (ref 0) d=(nil) 0x19aaf40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20a7d50 + ms-DS-Lockout-Observation-Window contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x216d9f0 + ms-DS-Lockout-Observation-Window contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x2181c00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19ab2e0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19ab260 + 1.2.840.113556.1.4.2017 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ab1d0 + msDS-LockoutObservationWindow contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19ab140 + ms-DS-Lockout-Observation-Window contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x19ab0b0 + struct dsdb_attribute contains 407 bytes in 9 blocks (ref 0) d=(nil) 0x19aac40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2365460 + ms-DS-Lockout-Duration contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2375ac0 + ms-DS-Lockout-Duration contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x256ef50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19aa590 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19aaec0 + 1.2.840.113556.1.4.2018 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19aae30 + msDS-LockoutDuration contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19aadb0 + ms-DS-Lockout-Duration contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1bb6940 + struct dsdb_attribute contains 449 bytes in 8 blocks (ref 0) d=(nil) 0x19aa920 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29f2d10 + ms-DS-Local-Effective-Recycle-Time contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x3056930 + ms-DS-Local-Effective-Recycle-Time contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1b85850 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x28f1090 + 1.2.840.113556.1.4.2060 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19aabb0 + msDS-LocalEffectiveRecycleTime contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x19aab20 + ms-DS-Local-Effective-Recycle-Time contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x19aaa90 + struct dsdb_attribute contains 453 bytes in 8 blocks (ref 0) d=(nil) 0x19aa600 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fa55c0 + ms-DS-Local-Effective-Deletion-Time contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x203c1a0 + ms-DS-Local-Effective-Deletion-Time contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x2228770 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2fc76d0 + 1.2.840.113556.1.4.2059 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19aa890 + msDS-LocalEffectiveDeletionTime contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x19aa800 + ms-DS-Local-Effective-Deletion-Time contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x19aa770 + struct dsdb_attribute contains 488 bytes in 8 blocks (ref 0) d=(nil) 0x19aa1d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ce7b60 + ms-DS-Last-Successful-Interactive-Logon-Time contains 45 bytes in 1 blocks (ref 0) d=(nil) 0x2ea8ad0 + ms-DS-Last-Successful-Interactive-Logon-Time contains 45 bytes in 1 blocks (ref 0) d=(nil) 0x2ebd140 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19aa510 + 1.2.840.113556.1.4.1970 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19aa480 + msDS-LastSuccessfulInteractiveLogonTime contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x19aa3e0 + ms-DS-Last-Successful-Interactive-Logon-Time contains 45 bytes in 1 blocks (ref 0) d=(nil) 0x19aa340 + struct dsdb_attribute contains 402 bytes in 10 blocks (ref 0) d=(nil) 0x19a9ed0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a87c20 + ms-DS-Last-Known-RDN contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1ab95c0 + ms-DS-Last-Known-RDN contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1ac9470 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1abd780 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a6ca0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19aa150 + 1.2.840.113556.1.4.2067 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19aa0c0 + msDS-LastKnownRDN contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19aa040 + ms-DS-Last-Known-RDN contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1b50c10 + struct dsdb_attribute contains 472 bytes in 8 blocks (ref 0) d=(nil) 0x19a9b20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b14140 + ms-DS-Last-Failed-Interactive-Logon-Time contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x1b1d090 + ms-DS-Last-Failed-Interactive-Logon-Time contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x1b388d0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a9e50 + 1.2.840.113556.1.4.1971 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a9dc0 + msDS-LastFailedInteractiveLogonTime contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x19a9d30 + ms-DS-Last-Failed-Interactive-Logon-Time contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x19a9c90 + struct dsdb_attribute contains 403 bytes in 9 blocks (ref 0) d=(nil) 0x19a97a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b89470 + ms-DS-KrbTgt-Link-BL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1b91760 + ms-DS-KrbTgt-Link-BL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1b99710 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2278000 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a9aa0 + 1.2.840.113556.1.4.1931 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a9a10 + msDS-KrbTgtLinkBl contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19a9990 + ms-DS-KrbTgt-Link-BL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19a9910 + struct dsdb_attribute contains 392 bytes in 9 blocks (ref 0) d=(nil) 0x19a9420 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c09d60 + ms-DS-KrbTgt-Link contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1c169d0 + ms-DS-KrbTgt-Link contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1c1f100 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2273c90 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a9720 + 1.2.840.113556.1.4.1923 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a9690 + msDS-KrbTgtLink contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19a9610 + ms-DS-KrbTgt-Link contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19a9590 + struct dsdb_attribute contains 403 bytes in 8 blocks (ref 0) d=(nil) 0x19a90a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cceb20 + ms-DS-KeyVersionNumber contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1ce70f0 + ms-DS-KeyVersionNumber contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1d1b770 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a93a0 + 1.2.840.113556.1.4.1782 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a9310 + msDS-KeyVersionNumber contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19a9290 + ms-DS-KeyVersionNumber contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19a9210 + struct dsdb_attribute contains 431 bytes in 8 blocks (ref 0) d=(nil) 0x19a8d00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d6c240 + ms-DS-Is-User-Cachable-At-Rodc contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1d951b0 + ms-DS-Is-User-Cachable-At-Rodc contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1d9d0a0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a9020 + 1.2.840.113556.1.4.2025 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a8f90 + msDS-IsUserCachableAtRodc contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19a8f00 + ms-DS-Is-User-Cachable-At-Rodc contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x19a8e70 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x19a8980 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e981e0 + ms-DS-isRODC contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1eb44b0 + ms-DS-isRODC contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1ebf540 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a8c80 + 1.2.840.113556.1.4.1960 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a8bf0 + msDS-isRODC contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19a8b70 + ms-DS-isRODC contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19a8af0 + struct dsdb_attribute contains 434 bytes in 9 blocks (ref 0) d=(nil) 0x19a85e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f2fae0 + ms-DS-Is-Partial-Replica-For contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1f3fe50 + ms-DS-Is-Partial-Replica-For contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1f4cf90 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2263c20 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a8900 + 1.2.840.113556.1.4.1934 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a8870 + msDS-IsPartialReplicaFor contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19a87e0 + ms-DS-Is-Partial-Replica-For contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x19a8750 + struct dsdb_attribute contains 355 bytes in 8 blocks (ref 0) d=(nil) 0x19a8260 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f811e0 + ms-DS-isGC contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1f890f0 + ms-DS-isGC contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1f91650 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a8560 + 1.2.840.113556.1.4.1959 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a84d0 + msDS-isGC contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19a8450 + ms-DS-isGC contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19a83d0 + struct dsdb_attribute contains 422 bytes in 9 blocks (ref 0) d=(nil) 0x19a7ed0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fad130 + ms-DS-Is-Full-Replica-For contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1fd9d70 + ms-DS-Is-Full-Replica-For contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1fe1ae0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x225bae0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a81e0 + 1.2.840.113556.1.4.1932 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a8150 + msDS-IsFullReplicaFor contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19a80d0 + ms-DS-Is-Full-Replica-For contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19a8040 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x19a7b50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20150a0 + ms-DS-Is-Domain-For contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x201ff40 + ms-DS-Is-Domain-For contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2037640 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2257820 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a7e50 + 1.2.840.113556.1.4.1933 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a7dc0 + msDS-IsDomainFor contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19a7d40 + ms-DS-Is-Domain-For contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19a7cc0 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x19a77d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x205fc30 + ms-DS-IntId contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x206f270 + ms-DS-IntId contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x207f780 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a7ad0 + 1.2.840.113556.1.4.1716 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a7a40 + msDS-IntId contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19a79c0 + ms-DS-IntId contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19a7940 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x19a7450 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2122930 + ms-DS-Integer contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x21318e0 + ms-DS-Integer contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x215c6c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a7750 + 1.2.840.113556.1.4.1835 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a76c0 + msDS-Integer contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19a7640 + ms-DS-Integer contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19a75c0 + struct dsdb_attribute contains 438 bytes in 9 blocks (ref 0) d=(nil) 0x19a70b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x224db50 + ms-DS-Host-Service-Account-BL contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x225da80 + ms-DS-Host-Service-Account-BL contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2265cb0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x224bb40 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a73d0 + 1.2.840.113556.1.4.2057 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a7340 + msDS-HostServiceAccountBL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19a72b0 + ms-DS-Host-Service-Account-BL contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19a7220 + struct dsdb_attribute contains 427 bytes in 9 blocks (ref 0) d=(nil) 0x19a6d10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2355060 + ms-DS-Host-Service-Account contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x23f0040 + ms-DS-Host-Service-Account contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2408590 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2247790 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a7030 + 1.2.840.113556.1.4.2056 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a6fa0 + msDS-HostServiceAccount contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a6f10 + ms-DS-Host-Service-Account contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19a6e80 + struct dsdb_attribute contains 403 bytes in 9 blocks (ref 0) d=(nil) 0x19a6920 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x250f400 + ms-DS-Has-Master-NCs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1964230 + ms-DS-Has-Master-NCs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x189bf00 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2243420 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a6c20 + 1.2.840.113556.1.4.1836 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a6b90 + msDS-hasMasterNCs contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19a6b10 + ms-DS-Has-Master-NCs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19a6a90 + struct dsdb_attribute contains 436 bytes in 11 blocks (ref 0) d=(nil) 0x19a6580 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a1b330 + ms-DS-Has-Instantiated-NCs contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1a1b1e0 + ms-DS-Has-Instantiated-NCs contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1af7d10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b1c130 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a6510 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x223f0c0 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a68a0 + 1.2.840.113556.1.4.1709 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a6810 + msDS-HasInstantiatedNCs contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a6780 + ms-DS-Has-Instantiated-NCs contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19a66f0 + struct dsdb_attribute contains 426 bytes in 9 blocks (ref 0) d=(nil) 0x19a6180 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b4c0a0 + ms-DS-Has-Full-Replica-NCs contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1ba9320 + ms-DS-Has-Full-Replica-NCs contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1c06390 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x223aa20 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a6490 + 1.2.840.113556.1.4.1925 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a6400 + msDS-hasFullReplicaNCs contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19a6380 + ms-DS-Has-Full-Replica-NCs contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19a62f0 + struct dsdb_attribute contains 411 bytes in 11 blocks (ref 0) d=(nil) 0x19a5e00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c71540 + ms-DS-Has-Domain-NCs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1c7e1b0 + ms-DS-Has-Domain-NCs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1c9e690 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1d02f40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a5d90 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22365f0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a6100 + 1.2.840.113556.1.4.1820 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a6070 + msDS-HasDomainNCs contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19a5ff0 + ms-DS-Has-Domain-NCs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19a5f70 + struct dsdb_attribute contains 413 bytes in 8 blocks (ref 0) d=(nil) 0x19a5a80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d37b30 + ms-DS-HAB-Seniority-Index contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1df5770 + ms-DS-HAB-Seniority-Index contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1e0a5c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a5d10 + 1.2.840.113556.1.4.1997 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a5c80 + msDS-HABSeniorityIndex contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1fa0c80 + ms-DS-HAB-Seniority-Index contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19a5bf0 + struct dsdb_attribute contains 415 bytes in 10 blocks (ref 0) d=(nil) 0x19a56f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e3ddc0 + ms-DS-Filter-Containers contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ec73d0 + ms-DS-Filter-Containers contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f13170 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f7dcf0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a52b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a5a00 + 1.2.840.113556.1.4.1703 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a5970 + msDS-FilterContainers contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19a58f0 + ms-DS-Filter-Containers contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a5860 + struct dsdb_attribute contains 552 bytes in 8 blocks (ref 0) d=(nil) 0x19a5320 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fb9bc0 + ms-DS-Failed-Interactive-Logon-Count-At-Last-Successful-Logon contains 62 bytes in 1 blocks (ref 0) d=(nil) 0x1fe6030 + ms-DS-Failed-Interactive-Logon-Count-At-Last-Successful-Logon contains 62 bytes in 1 blocks (ref 0) d=(nil) 0x20675f0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a5670 + 1.2.840.113556.1.4.1973 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a55e0 + msDS-FailedInteractiveLogonCountAtLastSuccessfulLogon contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x19a5540 + ms-DS-Failed-Interactive-Logon-Count-At-Last-Successful-Logon contains 62 bytes in 1 blocks (ref 0) d=(nil) 0x19a5490 + struct dsdb_attribute contains 456 bytes in 8 blocks (ref 0) d=(nil) 0x19a4f10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20afcc0 + ms-DS-Failed-Interactive-Logon-Count contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x20b79b0 + ms-DS-Failed-Interactive-Logon-Count contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x20bb0f0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a5230 + 1.2.840.113556.1.4.1972 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a51a0 + msDS-FailedInteractiveLogonCount contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x19a5110 + ms-DS-Failed-Interactive-Logon-Count contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x19a5080 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x19a4b20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20dde70 + ms-DS-External-Store contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x20de400 + ms-DS-External-Store contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2100da0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a4ea0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a4e20 + 1.2.840.113556.1.4.1834 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a4d90 + msDS-ExternalStore contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19a4d10 + ms-DS-External-Store contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19a4c90 + struct dsdb_attribute contains 391 bytes in 9 blocks (ref 0) d=(nil) 0x19a47b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21224e0 + ms-DS-External-Key contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x21f68b0 + ms-DS-External-Key contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2245790 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a4ab0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a4a30 + 1.2.840.113556.1.4.1833 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a49a0 + msDS-ExternalKey contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19a4920 + ms-DS-External-Key contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x227e570 + struct dsdb_attribute contains 432 bytes in 10 blocks (ref 0) d=(nil) 0x19a4490 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22551b0 + ms-DS-ExecuteScriptPassword contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x225a740 + ms-DS-ExecuteScriptPassword contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2262900 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2272250 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a3d00 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2317160 + 1.2.840.113556.1.4.1783 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a4720 + msDS-ExecuteScriptPassword contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19a4690 + ms-DS-ExecuteScriptPassword contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19a4600 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x19a4100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x228e3b0 + ms-DS-Entry-Time-To-Die contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22af3b0 + ms-DS-Entry-Time-To-Die contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22f98f0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a4410 + 1.2.840.113556.1.4.1622 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a4380 + msDS-Entry-Time-To-Die contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19a4300 + ms-DS-Entry-Time-To-Die contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a4270 + struct dsdb_attribute contains 419 bytes in 9 blocks (ref 0) d=(nil) 0x19a3d70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2336b40 + ms-DS-Enabled-Feature-BL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2348760 + ms-DS-Enabled-Feature-BL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x236a470 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2211430 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a4080 + 1.2.840.113556.1.4.2069 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a3ff0 + msDS-EnabledFeatureBL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19a3f70 + ms-DS-Enabled-Feature-BL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19a3ee0 + struct dsdb_attribute contains 408 bytes in 9 blocks (ref 0) d=(nil) 0x19a3980 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23aebd0 + ms-DS-Enabled-Feature contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x23bebf0 + ms-DS-Enabled-Feature contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x23c6be0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x220cf30 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a3c80 + 1.2.840.113556.1.4.2061 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a3bf0 + msDS-EnabledFeature contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19a3b70 + ms-DS-Enabled-Feature contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19a3af0 + struct dsdb_attribute contains 396 bytes in 10 blocks (ref 0) d=(nil) 0x19a3600 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x245a3a0 + ms-DS-DnsRootAlias contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x246e220 + ms-DS-DnsRootAlias contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x24f6c20 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x24eec20 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a1db0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a3900 + 1.2.840.113556.1.4.1719 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a3870 + msDS-DnsRootAlias contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19a37f0 + ms-DS-DnsRootAlias contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19a3770 + struct dsdb_attribute contains 429 bytes in 8 blocks (ref 0) d=(nil) 0x19a3260 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x255f070 + ms-DS-Deleted-Object-Lifetime contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2562ce0 + ms-DS-Deleted-Object-Lifetime contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x256f7c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a3580 + 1.2.840.113556.1.4.2068 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a34f0 + msDS-DeletedObjectLifetime contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19a3460 + ms-DS-Deleted-Object-Lifetime contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19a33d0 + struct dsdb_attribute contains 390 bytes in 8 blocks (ref 0) d=(nil) 0x19a2ee0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2572f40 + ms-DS-Default-Quota contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2582cc0 + ms-DS-Default-Quota contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x25ae7d0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a31e0 + 1.2.840.113556.1.4.1846 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a3150 + msDS-DefaultQuota contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19a30d0 + ms-DS-Default-Quota contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19a3050 + struct dsdb_attribute contains 375 bytes in 8 blocks (ref 0) d=(nil) 0x19a2b60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25bee30 + ms-DS-Date-Time contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x25de7a0 + ms-DS-Date-Time contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x25ea090 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a2e60 + 1.2.840.113556.1.4.1832 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a2dd0 + msDS-DateTime contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19a2d50 + ms-DS-Date-Time contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19a2cd0 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x19a27e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x260d550 + MS-DS-Creator-SID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x260dae0 + MS-DS-Creator-SID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2611210 + 2.5.5.17 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a2ae0 + 1.2.840.113556.1.4.1410 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a2a50 + mS-DS-CreatorSID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19a29d0 + MS-DS-Creator-SID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19a2950 + struct dsdb_attribute contains 404 bytes in 8 blocks (ref 0) d=(nil) 0x19a2460 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2618d50 + MS-DS-Consistency-Guid contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x26209c0 + MS-DS-Consistency-Guid contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x263c1b0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a2760 + 1.2.840.113556.1.4.1360 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a26d0 + mS-DS-ConsistencyGuid contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19a2650 + MS-DS-Consistency-Guid contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19a25d0 + struct dsdb_attribute contains 430 bytes in 8 blocks (ref 0) d=(nil) 0x19a2140 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x264f630 + MS-DS-Consistency-Child-Count contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x267a710 + MS-DS-Consistency-Child-Count contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2689f40 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x270e640 + 1.2.840.113556.1.4.1361 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a23d0 + mS-DS-ConsistencyChildCount contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19a2340 + MS-DS-Consistency-Child-Count contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19a22b0 + struct dsdb_attribute contains 452 bytes in 8 blocks (ref 0) d=(nil) 0x19a1e20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26b8c30 + ms-DS-Cached-Membership-Time-Stamp contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x26d7f80 + ms-DS-Cached-Membership-Time-Stamp contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x26dfac0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2787a00 + 1.2.840.113556.1.4.1442 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a20b0 + msDS-Cached-Membership-Time-Stamp contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x19a2020 + ms-DS-Cached-Membership-Time-Stamp contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x19a1f90 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x19a1a20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27162c0 + ms-DS-Cached-Membership contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x272e080 + ms-DS-Cached-Membership contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2761c40 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a1d30 + 1.2.840.113556.1.4.1441 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a1ca0 + msDS-Cached-Membership contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19a1c20 + ms-DS-Cached-Membership contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a1b90 + struct dsdb_attribute contains 383 bytes in 9 blocks (ref 0) d=(nil) 0x19a16a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x291df90 + ms-DS-Byte-Array contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x29326e0 + ms-DS-Byte-Array contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x29642c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a1630 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a19a0 + 1.2.840.113556.1.4.1831 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a1910 + msDS-ByteArray contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19a1890 + ms-DS-Byte-Array contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19a1810 + struct dsdb_attribute contains 440 bytes in 9 blocks (ref 0) d=(nil) 0x19a1290 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29faa00 + ms-DS-BridgeHead-Servers-Used contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2a8a8a0 + ms-DS-BridgeHead-Servers-Used contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2a9a2b0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x21e1220 + 2.5.5.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a15b0 + 1.2.840.113556.1.4.2049 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a1520 + msDS-BridgeHeadServersUsed contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19a1490 + ms-DS-BridgeHead-Servers-Used contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19a1400 + struct dsdb_attribute contains 407 bytes in 9 blocks (ref 0) d=(nil) 0x19a0f10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ab9c30 + ms-DS-Behavior-Version contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2abd970 + ms-DS-Behavior-Version contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2b53530 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a0ea0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a1210 + 1.2.840.113556.1.4.1459 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a1180 + msDS-Behavior-Version contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19a1100 + ms-DS-Behavior-Version contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19a1080 + struct dsdb_attribute contains 439 bytes in 8 blocks (ref 0) d=(nil) 0x19a0b00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bd3b20 + ms-DS-Az-Task-Is-Role-Definition contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x2c28d90 + ms-DS-Az-Task-Is-Role-Definition contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x2cdec20 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a0e20 + 1.2.840.113556.1.4.1818 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a0d90 + msDS-AzTaskIsRoleDefinition contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19a0d00 + ms-DS-Az-Task-Is-Role-Definition contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x19a0c70 + struct dsdb_attribute contains 409 bytes in 9 blocks (ref 0) d=(nil) 0x19a0700 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e47b60 + ms-DS-Az-Script-Timeout contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e53080 + ms-DS-Az-Script-Timeout contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e5c7b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a0a90 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a0a10 + 1.2.840.113556.1.4.1797 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a0980 + msDS-AzScriptTimeout contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19a0900 + ms-DS-Az-Script-Timeout contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a0870 + struct dsdb_attribute contains 443 bytes in 9 blocks (ref 0) d=(nil) 0x19a02f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e90250 + ms-DS-Az-Script-Engine-Cache-Max contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x2f6d0f0 + ms-DS-Az-Script-Engine-Cache-Max contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x2fb4440 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a0690 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19a0610 + 1.2.840.113556.1.4.1796 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a0580 + msDS-AzScriptEngineCacheMax contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19a04f0 + ms-DS-Az-Script-Engine-Cache-Max contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x19a0460 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x199ff00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2fd9530 + ms-DS-Az-Scope-Name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2fe24c0 + ms-DS-Az-Scope-Name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3010420 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x30076e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19a0280 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19a0200 + 1.2.840.113556.1.4.1799 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19a0170 + msDS-AzScopeName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19a00f0 + ms-DS-Az-Scope-Name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19a0070 + struct dsdb_attribute contains 401 bytes in 9 blocks (ref 0) d=(nil) 0x199fb10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3023850 + ms-DS-Az-Operation-ID contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3048a70 + ms-DS-Az-Operation-ID contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x307adf0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199fe90 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199fe10 + 1.2.840.113556.1.4.1800 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199fd80 + msDS-AzOperationID contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x199fd00 + ms-DS-Az-Operation-ID contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x199fc80 + struct dsdb_attribute contains 402 bytes in 10 blocks (ref 0) d=(nil) 0x199f720 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3075d20 + ms-DS-Az-Object-Guid contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x30d4cf0 + ms-DS-Az-Object-Guid contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3111c90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x30d9930 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199faa0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199fa20 + 1.2.840.113556.1.4.1949 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199f990 + msDS-AzObjectGuid contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x199f910 + ms-DS-Az-Object-Guid contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x199f890 + struct dsdb_attribute contains 405 bytes in 9 blocks (ref 0) d=(nil) 0x199f330 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x311b260 + ms-DS-Az-Minor-Version contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x312cd10 + ms-DS-Az-Minor-Version contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3136330 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199f6b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199f630 + 1.2.840.113556.1.4.1825 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199f5a0 + msDS-AzMinorVersion contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x199f520 + ms-DS-Az-Minor-Version contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x199f4a0 + struct dsdb_attribute contains 405 bytes in 9 blocks (ref 0) d=(nil) 0x199ef40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31775d0 + ms-DS-Az-Major-Version contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3189d80 + ms-DS-Az-Major-Version contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x319ad40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199f2c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199f240 + 1.2.840.113556.1.4.1824 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199f1b0 + msDS-AzMajorVersion contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x199f130 + ms-DS-Az-Major-Version contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x199f0b0 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x199ebd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3195b20 + ms-DS-Az-LDAP-Query contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x31dff70 + ms-DS-Az-LDAP-Query contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x3220150 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x320bcf0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199eed0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199ee50 + 1.2.840.113556.1.4.1792 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199edc0 + msDS-AzLDAPQuery contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x199ed40 + ms-DS-Az-LDAP-Query contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x20a0070 + struct dsdb_attribute contains 463 bytes in 10 blocks (ref 0) d=(nil) 0x199e7c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19bb150 + ms-DS-Az-Last-Imported-Biz-Rule-Path contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x1a22e60 + ms-DS-Az-Last-Imported-Biz-Rule-Path contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x1b60b90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1c0e510 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199eb60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199eae0 + 1.2.840.113556.1.4.1803 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199ea50 + msDS-AzLastImportedBizRulePath contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x199e9c0 + ms-DS-Az-Last-Imported-Biz-Rule-Path contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x199e930 + struct dsdb_attribute contains 402 bytes in 9 blocks (ref 0) d=(nil) 0x199e440 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20dadf0 + ms-DS-Az-Generic-Data contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x20e9f90 + ms-DS-Az-Generic-Data contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x20f4770 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199e3d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199e740 + 1.2.840.113556.1.4.1950 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199e6b0 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x199e630 + ms-DS-Az-Generic-Data contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x199e5b0 + struct dsdb_attribute contains 409 bytes in 8 blocks (ref 0) d=(nil) 0x199e040 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x212e710 + ms-DS-Az-Generate-Audits contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2135790 + ms-DS-Az-Generate-Audits contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x21552d0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199e350 + 1.2.840.113556.1.4.1805 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199e2c0 + msDS-AzGenerateAudits contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x199e240 + ms-DS-Az-Generate-Audits contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x199e1b0 + struct dsdb_attribute contains 409 bytes in 9 blocks (ref 0) d=(nil) 0x199dc40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x219a970 + ms-DS-Az-Domain-Timeout contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2213770 + ms-DS-Az-Domain-Timeout contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22b7f30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199dfd0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199df50 + 1.2.840.113556.1.4.1795 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199dec0 + msDS-AzDomainTimeout contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x199de40 + ms-DS-Az-Domain-Timeout contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199ddb0 + struct dsdb_attribute contains 390 bytes in 10 blocks (ref 0) d=(nil) 0x199d8d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22bc9d0 + ms-DS-Az-Class-ID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2301e40 + ms-DS-Az-Class-ID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x23cbb80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x23720f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199dbd0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199db50 + 1.2.840.113556.1.4.1816 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199dac0 + msDS-AzClassId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x199da40 + ms-DS-Az-Class-ID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2946cb0 + struct dsdb_attribute contains 425 bytes in 10 blocks (ref 0) d=(nil) 0x199d4d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x253bba0 + ms-DS-Az-Biz-Rule-Language contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2543190 + ms-DS-Az-Biz-Rule-Language contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2634550 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x288b600 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199d860 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199d7e0 + 1.2.840.113556.1.4.1802 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199d750 + msDS-AzBizRuleLanguage contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x199d6d0 + ms-DS-Az-Biz-Rule-Language contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x199d640 + struct dsdb_attribute contains 390 bytes in 10 blocks (ref 0) d=(nil) 0x199d160 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cdf1b0 + ms-DS-Az-Biz-Rule contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2d49ad0 + ms-DS-Az-Biz-Rule contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1aacbd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1964770 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199d460 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199d3e0 + 1.2.840.113556.1.4.1801 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199d350 + msDS-AzBizRule contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x199d2d0 + ms-DS-Az-Biz-Rule contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1b640d0 + struct dsdb_attribute contains 430 bytes in 9 blocks (ref 0) d=(nil) 0x199cdd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1965090 + ms-DS-Az-Application-Version contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1a04260 + ms-DS-Az-Application-Version contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1aa4230 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199d0f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2151030 + 1.2.840.113556.1.4.1817 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199d060 + msDS-AzApplicationVersion contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x199cfd0 + ms-DS-Az-Application-Version contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x199cf40 + struct dsdb_attribute contains 422 bytes in 10 blocks (ref 0) d=(nil) 0x199ca50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d13360 + ms-DS-Az-Application-Name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1d7d740 + ms-DS-Az-Application-Name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1dc9ab0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2135ea0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199cd60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199cce0 + 1.2.840.113556.1.4.1798 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199cc50 + msDS-AzApplicationName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x220ef70 + ms-DS-Az-Application-Name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x199cbc0 + struct dsdb_attribute contains 418 bytes in 9 blocks (ref 0) d=(nil) 0x199c6c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21588f0 + ms-DS-Az-Application-Data contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x216cf40 + ms-DS-Az-Application-Data contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x21dbb20 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199b4d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199c9d0 + 1.2.840.113556.1.4.1819 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199c940 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x199c8c0 + ms-DS-Az-Application-Data contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x199c830 + struct dsdb_attribute contains 407 bytes in 8 blocks (ref 0) d=(nil) 0x199c330 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22b3bd0 + ms-DS-Auxiliary-Classes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22c86c0 + ms-DS-Auxiliary-Classes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22fdb70 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199c640 + 1.2.840.113556.1.4.1458 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199c5b0 + msDS-Auxiliary-Classes contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x199c530 + ms-DS-Auxiliary-Classes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199c4a0 + struct dsdb_attribute contains 456 bytes in 9 blocks (ref 0) d=(nil) 0x199bf90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x230ad30 + ms-DS-AuthenticatedTo-Accountlist contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2327180 + ms-DS-AuthenticatedTo-Accountlist contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2382480 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2188330 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199c2b0 + 1.2.840.113556.1.4.1957 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199c220 + msDS-AuthenticatedToAccountlist contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x199c190 + ms-DS-AuthenticatedTo-Accountlist contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x199c100 + struct dsdb_attribute contains 420 bytes in 9 blocks (ref 0) d=(nil) 0x199bc00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23e06f0 + ms-DS-AuthenticatedAt-DC contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x23f4160 + ms-DS-AuthenticatedAt-DC contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x253b020 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2183f20 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199bf10 + 1.2.840.113556.1.4.1958 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199be80 + msDS-AuthenticatedAtDC contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x199be00 + ms-DS-AuthenticatedAt-DC contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x199bd70 + struct dsdb_attribute contains 439 bytes in 8 blocks (ref 0) d=(nil) 0x199b860 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2547260 + ms-DS-Approx-Immed-Subordinates contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x256fd20 + ms-DS-Approx-Immed-Subordinates contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2667a20 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199bb80 + 1.2.840.113556.1.4.1669 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199baf0 + msDS-Approx-Immed-Subordinates contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x199ba60 + ms-DS-Approx-Immed-Subordinates contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x199b9d0 + struct dsdb_attribute contains 420 bytes in 8 blocks (ref 0) d=(nil) 0x199b540 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27223b0 + MS-DS-All-Users-Trust-Quota contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2941f10 + MS-DS-All-Users-Trust-Quota contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2cdb1f0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x21c7110 + 1.2.840.113556.1.4.1789 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199b7d0 + msDS-AllUsersTrustQuota contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199b740 + MS-DS-All-Users-Trust-Quota contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x199b6b0 + struct dsdb_attribute contains 425 bytes in 8 blocks (ref 0) d=(nil) 0x199b1b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d45410 + ms-DS-Allowed-To-Delegate-To contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1a904c0 + ms-DS-Allowed-To-Delegate-To contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x217db90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x231e640 + 1.2.840.113556.1.4.1787 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199b440 + msDS-AllowedToDelegateTo contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x199b3b0 + ms-DS-Allowed-To-Delegate-To contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x199b320 + struct dsdb_attribute contains 426 bytes in 10 blocks (ref 0) d=(nil) 0x199ae20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x220fed0 + ms-DS-Allowed-DNS-Suffixes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x228a9e0 + ms-DS-Allowed-DNS-Suffixes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x22c4370 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x22edfa0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199b140 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x20e66e0 + 1.2.840.113556.1.4.1710 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199b0b0 + msDS-AllowedDNSSuffixes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199b020 + ms-DS-Allowed-DNS-Suffixes contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x199af90 + struct dsdb_attribute contains 453 bytes in 10 blocks (ref 0) d=(nil) 0x199aa90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2389d50 + ms-DS-Additional-Sam-Account-Name contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x28872a0 + ms-DS-Additional-Sam-Account-Name contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1b0cf80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ef3720 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199adb0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2ea37f0 + 1.2.840.113556.1.4.1718 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199ad20 + msDS-AdditionalSamAccountName contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x199ac90 + ms-DS-Additional-Sam-Account-Name contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x199ac00 + struct dsdb_attribute contains 441 bytes in 10 blocks (ref 0) d=(nil) 0x199a700 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28dbd30 + ms-DS-Additional-Dns-Host-Name contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x2bdc7e0 + ms-DS-Additional-Dns-Host-Name contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x2dc40e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2e87320 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199aa20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2ee2530 + 1.2.840.113556.1.4.1717 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199a990 + msDS-AdditionalDnsHostName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x199a900 + ms-DS-Additional-Dns-Host-Name contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x199a870 + struct dsdb_attribute contains 431 bytes in 10 blocks (ref 0) d=(nil) 0x199a360 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2eb88d0 + MS-DRM-Identity-Certificate contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2eb2010 + MS-DRM-Identity-Certificate contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2ec6690 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ecfd40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x199a2f0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x199a680 + 1.2.840.113556.1.4.1843 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199a5f0 + msDRM-IdentityCertificate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x199a560 + MS-DRM-Identity-Certificate contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x199a4d0 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x1999f70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2efab60 + ms-DFS-Ttl-v2 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2ef6170 + ms-DFS-Ttl-v2 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2f03eb0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x199a270 + 1.2.840.113556.1.4.2035 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x199a1e0 + msDFS-Ttlv2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x199a160 + ms-DFS-Ttl-v2 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x199a0e0 + struct dsdb_attribute contains 406 bytes in 10 blocks (ref 0) d=(nil) 0x1999c00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f432c0 + ms-DFS-Target-List-v2 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2f4d9b0 + ms-DFS-Target-List-v2 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2fd5560 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2fbe0f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1999f00 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1999e80 + 1.2.840.113556.1.4.2038 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1999df0 + msDFS-TargetListv2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1999d70 + ms-DFS-Target-List-v2 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3144d20 + struct dsdb_attribute contains 440 bytes in 10 blocks (ref 0) d=(nil) 0x19997f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30373f0 + ms-DFS-Short-Name-Link-Path-v2 contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x30922a0 + ms-DFS-Short-Name-Link-Path-v2 contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x3109620 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3125590 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1999b90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1999b10 + 1.2.840.113556.1.4.2042 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1999a80 + msDFS-ShortNameLinkPathv2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19999f0 + ms-DFS-Short-Name-Link-Path-v2 contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1999960 + struct dsdb_attribute contains 429 bytes in 10 blocks (ref 0) d=(nil) 0x19993e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3157540 + ms-DFS-Schema-Minor-Version contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x317d300 + ms-DFS-Schema-Minor-Version contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x3182090 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31c2bf0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1999780 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1999700 + 1.2.840.113556.1.4.2031 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1999670 + msDFS-SchemaMinorVersion contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19995e0 + ms-DFS-Schema-Minor-Version contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1999550 + struct dsdb_attribute contains 429 bytes in 10 blocks (ref 0) d=(nil) 0x1998fd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3236db0 + ms-DFS-Schema-Major-Version contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x323fe20 + ms-DFS-Schema-Major-Version contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x32521a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3295b00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1999370 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19992f0 + 1.2.840.113556.1.4.2030 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1999260 + msDFS-SchemaMajorVersion contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19991d0 + ms-DFS-Schema-Major-Version contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1999140 + struct dsdb_attribute contains 382 bytes in 9 blocks (ref 0) d=(nil) 0x1998bd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1998ed0 + ms-DFSR-Version contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1965870 + ms-DFSR-Version contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1965c80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1998f60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2463000 + 1.2.840.113556.1.6.13.3.1 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1998e40 + msDFSR-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1998dc0 + ms-DFSR-Version contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1998d40 + struct dsdb_attribute contains 438 bytes in 10 blocks (ref 0) d=(nil) 0x19987b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x196de90 + ms-DFSR-TombstoneExpiryInMin contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2192d20 + ms-DFSR-TombstoneExpiryInMin contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1998ad0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x21ab550 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1998b60 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x25d7050 + 1.2.840.113556.1.6.13.3.11 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1998a40 + msDFSR-TombstoneExpiryInMin contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19989b0 + ms-DFSR-TombstoneExpiryInMin contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1998920 + struct dsdb_attribute contains 414 bytes in 9 blocks (ref 0) d=(nil) 0x19983a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25cf020 + ms-DFSR-StagingSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25aeae0 + ms-DFSR-StagingSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19986b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1998740 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2b02710 + 1.2.840.113556.1.6.13.3.6 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1998620 + msDFSR-StagingSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19985a0 + ms-DFSR-StagingSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1998510 + struct dsdb_attribute contains 402 bytes in 10 blocks (ref 0) d=(nil) 0x1998010 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1998310 + ms-DFSR-StagingPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x276b120 + ms-DFSR-StagingPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x292e550 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x289f8e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1997fa0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x296b250 + 1.2.840.113556.1.6.13.3.5 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1998280 + msDFSR-StagingPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1998200 + ms-DFSR-StagingPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1998180 + struct dsdb_attribute contains 470 bytes in 8 blocks (ref 0) d=(nil) 0x1997bf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29b1160 + ms-DFSR-StagingCleanupTriggerInPercent contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x2a03630 + ms-DFSR-StagingCleanupTriggerInPercent contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x1997f10 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2a382d0 + 1.2.840.113556.1.6.13.3.40 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1997e80 + msDFSR-StagingCleanupTriggerInPercent contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x1997df0 + ms-DFSR-StagingCleanupTriggerInPercent contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x1997d60 + struct dsdb_attribute contains 391 bytes in 10 blocks (ref 0) d=(nil) 0x19977f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1997af0 + ms-DFSR-Schedule contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2a57e70 + ms-DFSR-Schedule contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x246ea90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x22e1a40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1997b80 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x255fe40 + 1.2.840.113556.1.6.13.3.14 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1997a60 + msDFSR-Schedule contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19979e0 + ms-DFSR-Schedule contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1997960 + struct dsdb_attribute contains 402 bytes in 9 blocks (ref 0) d=(nil) 0x19973f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19976f0 + ms-DFSR-RootSizeInMb contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x257f990 + ms-DFSR-RootSizeInMb contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3129a90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1997780 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3113000 + 1.2.840.113556.1.6.13.3.4 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1997660 + msDFSR-RootSizeInMb contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19975e0 + ms-DFSR-RootSizeInMb contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1997560 + struct dsdb_attribute contains 390 bytes in 10 blocks (ref 0) d=(nil) 0x1997060 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1997360 + ms-DFSR-RootPath contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3104c20 + ms-DFSR-RootPath contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x30f2e40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x30fbd70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1996c60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30daca0 + 1.2.840.113556.1.6.13.3.3 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19972d0 + msDFSR-RootPath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1997250 + ms-DFSR-RootPath contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19971d0 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x1996cd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1996fd0 + ms-DFSR-RootFence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x30d4b90 + ms-DFSR-RootFence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x30bf810 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x30b63a0 + 1.2.840.113556.1.6.13.3.22 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1996f40 + msDFSR-RootFence contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1996ec0 + ms-DFSR-RootFence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1996e40 + struct dsdb_attribute contains 430 bytes in 8 blocks (ref 0) d=(nil) 0x19968b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30b1d20 + ms-DFSR-ReplicationGroupType contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x309ba90 + ms-DFSR-ReplicationGroupType contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1996bd0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x305c0a0 + 1.2.840.113556.1.6.13.3.10 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1996b40 + msDFSR-ReplicationGroupType contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1996ab0 + ms-DFSR-ReplicationGroupType contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1996a20 + struct dsdb_attribute contains 439 bytes in 10 blocks (ref 0) d=(nil) 0x1996500 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3095ad0 + ms-DFSR-ReplicationGroupGuid contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x3077090 + ms-DFSR-ReplicationGroupGuid contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1996820 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3064e40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1996490 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30579b0 + 1.2.840.113556.1.6.13.3.23 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1996790 + msDFSR-ReplicationGroupGuid contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1996700 + ms-DFSR-ReplicationGroupGuid contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1996670 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x1996180 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1996400 + ms-DFSR-ReadOnly contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x304e800 + ms-DFSR-ReadOnly contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x302ddd0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x301aca0 + 1.2.840.113556.1.6.13.3.28 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1996370 + msDFSR-ReadOnly contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19962f0 + ms-DFSR-ReadOnly contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3003f20 + struct dsdb_attribute contains 427 bytes in 9 blocks (ref 0) d=(nil) 0x1995dd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3011780 + ms-DFSR-RdcMinFileSizeInKb contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x300ced0 + ms-DFSR-RdcMinFileSizeInKb contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19960f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19952b0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2ffac10 + 1.2.840.113556.1.6.13.3.20 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1996060 + msDFSR-RdcMinFileSizeInKb contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1995fd0 + ms-DFSR-RdcMinFileSizeInKb contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1995f40 + struct dsdb_attribute contains 390 bytes in 8 blocks (ref 0) d=(nil) 0x1995a40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1995d40 + ms-DFSR-RdcEnabled contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2ff15a0 + ms-DFSR-RdcEnabled contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2fe8270 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2fddb20 + 1.2.840.113556.1.6.13.3.19 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1995cb0 + msDFSR-RdcEnabled contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1995c30 + ms-DFSR-RdcEnabled contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1995bb0 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x19956b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19959b0 + ms-DFSR-Priority contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2face00 + ms-DFSR-Priority contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2fa6fd0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2f96950 + 1.2.840.113556.1.6.13.3.25 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1995920 + msDFSR-Priority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19958a0 + ms-DFSR-Priority contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1995820 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x1995320 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1995620 + ms-DFSR-Options2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2f8de40 + ms-DFSR-Options2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2f77120 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2f643b0 + 1.2.840.113556.1.6.13.3.37 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1995590 + msDFSR-Options2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1995510 + ms-DFSR-Options2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1995490 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x1994fa0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1995220 + ms-DFSR-Options contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2f51fd0 + ms-DFSR-Options contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2f47c80 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2f24bd0 + 1.2.840.113556.1.6.13.3.17 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1995190 + msDFSR-Options contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1995110 + ms-DFSR-Options contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2ead6c0 + struct dsdb_attribute contains 467 bytes in 10 blocks (ref 0) d=(nil) 0x1994b80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f15fd0 + ms-DFSR-OnDemandExclusionFileFilter contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x2eff480 + ms-DFSR-OnDemandExclusionFileFilter contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1994ea0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ee7980 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1994f30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3285920 + 1.2.840.113556.1.6.13.3.35 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1994e10 + msDFSR-OnDemandExclusionFileFilter contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1994d80 + ms-DFSR-OnDemandExclusionFileFilter contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1994cf0 + struct dsdb_attribute contains 487 bytes in 10 blocks (ref 0) d=(nil) 0x1994880 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1994a80 + ms-DFSR-OnDemandExclusionDirectoryFilter contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x2ea2260 + ms-DFSR-OnDemandExclusionDirectoryFilter contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x2e8bdb0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3270aa0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1994b10 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1965e40 + 1.2.840.113556.1.6.13.3.36 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19949f0 + msDFSR-OnDemandExclusionDirectoryFilter contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x19b7060 + ms-DFSR-OnDemandExclusionDirectoryFilter contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x19beb20 + struct dsdb_attribute contains 438 bytes in 9 blocks (ref 0) d=(nil) 0x19944d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19c2dd0 + ms-DFSR-MinDurationCacheInMin contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19c9e00 + ms-DFSR-MinDurationCacheInMin contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19947f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19940b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19cdc10 + 1.2.840.113556.1.6.13.3.30 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1994760 + msDFSR-MinDurationCacheInMin contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x19946d0 + ms-DFSR-MinDurationCacheInMin contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1994640 + struct dsdb_attribute contains 429 bytes in 9 blocks (ref 0) d=(nil) 0x1994120 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19d1ab0 + ms-DFSR-MemberReferenceBL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19d5840 + ms-DFSR-MemberReferenceBL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1994440 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x21027c0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19e5d70 + 1.2.840.113556.1.6.13.3.102 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19943b0 + msDFSR-MemberReferenceBL contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1994320 + ms-DFSR-MemberReferenceBL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1994290 + struct dsdb_attribute contains 421 bytes in 9 blocks (ref 0) d=(nil) 0x1993d10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ed4d0 + ms-DFSR-MemberReference contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19f0c70 + ms-DFSR-MemberReference contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1994020 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x20fe940 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19f4a10 + 1.2.840.113556.1.6.13.3.100 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1993f90 + msDFSR-MemberReference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1993f10 + ms-DFSR-MemberReference contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1993e80 + struct dsdb_attribute contains 426 bytes in 9 blocks (ref 0) d=(nil) 0x19938f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19fc650 + ms-DFSR-MaxAgeInCacheInMin contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1a00470 + ms-DFSR-MaxAgeInCacheInMin contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1993c10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1993ca0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1a3edb0 + 1.2.840.113556.1.6.13.3.31 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1993b80 + msDFSR-MaxAgeInCacheInMin contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1993af0 + ms-DFSR-MaxAgeInCacheInMin contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1993a60 + struct dsdb_attribute contains 391 bytes in 10 blocks (ref 0) d=(nil) 0x1993560 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1993860 + ms-DFSR-Keywords contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1a42320 + ms-DFSR-Keywords contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1a51dc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a4e6f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19934f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a55b60 + 1.2.840.113556.1.6.13.3.15 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19937d0 + msDFSR-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1993750 + ms-DFSR-Keywords contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19936d0 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x1993160 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1993460 + ms-DFSR-Flags contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1a62010 + ms-DFSR-Flags contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1a614a0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1a8b9f0 + 1.2.840.113556.1.6.13.3.16 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19933d0 + msDFSR-Flags contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1993350 + ms-DFSR-Flags contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19932d0 + struct dsdb_attribute contains 399 bytes in 10 blocks (ref 0) d=(nil) 0x1992d60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1993060 + ms-DFSR-FileFilter contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1a9c8a0 + ms-DFSR-FileFilter contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1ab0760 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a9cda0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19930f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1ab8920 + 1.2.840.113556.1.6.13.3.12 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1992fd0 + msDFSR-FileFilter contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1992f50 + ms-DFSR-FileFilter contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1992ed0 + struct dsdb_attribute contains 394 bytes in 10 blocks (ref 0) d=(nil) 0x19929d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1992cd0 + ms-DFSR-Extension contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1ac4a30 + ms-DFSR-Extension contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1ad08b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ac8890 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19925d0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1ad46a0 + 1.2.840.113556.1.6.13.3.2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1992c40 + msDFSR-Extension contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1992bc0 + ms-DFSR-Extension contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1992b40 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x1992640 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1992940 + ms-DFSR-Enabled contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1ae0670 + ms-DFSR-Enabled contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1adbe40 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1aec230 + 1.2.840.113556.1.6.13.3.9 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19928b0 + msDFSR-Enabled contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1992830 + ms-DFSR-Enabled contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19927b0 + struct dsdb_attribute contains 430 bytes in 8 blocks (ref 0) d=(nil) 0x1992220 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1af4040 + ms-DFSR-DisablePacketPrivacy contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1afc050 + ms-DFSR-DisablePacketPrivacy contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1992540 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1b1c4c0 + 1.2.840.113556.1.6.13.3.32 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19924b0 + msDFSR-DisablePacketPrivacy contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1992420 + ms-DFSR-DisablePacketPrivacy contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1992390 + struct dsdb_attribute contains 419 bytes in 10 blocks (ref 0) d=(nil) 0x1991e10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b03fb0 + ms-DFSR-DirectoryFilter contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b081a0 + ms-DFSR-DirectoryFilter contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1992120 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b18120 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19921b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1b28fc0 + 1.2.840.113556.1.6.13.3.13 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1992090 + msDFSR-DirectoryFilter contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1992010 + ms-DFSR-DirectoryFilter contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1991f80 + struct dsdb_attribute contains 387 bytes in 10 blocks (ref 0) d=(nil) 0x1991a10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1991d10 + ms-DFSR-DfsPath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1b30420 + ms-DFSR-DfsPath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1b40620 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b3c8b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1991da0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1b446c0 + 1.2.840.113556.1.6.13.3.21 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1991c80 + msDFSR-DfsPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1991c00 + ms-DFSR-DfsPath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1991b80 + struct dsdb_attribute contains 411 bytes in 10 blocks (ref 0) d=(nil) 0x1991700 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1991980 + ms-DFSR-DfsLinkTarget contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b484e0 + ms-DFSR-DfsLinkTarget contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b782f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b50010 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1991690 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1b95610 + 1.2.840.113556.1.6.13.3.24 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19918f0 + msDFSR-DfsLinkTarget contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1991870 + ms-DFSR-DfsLinkTarget contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1bc22e0 + struct dsdb_attribute contains 411 bytes in 8 blocks (ref 0) d=(nil) 0x19912f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ba5830 + ms-DFSR-DeletedSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bbe260 + ms-DFSR-DeletedSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1991600 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1bca060 + 1.2.840.113556.1.6.13.3.27 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1991570 + msDFSR-DeletedSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19914f0 + ms-DFSR-DeletedSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1991460 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x1990f70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19911f0 + ms-DFSR-DeletedPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1bd1d20 + ms-DFSR-DeletedPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1bd5b60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1991280 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1be5fd0 + 1.2.840.113556.1.6.13.3.26 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1991160 + msDFSR-DeletedPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19910e0 + ms-DFSR-DeletedPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1c27280 + struct dsdb_attribute contains 491 bytes in 10 blocks (ref 0) d=(nil) 0x1990c70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1990e70 + ms-DFSR-DefaultCompressionExclusionFilter contains 42 bytes in 1 blocks (ref 0) d=(nil) 0x1bea0d0 + ms-DFSR-DefaultCompressionExclusionFilter contains 42 bytes in 1 blocks (ref 0) d=(nil) 0x1bf6200 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1c06060 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1990f00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1c2afa0 + 1.2.840.113556.1.6.13.3.34 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1990de0 + msDFSR-DefaultCompressionExclusionFilter contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x1c32bb0 + ms-DFSR-DefaultCompressionExclusionFilter contains 42 bytes in 1 blocks (ref 0) d=(nil) 0x1c36a40 + struct dsdb_attribute contains 415 bytes in 10 blocks (ref 0) d=(nil) 0x19908f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1990b70 + ms-DFSR-ContentSetGuid contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1c424b0 + ms-DFSR-ContentSetGuid contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1c51e70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1c4a190 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1990c00 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1c59ce0 + 1.2.840.113556.1.6.13.3.18 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1990ae0 + msDFSR-ContentSetGuid contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1990a60 + ms-DFSR-ContentSetGuid contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1c696d0 + struct dsdb_attribute contains 418 bytes in 9 blocks (ref 0) d=(nil) 0x19904d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c5dbe0 + ms-DFSR-ConflictSizeInMb contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1c619d0 + ms-DFSR-ConflictSizeInMb contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19907f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1990880 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1c762c0 + 1.2.840.113556.1.6.13.3.8 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1990760 + msDFSR-ConflictSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19906d0 + ms-DFSR-ConflictSizeInMb contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1990640 + struct dsdb_attribute contains 406 bytes in 10 blocks (ref 0) d=(nil) 0x1990140 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1990440 + ms-DFSR-ConflictPath contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1c75e80 + ms-DFSR-ConflictPath contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1c96f70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1c86a60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x198fd20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1c9ab50 + 1.2.840.113556.1.6.13.3.7 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19903b0 + msDFSR-ConflictPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1990330 + ms-DFSR-ConflictPath contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19902b0 + struct dsdb_attribute contains 437 bytes in 9 blocks (ref 0) d=(nil) 0x198fd90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ca2860 + ms-DFSR-ComputerReferenceBL contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1cab0e0 + ms-DFSR-ComputerReferenceBL contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19900b0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x20bd800 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1cb2620 + 1.2.840.113556.1.6.13.3.103 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1990020 + msDFSR-ComputerReferenceBL contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x198ff90 + ms-DFSR-ComputerReferenceBL contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x198ff00 + struct dsdb_attribute contains 429 bytes in 9 blocks (ref 0) d=(nil) 0x198f970 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cae7d0 + ms-DFSR-ComputerReference contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1cb64f0 + ms-DFSR-ComputerReference contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x198fc90 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x20b9930 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1ceb110 + 1.2.840.113556.1.6.13.3.101 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x198fc00 + msDFSR-ComputerReference contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x198fb70 + ms-DFSR-ComputerReference contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x198fae0 + struct dsdb_attribute contains 439 bytes in 9 blocks (ref 0) d=(nil) 0x198f550 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cc26a0 + ms-DFSR-CommonStagingSizeInMb contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1cd6a40 + ms-DFSR-CommonStagingSizeInMb contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x198f870 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x198f900 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1d06e50 + 1.2.840.113556.1.6.13.3.39 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x198f7e0 + msDFSR-CommonStagingSizeInMb contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x198f750 + ms-DFSR-CommonStagingSizeInMb contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x198f6c0 + struct dsdb_attribute contains 427 bytes in 10 blocks (ref 0) d=(nil) 0x198f1a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ce6cc0 + ms-DFSR-CommonStagingPath contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1cf3120 + ms-DFSR-CommonStagingPath contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x198f4c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1cf6d70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x198f130 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1d23c90 + 1.2.840.113556.1.6.13.3.38 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x198f430 + msDFSR-CommonStagingPath contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x198f3a0 + ms-DFSR-CommonStagingPath contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x198f310 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x198eda0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198f0a0 + ms-DFSR-CachePolicy contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1d33e40 + ms-DFSR-CachePolicy contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1d2fe20 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1d3c0f0 + 1.2.840.113556.1.6.13.3.29 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x198f010 + msDFSR-CachePolicy contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x198ef90 + ms-DFSR-CachePolicy contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x198ef10 + struct dsdb_attribute contains 403 bytes in 10 blocks (ref 0) d=(nil) 0x198ea30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d40110 + ms-DFS-Properties-v2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1d482d0 + ms-DFS-Properties-v2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1d507a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1d544f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x198ed30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198ecb0 + 1.2.840.113556.1.4.2037 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198ec20 + msDFS-Propertiesv2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x198eba0 + ms-DFS-Properties-v2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1d74830 + struct dsdb_attribute contains 453 bytes in 10 blocks (ref 0) d=(nil) 0x198e710 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d5c310 + ms-DFS-Namespace-Identity-GUID-v2 contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1d581a0 + ms-DFS-Namespace-Identity-GUID-v2 contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1d64390 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1d682c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x198e6a0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1d89100 + 1.2.840.113556.1.4.2033 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198e9a0 + msDFS-NamespaceIdentityGUIDv2 contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x198e910 + ms-DFS-Namespace-Identity-GUID-v2 contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x198e880 + struct dsdb_attribute contains 449 bytes in 8 blocks (ref 0) d=(nil) 0x198e300 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d703c0 + ms-DFS-Link-Security-Descriptor-v2 contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1d80c70 + ms-DFS-Link-Security-Descriptor-v2 contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1d8cda0 + 2.5.5.15 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198e620 + 1.2.840.113556.1.4.2040 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198e590 + msDFS-LinkSecurityDescriptorv2 contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x198e500 + ms-DFS-Link-Security-Descriptor-v2 contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x198e470 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x198df90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d993e0 + ms-DFS-Link-Path-v2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1da5ef0 + ms-DFS-Link-Path-v2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1db1330 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1da9ff0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x198e290 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198e210 + 1.2.840.113556.1.4.2039 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198e180 + msDFS-LinkPathv2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x198e100 + ms-DFS-Link-Path-v2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1de9d80 + struct dsdb_attribute contains 433 bytes in 10 blocks (ref 0) d=(nil) 0x198dc70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1db92a0 + ms-DFS-Link-Identity-GUID-v2 contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1dc15c0 + ms-DFS-Link-Identity-GUID-v2 contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1dd24b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1de19e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x198dc00 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1e0e860 + 1.2.840.113556.1.4.2041 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198df00 + msDFS-LinkIdentityGUIDv2 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x198de70 + ms-DFS-Link-Identity-GUID-v2 contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x198dde0 + struct dsdb_attribute contains 406 bytes in 8 blocks (ref 0) d=(nil) 0x198d8f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1df1a80 + ms-DFS-Last-Modified-v2 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1df9f60 + ms-DFS-Last-Modified-v2 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e01ef0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198db80 + 1.2.840.113556.1.4.2034 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198daf0 + msDFS-LastModifiedv2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1e29d50 + ms-DFS-Last-Modified-v2 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198da60 + struct dsdb_attribute contains 422 bytes in 10 blocks (ref 0) d=(nil) 0x198d4f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e1e8d0 + ms-DFS-Generation-GUID-v2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1e1a320 + ms-DFS-Generation-GUID-v2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1e25f30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e21ea0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x198d880 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198d800 + 1.2.840.113556.1.4.2032 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198d770 + msDFS-GenerationGUIDv2 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x198d6f0 + ms-DFS-Generation-GUID-v2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x198d660 + struct dsdb_attribute contains 391 bytes in 10 blocks (ref 0) d=(nil) 0x198d170 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e35820 + ms-DFS-Comment-v2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1e318c0 + ms-DFS-Comment-v2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1e56fd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e53940 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19899a0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198d470 + 1.2.840.113556.1.4.2036 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198d3e0 + msDFS-Commentv2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x198d360 + ms-DFS-Comment-v2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x198d2e0 + struct dsdb_attribute contains 350 bytes in 8 blocks (ref 0) d=(nil) 0x198ce00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e5b070 + Mscope-Id contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1e67310 + Mscope-Id contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1e633c0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x198d0f0 + 1.2.840.113556.1.4.716 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x198d070 + mscopeId contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198cff0 + Mscope-Id contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x198cf70 + struct dsdb_attribute contains 433 bytes in 9 blocks (ref 0) d=(nil) 0x198ca60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e7b430 + ms-COM-UserPartitionSetLink contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1e90c10 + ms-COM-UserPartitionSetLink contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1ea0160 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2085b40 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x198cd80 + 1.2.840.113556.1.4.1426 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198ccf0 + msCOM-UserPartitionSetLink contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x198cc60 + ms-COM-UserPartitionSetLink contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x198cbd0 + struct dsdb_attribute contains 385 bytes in 9 blocks (ref 0) d=(nil) 0x198c6e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ea7e80 + ms-COM-UserLink contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1eaf960 + ms-COM-UserLink contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1eabbf0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x20818b0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x198c9e0 + 1.2.840.113556.1.4.1425 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198c950 + msCOM-UserLink contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x198c8d0 + ms-COM-UserLink contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x198c850 + struct dsdb_attribute contains 417 bytes in 9 blocks (ref 0) d=(nil) 0x198c350 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ed2ea0 + ms-COM-PartitionSetLink contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ede9b0 + ms-COM-PartitionSetLink contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1edaf80 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x207d7e0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x198c660 + 1.2.840.113556.1.4.1424 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198c5d0 + msCOM-PartitionSetLink contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x198c550 + ms-COM-PartitionSetLink contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198c4c0 + struct dsdb_attribute contains 405 bytes in 9 blocks (ref 0) d=(nil) 0x198bfd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ee2720 + ms-COM-PartitionLink contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1ef2a90 + ms-COM-PartitionLink contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1f0b370 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x20795b0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x198c2d0 + 1.2.840.113556.1.4.1423 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198c240 + msCOM-PartitionLink contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x198c1c0 + ms-COM-PartitionLink contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x198c140 + struct dsdb_attribute contains 376 bytes in 8 blocks (ref 0) d=(nil) 0x198bc50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f1bf40 + ms-COM-ObjectId contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1f1b1d0 + ms-COM-ObjectId contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1f345f0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198bf50 + 1.2.840.113556.1.4.1428 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198bec0 + msCOM-ObjectId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x198be40 + ms-COM-ObjectId contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x198bdc0 + struct dsdb_attribute contains 433 bytes in 9 blocks (ref 0) d=(nil) 0x198b8b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f3b750 + ms-COM-DefaultPartitionLink contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1f43c40 + ms-COM-DefaultPartitionLink contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1f5cd20 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2071680 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x198bbd0 + 1.2.840.113556.1.4.1427 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198bb40 + msCOM-DefaultPartitionLink contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x198bab0 + ms-COM-DefaultPartitionLink contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x198ba20 + struct dsdb_attribute contains 375 bytes in 8 blocks (ref 0) d=(nil) 0x198b530 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fa4ef0 + Move-Tree-State contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1fbd940 + Move-Tree-State contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1fc5b10 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198b830 + 1.2.840.113556.1.4.1305 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198b7a0 + moveTreeState contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x198b720 + Move-Tree-State contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x198b6a0 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x198b1c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fd1f10 + Moniker-Display-Name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1fe96d0 + Moniker-Display-Name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1fee2f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198b4b0 + 1.2.840.113556.1.4.83 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x198b430 + monikerDisplayName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x198b3b0 + Moniker-Display-Name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x198b330 + struct dsdb_attribute contains 343 bytes in 8 blocks (ref 0) d=(nil) 0x198ae50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fed590 + Moniker contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1ff91a0 + Moniker contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2010760 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198b140 + 1.2.840.113556.1.4.82 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x198b0c0 + moniker contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x198b040 + Moniker contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x198afc0 + struct dsdb_attribute contains 368 bytes in 8 blocks (ref 0) d=(nil) 0x198ab60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x201c1d0 + Modify-Time-Stamp contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2027e30 + Modify-Time-Stamp contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2023eb0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198add0 + 2.5.18.2 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198ad50 + modifyTimeStamp contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x198acd0 + Modify-Time-Stamp contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x20439a0 + struct dsdb_attribute contains 419 bytes in 8 blocks (ref 0) d=(nil) 0x198a7d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x202fab0 + Modified-Count-At-Last-Prom contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x203b480 + Modified-Count-At-Last-Prom contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2047890 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198aae0 + 1.2.840.113556.1.4.81 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x198aa60 + modifiedCountAtLastProm contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x198a9d0 + Modified-Count-At-Last-Prom contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x198a940 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x198a460 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x204b470 + Modified-Count contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2057a40 + Modified-Count contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2063a40 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198a750 + 1.2.840.113556.1.4.168 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x198a6d0 + modifiedCount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x198a650 + Modified-Count contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x198a5d0 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x198a0f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2073710 + Min-Ticket-Age contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2083860 + Min-Ticket-Age contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x208b930 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x198a3e0 + 1.2.840.113556.1.4.80 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x198a360 + minTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x198a2e0 + Min-Ticket-Age contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x198a260 + struct dsdb_attribute contains 368 bytes in 8 blocks (ref 0) d=(nil) 0x1989d80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2098710 + Min-Pwd-Length contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x209c440 + Min-Pwd-Length contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x20a7f00 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x198a070 + 1.2.840.113556.1.4.79 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1989ff0 + minPwdLength contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1989f70 + Min-Pwd-Length contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1989ef0 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x1989a10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20d29e0 + Min-Pwd-Age contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x20e1f40 + Min-Pwd-Age contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x20ed320 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1989d00 + 1.2.840.113556.1.4.78 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1989c80 + minPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1989c00 + Min-Pwd-Age contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1989b80 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x1989630 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20e9470 + MHS-OR-Address contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x20f1210 + MHS-OR-Address contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x21081b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1989920 + 1.2.840.113556.1.4.650 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19898a0 + mhsORAddress contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1989820 + MHS-OR-Address contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19897a0 + struct dsdb_attribute contains 349 bytes in 9 blocks (ref 0) d=(nil) 0x1989250 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2110010 + MemberUid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x21261a0 + MemberUid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x212ddc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19895c0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1989540 + 1.3.6.1.1.1.1.12 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19894c0 + memberUid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1989440 + MemberUid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19893c0 + struct dsdb_attribute contains 381 bytes in 9 blocks (ref 0) d=(nil) 0x1988e70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2139290 + MemberNisNetgroup contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x21449e0 + MemberNisNetgroup contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x21546f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19891e0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1989160 + 1.3.6.1.1.1.1.13 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19890e0 + memberNisNetgroup contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1989060 + MemberNisNetgroup contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1988fe0 + struct dsdb_attribute contains 335 bytes in 9 blocks (ref 0) d=(nil) 0x1988b20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2181db0 + Member contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x217e290 + Member contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1988e00 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x203d830 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1988d80 + 2.5.4.31 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1988d00 + member contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1988c90 + Member contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1982010 + struct dsdb_attribute contains 356 bytes in 8 blocks (ref 0) d=(nil) 0x19887b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x218b150 + meetingURL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2196900 + meetingURL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x21b3310 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1988aa0 + 1.2.840.113556.1.4.583 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1988a20 + meetingURL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19889a0 + meetingURL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1988920 + struct dsdb_attribute contains 360 bytes in 8 blocks (ref 0) d=(nil) 0x1988440 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21aec60 + meetingType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x21c3b80 + meetingType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x21c7810 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1988730 + 1.2.840.113556.1.4.571 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19886b0 + meetingType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1988630 + meetingType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19885b0 + struct dsdb_attribute contains 380 bytes in 8 blocks (ref 0) d=(nil) 0x19880d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21cf830 + meetingStartTime contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x21eefa0 + meetingStartTime contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x21fac80 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19883c0 + 1.2.840.113556.1.4.587 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1988340 + meetingStartTime contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19882c0 + meetingStartTime contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1988240 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x1987d60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21fe700 + meetingScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2213c00 + meetingScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x22178e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1988050 + 1.2.840.113556.1.4.581 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1987fd0 + meetingScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1987f50 + meetingScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1987ed0 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x19879f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22200e0 + meetingRecurrence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x222c970 + meetingRecurrence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x22498a0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1987ce0 + 1.2.840.113556.1.4.586 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1987c60 + meetingRecurrence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1987be0 + meetingRecurrence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1987b60 + struct dsdb_attribute contains 368 bytes in 8 blocks (ref 0) d=(nil) 0x1987680 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2251800 + meetingRating contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2269ad0 + meetingRating contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2282d80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1987970 + 1.2.840.113556.1.4.584 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19878f0 + meetingRating contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1987870 + meetingRating contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19877f0 + struct dsdb_attribute contains 376 bytes in 8 blocks (ref 0) d=(nil) 0x1987310 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x228b0e0 + meetingProtocol contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x229afa0 + meetingProtocol contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x22a30c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1987600 + 1.2.840.113556.1.4.570 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1987580 + meetingProtocol contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1987500 + meetingProtocol contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1987480 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x1986fa0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22c4a70 + meetingOwner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x22ccd50 + meetingOwner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x22d4c50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1987290 + 1.2.840.113556.1.4.579 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1987210 + meetingOwner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1987190 + meetingOwner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1987110 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x1986c30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22dcc60 + meetingOriginator contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x22f1f40 + meetingOriginator contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x22f9d80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1986f20 + 1.2.840.113556.1.4.577 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1986ea0 + meetingOriginator contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1986e20 + meetingOriginator contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1986da0 + struct dsdb_attribute contains 360 bytes in 8 blocks (ref 0) d=(nil) 0x19868c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x231ed40 + meetingName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x23333b0 + meetingName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2351150 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1986bb0 + 1.2.840.113556.1.4.566 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1986b30 + meetingName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1986ab0 + meetingName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1986a30 + struct dsdb_attribute contains 403 bytes in 8 blocks (ref 0) d=(nil) 0x1986550 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2359500 + meetingMaxParticipants contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2365610 + meetingMaxParticipants contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x23612f0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1986840 + 1.2.840.113556.1.4.576 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19867c0 + meetingMaxParticipants contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1986740 + meetingMaxParticipants contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19866c0 + struct dsdb_attribute contains 376 bytes in 8 blocks (ref 0) d=(nil) 0x19861e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2375c70 + meetingLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x238a450 + meetingLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x239a270 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19864d0 + 1.2.840.113556.1.4.569 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1986450 + meetingLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19863d0 + meetingLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1986350 + struct dsdb_attribute contains 376 bytes in 8 blocks (ref 0) d=(nil) 0x1985e70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23b2cb0 + meetingLanguage contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x23baf80 + meetingLanguage contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x23c2dc0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1986160 + 1.2.840.113556.1.4.574 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19860e0 + meetingLanguage contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1986060 + meetingLanguage contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1985fe0 + struct dsdb_attribute contains 372 bytes in 8 blocks (ref 0) d=(nil) 0x1985b00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23cf9d0 + meetingKeyword contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x23d7700 + meetingKeyword contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x23d3560 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1985df0 + 1.2.840.113556.1.4.568 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1985d70 + meetingKeyword contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1985cf0 + meetingKeyword contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1985c70 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x1985790 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23ec780 + meetingIsEncrypted contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x24044e0 + meetingIsEncrypted contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x240c650 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1985a80 + 1.2.840.113556.1.4.585 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1985a00 + meetingIsEncrypted contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1985980 + meetingIsEncrypted contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1985900 + struct dsdb_attribute contains 352 bytes in 8 blocks (ref 0) d=(nil) 0x1985420 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24146c0 + meetingIP contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x241be80 + meetingIP contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2427ee0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1985710 + 1.2.840.113556.1.4.580 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1985690 + meetingIP contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1985610 + meetingIP contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1985590 + struct dsdb_attribute contains 352 bytes in 8 blocks (ref 0) d=(nil) 0x19850b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2437240 + meetingID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2447750 + meetingID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2443210 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19853a0 + 1.2.840.113556.1.4.565 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1985320 + meetingID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19852a0 + meetingID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1985220 + struct dsdb_attribute contains 372 bytes in 8 blocks (ref 0) d=(nil) 0x1984d40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x244ec70 + meetingEndTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x244ad10 + meetingEndTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x24568e0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1985030 + 1.2.840.113556.1.4.588 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1984fb0 + meetingEndTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1984f30 + meetingEndTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1984eb0 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x19849d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2462650 + meetingDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2471d30 + meetingDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x247e340 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1984cc0 + 1.2.840.113556.1.4.567 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1984c40 + meetingDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1984bc0 + meetingDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1984b40 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x1984660 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x247a2a0 + meetingContactInfo contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x24861f0 + meetingContactInfo contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x248a040 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1984950 + 1.2.840.113556.1.4.578 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19848d0 + meetingContactInfo contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1984850 + meetingContactInfo contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19847d0 + struct dsdb_attribute contains 360 bytes in 8 blocks (ref 0) d=(nil) 0x19842f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2496190 + meetingBlob contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x24ae470 + meetingBlob contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x24aa790 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19845e0 + 1.2.840.113556.1.4.590 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1984560 + meetingBlob contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19844e0 + meetingBlob contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1984460 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x1983f80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24b22b0 + meetingBandwidth contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x24be180 + meetingBandwidth contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x24ba1c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1984270 + 1.2.840.113556.1.4.589 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19841f0 + meetingBandwidth contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1984170 + meetingBandwidth contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19840f0 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x1983c10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24ca090 + meetingApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x24daa00 + meetingApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x24e6df0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1983f00 + 1.2.840.113556.1.4.573 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1983e80 + meetingApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1983e00 + meetingApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1983d80 + struct dsdb_attribute contains 400 bytes in 8 blocks (ref 0) d=(nil) 0x19838a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24e2d70 + meetingAdvertiseScope contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x24eb1f0 + meetingAdvertiseScope contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x24f3240 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1983b90 + 1.2.840.113556.1.4.582 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1983b10 + meetingAdvertiseScope contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1983a90 + meetingAdvertiseScope contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1983a10 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x1983530 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x250b190 + May-Contain contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x25172f0 + May-Contain contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2513190 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1983820 + 1.2.840.113556.1.2.25 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19837a0 + mayContain contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1983720 + May-Contain contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19836a0 + struct dsdb_attribute contains 369 bytes in 8 blocks (ref 0) d=(nil) 0x19831c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x251f160 + Max-Ticket-Age contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2523090 + Max-Ticket-Age contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x252ed00 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19834b0 + 1.2.840.113556.1.4.77 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1983430 + maxTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19833b0 + Max-Ticket-Age contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1983330 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x1982e50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x252ad50 + Max-Storage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x25337c0 + Max-Storage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x25438a0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1983140 + 1.2.840.113556.1.4.76 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19830c0 + maxStorage contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1983040 + Max-Storage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1982fc0 + struct dsdb_attribute contains 365 bytes in 8 blocks (ref 0) d=(nil) 0x1982ae0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25530b0 + Max-Renew-Age contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2597850 + Max-Renew-Age contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x25a3010 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1982dd0 + 1.2.840.113556.1.4.75 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1982d50 + maxRenewAge contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1982cd0 + Max-Renew-Age contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1982c50 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x1982770 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25aae20 + Max-Pwd-Age contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x25f22d0 + Max-Pwd-Age contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x25f9f20 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1982a60 + 1.2.840.113556.1.4.74 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19829e0 + maxPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1982960 + Max-Pwd-Age contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19828e0 + struct dsdb_attribute contains 369 bytes in 9 blocks (ref 0) d=(nil) 0x19823f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2601d60 + Mastered-By contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2628b50 + Mastered-By contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2634ab0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1fc7d50 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19826f0 + 1.2.840.113556.1.4.1409 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1982660 + masteredBy contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19825e0 + Mastered-By contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1982560 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x1982080 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2630bc0 + Marshalled-Interface contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2657750 + Marshalled-Interface contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2663bf0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1982370 + 1.2.840.113556.1.4.72 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19822f0 + marshalledInterface contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1982270 + Marshalled-Interface contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19821f0 + struct dsdb_attribute contains 341 bytes in 8 blocks (ref 0) d=(nil) 0x1981d20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x266ee50 + MAPI-ID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x267e7b0 + MAPI-ID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2686350 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1981f90 + 1.2.840.113556.1.2.49 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1981f10 + mAPIID contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1980850 + MAPI-ID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1981e90 + struct dsdb_attribute contains 357 bytes in 9 blocks (ref 0) d=(nil) 0x1981990 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1981c90 + Manager contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x268e080 + Manager contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2699d20 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1fbb9c0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2695bb0 + 0.9.2342.19200300.100.1.10 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1981c00 + manager contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1981b80 + Manager contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1981b00 + struct dsdb_attribute contains 384 bytes in 9 blocks (ref 0) d=(nil) 0x1981620 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26a1a50 + Managed-Objects contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x269dce0 + Managed-Objects contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x26aa3a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1fb7660 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1981910 + 1.2.840.113556.1.4.654 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1981890 + managedObjects contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1981810 + Managed-Objects contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1981790 + struct dsdb_attribute contains 364 bytes in 9 blocks (ref 0) d=(nil) 0x19812b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26b1a00 + Managed-By contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x26bcd30 + Managed-By contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x26c87c0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1fb3120 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19815a0 + 1.2.840.113556.1.4.653 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1981520 + managedBy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19814a0 + Managed-By contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1981420 + struct dsdb_attribute contains 390 bytes in 8 blocks (ref 0) d=(nil) 0x1980f40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26c4ac0 + Machine-Wide-Policy contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x26d0c20 + Machine-Wide-Policy contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x26cc590 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1981230 + 1.2.840.113556.1.4.459 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19811b0 + machineWidePolicy contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1981130 + Machine-Wide-Policy contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19810b0 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x1980c50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26d4450 + Machine-Role contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x26e7ff0 + Machine-Role contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x26e3ac0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1980ec0 + 1.2.840.113556.1.4.71 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1980e40 + machineRole contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1980dc0 + Machine-Role contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x26fedf0 + struct dsdb_attribute contains 441 bytes in 8 blocks (ref 0) d=(nil) 0x19808c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26ef4a0 + Machine-Password-Change-Interval contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x26eb5c0 + Machine-Password-Change-Interval contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x26f7170 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1980bd0 + 1.2.840.113556.1.4.520 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1980b50 + machinePasswordChangeInterval contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1980ac0 + Machine-Password-Change-Interval contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x1980a30 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x19804e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26fb0c0 + Machine-Architecture contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2707270 + Machine-Architecture contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x270ab10 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19807d0 + 1.2.840.113556.1.4.68 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1980750 + machineArchitecture contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19806d0 + Machine-Architecture contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1980650 + struct dsdb_attribute contains 353 bytes in 9 blocks (ref 0) d=(nil) 0x1980170 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2712920 + MacAddress contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x271a350 + MacAddress contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2731d00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x197f340 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1980460 + 1.3.6.1.1.1.1.22 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19803e0 + macAddress contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1980360 + MacAddress contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19802e0 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x197fe00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x273df00 + LSA-Modified-Count contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2739d10 + LSA-Modified-Count contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2745c60 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19800f0 + 1.2.840.113556.1.4.67 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1980070 + lSAModifiedCount contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x197fff0 + LSA-Modified-Count contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x197ff70 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x197fa90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2741b00 + LSA-Creation-Time contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x274dd30 + LSA-Creation-Time contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x275e260 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197fd80 + 1.2.840.113556.1.4.66 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197fd00 + lSACreationTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x197fc80 + LSA-Creation-Time contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x197fc00 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x197f720 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x276a760 + Logon-Workstation contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2772bf0 + Logon-Workstation contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x277ac90 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197fa10 + 1.2.840.113556.1.4.65 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197f990 + logonWorkstation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x197f910 + Logon-Workstation contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x197f890 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x197f3b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2793070 + Logon-Hours contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x27ab9b0 + Logon-Hours contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x27b38a0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197f6a0 + 1.2.840.113556.1.4.64 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197f620 + logonHours contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x197f5a0 + Logon-Hours contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x197f520 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x197f050 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27bfa30 + Logon-Count contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x27bbb40 + Logon-Count contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x27cf9c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197f2c0 + 1.2.840.113556.1.4.169 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197f240 + logonCount contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x197f1c0 + Logon-Count contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x27deae0 + struct dsdb_attribute contains 351 bytes in 10 blocks (ref 0) d=(nil) 0x197ec60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x197ef50 + Logo contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x27cb3a0 + Logo contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x27d6e30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x27d30f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x197efe0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x27dad90 + 2.16.840.1.113730.3.1.36 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x197eec0 + thumbnailLogo contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x197ee40 + Logo contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x197edd0 + struct dsdb_attribute contains 352 bytes in 9 blocks (ref 0) d=(nil) 0x197e8f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27e6540 + LoginShell contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x27e28b0 + LoginShell contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x27ee380 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x197e880 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197ebe0 + 1.3.6.1.1.1.1.4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x197eb60 + loginShell contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x197eae0 + LoginShell contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x197ea60 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x197e510 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27ea3a0 + Lockout-Time contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x27f6070 + Lockout-Time contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x27fdd00 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197e800 + 1.2.840.113556.1.4.662 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197e780 + lockoutTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x197e700 + Lockout-Time contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x197e680 + struct dsdb_attribute contains 385 bytes in 9 blocks (ref 0) d=(nil) 0x197e220 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27f9fc0 + Lockout-Threshold contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2805830 + Lockout-Threshold contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x28019c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x197de20 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197e490 + 1.2.840.113556.1.4.73 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197e410 + lockoutThreshold contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x197e390 + Lockout-Threshold contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x281cf10 + struct dsdb_attribute contains 420 bytes in 8 blocks (ref 0) d=(nil) 0x197de90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2809700 + Lock-Out-Observation-Window contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2815260 + Lock-Out-Observation-Window contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2811330 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197e1a0 + 1.2.840.113556.1.4.61 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197e120 + lockOutObservationWindow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x197e090 + Lock-Out-Observation-Window contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x197e000 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x197dab0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28191a0 + Lockout-Duration contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2824be0 + Lockout-Duration contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2820e50 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197dda0 + 1.2.840.113556.1.4.60 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197dd20 + lockoutDuration contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x197dca0 + Lockout-Duration contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x197dc20 + struct dsdb_attribute contains 356 bytes in 10 blocks (ref 0) d=(nil) 0x197d740 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x282c930 + Location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2828ba0 + Location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2840060 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x28312f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x197cc80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197da30 + 1.2.840.113556.1.4.222 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197d9b0 + location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197d930 + Location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197d8b0 + struct dsdb_attribute contains 411 bytes in 9 blocks (ref 0) d=(nil) 0x197d3d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x284ba40 + Local-Policy-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2847b30 + Local-Policy-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28538c0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1f6a670 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197d6c0 + 1.2.840.113556.1.4.457 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197d640 + localPolicyReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x197d5c0 + Local-Policy-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197d540 + struct dsdb_attribute contains 384 bytes in 8 blocks (ref 0) d=(nil) 0x197d060 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x284f7a0 + Local-Policy-Flags contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2857800 + Local-Policy-Flags contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2867950 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197d350 + 1.2.840.113556.1.4.56 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197d2d0 + localPolicyFlags contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x197d250 + Local-Policy-Flags contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x197d1d0 + struct dsdb_attribute contains 399 bytes in 8 blocks (ref 0) d=(nil) 0x197ccf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x287f450 + Localized-Description contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x28879a0 + Localized-Description contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x288edb0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197cfe0 + 1.2.840.113556.1.4.817 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197cf60 + localizedDescription contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x197cee0 + Localized-Description contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197ce60 + struct dsdb_attribute contains 406 bytes in 8 blocks (ref 0) d=(nil) 0x197c8f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28a2d80 + Localization-Display-Id contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x289edc0 + Localization-Display-Id contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28ba9e0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197cc00 + 1.2.840.113556.1.4.1353 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x197cb70 + localizationDisplayId contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197caf0 + Localization-Display-Id contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x197ca60 + struct dsdb_attribute contains 349 bytes in 10 blocks (ref 0) d=(nil) 0x197c610 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28b6cb0 + Locality-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x28be750 + Locality-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x28c6b40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x28cac20 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x197c880 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x28d2a80 + 2.5.4.7 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197c800 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x197c230 + Locality-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x197c780 + struct dsdb_attribute contains 349 bytes in 8 blocks (ref 0) d=(nil) 0x197c2a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28e8050 + Locale-ID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2909a40 + Locale-ID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2921a40 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197c590 + 1.2.840.113556.1.4.58 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197c510 + localeID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197c490 + Locale-ID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x197c410 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x197bec0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x292db90 + Lm-Pwd-History contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2931b40 + Lm-Pwd-History contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x294ab60 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197c1b0 + 1.2.840.113556.1.4.160 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197c130 + lmPwdHistory contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x197c0b0 + Lm-Pwd-History contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x197c030 + struct dsdb_attribute contains 390 bytes in 10 blocks (ref 0) d=(nil) 0x197bb50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2956db0 + Link-Track-Secret contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x295adc0 + Link-Track-Secret contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2977680 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x29674e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x197bae0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197be40 + 1.2.840.113556.1.4.269 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197bdc0 + linkTrackSecret contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x197bd40 + Link-Track-Secret contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x197bcc0 + struct dsdb_attribute contains 341 bytes in 8 blocks (ref 0) d=(nil) 0x197b7f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x297b040 + Link-ID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2983e50 + Link-ID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x29ac1b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197ba60 + 1.2.840.113556.1.2.50 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197b9e0 + linkID contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x197b410 + Link-ID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197b960 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x197b480 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29e6f50 + Legacy-Exchange-DN contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x29f2ec0 + Legacy-Exchange-DN contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x29eec50 + 2.5.5.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x197b770 + 1.2.840.113556.1.4.655 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197b6f0 + legacyExchangeDN contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x197b670 + Legacy-Exchange-DN contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x197b5f0 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x197b0a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29f6d20 + LDAP-IPDeny-List contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2a02cc0 + LDAP-IPDeny-List contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2a128d0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197b390 + 1.2.840.113556.1.4.844 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197b310 + lDAPIPDenyList contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x197b290 + LDAP-IPDeny-List contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x197b210 + struct dsdb_attribute contains 390 bytes in 10 blocks (ref 0) d=(nil) 0x197ad30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a0ea20 + LDAP-Display-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2a276d0 + LDAP-Display-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2a43780 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2a37910 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1978ab0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197b020 + 1.2.840.113556.1.2.460 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197afa0 + lDAPDisplayName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x197af20 + LDAP-Display-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x197aea0 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x197a9c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a3f890 + LDAP-Admin-Limits contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2a47b00 + LDAP-Admin-Limits contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2a537d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197acb0 + 1.2.840.113556.1.4.843 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197ac30 + lDAPAdminLimits contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x197abb0 + LDAP-Admin-Limits contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x197ab30 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x197a650 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a4f820 + Last-Update-Sequence contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2a57530 + Last-Update-Sequence contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2a63400 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197a940 + 1.2.840.113556.1.4.330 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x197a8c0 + lastUpdateSequence contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x197a840 + Last-Update-Sequence contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x197a7c0 + struct dsdb_attribute contains 365 bytes in 8 blocks (ref 0) d=(nil) 0x197a2e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a5f4b0 + Last-Set-Time contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2a67a60 + Last-Set-Time contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2a82dd0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197a5d0 + 1.2.840.113556.1.4.53 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x197a550 + lastSetTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x197a4d0 + Last-Set-Time contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x197a450 + struct dsdb_attribute contains 395 bytes in 8 blocks (ref 0) d=(nil) 0x1979f60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a7efa0 + Last-Logon-Timestamp contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2a86b20 + Last-Logon-Timestamp contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2a92920 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x197a260 + 1.2.840.113556.1.4.1696 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x197a1d0 + lastLogonTimestamp contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x197a150 + Last-Logon-Timestamp contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x197a0d0 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x1979bf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a8e820 + Last-Logon contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2a96700 + Last-Logon contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2aa2280 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1979ee0 + 1.2.840.113556.1.4.52 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1979e60 + lastLogon contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1979de0 + Last-Logon contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1979d60 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x1979880 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2aadfa0 + Last-Logoff contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2ab5f40 + Last-Logoff contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2ac1d70 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1979b70 + 1.2.840.113556.1.4.51 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1979af0 + lastLogoff contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1979a70 + Last-Logoff contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19799f0 + struct dsdb_attribute contains 391 bytes in 9 blocks (ref 0) d=(nil) 0x1979510 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2acd980 + Last-Known-Parent contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ad9630 + Last-Known-Parent contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ad54a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1f21210 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1979800 + 1.2.840.113556.1.4.781 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1979780 + lastKnownParent contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1979700 + Last-Known-Parent contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1979680 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x1979220 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ade1e0 + Last-Content-Indexed contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2af1240 + Last-Content-Indexed contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2b05d60 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1979490 + 1.2.840.113556.1.4.50 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1979410 + lastContentIndexed contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1979390 + Last-Content-Indexed contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2b43590 + struct dsdb_attribute contains 425 bytes in 8 blocks (ref 0) d=(nil) 0x1978e90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b1e6b0 + Last-Backup-Restoration-Time contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2b2a230 + Last-Backup-Restoration-Time contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2b264d0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19791a0 + 1.2.840.113556.1.4.519 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1979120 + lastBackupRestorationTime contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1979090 + Last-Backup-Restoration-Time contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1979000 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x1978b20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b3f150 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2b4b850 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2b4f9c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1978e10 + 1.3.6.1.4.1.250.1.57 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1978d90 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1978d10 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1978c90 + struct dsdb_attribute contains 383 bytes in 8 blocks (ref 0) d=(nil) 0x19787c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b5b490 + Knowledge-Information contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2b576b0 + Knowledge-Information contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2b6fa40 + 2.5.5.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2b782b0 + 2.5.4.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1978a30 + knowledgeInformation contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19789b0 + Knowledge-Information contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1978930 + struct dsdb_attribute contains 355 bytes in 10 blocks (ref 0) d=(nil) 0x1978450 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b80670 + Keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2b88400 + Keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2bb0980 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ba89e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1976490 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1978740 + 1.2.840.113556.1.4.48 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19786c0 + keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1978640 + Keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19785c0 + struct dsdb_attribute contains 356 bytes in 8 blocks (ref 0) d=(nil) 0x19780c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19783c0 + jpegPhoto contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2bbc7f0 + jpegPhoto contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2bb8960 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2bc4470 + 0.9.2342.19200300.100.1.60 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1978330 + jpegPhoto contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19782b0 + jpegPhoto contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1978230 + struct dsdb_attribute contains 376 bytes in 8 blocks (ref 0) d=(nil) 0x1977d50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bc0710 + Is-Single-Valued contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2bcc110 + Is-Single-Valued contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2be8630 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1978040 + 1.2.840.113556.1.2.33 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1977fc0 + isSingleValued contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1977f40 + Is-Single-Valued contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1977ec0 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x19779d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bf06d0 + Is-Recycled contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2bfc760 + Is-Recycled contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2bf87d0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1977cd0 + 1.2.840.113556.1.4.2058 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1977c40 + isRecycled contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1977bc0 + Is-Recycled contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1977b40 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x1977660 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c045c0 + Is-Privilege-Holder contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2c00860 + Is-Privilege-Holder contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2c18bf0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1efd260 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1977950 + 1.2.840.113556.1.4.638 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19778d0 + isPrivilegeHolder contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1977850 + Is-Privilege-Holder contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19777d0 + struct dsdb_attribute contains 446 bytes in 8 blocks (ref 0) d=(nil) 0x19772d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c24f40 + Is-Member-Of-Partial-Attribute-Set contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x2c31b50 + Is-Member-Of-Partial-Attribute-Set contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x2c39cc0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19775e0 + 1.2.840.113556.1.4.639 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1977560 + isMemberOfPartialAttributeSet contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19774d0 + Is-Member-Of-Partial-Attribute-Set contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1977440 + struct dsdb_attribute contains 378 bytes in 9 blocks (ref 0) d=(nil) 0x1976f60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c46020 + Is-Member-Of-DL contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2c4dec0 + Is-Member-Of-DL contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2c4a1c0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ef4d30 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1977250 + 1.2.840.113556.1.2.102 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19771d0 + memberOf contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1977150 + Is-Member-Of-DL contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19770d0 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x1976be0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c55fe0 + Is-Ephemeral contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2c51cc0 + Is-Ephemeral contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2c66020 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1976ee0 + 1.2.840.113556.1.4.1212 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1976e50 + isEphemeral contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1976dd0 + Is-Ephemeral contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1976d50 + struct dsdb_attribute contains 353 bytes in 8 blocks (ref 0) d=(nil) 0x1976870 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c6d950 + Is-Deleted contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2c75190 + Is-Deleted contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2c715a0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1976b60 + 1.2.840.113556.1.2.48 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1976ae0 + isDeleted contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1976a60 + Is-Deleted contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19769e0 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x1976500 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c7ca40 + Is-Defunct contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2c78ec0 + Is-Defunct contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2c846d0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19767f0 + 1.2.840.113556.1.4.661 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1976770 + isDefunct contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19766f0 + Is-Defunct contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1976670 + struct dsdb_attribute contains 412 bytes in 8 blocks (ref 0) d=(nil) 0x1976110 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c885a0 + Is-Critical-System-Object contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2c90c60 + Is-Critical-System-Object contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2c98f70 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1976410 + 1.2.840.113556.1.4.868 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1976390 + isCriticalSystemObject contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1976310 + Is-Critical-System-Object contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1976280 + struct dsdb_attribute contains 381 bytes in 9 blocks (ref 0) d=(nil) 0x1975da0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ca1340 + IpServiceProtocol contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ca9a20 + IpServiceProtocol contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2cb5b90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1973120 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1976090 + 1.3.6.1.1.1.1.16 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1976010 + ipServiceProtocol contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1975f90 + IpServiceProtocol contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1975f10 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x1975a30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cd32c0 + IpServicePort contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2cef4a0 + IpServicePort contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2ceb180 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1975d20 + 1.3.6.1.1.1.1.15 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1975ca0 + ipServicePort contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1975c20 + IpServicePort contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1975ba0 + struct dsdb_attribute contains 411 bytes in 9 blocks (ref 0) d=(nil) 0x19756c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cf7690 + Ipsec-Policy-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2cf3800 + Ipsec-Policy-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d35140 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ed8eb0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19759b0 + 1.2.840.113556.1.4.517 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1975930 + ipsecPolicyReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19758b0 + Ipsec-Policy-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1975830 + struct dsdb_attribute contains 411 bytes in 9 blocks (ref 0) d=(nil) 0x1975350 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d55cb0 + Ipsec-Owners-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d6a0e0 + Ipsec-Owners-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d663b0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ed4f50 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1975640 + 1.2.840.113556.1.4.624 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19755c0 + ipsecOwnersReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1975540 + Ipsec-Owners-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19754c0 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x1975060 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d6e1a0 + Ipsec-NFA-Reference contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2d7eca0 + Ipsec-NFA-Reference contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2d8f530 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ed0fb0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19752d0 + 1.2.840.113556.1.4.627 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1975250 + ipsecNFAReference contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19751d0 + Ipsec-NFA-Reference contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2daaf90 + struct dsdb_attribute contains 429 bytes in 8 blocks (ref 0) d=(nil) 0x1974cd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d9b060 + IPSEC-Negotiation-Policy-Type contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2d96ec0 + IPSEC-Negotiation-Policy-Type contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2da3150 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1974fe0 + 1.2.840.113556.1.4.887 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1974f60 + iPSECNegotiationPolicyType contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1974ed0 + IPSEC-Negotiation-Policy-Type contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1974e40 + struct dsdb_attribute contains 458 bytes in 9 blocks (ref 0) d=(nil) 0x19749c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2da7210 + Ipsec-Negotiation-Policy-Reference contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x2dcba80 + Ipsec-Negotiation-Policy-Reference contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x2df9980 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ec9230 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1974c50 + 1.2.840.113556.1.4.628 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2e15f00 + ipsecNegotiationPolicyReference contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x1974bc0 + Ipsec-Negotiation-Policy-Reference contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1974b30 + struct dsdb_attribute contains 437 bytes in 8 blocks (ref 0) d=(nil) 0x1974630 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e01ab0 + IPSEC-Negotiation-Policy-Action contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2e0de60 + IPSEC-Negotiation-Policy-Action contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2e09c80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1974940 + 1.2.840.113556.1.4.888 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19748c0 + iPSECNegotiationPolicyAction contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1974830 + IPSEC-Negotiation-Policy-Action contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x19747a0 + struct dsdb_attribute contains 355 bytes in 8 blocks (ref 0) d=(nil) 0x19742c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e1dc40 + Ipsec-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2e31ff0 + Ipsec-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2e3eb60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19745b0 + 1.2.840.113556.1.4.620 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1974530 + ipsecName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19744b0 + Ipsec-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1974430 + struct dsdb_attribute contains 411 bytes in 9 blocks (ref 0) d=(nil) 0x1973f50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e3aa30 + Ipsec-ISAKMP-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2eff5a0 + Ipsec-ISAKMP-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f07bd0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ebd5b0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1974240 + 1.2.840.113556.1.4.626 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19741c0 + ipsecISAKMPReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1974140 + Ipsec-ISAKMP-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19740c0 + struct dsdb_attribute contains 347 bytes in 8 blocks (ref 0) d=(nil) 0x1973be0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f15960 + Ipsec-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2f39e90 + Ipsec-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2f358a0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1973ed0 + 1.2.840.113556.1.4.621 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1973e50 + ipsecID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1973dd0 + Ipsec-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1973d50 + struct dsdb_attribute contains 411 bytes in 9 blocks (ref 0) d=(nil) 0x1973870 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f514a0 + Ipsec-Filter-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f88420 + Ipsec-Filter-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x301f5d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1eb58a0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1973b60 + 1.2.840.113556.1.4.629 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1973ae0 + ipsecFilterReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1973a60 + Ipsec-Filter-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19739e0 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x1973500 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3057700 + Ipsec-Data-Type contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x30bedc0 + Ipsec-Data-Type contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x30cc280 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19737f0 + 1.2.840.113556.1.4.622 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1973770 + ipsecDataType contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19736f0 + Ipsec-Data-Type contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1973670 + struct dsdb_attribute contains 355 bytes in 8 blocks (ref 0) d=(nil) 0x1973190 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3298e20 + Ipsec-Data contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19b6a60 + Ipsec-Data contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19c6a20 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1973480 + 1.2.840.113556.1.4.623 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1973400 + ipsecData contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1973380 + Ipsec-Data contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1973300 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x1972db0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19ca740 + IpProtocolNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19ce560 + IpProtocolNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19d2370 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19730a0 + 1.3.6.1.1.1.1.17 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1973020 + ipProtocolNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1972fa0 + IpProtocolNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1972f20 + struct dsdb_attribute contains 373 bytes in 9 blocks (ref 0) d=(nil) 0x19729d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19d6190 + IpNetworkNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19d96e0 + IpNetworkNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19e5160 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1972d40 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1972cc0 + 1.3.6.1.1.1.1.20 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1972c40 + ipNetworkNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1972bc0 + IpNetworkNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1972b40 + struct dsdb_attribute contains 373 bytes in 9 blocks (ref 0) d=(nil) 0x19725f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19e98f0 + IpNetmaskNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19f47a0 + IpNetmaskNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19f8dc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1972960 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19728e0 + 1.3.6.1.1.1.1.21 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1972860 + ipNetmaskNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19727e0 + IpNetmaskNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1972760 + struct dsdb_attribute contains 361 bytes in 9 blocks (ref 0) d=(nil) 0x1972280 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a00200 + IpHostNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1a047d0 + IpHostNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1a086a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1971660 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1972570 + 1.3.6.1.1.1.1.19 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19724f0 + ipHostNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1972470 + IpHostNumber contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19723f0 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x1971e00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a1b6c0 + Invocation-Id contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1a232f0 + Invocation-Id contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1a3f050 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a42e40 + 1.2.840.113556.1.2.115 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1972070 + invocationId contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1971ff0 + Invocation-Id contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1971f70 + struct dsdb_attribute contains 413 bytes in 8 blocks (ref 0) d=(nil) 0x1971a70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a462c0 + Inter-Site-Topology-Renew contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1a4e990 + Inter-Site-Topology-Renew contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1a52690 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1971d80 + 1.2.840.113556.1.4.1247 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1971cf0 + interSiteTopologyRenew contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1971c70 + Inter-Site-Topology-Renew contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1971be0 + struct dsdb_attribute contains 439 bytes in 9 blocks (ref 0) d=(nil) 0x19716d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a564a0 + Inter-Site-Topology-Generator contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1a59a00 + Inter-Site-Topology-Generator contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1a6a690 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1e92080 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19719f0 + 1.2.840.113556.1.4.1246 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1971960 + interSiteTopologyGenerator contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19718d0 + Inter-Site-Topology-Generator contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1971840 + struct dsdb_attribute contains 425 bytes in 8 blocks (ref 0) d=(nil) 0x19712c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a88520 + Inter-Site-Topology-Failover contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1a8c330 + Inter-Site-Topology-Failover contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1aa08b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19715e0 + 1.2.840.113556.1.4.1248 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1971550 + interSiteTopologyFailover contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19714c0 + Inter-Site-Topology-Failover contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1971430 + struct dsdb_attribute contains 407 bytes in 10 blocks (ref 0) d=(nil) 0x1970f30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ab5320 + International-ISDN-Number contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1ab92e0 + International-ISDN-Number contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1abd4a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ac15c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1970b50 + 2.5.5.6 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1971240 + 2.5.4.25 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19711c0 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1971130 + International-ISDN-Number contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19710a0 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x1970bc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ac53e0 + Instance-Type contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1ac9190 + Instance-Type contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1acd3c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1970eb0 + 1.2.840.113556.1.2.1 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1970e30 + instanceType contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1970db0 + Instance-Type contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1970d30 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x19707e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ad11f0 + Install-Ui-Level contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1ad5060 + Install-Ui-Level contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1ae0910 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1970ad0 + 1.2.840.113556.1.4.847 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1970a50 + installUiLevel contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19709d0 + Install-Ui-Level contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1970950 + struct dsdb_attribute contains 342 bytes in 10 blocks (ref 0) d=(nil) 0x1970470 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ae3f30 + Initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1ae8b80 + Initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1af0ac0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1aecb70 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196fd20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1970760 + 2.5.4.43 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19706e0 + initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1970660 + Initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19705e0 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x1970100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1af49f0 + Initial-Auth-Outgoing contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1af8020 + Initial-Auth-Outgoing contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b00ab0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19703f0 + 1.2.840.113556.1.4.540 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1970370 + initialAuthOutgoing contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19702f0 + Initial-Auth-Outgoing contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1970270 + struct dsdb_attribute contains 398 bytes in 8 blocks (ref 0) d=(nil) 0x196fd90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b04ae0 + Initial-Auth-Incoming contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b08ae0 + Initial-Auth-Incoming contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b0cc80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1970080 + 1.2.840.113556.1.4.539 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1970000 + initialAuthIncoming contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x196ff80 + Initial-Auth-Incoming contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x196ff00 + struct dsdb_attribute contains 368 bytes in 8 blocks (ref 0) d=(nil) 0x196f9b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b14ba0 + IndexedScopes contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1b17eb0 + IndexedScopes contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1b20f10 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196fca0 + 1.2.840.113556.1.4.681 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196fc20 + indexedScopes contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x196fba0 + IndexedScopes contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x196fb20 + struct dsdb_attribute contains 411 bytes in 10 blocks (ref 0) d=(nil) 0x196f5d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b245c0 + Implemented-Categories contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1b2cb90 + Implemented-Categories contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1b34150 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b30e50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196f940 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196f8c0 + 1.2.840.113556.1.4.320 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196f840 + implementedCategories contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x196f7c0 + Implemented-Categories contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196f740 + struct dsdb_attribute contains 359 bytes in 10 blocks (ref 0) d=(nil) 0x196f1f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b391d0 + Icon-Path contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1b3d1d0 + Icon-Path contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1b45010 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b40fd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196f560 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196f4e0 + 1.2.840.113556.1.4.219 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196f460 + iconPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196f3e0 + Icon-Path contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x196f360 + struct dsdb_attribute contains 370 bytes in 10 blocks (ref 0) d=(nil) 0x196ee90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b48e00 + houseIdentifier contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1b4cbb0 + houseIdentifier contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1b54ad0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b50930 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196f180 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196f100 + 2.5.4.51 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196f080 + houseIdentifier contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x196f000 + houseIdentifier contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1b74e30 + struct dsdb_attribute contains 343 bytes in 10 blocks (ref 0) d=(nil) 0x196eb20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x196ed90 + host contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1b5cab0 + host contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1b5ff30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b6cb00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196ee20 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1b78bf0 + 0.9.2342.19200300.100.1.9 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x196ed00 + host contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x196ec90 + host contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x196e3d0 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x196e7b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b7cd80 + Home-Drive contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1b89d70 + Home-Drive contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1b8d120 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196eaa0 + 1.2.840.113556.1.4.45 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x196ea20 + homeDrive contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x196e9a0 + Home-Drive contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x196e920 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x196e440 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b92050 + Home-Directory contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1b9a000 + Home-Directory contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1ba61e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196e730 + 1.2.840.113556.1.4.44 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x196e6b0 + homeDirectory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x196e630 + Home-Directory contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x196e5b0 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x196e050 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ba96b0 + Hide-From-AB contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1bae0a0 + Hide-From-AB contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1bbae50 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x196e350 + 1.2.840.113556.1.4.1780 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x196e2c0 + hideFromAB contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x196e240 + Hide-From-AB contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x196e1c0 + struct dsdb_attribute contains 378 bytes in 10 blocks (ref 0) d=(nil) 0x328cd00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bbec20 + Help-File-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1bc2c30 + Help-File-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1bcaa10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1bc6a20 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x328d070 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x328cff0 + 1.2.840.113556.1.2.327 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x328cf70 + helpFileName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x328cef0 + Help-File-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x328ce70 + struct dsdb_attribute contains 365 bytes in 10 blocks (ref 0) d=(nil) 0x328c920 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bd26d0 + Help-Data32 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1bd5d80 + Help-Data32 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1be2980 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1bde850 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x328cc90 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x328cc10 + 1.2.840.113556.1.2.9 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x328cb90 + helpData32 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x328cb10 + Help-Data32 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x328ca90 + struct dsdb_attribute contains 367 bytes in 10 blocks (ref 0) d=(nil) 0x328c5b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1be6a10 + Help-Data16 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1beaa10 + Help-Data16 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1bfe130 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1bf6ac0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x328a9b0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x328c8a0 + 1.2.840.113556.1.2.402 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x328c820 + helpData16 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x328c7a0 + Help-Data16 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x328c720 + struct dsdb_attribute contains 413 bytes in 9 blocks (ref 0) d=(nil) 0x328c230 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c06c10 + Has-Partial-Replica-NCs contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c0a090 + Has-Partial-Replica-NCs contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c172d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1e441d0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x328c530 + 1.2.840.113556.1.2.15 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x328c4b0 + hasPartialReplicaNCs contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x328c430 + Has-Partial-Replica-NCs contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x328c3a0 + struct dsdb_attribute contains 378 bytes in 9 blocks (ref 0) d=(nil) 0x328bec0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c1f9f0 + Has-Master-NCs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1c22ed0 + Has-Master-NCs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1c27ad0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1e3fbb0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x328c1b0 + 1.2.840.113556.1.2.14 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x328c130 + hasMasterNCs contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x328c0b0 + Has-Master-NCs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x328c030 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x328bb50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c2b8c0 + Group-Type contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1c2edb0 + Group-Type contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1c33540 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x328be40 + 1.2.840.113556.1.4.750 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x328bdc0 + groupType contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x328bd40 + Group-Type contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x328bcc0 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x328b7e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c373f0 + Groups-to-Ignore contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c3a840 + Groups-to-Ignore contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c3f050 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x328bad0 + 1.2.840.113556.1.4.344 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x328ba50 + groupsToIgnore contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x328b9d0 + Groups-to-Ignore contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x328b950 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x328b470 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c42e60 + Group-Priority contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1c4ab40 + Group-Priority contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1c52820 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x328b760 + 1.2.840.113556.1.4.345 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x328b6e0 + groupPriority contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x328b660 + Group-Priority contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x328b5e0 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x328b100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c5a690 + Group-Membership-SAM contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1c5e590 + Group-Membership-SAM contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1c62360 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x328b3f0 + 1.2.840.113556.1.4.166 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x328b370 + groupMembershipSAM contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x328b2f0 + Group-Membership-SAM contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x328b270 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x328ad90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c6a090 + Group-Attributes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c72290 + Group-Attributes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c76c80 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x328b080 + 1.2.840.113556.1.4.152 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x328b000 + groupAttributes contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x328af80 + Group-Attributes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x328af00 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x328aa20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c7ac00 + GP-Options contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1c7ef70 + GP-Options contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1c830d0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x328ad10 + 1.2.840.113556.1.4.892 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x328ac90 + gPOptions contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x328ac10 + GP-Options contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x328ab90 + struct dsdb_attribute contains 343 bytes in 8 blocks (ref 0) d=(nil) 0x328a6c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c7e450 + GP-Link contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1c8b5e0 + GP-Link contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1c8f3b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x328a930 + 1.2.840.113556.1.4.891 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x328a8b0 + gPLink contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1969190 + GP-Link contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x328a830 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x328a3c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c9b600 + GPC-WQL-Filter contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1c9f430 + GPC-WQL-Filter contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1ca31f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x328a640 + 1.2.840.113556.1.4.1694 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x328a5b0 + gPCWQLFilter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x328a530 + GPC-WQL-Filter contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1cb6b80 + struct dsdb_attribute contains 410 bytes in 8 blocks (ref 0) d=(nil) 0x328a0b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c9e930 + GPC-User-Extension-Names contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1cab380 + GPC-User-Extension-Names contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1cb2fe0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x328a340 + 1.2.840.113556.1.4.1349 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x328a2b0 + gPCUserExtensionNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1cd36e0 + GPC-User-Extension-Names contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x328a220 + struct dsdb_attribute contains 422 bytes in 8 blocks (ref 0) d=(nil) 0x1969ff0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cbefd0 + GPC-Machine-Extension-Names contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1cc2fe0 + GPC-Machine-Extension-Names contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1ccf590 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196a310 + 1.2.840.113556.1.4.1348 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x196a280 + gPCMachineExtensionNames contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x196a1f0 + GPC-Machine-Extension-Names contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x196a160 + struct dsdb_attribute contains 413 bytes in 8 blocks (ref 0) d=(nil) 0x1969c60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cd6c90 + GPC-Functionality-Version contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1ce7af0 + GPC-Functionality-Version contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1ceba90 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1969f70 + 1.2.840.113556.1.4.893 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1969ef0 + gPCFunctionalityVersion contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1969e60 + GPC-Functionality-Version contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1969dd0 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x19698f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cefa50 + GPC-File-Sys-Path contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1cf3a60 + GPC-File-Sys-Path contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1cffc90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1969be0 + 1.2.840.113556.1.4.894 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1969b60 + gPCFileSysPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1969ae0 + GPC-File-Sys-Path contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1969a60 + struct dsdb_attribute contains 353 bytes in 8 blocks (ref 0) d=(nil) 0x1969580 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cff340 + Governs-ID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1d07030 + Governs-ID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1d13750 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1969870 + 1.2.840.113556.1.2.22 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19697f0 + governsID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1969770 + Governs-ID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19696f0 + struct dsdb_attribute contains 404 bytes in 9 blocks (ref 0) d=(nil) 0x1969200 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d0ed70 + Global-Address-List2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1d1c060 + Global-Address-List2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1d245d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1e087f0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1969500 + 1.2.840.113556.1.4.2047 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1969470 + globalAddressList2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19693f0 + Global-Address-List2 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1969370 + struct dsdb_attribute contains 400 bytes in 9 blocks (ref 0) d=(nil) 0x1968e10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d2ca60 + Global-Address-List contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1d27f60 + Global-Address-List contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1d347d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1e044b0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1969110 + 1.2.840.113556.1.4.1245 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1969080 + globalAddressList contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1969000 + Global-Address-List contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1968f80 + struct dsdb_attribute contains 349 bytes in 10 blocks (ref 0) d=(nil) 0x1968aa0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d37ed0 + Given-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1d44a80 + Given-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1d51040 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1d48d60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196b760 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1968d90 + 2.5.4.42 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1968d10 + givenName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1968c90 + Given-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1968c10 + struct dsdb_attribute contains 344 bytes in 8 blocks (ref 0) d=(nil) 0x196b3f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d54de0 + GidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1d58ce0 + GidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1d5ccc0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x196b6e0 + 1.3.6.1.1.1.1.1 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x196b660 + gidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x196b5e0 + GidNumber contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x196b560 + struct dsdb_attribute contains 389 bytes in 10 blocks (ref 0) d=(nil) 0x196b080 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d60eb0 + Generation-Qualifier contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1d64cd0 + Generation-Qualifier contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1d68050 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1d6cb30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196b010 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196b370 + 2.5.4.44 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196b2f0 + generationQualifier contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x196b270 + Generation-Qualifier contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x196b1f0 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x196aca0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d70150 + Generated-Connection contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1d788e0 + Generated-Connection contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1d898d0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x196af90 + 1.2.840.113556.1.4.41 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x196af10 + generatedConnection contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x196ae90 + Generated-Connection contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x196ae10 + struct dsdb_attribute contains 332 bytes in 9 blocks (ref 0) d=(nil) 0x196a950 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d8d6e0 + Gecos contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1d88e90 + Gecos contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1d95aa0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196ac30 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x196abb0 + 1.3.6.1.1.1.1.2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x196ab30 + gecos contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x196aac0 + Gecos contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1dbddd0 + struct dsdb_attribute contains 389 bytes in 8 blocks (ref 0) d=(nil) 0x196a5e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d9d990 + Garbage-Coll-Period contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1d99170 + Garbage-Coll-Period contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1da0d40 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x196a8d0 + 1.2.840.113556.1.2.301 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196a850 + garbageCollPeriod contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x196a7d0 + Garbage-Coll-Period contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x196a750 + struct dsdb_attribute contains 383 bytes in 9 blocks (ref 0) d=(nil) 0x1967090 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1dadb70 + FSMO-Role-Owner contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1da93f0 + FSMO-Role-Owner contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1db9c40 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1de7af0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1db9030 + 1.2.840.113556.1.4.369 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1dca2a0 + fSMORoleOwner contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1dc9840 + FSMO-Role-Owner contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1967200 + struct dsdb_attribute contains 386 bytes in 10 blocks (ref 0) d=(nil) 0x1966cb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1dd6020 + FRS-Working-Path contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1dde030 + FRS-Working-Path contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1de1770 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1de6420 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1967020 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1966fa0 + 1.2.840.113556.1.4.486 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1966f20 + fRSWorkingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1966ea0 + FRS-Working-Path contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1966e20 + struct dsdb_attribute contains 385 bytes in 10 blocks (ref 0) d=(nil) 0x19668d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1dee7d0 + FRS-Version-GUID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1de9b10 + FRS-Version-GUID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1dfa800 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1df5a90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1966c40 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1966bc0 + 1.2.840.113556.1.4.43 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1966b40 + fRSVersionGUID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1966ac0 + FRS-Version-GUID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1966a40 + struct dsdb_attribute contains 367 bytes in 10 blocks (ref 0) d=(nil) 0x1966560 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e0b230 + FRS-Version contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1e0f220 + FRS-Version contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1e125c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e0a9c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196c750 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1966850 + 1.2.840.113556.1.4.882 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19667d0 + fRSVersion contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1966750 + FRS-Version contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19666d0 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x1966270 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e1eb70 + FRS-Update-Timeout contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1e22900 + FRS-Update-Timeout contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1e268e0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19664e0 + 1.2.840.113556.1.4.485 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1966460 + fRSUpdateTimeout contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19663e0 + FRS-Update-Timeout contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1e361e0 + struct dsdb_attribute contains 420 bytes in 8 blocks (ref 0) d=(nil) 0x196c7c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e2a790 + FRS-Time-Last-Config-Change contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1e2dc70 + FRS-Time-Last-Config-Change contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1e323d0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196cad0 + 1.2.840.113556.1.4.881 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196ca50 + fRSTimeLastConfigChange contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x196c9c0 + FRS-Time-Last-Config-Change contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x196c930 + struct dsdb_attribute contains 397 bytes in 8 blocks (ref 0) d=(nil) 0x196c3e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e3a050 + FRS-Time-Last-Command contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1e53be0 + FRS-Time-Last-Command contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1e57980 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196c6d0 + 1.2.840.113556.1.4.880 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196c650 + fRSTimeLastCommand contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x196c5d0 + FRS-Time-Last-Command contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x196c550 + struct dsdb_attribute contains 386 bytes in 10 blocks (ref 0) d=(nil) 0x196c080 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e5fc90 + FRS-Staging-Path contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1e63cc0 + FRS-Staging-Path contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1e63150 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e67ca0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196c370 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196c2f0 + 1.2.840.113556.1.4.488 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196c270 + fRSStagingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x196c1f0 + FRS-Staging-Path contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1e83fe0 + struct dsdb_attribute contains 425 bytes in 10 blocks (ref 0) d=(nil) 0x196bc80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e70040 + FRS-Service-Command-Status contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1e6b4f0 + FRS-Service-Command-Status contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1e73800 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e80200 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x196c010 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196bf90 + 1.2.840.113556.1.4.879 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196bf10 + fRSServiceCommandStatus contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x196be80 + FRS-Service-Command-Status contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x196bdf0 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x19685c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19689a0 + FRS-Service-Command contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1e83940 + FRS-Service-Command contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1e8ff80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e98ad0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1968930 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19688b0 + 1.2.840.113556.1.4.500 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1968830 + fRSServiceCommand contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19687b0 + FRS-Service-Command contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1968730 + struct dsdb_attribute contains 390 bytes in 10 blocks (ref 0) d=(nil) 0x19681e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ea0b10 + FRS-Root-Security contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1ea8840 + FRS-Root-Security contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1eab980 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1eb0310 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1968550 + 2.5.5.15 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19684d0 + 1.2.840.113556.1.4.535 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1968450 + fRSRootSecurity contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19683d0 + FRS-Root-Security contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1968350 + struct dsdb_attribute contains 374 bytes in 10 blocks (ref 0) d=(nil) 0x1967e70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1eb8100 + FRS-Root-Path contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1eb3730 + FRS-Root-Path contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1ebb590 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ebfe30 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1967e00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1968160 + 1.2.840.113556.1.4.487 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19680e0 + fRSRootPath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1968060 + FRS-Root-Path contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1967fe0 + struct dsdb_attribute contains 391 bytes in 8 blocks (ref 0) d=(nil) 0x1967a90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ec31e0 + FRS-Replica-Set-Type contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1ecb0d0 + FRS-Replica-Set-Type contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1edb720 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1967d80 + 1.2.840.113556.1.4.31 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1967d00 + fRSReplicaSetType contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1967c80 + FRS-Replica-Set-Type contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1967c00 + struct dsdb_attribute contains 401 bytes in 10 blocks (ref 0) d=(nil) 0x196d0c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1edf300 + FRS-Replica-Set-GUID contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1edad10 + FRS-Replica-Set-GUID contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1ee71c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1964e40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1963220 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x196d3b0 + 1.2.840.113556.1.4.533 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196d330 + fRSReplicaSetGUID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x196d2b0 + FRS-Replica-Set-GUID contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x196d230 + struct dsdb_attribute contains 395 bytes in 9 blocks (ref 0) d=(nil) 0x196cd50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1eeb250 + FRS-Primary-Member contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1eef540 + FRS-Primary-Member contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1ef2890 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1daf3a0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x196d040 + 1.2.840.113556.1.4.878 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x196cfc0 + fRSPrimaryMember contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x196cf40 + FRS-Primary-Member contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x196cec0 + struct dsdb_attribute contains 400 bytes in 8 blocks (ref 0) d=(nil) 0x1964cd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1effbc0 + FRS-Partner-Auth-Level contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1f07f60 + FRS-Partner-Auth-Level contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1f14000 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1f17470 + 1.2.840.113556.1.4.877 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1f135f0 + fRSPartnerAuthLevel contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1f1fb40 + FRS-Partner-Auth-Level contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1f23d40 + struct dsdb_attribute contains 414 bytes in 9 blocks (ref 0) d=(nil) 0x1964950 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f27e60 + FRS-Member-Reference-BL contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f23330 + FRS-Member-Reference-BL contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f303d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1da74b0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1964c50 + 1.2.840.113556.1.4.876 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1964bd0 + fRSMemberReferenceBL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1964b50 + FRS-Member-Reference-BL contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1964ac0 + struct dsdb_attribute contains 403 bytes in 9 blocks (ref 0) d=(nil) 0x1965500 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f38170 + FRS-Member-Reference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1f33f00 + FRS-Member-Reference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1f40750 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1da30f0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19657f0 + 1.2.840.113556.1.4.875 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1965770 + fRSMemberReference contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19656f0 + FRS-Member-Reference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1965670 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x189d0a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f447b0 + FRS-Level-Limit contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1f48a80 + FRS-Level-Limit contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1f4ccb0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189d390 + 1.2.840.113556.1.4.534 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x189d310 + fRSLevelLimit contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x189d290 + FRS-Level-Limit contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x189d210 + struct dsdb_attribute contains 350 bytes in 8 blocks (ref 0) d=(nil) 0x1962f30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f50dc0 + FRS-Flags contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1f64c60 + FRS-Flags contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1f713c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1f797c0 + 1.2.840.113556.1.4.874 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19631a0 + fRSFlags contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1963120 + FRS-Flags contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19630a0 + struct dsdb_attribute contains 382 bytes in 10 blocks (ref 0) d=(nil) 0x1c461e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f7d8f0 + FRS-File-Filter contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1f81ad0 + FRS-File-Filter contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1f89b50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f7d7d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f91f50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1f8d970 + 1.2.840.113556.1.4.483 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1c46450 + fRSFileFilter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1c463d0 + FRS-File-Filter contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1c46350 + struct dsdb_attribute contains 398 bytes in 10 blocks (ref 0) d=(nil) 0x2583c20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f99ca0 + FRS-Fault-Condition contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1fa97a0 + FRS-Fault-Condition contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1fbe5e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fb5cb0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fc64f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1fca7e0 + 1.2.840.113556.1.4.491 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1fce950 + fRSFaultCondition contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2583e10 + FRS-Fault-Condition contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2583d90 + struct dsdb_attribute contains 379 bytes in 10 blocks (ref 0) d=(nil) 0x1965a90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fd28c0 + FRS-Extensions contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1fce680 + FRS-Extensions contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1fe23e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fda660 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ff5ac0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1fde320 + 1.2.840.113556.1.4.536 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1fea010 + fRSExtensions contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1fe5ea0 + FRS-Extensions contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1965c00 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x22e9b10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ff1e80 + FRS-DS-Poll contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1ff5df0 + FRS-DS-Poll contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1ff9b30 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2001700 + 1.2.840.113556.1.4.490 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1ffd590 + fRSDSPoll contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x22e9d00 + FRS-DS-Poll contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x22e9c80 + struct dsdb_attribute contains 402 bytes in 10 blocks (ref 0) d=(nil) 0x1967380 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2009330 + FRS-Directory-Filter contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x20051e0 + FRS-Directory-Filter contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2018d40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x200c5e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2014af0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x20209a0 + 1.2.840.113556.1.4.484 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1967570 + fRSDirectoryFilter contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19674f0 + FRS-Directory-Filter contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x202c2b0 + struct dsdb_attribute contains 433 bytes in 10 blocks (ref 0) d=(nil) 0x2386280 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20249e0 + FRS-Control-Outbound-Backlog contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x20287f0 + FRS-Control-Outbound-Backlog contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x202c5d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2030400 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2038090 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2040680 + 1.2.840.113556.1.4.873 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2058380 + fRSControlOutboundBacklog contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2044440 + FRS-Control-Outbound-Backlog contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x23863f0 + struct dsdb_attribute contains 429 bytes in 10 blocks (ref 0) d=(nil) 0x1b7cf00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2048240 + FRS-Control-Inbound-Backlog contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x204c0c0 + FRS-Control-Inbound-Backlog contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2050250 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x20543f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2060530 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2064520 + 1.2.840.113556.1.4.872 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2088410 + fRSControlInboundBacklog contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2067900 + FRS-Control-Inbound-Backlog contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1b7d070 + struct dsdb_attribute contains 421 bytes in 10 blocks (ref 0) d=(nil) 0x1f68b30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x206c1a0 + FRS-Control-Data-Creation contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x206f5a0 + FRS-Control-Data-Creation contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2073510 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2080070 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2255620 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x208c270 + 1.2.840.113556.1.4.871 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x208b730 + fRSControlDataCreation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2093b90 + FRS-Control-Data-Creation contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1f68ca0 + struct dsdb_attribute contains 422 bytes in 9 blocks (ref 0) d=(nil) 0x20fcca0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20a3c90 + Frs-Computer-Reference-BL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x20abfd0 + Frs-Computer-Reference-BL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x20b38a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1d76970 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x20bb510 + 1.2.840.113556.1.4.870 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20cae60 + frsComputerReferenceBL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20de180 + Frs-Computer-Reference-BL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x20fce10 + struct dsdb_attribute contains 411 bytes in 9 blocks (ref 0) d=(nil) 0x21411f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20da3f0 + Frs-Computer-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20e6460 + Frs-Computer-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20edce0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1d72690 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x20f1ae0 + 1.2.840.113556.1.4.869 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20f55a0 + frsComputerReference contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x20f8970 + Frs-Computer-Reference contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2141360 + struct dsdb_attribute contains 367 bytes in 9 blocks (ref 0) d=(nil) 0x2297230 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2117f20 + From-Server contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2123230 + From-Server contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2132170 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1d6e200 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x212db50 + 1.2.840.113556.1.4.40 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2139c50 + fromServer contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x213d020 + From-Server contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x22973a0 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x22d0c90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21503a0 + From-Entry contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2154480 + From-Entry contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x21615d0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x215caf0 + 1.2.840.113556.1.4.910 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x216ccd0 + fromEntry contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2186050 + From-Entry contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x22d0e00 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x2312730 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x219b0b0 + Friendly-Names contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x21a6c80 + Friendly-Names contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x21b2c00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21ae9f0 + 1.2.840.113556.1.4.682 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x21b6d10 + friendlyNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x21befb0 + Friendly-Names contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x23128a0 + struct dsdb_attribute contains 387 bytes in 8 blocks (ref 0) d=(nil) 0x23963d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21d7080 + Foreign-Identifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x21e3b40 + Foreign-Identifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x21df070 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21e6f20 + 1.2.840.113556.1.4.356 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x21fb5c0 + foreignIdentifier contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x21f6cc0 + Foreign-Identifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2396540 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x23a6ce0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2206c00 + Force-Logoff contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x221c590 + Force-Logoff contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2217670 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2223ed0 + 1.2.840.113556.1.4.39 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2224520 + forceLogoff contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2227a80 + Force-Logoff contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x23a6e50 + struct dsdb_attribute contains 351 bytes in 8 blocks (ref 0) d=(nil) 0x243fb70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2240e60 + Flat-Name contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x224e440 + Flat-Name contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2254dd0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2251590 + 1.2.840.113556.1.4.511 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x225e370 + flatName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x22597e0 + Flat-Name contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x243fce0 + struct dsdb_attribute contains 334 bytes in 8 blocks (ref 0) d=(nil) 0x2507350 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2266530 + Flags contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x2261980 + Flags contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x226a420 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x228e820 + 1.2.840.113556.1.4.38 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2292910 + flags contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x25074c0 + Flags contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x22d9580 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x27a7fc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x229b960 + File-Ext-Priority contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x22a3b80 + File-Ext-Priority contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x22af6d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x22d49e0 + 1.2.840.113556.1.4.816 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x22e18c0 + fileExtPriority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x27a8130 + File-Ext-Priority contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2305da0 + struct dsdb_attribute contains 412 bytes in 10 blocks (ref 0) d=(nil) 0x2834c00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22dc9f0 + Facsimile-Telephone-Number contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x22e5220 + Facsimile-Telephone-Number contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x22ed320 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x22f5400 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2350ee0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x230e180 + 2.5.4.23 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x232f2d0 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x23378a0 + Facsimile-Telephone-Number contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2834d70 + struct dsdb_attribute contains 368 bytes in 8 blocks (ref 0) d=(nil) 0x2864050 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2340160 + Extra-Columns contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2348b70 + Extra-Columns contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2355960 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x235dec0 + 1.2.840.113556.1.4.1687 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2359290 + extraColumns contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2361e20 + Extra-Columns contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x28641c0 + struct dsdb_attribute contains 379 bytes in 10 blocks (ref 0) d=(nil) 0x2b068a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x236d8c0 + Extension-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2391d30 + Extension-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x23a2350 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x239a070 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2437bf0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x23aab30 + 1.2.840.113556.1.2.227 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x23b3660 + extensionName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x23bef00 + Extension-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2b06a10 + struct dsdb_attribute contains 390 bytes in 8 blocks (ref 0) d=(nil) 0x2f363d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23bb930 + Extended-Class-Info contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x23c6ef0 + Extended-Class-Info contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x23c3880 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x23d32f0 + 1.2.840.113556.1.4.908 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x23db7e0 + extendedClassInfo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x23f0ab0 + Extended-Class-Info contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2f36540 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x30039c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23f3ef0 + Extended-Chars-Allowed contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2408e90 + Extended-Chars-Allowed contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2405010 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x240c3e0 + 1.2.840.113556.1.2.380 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2414450 + extendedCharsAllowed contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x3003b30 + Extended-Chars-Allowed contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2430130 + struct dsdb_attribute contains 406 bytes in 8 blocks (ref 0) d=(nil) 0x1aaca60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x241c840 + Extended-Attribute-Info contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2428830 + Extended-Attribute-Info contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2423f60 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x243b370 + 1.2.840.113556.1.4.909 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x24479f0 + extendedAttributeInfo contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2443bc0 + Extended-Attribute-Info contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x244f5b0 + struct dsdb_attribute contains 362 bytes in 10 blocks (ref 0) d=(nil) 0x1e16b90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x244b830 + Entry-TTL contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2457230 + Entry-TTL contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x245f230 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x245a820 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x24cab50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2466d40 + 1.3.6.1.4.1.1466.101.119.3 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x246dfa0 + entryTTL contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x246a160 + Entry-TTL contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1e16d00 + struct dsdb_attribute contains 395 bytes in 8 blocks (ref 0) d=(nil) 0x25e6d00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24726f0 + Enrollment-Providers contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x247ec80 + Enrollment-Providers contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x247add0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2486b40 + 1.2.840.113556.1.4.825 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x248aaf0 + enrollmentProviders contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2496b40 + Enrollment-Providers contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x25e6e70 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x2f7ba40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x249e960 + Enabled-Connection contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x24a6be0 + Enabled-Connection contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x24aee20 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x24aa520 + 1.2.840.113556.1.4.36 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x24b6ea0 + enabledConnection contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x24b2c60 + Enabled-Connection contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2f7bbb0 + struct dsdb_attribute contains 343 bytes in 8 blocks (ref 0) d=(nil) 0x196dd20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24beb30 + Enabled contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x24bace0 + Enabled contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x24c5f80 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x24d7330 + 1.2.840.113556.1.2.557 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x24db3c0 + Enabled contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x24e7730 + Enabled contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x24e3810 + struct dsdb_attribute contains 375 bytes in 10 blocks (ref 0) d=(nil) 0x2192bb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24eef30 + Employee-Type contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x24eaff0 + Employee-Type contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x24f2fd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x24f6f40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x24ff8e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2502c30 + 1.2.840.113556.1.2.613 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x250fc80 + employeeType contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x250bb40 + Employee-Type contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2517c30 + struct dsdb_attribute contains 383 bytes in 10 blocks (ref 0) d=(nil) 0x21ab3e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2513cc0 + Employee-Number contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x251faa0 + Employee-Number contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2527aa0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x251b290 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2523a40 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x252f650 + 1.2.840.113556.1.2.610 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x252b860 + employeeNumber contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2537890 + Employee-Number contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x253fc50 + struct dsdb_attribute contains 366 bytes in 10 blocks (ref 0) d=(nil) 0x25ceeb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x253adb0 + Employee-ID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x254f2b0 + Employee-ID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x255b3e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2553bd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1897a10 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2563580 + 1.2.840.113556.1.4.35 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x256afb0 + employeeID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x25733d0 + Employee-ID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2583150 + struct dsdb_attribute contains 379 bytes in 10 blocks (ref 0) d=(nil) 0x25d6ee0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x258b2e0 + E-mail-Addresses contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2597af0 + E-mail-Addresses contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x25932e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1bee360 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2667e50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x25a39d0 + 0.9.2342.19200300.100.1.3 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x25aabb0 + mail contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x278c170 + E-mail-Addresses contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x25b7500 + struct dsdb_attribute contains 352 bytes in 8 blocks (ref 0) d=(nil) 0x2b025a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25bad00 + EFSPolicy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25c29b0 + EFSPolicy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25d2820 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x25dec80 + 1.2.840.113556.1.4.268 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x25e2300 + eFSPolicy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25ea520 + EFSPolicy contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25f2c90 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x1a08a60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25fdf80 + Dynamic-LDAP-Server contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x25fa8e0 + Dynamic-LDAP-Server contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2605c60 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1d10e70 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2602720 + 1.2.840.113556.1.4.537 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x260d860 + dynamicLDAPServer contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2609a60 + Dynamic-LDAP-Server contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1a08bd0 + struct dsdb_attribute contains 389 bytes in 8 blocks (ref 0) d=(nil) 0x237e2c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26116a0 + DS-UI-Shell-Maximum contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x26191d0 + DS-UI-Shell-Maximum contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2620e50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2629500 + 1.2.840.113556.1.4.1345 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2638160 + dSUIShellMaximum contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x237e430 + DS-UI-Shell-Maximum contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2658100 + struct dsdb_attribute contains 410 bytes in 8 blocks (ref 0) d=(nil) 0x259f6a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x263fc90 + DS-UI-Admin-Notification contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2647920 + DS-UI-Admin-Notification contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x264fac0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x266f910 + 1.2.840.113556.1.4.1343 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x267aa30 + dSUIAdminNotification contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x267f170 + DS-UI-Admin-Notification contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x259f810 + struct dsdb_attribute contains 389 bytes in 8 blocks (ref 0) d=(nil) 0x1c55ee0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x268a2d0 + DS-UI-Admin-Maximum contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2686e70 + DS-UI-Admin-Maximum contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2691f50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x268ea30 + 1.2.840.113556.1.4.1344 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x269a6e0 + dSUIAdminMaximum contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x26966e0 + DS-UI-Admin-Maximum contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1c56050 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x2d07cc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26a23a0 + DS-Heuristics contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x269da70 + DS-Heuristics contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x26a5760 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x26b1ca0 + 1.2.840.113556.1.2.212 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x26b50c0 + dSHeuristics contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2d07e30 + DS-Heuristics contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x26d0ec0 + struct dsdb_attribute contains 410 bytes in 8 blocks (ref 0) d=(nil) 0x18978a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26bd6e0 + DS-Core-Propagation-Data contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x26c9170 + DS-Core-Propagation-Data contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x26c48c0 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x26ccf50 + 1.2.840.113556.1.4.1357 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26d8290 + dSCorePropagationData contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x26d4e10 + DS-Core-Propagation-Data contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x26dfdd0 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x1bee1f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26dbf80 + DSA-Signature contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x26e8290 + DSA-Signature contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x26e4480 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x26efe50 + 1.2.840.113556.1.2.74 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x26ec0e0 + dSASignature contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x26f7ab0 + DSA-Signature contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x26ff7a0 + struct dsdb_attribute contains 370 bytes in 8 blocks (ref 0) d=(nil) 0x2667ce0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26fae50 + Driver-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2707510 + Driver-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x270e950 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x270b4d0 + 1.2.840.113556.1.4.276 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x27165d0 + driverVersion contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x27126b0 + Driver-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x271ad10 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x278c000 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2726080 + Driver-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2729f00 + Driver-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2731b00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x273a6d0 + 1.2.840.113556.1.4.229 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2746620 + driverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2742630 + Driver-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x275a040 + struct dsdb_attribute contains 347 bytes in 10 blocks (ref 0) d=(nil) 0x2bd0a00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x274e680 + drink contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x2749c10 + drink contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x27568c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2751c80 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x276f420 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2762040 + 0.9.2342.19200300.100.1.5 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2777780 + drink contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x2bd0b70 + drink contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x2d25450 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x2d252e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27735b0 + Domain-Wide-Policy contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x277fa80 + Domain-Wide-Policy contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x277b650 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2783460 + 1.2.840.113556.1.4.421 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x278b540 + domainWidePolicy contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2793ba0 + Domain-Wide-Policy contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x27a0040 + struct dsdb_attribute contains 379 bytes in 10 blocks (ref 0) d=(nil) 0x2e4c2f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27a37c0 + Domain-Replica contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x27ab7b0 + Domain-Replica contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x27b41e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2e4c460 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2850290 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x27c0380 + 1.2.840.113556.1.4.158 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x27bc660 + domainReplica contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x27c76d0 + Domain-Replica contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x27c37b0 + struct dsdb_attribute contains 415 bytes in 9 blocks (ref 0) d=(nil) 0x196d660 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27cfc60 + Domain-Policy-Reference contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27cbd30 + Domain-Policy-Reference contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27d77f0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ce0b30 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x27d3aa0 + 1.2.840.113556.1.4.422 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x27df490 + domainPolicyReference contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x27dab20 + Domain-Policy-Reference contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27e7070 + struct dsdb_attribute contains 402 bytes in 9 blocks (ref 0) d=(nil) 0x1921b20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27e3270 + Domain-Policy-Object contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x27eed40 + Domain-Policy-Object contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x27eaed0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1cdcb50 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x27f69c0 + 1.2.840.113556.1.4.32 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x27fe6b0 + domainPolicyObject contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x27f9d50 + Domain-Policy-Object contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2806340 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x1b9d770 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28024e0 + Domain-Identifier contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x280a0b0 + Domain-Identifier contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2815ba0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2811e50 + 1.2.840.113556.1.4.755 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x281d850 + domainIdentifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2818f30 + Domain-Identifier contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2825590 + struct dsdb_attribute contains 360 bytes in 9 blocks (ref 0) d=(nil) 0x1bcde20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2820be0 + Domain-ID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x282d2f0 + Domain-ID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2828930 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1cd4d90 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x28306c0 + 1.2.840.113556.1.4.686 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x283cc50 + domainID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2838400 + Domain-ID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2840a20 + struct dsdb_attribute contains 387 bytes in 9 blocks (ref 0) d=(nil) 0x1cc67d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x284c400 + Domain-Cross-Ref contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x28485e0 + Domain-Cross-Ref contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2854280 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1cd0c60 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x285c250 + 1.2.840.113556.1.4.472 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2857590 + domainCrossRef contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x285fbb0 + Domain-Cross-Ref contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2868300 + struct dsdb_attribute contains 378 bytes in 10 blocks (ref 0) d=(nil) 0x1dadd80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x286f5a0 + Domain-Component contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2877730 + Domain-Component contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x288f6f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x287f250 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x28a36c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x289b6e0 + 0.9.2342.19200300.100.1.25 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x28b36c0 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x28c7660 + Domain-Component contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x28bb3a0 + struct dsdb_attribute contains 424 bytes in 9 blocks (ref 0) d=(nil) 0x1f28070 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28b6a40 + Domain-Certificate-Authorities contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x28bf0a0 + Domain-Certificate-Authorities contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x28cb570 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1cc8760 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x28d33c0 + 1.2.840.113556.1.4.668 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28e4690 + domainCAs contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x28ece60 + Domain-Certificate-Authorities contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x28e8a00 + struct dsdb_attribute contains 388 bytes in 10 blocks (ref 0) d=(nil) 0x24d7540 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28fdcf0 + documentVersion contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2906370 + documentVersion contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x290a560 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x290e5d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x29224f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2919c60 + 0.9.2342.19200300.100.1.13 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x29363a0 + documentVersion contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x29318d0 + documentVersion contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x293df20 + struct dsdb_attribute contains 380 bytes in 10 blocks (ref 0) d=(nil) 0x25df2d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x294b4a0 + documentTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x29576d0 + documentTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x295b8e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x295fe00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x296fa70 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2967e20 + 0.9.2342.19200300.100.1.12 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2977920 + documentTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2973010 + documentTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x297ae40 + struct dsdb_attribute contains 396 bytes in 10 blocks (ref 0) d=(nil) 0x19ba570 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2987930 + documentPublisher contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2983220 + documentPublisher contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x298aec0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x298f770 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x29a4650 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x299ff80 + 0.9.2342.19200300.100.1.56 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x29acb70 + documentPublisher contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x29b9820 + documentPublisher contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x29c6530 + struct dsdb_attribute contains 392 bytes in 10 blocks (ref 0) d=(nil) 0x1a7aa30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29e3840 + documentLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x29deb40 + documentLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x29ef700 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x29e6d50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x29f76e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x29fad10 + 0.9.2342.19200300.100.1.15 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x29ff660 + documentLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2a07490 + documentLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2a13290 + struct dsdb_attribute contains 400 bytes in 10 blocks (ref 0) d=(nil) 0x1a7f0c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a0f540 + documentIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2a2c5a0 + documentIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2a34330 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2a28080 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2a970b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2a2f9b0 + 0.9.2342.19200300.100.1.11 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2a44140 + documentIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2a3f690 + documentIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2a4c500 + struct dsdb_attribute contains 385 bytes in 9 blocks (ref 0) d=(nil) 0x1b10430 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a484b0 + documentAuthor contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2a54110 + documentAuthor contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2a50340 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1cb0840 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2a5b650 + 0.9.2342.19200300.100.1.14 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2a63d40 + documentAuthor contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2a5ffd0 + documentAuthor contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2a6b240 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x1b58350 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a67d00 + DNS-Tombstoned contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2a73b90 + DNS-Tombstoned contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2a7aee0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2a83720 + 1.2.840.113556.1.4.1414 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a7f960 + dNSTombstoned contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2a8abb0 + DNS-Tombstoned contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2a874d0 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x1bf6cc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a932e0 + Dns-Secure-Secondaries contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a8f350 + Dns-Secure-Secondaries contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a9a650 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2aa2bc0 + 1.2.840.113556.1.4.380 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a9e420 + dnsSecureSecondaries contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2aaabf0 + Dns-Secure-Secondaries contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2aa5fc0 + struct dsdb_attribute contains 354 bytes in 10 blocks (ref 0) d=(nil) 0x1bfa190 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ab28e0 + Dns-Root contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2aae950 + Dns-Root contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2ab6900 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ab9fc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2b3fc80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2ac2720 + 1.2.840.113556.1.4.28 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2abdd70 + dnsRoot contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2aca560 + Dns-Root contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2ad2180 + struct dsdb_attribute contains 355 bytes in 8 blocks (ref 0) d=(nil) 0x1c122b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ace330 + Dns-Record contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2ad9f70 + Dns-Record contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2ad5fc0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2add5c0 + 1.2.840.113556.1.4.382 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ae9c50 + dnsRecord contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2af1bf0 + Dns-Record contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2b0a690 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x1c658c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b06720 + DNS-Property contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2b0e990 + DNS-Property contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2b1aee0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2b23010 + 1.2.840.113556.1.4.1306 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b1f060 + dNSProperty contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2b2abe0 + DNS-Property contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2b269c0 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x1ca6a90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b330c0 + Dns-Notify-Secondaries contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2b37770 + Dns-Notify-Secondaries contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2b43f50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2b4c190 + 1.2.840.113556.1.4.381 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2b53850 + dnsNotifySecondaries contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2b50370 + Dns-Notify-Secondaries contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2b5be40 + struct dsdb_attribute contains 374 bytes in 10 blocks (ref 0) d=(nil) 0x1cba5f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b57440 + DNS-Host-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2b5f450 + DNS-Host-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2b6f7d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2b68370 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2bed050 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2b78bd0 + 1.2.840.113556.1.4.619 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2b84d00 + dNSHostName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2b80400 + DNS-Host-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2b8cc40 + struct dsdb_attribute contains 365 bytes in 8 blocks (ref 0) d=(nil) 0x1ceefb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b88190 + Dns-Allow-XFR contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2b94dc0 + Dns-Allow-XFR contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2b902d0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2b9ce10 + 1.2.840.113556.1.4.379 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ba5020 + dnsAllowXFR contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2bad5e0 + Dns-Allow-XFR contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2ba9390 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x1d03260 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bb55a0 + Dns-Allow-Dynamic contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2bb1330 + Dns-Allow-Dynamic contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2bbd1a0 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2bb9490 + 1.2.840.113556.1.4.378 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2bc4db0 + dnsAllowDynamic contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2bc04a0 + Dns-Allow-Dynamic contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2bccad0 + struct dsdb_attribute contains 400 bytes in 9 blocks (ref 0) d=(nil) 0x1d16f20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bcff40 + DN-Reference-Update contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2bd8920 + DN-Reference-Update contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2be4f40 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1c88b10 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2be8fe0 + 1.2.840.113556.1.4.1242 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bf5340 + dNReferenceUpdate contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2bf1080 + DN-Reference-Update contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2bfd0a0 + struct dsdb_attribute contains 355 bytes in 10 blocks (ref 0) d=(nil) 0x1d1f7d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bf92f0 + DMD-Name contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c04f00 + DMD-Name contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c0d340 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2c005f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2c367c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c156d0 + 1.2.840.113556.1.2.598 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2c10cf0 + dmdName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2c1d7f0 + DMD-Name contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c19720 + struct dsdb_attribute contains 371 bytes in 9 blocks (ref 0) d=(nil) 0x1d60410 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c25880 + DMD-Location contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2c2e170 + DMD-Location contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2c291a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1c80640 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2c32500 + 1.2.840.113556.1.2.36 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2c3a780 + dMDLocation contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2c469e0 + DMD-Location contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2c4e880 + struct dsdb_attribute contains 356 bytes in 10 blocks (ref 0) d=(nil) 0x1d90e90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c49f50 + Division contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c51ac0 + Division contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c669d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2c5eed0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2c89050 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c6e310 + 1.2.840.113556.1.4.261 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2c75b20 + division contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c71f50 + Division contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c7d400 + struct dsdb_attribute contains 368 bytes in 8 blocks (ref 0) d=(nil) 0x1dd1720 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c78c50 + DIT-Content-Rules contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2c85090 + DIT-Content-Rules contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2c80870 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c91580 + 2.5.21.2 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c9da80 + dITContentRules contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2c99900 + DIT-Content-Rules contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ca6080 + struct dsdb_attribute contains 409 bytes in 10 blocks (ref 0) d=(nil) 0x1dd93a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ca1cf0 + Display-Name-Printable contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2cae540 + Display-Name-Printable contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2caa3e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2cb64d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2cc7650 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2ccfae0 + 1.2.840.113556.1.2.353 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2cd3c70 + displayNamePrintable contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2cdef30 + Display-Name-Printable contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ce3c50 + struct dsdb_attribute contains 370 bytes in 10 blocks (ref 0) d=(nil) 0x1dfd920 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cefe50 + Display-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2cebcb0 + Display-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2cf3590 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2cf7fd0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a14520 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2cffe50 + 1.2.840.113556.1.2.13 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2d20db0 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2d292f0 + Display-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2d39fc0 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x1e52de0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d35af0 + dhcp-Update-Time contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2d3e0d0 + dhcp-Update-Time contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2d52660 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2d5a7d0 + 1.2.840.113556.1.4.720 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d567d0 + dhcpUpdateTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2d6aaa0 + dhcp-Update-Time contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2d66140 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x1e94130 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d6eb50 + dhcp-Unique-Key contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2d7b4d0 + dhcp-Unique-Key contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2d83bb0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2d7f650 + 1.2.840.113556.1.4.698 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d8bce0 + dhcpUniqueKey contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2d93d80 + dhcp-Unique-Key contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2d8fec0 + struct dsdb_attribute contains 350 bytes in 8 blocks (ref 0) d=(nil) 0x1e9c200 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d9ba10 + dhcp-Type contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d979f0 + dhcp-Type contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2da3a90 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2dab8e0 + 1.2.840.113556.1.4.699 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2da6fa0 + dhcpType contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2db3940 + dhcp-Type contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2daef40 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x1ea3e90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2dbbae0 + dhcp-Subnets contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2db6f20 + dhcp-Subnets contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2dbfd20 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2dcc430 + 1.2.840.113556.1.4.705 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2dd0910 + dhcpSubnets contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2dd8f90 + dhcp-Subnets contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2de5000 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x1efb030 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2de0a80 + dhcp-State contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2de96d0 + dhcp-State contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2df60c0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2df0f50 + 1.2.840.113556.1.4.717 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2dfe520 + dhcpState contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2dfa340 + dhcp-State contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2e06820 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x1f4c280 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e025d0 + dhcp-Sites contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2e0e750 + dhcp-Sites contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2e0a7a0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e168c0 + 1.2.840.113556.1.4.708 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2e1e5f0 + dhcpSites contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2e269c0 + dhcp-Sites contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2e2aad0 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x1f84f60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e37170 + dhcp-Servers contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2e329b0 + dhcp-Servers contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2e3f4a0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e3b4e0 + 1.2.840.113556.1.4.704 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2e42d10 + dhcpServers contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2e4c170 + dhcp-Servers contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2e53d40 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x1f92150 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e5d500 + dhcp-Reservations contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2e82530 + dhcp-Reservations contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ee7780 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2eff270 + 1.2.840.113556.1.4.709 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f0c790 + dhcpReservations contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2f08550 + dhcp-Reservations contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2f1fad0 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x1f954c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f24a50 + dhcp-Ranges contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2f31b10 + dhcp-Ranges contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2f2d380 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2f36250 + 1.2.840.113556.1.4.707 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f51e50 + dhcpRanges contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2f6de40 + dhcp-Ranges contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2f8dcc0 + struct dsdb_attribute contains 375 bytes in 8 blocks (ref 0) d=(nil) 0x1fb0c40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2f88ed0 + dhcp-Properties contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2fa39f0 + dhcp-Properties contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2fb5170 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2fc21b0 + 1.2.840.113556.1.4.718 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2fda280 + dhcpProperties contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2fe3180 + dhcp-Properties contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2ffaa90 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x206b6e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ffe640 + dhcp-Options contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x30083b0 + dhcp-Options contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3011150 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x301ff90 + 1.2.840.113556.1.4.714 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3024580 + dhcpOptions contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3049730 + dhcp-Options contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x306dc60 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x2113ac0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3076a50 + dhcp-Obj-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x30ba350 + dhcp-Obj-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x30b58e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30c3ca0 + 1.2.840.113556.1.4.702 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x30beb50 + dhcpObjName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x30d5a20 + dhcp-Obj-Name contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x30da660 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x211b040 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x31129e0 + dhcp-Obj-Description contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x311bf20 + dhcp-Obj-Description contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x312d9e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3137000 + 1.2.840.113556.1.4.703 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3161360 + dhcpObjDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3178300 + dhcp-Obj-Description contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x318aa50 + struct dsdb_attribute contains 359 bytes in 8 blocks (ref 0) d=(nil) 0x21a2c50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x319ba90 + dhcp-MaxKey contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x31967d0 + dhcp-MaxKey contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x31b9bb0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x31d1eb0 + 1.2.840.113556.1.4.719 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x31f1fe0 + dhcpMaxKey contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x31faa00 + dhcp-MaxKey contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x320c230 + struct dsdb_attribute contains 350 bytes in 8 blocks (ref 0) d=(nil) 0x23454d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3210c40 + dhcp-Mask contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x3224c80 + dhcp-Mask contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x322d8d0 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x324d3e0 + 1.2.840.113556.1.4.706 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3247df0 + dhcpMask contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x325a780 + dhcp-Mask contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x32708a0 + struct dsdb_attribute contains 391 bytes in 8 blocks (ref 0) d=(nil) 0x2410770 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19b6ea0 + dhcp-Identification contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19bb020 + dhcp-Identification contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19c2c70 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19c6ba0 + 1.2.840.113556.1.4.701 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19ca8c0 + dhcpIdentification contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19ce760 + dhcp-Identification contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19d24f0 + struct dsdb_attribute contains 355 bytes in 8 blocks (ref 0) d=(nil) 0x2418100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19da110 + dhcp-Flags contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19ddec0 + dhcp-Flags contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19e1db0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19e5c10 + 1.2.840.113556.1.4.700 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19ed700 + dhcpFlags contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19f16e0 + dhcp-Flags contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19f9170 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x242b970 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19fd0c0 + dhcp-Classes contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1a00ec0 + dhcp-Classes contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1a0c850 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a18370 + 1.2.840.113556.1.4.715 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1a1c170 + dhcpClasses contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1a1ff80 + dhcp-Classes contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1a23de0 + struct dsdb_attribute contains 392 bytes in 10 blocks (ref 0) d=(nil) 0x24332e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a2bad0 + Destination-Indicator contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1a2f930 + Destination-Indicator contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1a33790 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a37560 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a5e190 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1a3b370 + 2.5.4.27 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a3f1d0 + destinationIndicator contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1a46db0 + Destination-Indicator contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1a4abf0 + struct dsdb_attribute contains 375 bytes in 8 blocks (ref 0) d=(nil) 0x2452a20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a4eb10 + Desktop-Profile contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a52810 + Desktop-Profile contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a5a430 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a62330 + 1.2.840.113556.1.4.346 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1a66310 + desktopProfile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1a6a820 + Desktop-Profile contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e8b0 + struct dsdb_attribute contains 354 bytes in 10 blocks (ref 0) d=(nil) 0x2482100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a72610 + Description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1a76d70 + Description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1a82d50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a7e840 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ab11d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a88730 + 2.5.4.13 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1a8c4b0 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1a8fe60 + Description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1a98d90 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x24922d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a9cc40 + departmentNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1aa4c40 + departmentNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1aa8dd0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1ab5530 + 2.16.840.1.113730.3.1.2 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ab9460 + departmentNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1abd620 + departmentNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1ac1750 + struct dsdb_attribute contains 364 bytes in 10 blocks (ref 0) d=(nil) 0x2499ed0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ac5560 + Department contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1ac9310 + Department contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1ad1370 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1acd5c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ad5260 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1ad8e20 + 1.2.840.113556.1.2.141 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1adcc80 + department contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1ae0a90 + Department contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1ae4990 + struct dsdb_attribute contains 388 bytes in 9 blocks (ref 0) d=(nil) 0x24a1c60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ae8d80 + Delta-Revocation-List contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1aeccf0 + Delta-Revocation-List contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1af0c40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1af4b70 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1af8ae0 + 2.5.4.53 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1afcab0 + deltaRevocationList contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1b00cb0 + Delta-Revocation-List contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b18b00 + struct dsdb_attribute contains 430 bytes in 10 blocks (ref 0) d=(nil) 0x24baee0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b04ce0 + Default-Security-Descriptor contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1b08c60 + Default-Security-Descriptor contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1b10ea0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b14da0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1c02bf0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1b1cf30 + 1.2.840.113556.1.4.224 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1b21090 + defaultSecurityDescriptor contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1b25080 + Default-Security-Descriptor contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1b28e60 + struct dsdb_attribute contains 378 bytes in 8 blocks (ref 0) d=(nil) 0x24fae90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b2cd90 + Default-Priority contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1b30fd0 + Default-Priority contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1b34c70 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1b393d0 + 1.2.840.113556.1.4.232 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1b3d350 + defaultPriority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1b41150 + Default-Priority contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1b451a0 + struct dsdb_attribute contains 415 bytes in 9 blocks (ref 0) d=(nil) 0x25329e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b48f80 + Default-Object-Category contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b4cdb0 + Default-Object-Category contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b50ab0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1c041f0 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1b54cd0 + 1.2.840.113556.1.4.783 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1b58dc0 + defaultObjectCategory contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b60a20 + Default-Object-Category contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b64ae0 + struct dsdb_attribute contains 429 bytes in 9 blocks (ref 0) d=(nil) 0x255f390 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b68cd0 + Default-Local-Policy-Object contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1b6cc90 + Default-Local-Policy-Object contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1b75030 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1c00200 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1b78d70 + 1.2.840.113556.1.4.57 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1b841c0 + defaultLocalPolicyObject contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1b90e20 + Default-Local-Policy-Object contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1b921d0 + struct dsdb_attribute contains 393 bytes in 8 blocks (ref 0) d=(nil) 0x2676c90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b95fe0 + Default-Hiding-Value contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1b9a180 + Default-Hiding-Value contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1b9e420 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1ba2500 + 1.2.840.113556.1.4.518 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1ba6360 + defaultHidingValue contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1baa160 + Default-Hiding-Value contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1bae220 + struct dsdb_attribute contains 376 bytes in 9 blocks (ref 0) d=(nil) 0x26ad4a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bb5330 + Default-Group contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1bbb050 + Default-Group contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1bbeda0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1bf8170 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1bc2db0 + 1.2.840.113556.1.4.480 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1bc6ba0 + defaultGroup contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1bcab90 + Default-Group contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1bcea30 + struct dsdb_attribute contains 399 bytes in 9 blocks (ref 0) d=(nil) 0x26b8f50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bd6870 + Default-Class-Store contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1bda890 + Default-Class-Store contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1bde9d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1bf4240 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1be2b80 + 1.2.840.113556.1.4.213 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1be6c10 + defaultClassStore contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1beab90 + Default-Class-Store contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1beedc0 + struct dsdb_attribute contains 346 bytes in 8 blocks (ref 0) d=(nil) 0x26f3160 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bf2c80 + DBCS-Pwd contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1bfabb0 + DBCS-Pwd contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1bfec20 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1c06e10 + 1.2.840.113556.1.4.55 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1c0ab80 + dBCSPwd contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1c0f000 + DBCS-Pwd contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1c16040 + struct dsdb_attribute contains 382 bytes in 10 blocks (ref 0) d=(nil) 0x2702ba0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c174d0 + Curr-Machine-Id contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1c23900 + Curr-Machine-Id contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1c2ba40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1c27c50 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1c663d0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1c2f8e0 + 1.2.840.113556.1.4.337 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1c336c0 + currMachineId contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1c37570 + Curr-Machine-Id contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1c3b3f0 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x275ed30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c3f1d0 + Current-Value contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1c42fe0 + Current-Value contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1c46e90 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1c4acc0 + 1.2.840.113556.1.4.27 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1c4eb70 + currentValue contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1c529a0 + Current-Value contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1c569e0 + struct dsdb_attribute contains 391 bytes in 9 blocks (ref 0) d=(nil) 0x279b4c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c5a810 + Current-Parent-CA contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1c5e710 + Current-Parent-CA contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1c624e0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1be4030 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1c6a210 + 1.2.840.113556.1.4.696 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1c6e2a0 + currentParentCA contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1c728b0 + Current-Parent-CA contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1c76e00 + struct dsdb_attribute contains 387 bytes in 10 blocks (ref 0) d=(nil) 0x27f2050 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c7ad80 + Current-Location contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c7f0f0 + Current-Location contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c87520 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1c83250 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1c8b7e0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1c8f530 + 1.2.840.113556.1.4.335 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1c93440 + currentLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1c97a40 + Current-Location contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c9b780 + struct dsdb_attribute contains 392 bytes in 9 blocks (ref 0) d=(nil) 0x2896c10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c9f5b0 + Cross-Certificate-Pair contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1ca3370 + Cross-Certificate-Pair contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1ca76a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1cab500 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1caf300 + 2.5.4.40 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1cb3170 + crossCertificatePair contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1cb7300 + Cross-Certificate-Pair contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1ccf810 + struct dsdb_attribute contains 441 bytes in 9 blocks (ref 0) d=(nil) 0x28aadb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cbb110 + CRL-Partitioned-Revocation-List contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x1cbf1d0 + CRL-Partitioned-Revocation-List contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x1cc3160 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1da1a10 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1cd3860 + 1.2.840.113556.1.4.683 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1cd7820 + cRLPartitionedRevocationList contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1cdb590 + CRL-Partitioned-Revocation-List contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x1cdf530 + struct dsdb_attribute contains 364 bytes in 9 blocks (ref 0) d=(nil) 0x28a6a30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ce3890 + CRL-Object contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1ce7c80 + CRL-Object contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1cebc10 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1bd3d80 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1cefc50 + 1.2.840.113556.1.4.689 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1cf3be0 + cRLObject contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1cf79e0 + CRL-Object contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1cfbb90 + struct dsdb_attribute contains 344 bytes in 8 blocks (ref 0) d=(nil) 0x28aec70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cffe10 + Creator contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1d03d10 + Creator contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1d07c10 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1d0ba30 + 1.2.840.113556.1.4.679 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1d0f930 + creator contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1d13960 + Creator contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1d1c260 + struct dsdb_attribute contains 375 bytes in 8 blocks (ref 0) d=(nil) 0x2901490 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d20480 + Creation-Wizard contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1d24750 + Creation-Wizard contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1d289c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1d30b70 + 1.2.840.113556.1.4.498 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1d34950 + creationWizard contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1d38b80 + Creation-Wizard contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1d3cbd0 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x29160e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d40bc0 + Creation-Time contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1d44c80 + Creation-Time contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1d48ee0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1d4c660 + 1.2.840.113556.1.4.26 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1d511c0 + creationTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1d54f60 + Creation-Time contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1d58e60 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x2911e70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d5cec0 + Create-Wizard-Ext contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1d610c0 + Create-Wizard-Ext contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1d64e50 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1d68ce0 + 1.2.840.113556.1.4.812 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1d6ccb0 + createWizardExt contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1d70fb0 + Create-Wizard-Ext contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1d752a0 + struct dsdb_attribute contains 368 bytes in 8 blocks (ref 0) d=(nil) 0x2929ac0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d793f0 + Create-Time-Stamp contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1d7d5a0 + Create-Time-Stamp contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1d81750 + 2.5.5.11 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1d858a0 + 2.5.18.1 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1d89a50 + createTimeStamp contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1d8d8e0 + Create-Time-Stamp contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1d91a10 + struct dsdb_attribute contains 367 bytes in 8 blocks (ref 0) d=(nil) 0x29634f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d95ca0 + Create-Dialog contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1d99ca0 + Create-Dialog contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1d9db10 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1da5d50 + 1.2.840.113556.1.4.810 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1da9e90 + createDialog contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1db1de0 + Create-Dialog contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1db5f70 + struct dsdb_attribute contains 346 bytes in 10 blocks (ref 0) d=(nil) 0x2992c70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1db9dc0 + Country-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1dbe050 + Country-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1dc6280 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1dc2100 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1dce590 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1dca420 + 2.5.4.6 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1dd2350 + c contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1dd61b0 + Country-Name contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1dd9ff0 + struct dsdb_attribute contains 369 bytes in 10 blocks (ref 0) d=(nil) 0x299af50 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1dde1b0 + Country-Code contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1de2470 + Country-Code contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1de65a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1dea890 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1dee950 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1df27a0 + 1.2.840.113556.1.4.25 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1df6540 + countryCode contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1dfa980 + Country-Code contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1e01a30 + struct dsdb_attribute contains 331 bytes in 8 blocks (ref 0) d=(nil) 0x29e3a40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e02f50 + Cost contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1e07080 + Cost contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1e0b3b0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1e0f420 + 1.2.840.113556.1.2.135 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1e131b0 + cost contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1e17030 + Cost contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1e1ae50 + struct dsdb_attribute contains 406 bytes in 10 blocks (ref 0) d=(nil) 0x2a33a10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e1ecf0 + Control-Access-Rights contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1e22a80 + Control-Access-Rights contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1e2e690 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e26a60 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e80400 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1e32550 + 1.2.840.113556.1.4.200 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1e414c0 + controlAccessRights contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1e42a60 + Control-Access-Rights contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1e4e460 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x2a50540 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e53d60 + Context-Menu contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1e57b00 + Context-Menu contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1e5bd30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1e5fe10 + 1.2.840.113556.1.4.499 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1e63ec0 + contextMenu contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1e67e20 + Context-Menu contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1e6c090 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x2a6efe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e74000 + Content-Indexing-Allowed contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1e77f40 + Content-Indexing-Allowed contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1e7c050 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1e84160 + 1.2.840.113556.1.4.24 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1e90a70 + contentIndexingAllowed contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1e98c50 + Content-Indexing-Allowed contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1e9cee0 + struct dsdb_attribute contains 386 bytes in 10 blocks (ref 0) d=(nil) 0x2a76fb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ea0c90 + COM-Unique-LIBID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1ea4b80 + COM-Unique-LIBID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1eac680 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ea89c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1eb0490 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1eb4360 + 1.2.840.113556.1.4.250 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1eb8310 + cOMUniqueLIBID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1ebbff0 + COM-Unique-LIBID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1ec3dd0 + struct dsdb_attribute contains 378 bytes in 10 blocks (ref 0) d=(nil) 0x2ac5a30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ec7c60 + COM-Typelib-Id contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1ecbbe0 + COM-Typelib-Id contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1ed3990 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf9f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ed78f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1edb8a0 + 1.2.840.113556.1.4.254 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1edf480 + cOMTypelibId contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1ee3340 + COM-Typelib-Id contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1ee73d0 + struct dsdb_attribute contains 404 bytes in 10 blocks (ref 0) d=(nil) 0x2ad61c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1eeb3d0 + COM-Treat-As-Class-Id contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1ef7b80 + COM-Treat-As-Class-Id contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1effd40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1efbc10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f23ec0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1f03ff0 + 1.2.840.113556.1.4.251 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1f08170 + cOMTreatAsClassId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1f0c030 + COM-Treat-As-Class-Id contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1f102f0 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x2ae1690 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f17f60 + COM-ProgID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1f1bde0 + COM-ProgID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1f1fcc0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1f2c170 + 1.2.840.113556.1.4.21 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1f305d0 + cOMProgID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1f34490 + COM-ProgID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1f382f0 + struct dsdb_attribute contains 352 bytes in 10 blocks (ref 0) d=(nil) 0x2ae52c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f3c3e0 + Company contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1f40950 + Company contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1f48c00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f44940 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f6d110 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1f4ce30 + 1.2.840.113556.1.2.146 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1f50f40 + company contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1f54ef0 + Company contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1f5d590 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x2aed390 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f613c0 + COM-Other-Prog-Id contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1f651c0 + COM-Other-Prog-Id contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1f69090 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1f71540 + 1.2.840.113556.1.4.253 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1f799c0 + cOMOtherProgId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1f7db90 + COM-Other-Prog-Id contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1f81ce0 + struct dsdb_attribute contains 344 bytes in 10 blocks (ref 0) d=(nil) 0x2afd970 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1f85880 + Common-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1f89d50 + Common-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1f96010 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f8df00 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1f9dd30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1f99e30 + 2.5.4.3 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1fa1a50 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1fa9920 + Common-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1fad910 + struct dsdb_attribute contains 348 bytes in 10 blocks (ref 0) d=(nil) 0x2b15fe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fb4a30 + Comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1fba2a0 + Comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1fc2850 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fbe760 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fc6670 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1fca9e0 + 1.2.840.113556.1.2.81 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1fcead0 + info contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1fd2a40 + Comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1fd6810 + struct dsdb_attribute contains 382 bytes in 10 blocks (ref 0) d=(nil) 0x2b2e310 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fda7e0 + COM-InterfaceID contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1fde740 + COM-InterfaceID contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1fe63d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fe25f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1fea190 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1fee190 + 1.2.840.113556.1.4.20 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1ff2010 + cOMInterfaceID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1ff5f70 + COM-InterfaceID contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1ffd960 + struct dsdb_attribute contains 359 bytes in 10 blocks (ref 0) d=(nil) 0x2b47870 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2001910 + COM-CLSID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x20055d0 + COM-CLSID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x200d210 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x20094b0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x202c7d0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x20111b0 + 1.2.840.113556.1.4.249 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2014f40 + cOMCLSID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2018ec0 + COM-CLSID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x201cd20 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x2b73fc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2020ba0 + COM-ClassID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2024b60 + COM-ClassID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x20289f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2030580 + 1.2.840.113556.1.4.19 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2034330 + cOMClassID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x20382a0 + COM-ClassID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2040880 + struct dsdb_attribute contains 357 bytes in 10 blocks (ref 0) d=(nil) 0x2b94fc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20445c0 + Code-Page contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x204c240 + Code-Page contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x20504d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x20545f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2098570 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2058500 + 1.2.840.113556.1.4.16 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x20606b0 + codePage contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x20646a0 + Code-Page contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2068430 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x2b982b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x206c3a0 + Class-Display-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2070090 + Class-Display-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x20740c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2077e60 + 1.2.840.113556.1.4.610 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x207c070 + classDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x20801f0 + Class-Display-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2088620 + struct dsdb_attribute contains 399 bytes in 8 blocks (ref 0) d=(nil) 0x2ba04e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x208c3f0 + Certificate-Templates contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x20904b0 + Certificate-Templates contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2094740 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x209c760 + 1.2.840.113556.1.4.823 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20a0900 + certificateTemplates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x20acb40 + Certificate-Templates contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x20bc130 + struct dsdb_attribute contains 412 bytes in 9 blocks (ref 0) d=(nil) 0x2bc8130 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20b0510 + Certificate-Revocation-List contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x20b4430 + Certificate-Revocation-List contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x20b8200 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3132f10 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x20c00c0 + 2.5.4.39 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x20c3e60 + certificateRevocationList contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x20c7c10 + Certificate-Revocation-List contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x20cbb20 + struct dsdb_attribute contains 435 bytes in 9 blocks (ref 0) d=(nil) 0x2bd3e40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20cf910 + Certificate-Authority-Object contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x20d3570 + Certificate-Authority-Object contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x20d7130 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1b62000 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x20daf90 + 1.2.840.113556.1.4.684 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20dec50 + certificateAuthorityObject contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x20e2af0 + Certificate-Authority-Object contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x20ea130 + struct dsdb_attribute contains 354 bytes in 8 blocks (ref 0) d=(nil) 0x2bdfe30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20edef0 + CA-WEB-URL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x20f1ce0 + CA-WEB-URL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x20f5720 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x20f95f0 + 1.2.840.113556.1.4.688 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x20fd210 + cAWEBURL contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21010f0 + CA-WEB-URL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2105060 + struct dsdb_attribute contains 351 bytes in 8 blocks (ref 0) d=(nil) 0x2c085d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2108da0 + CA-Usages contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x210cca0 + CA-Usages contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2110bb0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2114570 + 1.2.840.113556.1.4.690 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x21180a0 + cAUsages contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21233b0 + CA-Usages contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x212ac90 + struct dsdb_attribute contains 367 bytes in 10 blocks (ref 0) d=(nil) 0x2c20eb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x212e930 + Category-Id contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x21322f0 + Category-Id contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x21361f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x312e000 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2eac190 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2139dd0 + 1.2.840.113556.1.4.322 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x213dd40 + categoryId contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2141740 + Category-Id contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x21455f0 + struct dsdb_attribute contains 364 bytes in 10 blocks (ref 0) d=(nil) 0x2c41f70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2149350 + Categories contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2150e90 + Categories contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2159380 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x313be90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2ed4670 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x215d700 + 1.2.840.113556.1.4.672 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x21617d0 + categories contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2165640 + Categories contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x216dcd0 + struct dsdb_attribute contains 348 bytes in 8 blocks (ref 0) d=(nil) 0x2c5a240 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2172080 + Catalogs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2176590 + Catalogs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x217a570 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2182820 + 1.2.840.113556.1.4.675 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2186da0 + catalogs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x218afb0 + Catalogs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x218f300 + struct dsdb_attribute contains 357 bytes in 8 blocks (ref 0) d=(nil) 0x2c62250 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x219b230 + carLicense contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x219f640 + carLicense contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x21a3680 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21ab860 + 2.16.840.1.113730.3.1.1 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21af8a0 + carLicense contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x21b36c0 + carLicense contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x21b7ad0 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x2c69af0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21bbb00 + Can-Upgrade-Script contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x21bfd00 + Can-Upgrade-Script contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x21c39e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21c7d60 + 1.2.840.113556.1.4.815 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x21cba30 + canUpgradeScript contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x21cfe30 + Can-Upgrade-Script contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x21d3c00 + struct dsdb_attribute contains 371 bytes in 8 blocks (ref 0) d=(nil) 0x2ccac30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21d7d80 + Canonical-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x21db980 + Canonical-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x21dfda0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x21e7cb0 + 1.2.840.113556.1.4.916 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x21ebab0 + canonicalName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x21efd50 + Canonical-Name contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x21f3910 + struct dsdb_attribute contains 355 bytes in 8 blocks (ref 0) d=(nil) 0x2cfb460 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x21f7a30 + CA-Connect contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x21fb740 + CA-Connect contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x21ff570 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2203390 + 1.2.840.113556.1.4.687 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2207710 + cAConnect contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x220fca0 + CA-Connect contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2213fc0 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x2d035d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2218520 + CA-Certificate-DN contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x221c720 + CA-Certificate-DN contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2224290 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x222c7d0 + 1.2.840.113556.1.4.697 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2230c50 + cACertificateDN contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2234de0 + CA-Certificate-DN contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2239310 + struct dsdb_attribute contains 365 bytes in 10 blocks (ref 0) d=(nil) 0x2d13610 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x223d250 + CA-Certificate contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2241e40 + CA-Certificate contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2246000 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3137650 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x314ca50 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x224a730 + 2.5.4.37 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x224e640 + cACertificate contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2254f50 + CA-Certificate contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x22560d0 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x2d1bdb0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x225a5e0 + Bytes-Per-Minute contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x225e580 + Bytes-Per-Minute contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x22627a0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2266730 + 1.2.840.113556.1.4.284 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x226a970 + bytesPerMinute contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x226e610 + Bytes-Per-Minute contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x226a5a0 + struct dsdb_attribute contains 377 bytes in 10 blocks (ref 0) d=(nil) 0x2d24660 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2276890 + Business-Category contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x227dbc0 + Business-Category contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x227eda0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3155fb0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3160130 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x22834f0 + 2.5.4.15 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x22873e0 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x228e150 + Business-Category contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x228f2e0 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x2d62480 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22938e0 + Builtin-Modified-Count contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x22977a0 + Builtin-Modified-Count contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2293400 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x229fce0 + 1.2.840.113556.1.4.14 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x229bae0 + builtinModifiedCount contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x22a7fe0 + Builtin-Modified-Count contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x22a3d00 + struct dsdb_attribute contains 397 bytes in 8 blocks (ref 0) d=(nil) 0x2d5e0e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22b01a0 + Builtin-Creation-Time contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x22ac1c0 + Builtin-Creation-Time contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x22b87a0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x22bcdc0 + 1.2.840.113556.1.4.13 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x22c0db0 + builtinCreationTime contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x22c9150 + Builtin-Creation-Time contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x22c4e10 + struct dsdb_attribute contains 376 bytes in 10 blocks (ref 0) d=(nil) 0x2d87170 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22d1220 + buildingName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x22cd000 + buildingName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x22d9700 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3161560 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3172530 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x22dda20 + 0.9.2342.19200300.100.1.48 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x22e8e00 + buildingName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x22ea010 + buildingName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x22e5ce0 + struct dsdb_attribute contains 423 bytes in 9 blocks (ref 0) d=(nil) 0x2d9f060 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22f1da0 + Bridgehead-Transport-List contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x22edd70 + Bridgehead-Transport-List contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x22fa140 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1b1e600 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x22f5ef0 + 1.2.840.113556.1.4.819 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x23026b0 + bridgeheadTransportList contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22fe600 + Bridgehead-Transport-List contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x230ab90 + struct dsdb_attribute contains 422 bytes in 9 blocks (ref 0) d=(nil) 0x2dbbce0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2306820 + Bridgehead-Server-List-BL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2312cc0 + Bridgehead-Server-List-BL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x230ec30 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1b1a280 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x231b020 + 1.2.840.113556.1.4.820 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x23234d0 + bridgeheadServerListBL contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x231f070 + Bridgehead-Server-List-BL contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x232b6c0 + struct dsdb_attribute contains 365 bytes in 9 blocks (ref 0) d=(nil) 0x2dc7640 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2327440 + BootParameter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2333290 + BootParameter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2337fe0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x317bd60 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x233c5d0 + 1.3.6.1.1.1.1.23 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2340fc0 + bootParameter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2349be0 + BootParameter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x234dbd0 + struct dsdb_attribute contains 345 bytes in 9 blocks (ref 0) d=(nil) 0x2e11e40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2349640 + BootFile contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2355ae0 + BootFile contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2351b90 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3178930 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x235e050 + 1.3.6.1.1.1.1.24 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2359f50 + bootFile contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x23660e0 + BootFile contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x236e3b0 + struct dsdb_attribute contains 379 bytes in 10 blocks (ref 0) d=(nil) 0x2e19c40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2376750 + Birth-Location contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2372440 + Birth-Location contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x237e7e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31904f0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x318b0d0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2386750 + 1.2.840.113556.1.4.332 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x238e710 + birthLocation contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x238a7f0 + Birth-Location contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2396920 + struct dsdb_attribute contains 364 bytes in 8 blocks (ref 0) d=(nil) 0x2e21d20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23927e0 + Bad-Pwd-Count contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x239ed20 + Bad-Pwd-Count contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x239acb0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x23a7270 + 1.2.840.113556.1.4.12 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x23a2e20 + badPwdCount contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x23af420 + Bad-Pwd-Count contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x23ab620 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x2ea2ae0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23b7be0 + Bad-Password-Time contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x23b37e0 + Bad-Password-Time contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x23bfa30 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x23bbab0 + 1.2.840.113556.1.4.49 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x23c79b0 + badPasswordTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x23d8180 + Bad-Password-Time contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x23d3f40 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x2f766c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x23e0550 + Auxiliary-Class contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x23dc260 + Auxiliary-Class contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x23e89f0 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x23f8ee0 + 1.2.840.113556.1.2.351 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x23f4b70 + auxiliaryClass contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x24010e0 + Auxiliary-Class contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x240d090 + struct dsdb_attribute contains 404 bytes in 9 blocks (ref 0) d=(nil) 0x2ff4f80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2409020 + Authority-Revocation-List contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2405210 + Authority-Revocation-List contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x24111a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x319c110 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2418ba0 + 2.5.4.38 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2415100 + authorityRevocationList contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2420af0 + Authority-Revocation-List contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x241c9c0 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x30c7840 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2424a30 + Authentication-Options contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x24302b0 + Authentication-Options contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x242c5f0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2437d70 + 1.2.840.113556.1.4.11 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2433f60 + authenticationOptions contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x24400e0 + Authentication-Options contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x243be30 + struct dsdb_attribute contains 375 bytes in 8 blocks (ref 0) d=(nil) 0x31b4580 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2447c00 + Auditing-Policy contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2443d40 + Auditing-Policy contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x244f7b0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x244ba30 + 1.2.840.113556.1.4.202 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x24573b0 + auditingPolicy contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2453550 + Auditing-Policy contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x245b2e0 + struct dsdb_attribute contains 344 bytes in 9 blocks (ref 0) d=(nil) 0x321ac10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x245f440 + audio contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x3196e00 + audio contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x31aed10 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31b0200 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2466f50 + 0.9.2342.19200300.100.1.55 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x246ac50 + audio contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x31b9db0 + audio contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x31b5010 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x1e8bb60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2476320 + Attribute-Types contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2472870 + Attribute-Types contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x247ee80 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x247afd0 + 2.5.21.5 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2486cc0 + attributeTypes contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2482c10 + Attribute-Types contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x248ec90 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x1f6c7f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x248ac70 + Attribute-Syntax contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2496cc0 + Attribute-Syntax contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2492f50 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x249eaf0 + 1.2.840.113556.1.2.32 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x249ab50 + attributeSyntax contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x24a6d60 + Attribute-Syntax contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x24b70a0 + struct dsdb_attribute contains 414 bytes in 10 blocks (ref 0) d=(nil) 0x1fa0fa0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24a28e0 + Attribute-Security-GUID contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24aefa0 + Attribute-Security-GUID contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24ab1e0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31cc2d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31cd810 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x24b2de0 + 1.2.840.113556.1.4.149 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x24bed30 + attributeSecurityGUID contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x24c6a50 + Attribute-Security-GUID contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24c2af0 + struct dsdb_attribute contains 361 bytes in 8 blocks (ref 0) d=(nil) 0x2053b10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24cf0c0 + Attribute-ID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x24cace0 + Attribute-ID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x24df580 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x24db540 + 1.2.840.113556.1.2.30 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x24e78b0 + attributeID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x24e3990 + Attribute-ID contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x24f3c80 + struct dsdb_attribute contains 406 bytes in 8 blocks (ref 0) d=(nil) 0x207b5b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24efa00 + Attribute-Display-Names contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24ebc30 + Attribute-Display-Names contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x24f7a00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x24ffa60 + 1.2.840.113556.1.4.748 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x24fbb20 + attributeDisplayNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2517db0 + Attribute-Display-Names contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25078b0 + struct dsdb_attribute contains 418 bytes in 8 blocks (ref 0) d=(nil) 0x2117580 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2503720 + attributeCertificateAttribute contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x250fe80 + attributeCertificateAttribute contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x250bcc0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2513ec0 + 2.5.4.58 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x251fc20 + attributeCertificateAttribute contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x251bd40 + attributeCertificateAttribute contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2527ca0 + struct dsdb_attribute contains 379 bytes in 8 blocks (ref 0) d=(nil) 0x211ea60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2523bc0 + Assoc-NT-Account contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x252f850 + Assoc-NT-Account contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x252b9e0 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2537a20 + 1.2.840.113556.1.4.1213 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2533660 + assocNTAccount contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x253fdd0 + Assoc-NT-Account contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x253ba30 + struct dsdb_attribute contains 385 bytes in 9 blocks (ref 0) d=(nil) 0x214c700 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2547cf0 + associatedName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x254fda0 + associatedName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2557e20 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ad2890 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2553d50 + 0.9.2342.19200300.100.1.38 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x255be90 + associatedName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2567ca0 + associatedName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2563dd0 + struct dsdb_attribute contains 387 bytes in 9 blocks (ref 0) d=(nil) 0x21758e0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x256ffe0 + associatedDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x256baa0 + associatedDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2577cf0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31c9070 + 2.5.5.5 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2573ea0 + 0.9.2342.19200300.100.1.37 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2588030 + associatedDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x258ffe0 + associatedDomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x258bd90 + struct dsdb_attribute contains 361 bytes in 9 blocks (ref 0) d=(nil) 0x218e620 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2597c70 + Assistant contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2593db0 + Assistant contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25a7910 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1aca860 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x25a3b60 + 1.2.840.113556.1.4.652 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x25af610 + assistant contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25ab800 + Assistant contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25b7680 + struct dsdb_attribute contains 363 bytes in 8 blocks (ref 0) d=(nil) 0x219e900 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25bf6a0 + Asset-Number contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x25bb7f0 + Asset-Number contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x25c73f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x25c34a0 + 1.2.840.113556.1.4.283 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x25d7360 + assetNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x25d32d0 + Asset-Number contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x25e71a0 + struct dsdb_attribute contains 385 bytes in 8 blocks (ref 0) d=(nil) 0x22bbe10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25e2db0 + App-Schema-Version contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x25eef60 + App-Schema-Version contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x25eaff0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x25f6c00 + 1.2.840.113556.1.4.848 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x25fea70 + appSchemaVersion contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x25faa60 + App-Schema-Version contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2606820 + struct dsdb_attribute contains 363 bytes in 10 blocks (ref 0) d=(nil) 0x2316590 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26028a0 + Applies-To contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x260e330 + Applies-To contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x260a550 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3020110 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31e0670 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2616040 + 1.2.840.113556.1.4.341 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2612170 + appliesTo contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x261db20 + Applies-To contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2619c80 + struct dsdb_attribute contains 387 bytes in 10 blocks (ref 0) d=(nil) 0x23698c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26257e0 + Application-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2621920 + Application-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x262d2c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3024bc0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31e7fc0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2634d60 + 1.2.840.113556.1.4.218 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x263c9e0 + applicationName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2638c50 + Application-Name contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2640750 + struct dsdb_attribute contains 329 bytes in 8 blocks (ref 0) d=(nil) 0x2379b00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26446e0 + ANR contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x30406b0 + ANR contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31f0df0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2663ea0 + 1.2.840.113556.1.4.1208 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2648410 + aNR contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31f2160 + ANR contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31fac00 + struct dsdb_attribute contains 406 bytes in 8 blocks (ref 0) d=(nil) 0x23cafe0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26543e0 + Alt-Security-Identities contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2650590 + Alt-Security-Identities contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x265c0b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x265feb0 + 1.2.840.113556.1.4.867 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x266bb60 + altSecurityIdentities contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2673870 + Alt-Security-Identities contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x266fa90 + struct dsdb_attribute contains 436 bytes in 8 blocks (ref 0) d=(nil) 0x23e3c30 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x267b4e0 + Allowed-Child-Classes-Effective contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2677720 + Allowed-Child-Classes-Effective contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2683110 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x267f2f0 + 1.2.840.113556.1.4.912 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x268ad70 + allowedChildClassesEffective contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2692970 + Allowed-Child-Classes-Effective contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x268ebb0 + struct dsdb_attribute contains 397 bytes in 8 blocks (ref 0) d=(nil) 0x23fc5a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x269a8f0 + Allowed-Child-Classes contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x26968e0 + Allowed-Child-Classes contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x26a2530 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x26aa140 + 1.2.840.113556.1.4.911 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x26a61b0 + allowedChildClasses contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x26b1e20 + Allowed-Child-Classes contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x26ae120 + struct dsdb_attribute contains 425 bytes in 8 blocks (ref 0) d=(nil) 0x24d2600 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26b9a10 + Allowed-Attributes-Effective contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x26b5b90 + Allowed-Attributes-Effective contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x26c1680 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x26bd860 + 1.2.840.113556.1.4.914 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x26c5480 + allowedAttributesEffective contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x26d1040 + Allowed-Attributes-Effective contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x26cd0d0 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x254b180 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26d8dd0 + Allowed-Attributes contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x26d4f90 + Allowed-Attributes contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x26e0910 + 2.5.5.2 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x26dca40 + 1.2.840.113556.1.4.913 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x26e8410 + allowedAttributes contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x26e4600 + Allowed-Attributes contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x26effd0 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x259b0a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26ec2e0 + Admin-Property-Pages contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x26f7c30 + Admin-Property-Pages contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x26f3df0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x26ff920 + 1.2.840.113556.1.4.562 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x26fbaa0 + adminPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2707690 + Admin-Property-Pages contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2717100 + struct dsdb_attribute contains 442 bytes in 8 blocks (ref 0) d=(nil) 0x25b2920 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27036b0 + Admin-Multiselect-Property-Pages contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x270f420 + Admin-Multiselect-Property-Pages contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x270b660 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2713300 + 1.2.840.113556.1.4.1690 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x271ef10 + adminMultiselectPropertyPages contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2722dc0 + Admin-Multiselect-Property-Pages contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x272e8f0 + struct dsdb_attribute contains 394 bytes in 10 blocks (ref 0) d=(nil) 0x25ca840 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x272a9f0 + Admin-Display-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2736690 + Admin-Display-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2732750 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x31f6720 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x320b370 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x273e9d0 + 1.2.840.113556.1.2.194 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x273a850 + adminDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x27467a0 + Admin-Display-Name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2742830 + struct dsdb_attribute contains 391 bytes in 10 blocks (ref 0) d=(nil) 0x25daa10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x274e800 + Admin-Description contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x274a6c0 + Admin-Description contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2752740 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x320c8c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32080b0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x275ab00 + 1.2.840.113556.1.2.226 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2766ec0 + adminDescription contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2762b00 + Admin-Description contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x276f630 + struct dsdb_attribute contains 358 bytes in 8 blocks (ref 0) d=(nil) 0x2d4db20 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x276b2b0 + Admin-Count contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2777980 + Admin-Count contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2773730 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x277fc80 + 1.2.840.113556.1.4.150 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x277b7d0 + adminCount contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2788250 + Admin-Count contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2783f50 + struct dsdb_attribute contains 386 bytes in 8 blocks (ref 0) d=(nil) 0x2f2c8b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x278ffa0 + Admin-Context-Menu contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2797e20 + Admin-Context-Menu contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2793d30 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x27a01c0 + 1.2.840.113556.1.4.614 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x279c150 + adminContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x27a8530 + Admin-Context-Menu contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x27a4270 + struct dsdb_attribute contains 370 bytes in 10 blocks (ref 0) d=(nil) 0x1965300 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27b01d0 + Address-Type contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x27ac390 + Address-Type contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x27b8540 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32239c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x30bae00 + 2.5.5.4 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x27b4360 + 1.2.840.113556.1.2.350 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x27c0580 + addressType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x27c8100 + Address-Type contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x27c4260 + struct dsdb_attribute contains 379 bytes in 10 blocks (ref 0) d=(nil) 0x1d2cc70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27cfde0 + Address-Syntax contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x27cbeb0 + Address-Syntax contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x27d7980 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32280c0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x322da50 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x27d3c20 + 1.2.840.113556.1.2.255 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x27df690 + addressSyntax contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x27db7e0 + Address-Syntax contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x27e71f0 + struct dsdb_attribute contains 377 bytes in 10 blocks (ref 0) d=(nil) 0x2987b40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27e33f0 + Address-Home contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x27eef40 + Address-Home contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x27eb0d0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x323b400 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3244200 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x27f6b40 + 1.2.840.113556.1.2.617 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x27f2cd0 + homePostalAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x27fe830 + Address-Home contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x280a230 + struct dsdb_attribute contains 452 bytes in 10 blocks (ref 0) d=(nil) 0x2b7cac0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x27faa10 + Address-Entry-Display-Table-MSDOS contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x28064c0 + Address-Entry-Display-Table-MSDOS contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x280e180 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x32488a0 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3267e30 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2815da0 + 1.2.840.113556.1.2.400 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x282d470 + addressEntryDisplayTableMSDOS contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2812050 + Address-Entry-Display-Table-MSDOS contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x281d9d0 + struct dsdb_attribute contains 429 bytes in 10 blocks (ref 0) d=(nil) 0x2c95660 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2819be0 + Address-Entry-Display-Table contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2825710 + Address-Entry-Display-Table contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2821890 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x326f660 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x310df00 + 2.5.5.10 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2829580 + 1.2.840.113556.1.2.324 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2835150 + addressEntryDisplayTable contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2831190 + Address-Entry-Display-Table contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x283ce60 + struct dsdb_attribute contains 400 bytes in 9 blocks (ref 0) d=(nil) 0x2cb1bd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2838ec0 + Address-Book-Roots2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x28448f0 + Address-Book-Roots2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2840ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1a70020 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2848760 + 1.2.840.113556.1.4.2046 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2854490 + addressBookRoots2 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2850410 + Address-Book-Roots2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x285c3d0 + struct dsdb_attribute contains 396 bytes in 9 blocks (ref 0) d=(nil) 0x2e8b930 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28581e0 + Address-Book-Roots contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x28645f0 + Address-Book-Roots contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2860680 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1a6bd70 + 2.5.5.1 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x286c2b0 + 1.2.840.113556.1.4.1244 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2868480 + addressBookRoots contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x28744e0 + Address-Book-Roots contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2870090 + struct dsdb_attribute contains 358 bytes in 10 blocks (ref 0) d=(nil) 0x2f11c10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x287c030 + Address contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2878220 + Address contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2883c40 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x3295890 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x311c550 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2887cc0 + 1.2.840.113556.1.2.256 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2893790 + streetAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x288f870 + Address contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x289fae0 + struct dsdb_attribute contains 441 bytes in 8 blocks (ref 0) d=(nil) 0x23f0cc0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x289b8e0 + Additional-Trusted-Service-Names contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x2897730 + Additional-Trusted-Service-Names contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x28a3840 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x28ab7e0 + 1.2.840.113556.1.4.889 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28a7690 + additionalTrustedServiceNames contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x28b3840 + Additional-Trusted-Service-Names contains 33 bytes in 1 blocks (ref 0) d=(nil) 0x28af8f0 + struct dsdb_attribute contains 391 bytes in 9 blocks (ref 0) d=(nil) 0x1964580 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28bb520 + Additional-Information contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28b76f0 + Additional-Information contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28c3550 + uint32_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x189a6c0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x28bf220 + 1.2.840.113556.1.4.265 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28cb6f0 + notes contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1921cd0 + Additional-Information contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28c7860 + struct dsdb_attribute contains 395 bytes in 8 blocks (ref 0) d=(nil) 0x19d6390 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28d3540 + ACS-Total-No-Of-Flows contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x28cf6b0 + ACS-Total-No-Of-Flows contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x28e3460 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x28e4890 + 1.2.840.113556.1.4.763 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x28ed060 + aCSTotalNoOfFlows contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x28e8b80 + ACS-Total-No-Of-Flows contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x28f4760 + struct dsdb_attribute contains 373 bytes in 8 blocks (ref 0) d=(nil) 0x1a566a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28fdef0 + ACS-Time-Of-Day contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2906570 + ACS-Time-Of-Day contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2901f00 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x290e750 + 1.2.840.113556.1.4.756 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x290a760 + aCSTimeOfDay contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2916b00 + ACS-Time-Of-Day contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2912910 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x1b89f70 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x291e7e0 + ACS-Service-Type contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x291a750 + ACS-Service-Type contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2926620 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2922670 + 1.2.840.113556.1.4.762 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x292e6e0 + aCSServiceType contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x292a720 + ACS-Service-Type contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2936520 + struct dsdb_attribute contains 375 bytes in 8 blocks (ref 0) d=(nil) 0x1ba2050 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2932580 + ACS-Server-List contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x293e5a0 + ACS-Server-List contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x29474f0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x29429a0 + 1.2.840.113556.1.4.1312 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x294f940 + aCSServerList contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x294b620 + ACS-Server-List contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2967fa0 + struct dsdb_attribute contains 420 bytes in 8 blocks (ref 0) d=(nil) 0x1bf27f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2957850 + ACS-RSVP-Log-Files-Location contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x295ff80 + ACS-RSVP-Log-Files-Location contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x295bae0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2964170 + 1.2.840.113556.1.4.773 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x297ba20 + aCSRSVPLogFilesLocation contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x296fc80 + ACS-RSVP-Log-Files-Location contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x296bd40 + struct dsdb_attribute contains 436 bytes in 8 blocks (ref 0) d=(nil) 0x1c02740 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2977aa0 + ACS-RSVP-Account-Files-Location contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2973b00 + ACS-RSVP-Account-Files-Location contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x297fb90 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2983cf0 + 1.2.840.113556.1.4.900 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x298f8f0 + aCSRSVPAccountFilesLocation contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x298b9b0 + ACS-RSVP-Account-Files-Location contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x29979b0 + struct dsdb_attribute contains 362 bytes in 8 blocks (ref 0) d=(nil) 0x1c1fbf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x299ed50 + ACS-Priority contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x29a0100 + ACS-Priority contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x29a8bd0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x29a47d0 + 1.2.840.113556.1.4.764 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x29b1360 + aCSPriority contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x29acd00 + ACS-Priority contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x29b9a30 + struct dsdb_attribute contains 374 bytes in 8 blocks (ref 0) d=(nil) 0x1cdb100 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29c98f0 + ACS-Policy-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x29c6740 + ACS-Policy-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x29cf150 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x29d74e0 + 1.2.840.113556.1.4.772 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x29df5f0 + aCSPolicyName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x29eb900 + ACS-Policy-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x29e79a0 + struct dsdb_attribute contains 390 bytes in 8 blocks (ref 0) d=(nil) 0x1da58a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29f39a0 + ACS-Permission-Bits contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x29ef880 + ACS-Permission-Bits contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x29fb850 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x29f7870 + 1.2.840.113556.1.4.765 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a037b0 + aCSPermissionBits contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x29ff7e0 + ACS-Permission-Bits contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2a0f740 + struct dsdb_attribute contains 408 bytes in 8 blocks (ref 0) d=(nil) 0x1dc5db0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a0b7b0 + ACS-Non-Reserved-Tx-Size contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2a07610 + ACS-Non-Reserved-Tx-Size contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2a134a0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2a1b7a0 + 1.2.840.113556.1.4.898 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a22cc0 + aCSNonReservedTxSize contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2a30460 + ACS-Non-Reserved-Tx-Size contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2a1fae0 + struct dsdb_attribute contains 412 bytes in 8 blocks (ref 0) d=(nil) 0x1e06bf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a2c7a0 + ACS-Non-Reserved-Tx-Limit contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2a28200 + ACS-Non-Reserved-Tx-Limit contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2a344b0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2a3c420 + 1.2.840.113556.1.4.780 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a38460 + aCSNonReservedTxLimit contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2a54310 + ACS-Non-Reserved-Tx-Limit contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2a44340 + struct dsdb_attribute contains 421 bytes in 8 blocks (ref 0) d=(nil) 0x1e2a990 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a40250 + ACS-Non-Reserved-Token-Size contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2a4c700 + ACS-Non-Reserved-Token-Size contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2a48630 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2a7b9d0 + 1.2.840.113556.1.4.1319 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a5c080 + aCSNonReservedTokenSize contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a57ff0 + ACS-Non-Reserved-Token-Size contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2a63f40 + struct dsdb_attribute contains 417 bytes in 8 blocks (ref 0) d=(nil) 0x1e70240 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a6bd10 + ACS-Non-Reserved-Peak-Rate contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2a67e80 + ACS-Non-Reserved-Peak-Rate contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2a73d10 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2a77a70 + 1.2.840.113556.1.4.1318 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a838b0 + aCSNonReservedPeakRate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2a8f560 + ACS-Non-Reserved-Peak-Rate contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2a7fae0 + struct dsdb_attribute contains 444 bytes in 8 blocks (ref 0) d=(nil) 0x1ed7450 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a8b670 + ACS-Non-Reserved-Min-Policed-Size contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2a87650 + ACS-Non-Reserved-Min-Policed-Size contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2a934f0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2aaead0 + 1.2.840.113556.1.4.1321 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a9b080 + aCSNonReservedMinPolicedSize contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2a97230 + ACS-Non-Reserved-Min-Policed-Size contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2aa2dc0 + struct dsdb_attribute contains 428 bytes in 8 blocks (ref 0) d=(nil) 0x1fc23c0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a9ef10 + ACS-Non-Reserved-Max-SDU-Size contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2aa6a80 + ACS-Non-Reserved-Max-SDU-Size contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2ab2af0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2ad2390 + 1.2.840.113556.1.4.1320 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2aba9e0 + aCSNonReservedMaxSDUSize contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2ab6a80 + ACS-Non-Reserved-Max-SDU-Size contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2ac2920 + struct dsdb_attribute contains 410 bytes in 8 blocks (ref 0) d=(nil) 0x20980a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2abe840 + ACS-Minimum-Policed-Size contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2aca6e0 + ACS-Minimum-Policed-Size contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2ac66b0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2ace4b0 + 1.2.840.113556.1.4.1315 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ada0f0 + aCSMinimumPolicedSize contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2ae20b0 + ACS-Minimum-Policed-Size contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2ade080 + struct dsdb_attribute contains 391 bytes in 8 blocks (ref 0) d=(nil) 0x210c7b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ae9dd0 + ACS-Minimum-Latency contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2ae5f40 + ACS-Minimum-Latency contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2af1d70 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2aee010 + 1.2.840.113556.1.4.1316 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2afa0e0 + aCSMinimumLatency contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2af5f80 + ACS-Minimum-Latency contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2b1b0e0 + struct dsdb_attribute contains 422 bytes in 8 blocks (ref 0) d=(nil) 0x21693a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2afe480 + ACS-Minimum-Delay-Variation contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2b0a890 + ACS-Minimum-Delay-Variation contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2b0eb10 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2b2ef90 + 1.2.840.113556.1.4.1317 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b16b10 + aCSMinimumDelayVariation contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2b23210 + ACS-Minimum-Delay-Variation contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2b1f1e0 + struct dsdb_attribute contains 419 bytes in 8 blocks (ref 0) d=(nil) 0x218ab00 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b2ae60 + ACS-Max-Token-Rate-Per-Flow contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2b26ea0 + ACS-Max-Token-Rate-Per-Flow contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2b33240 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2b3ba60 + 1.2.840.113556.1.4.758 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2b37980 + aCSMaxTokenRatePerFlow contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2b54300 + ACS-Max-Token-Rate-Per-Flow contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2b440e0 + struct dsdb_attribute contains 428 bytes in 8 blocks (ref 0) d=(nil) 0x21bb660 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b3fe90 + ACS-Max-Token-Bucket-Per-Flow contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2b4c310 + ACS-Max-Token-Bucket-Per-Flow contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2b48510 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2b504f0 + 1.2.840.113556.1.4.1313 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b5c0c0 + aCSMaxTokenBucketPerFlow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2b58090 + ACS-Max-Token-Bucket-Per-Flow contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2b64160 + struct dsdb_attribute contains 425 bytes in 8 blocks (ref 0) d=(nil) 0x21c3550 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b5ff00 + ACS-Max-Size-Of-RSVP-Log-File contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2b68580 + ACS-Max-Size-Of-RSVP-Log-File contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2b74a30 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2b70480 + 1.2.840.113556.1.4.775 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2b7cfa0 + aCSMaxSizeOfRSVPLogFile contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b78d50 + ACS-Max-Size-Of-RSVP-Log-File contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2b84e80 + struct dsdb_attribute contains 441 bytes in 8 blocks (ref 0) d=(nil) 0x21e3d40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b810b0 + ACS-Max-Size-Of-RSVP-Account-File contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2b8cdd0 + ACS-Max-Size-Of-RSVP-Account-File contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2b88e50 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2b90dc0 + 1.2.840.113556.1.4.902 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ba9510 + aCSMaxSizeOfRSVPAccountFile contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2b9d020 + ACS-Max-Size-Of-RSVP-Account-File contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2b98f30 + struct dsdb_attribute contains 435 bytes in 8 blocks (ref 0) d=(nil) 0x220b930 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ba51a0 + ACS-Max-Peak-Bandwidth-Per-Flow contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2ba1160 + ACS-Max-Peak-Bandwidth-Per-Flow contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2bad7f0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2bb14b0 + 1.2.840.113556.1.4.759 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2bbd3a0 + aCSMaxPeakBandwidthPerFlow contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2bb96a0 + ACS-Max-Peak-Bandwidth-Per-Flow contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2bc4f30 + struct dsdb_attribute contains 401 bytes in 8 blocks (ref 0) d=(nil) 0x222c320 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bc1150 + ACS-Max-Peak-Bandwidth contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2bccc50 + ACS-Max-Peak-Bandwidth contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2bc8db0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2bd48f0 + 1.2.840.113556.1.4.767 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2bd8aa0 + aCSMaxPeakBandwidth contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2be5150 + ACS-Max-Peak-Bandwidth contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2be08a0 + struct dsdb_attribute contains 402 bytes in 8 blocks (ref 0) d=(nil) 0x22f18f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bed2d0 + ACS-Max-No-Of-Log-Files contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2be9160 + ACS-Max-No-Of-Log-Files contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2bf5540 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2bf1200 + 1.2.840.113556.1.4.774 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2bfd2a0 + aCSMaxNoOfLogFiles contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2bf94f0 + ACS-Max-No-Of-Log-Files contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c05080 + struct dsdb_attribute contains 418 bytes in 8 blocks (ref 0) d=(nil) 0x2400c40 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c012a0 + ACS-Max-No-Of-Account-Files contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2c0d4c0 + ACS-Max-No-Of-Account-Files contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2c09250 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2c158e0 + 1.2.840.113556.1.4.901 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2c117a0 + aCSMaxNoOfAccountFiles contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2c1d970 + ACS-Max-No-Of-Account-Files contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2c19920 + struct dsdb_attribute contains 394 bytes in 8 blocks (ref 0) d=(nil) 0x2420640 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c25a00 + ACS-Maximum-SDU-Size contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2c2e370 + ACS-Maximum-SDU-Size contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2c29c50 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c369c0 + 1.2.840.113556.1.4.1314 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c32680 + aCSMaximumSDUSize contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2c3eaa0 + ACS-Maximum-SDU-Size contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2c3a900 + struct dsdb_attribute contains 411 bytes in 8 blocks (ref 0) d=(nil) 0x264c390 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c46b70 + ACS-Max-Duration-Per-Flow contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2c42c10 + ACS-Max-Duration-Per-Flow contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2c4ea00 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2c4ac10 + 1.2.840.113556.1.4.761 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2c56a50 + aCSMaxDurationPerFlow contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2c62ed0 + ACS-Max-Duration-Per-Flow contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2c52690 + struct dsdb_attribute contains 454 bytes in 8 blocks (ref 0) d=(nil) 0x2682c80 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c5f050 + ACS-Max-Aggregate-Peak-Rate-Per-User contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x2c5aec0 + ACS-Max-Aggregate-Peak-Rate-Per-User contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x2c66b50 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c6e490 + 1.2.840.113556.1.4.897 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2c6a750 + aCSMaxAggregatePeakRatePerUser contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x2c75ca0 + ACS-Max-Aggregate-Peak-Rate-Per-User contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x2c720d0 + struct dsdb_attribute contains 382 bytes in 8 blocks (ref 0) d=(nil) 0x2687070 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c7d590 + ACS-Identity-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2c79900 + ACS-Identity-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2c85210 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2c81320 + 1.2.840.113556.1.4.784 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2c8d600 + aCSIdentityName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2c891d0 + ACS-Identity-Name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2c95b00 + struct dsdb_attribute contains 388 bytes in 8 blocks (ref 0) d=(nil) 0x271ea60 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c91700 + ACS-Event-Log-Level contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2c9dc80 + ACS-Event-Log-Level contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2c99a80 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2ca6300 + 1.2.840.113556.1.4.769 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ca1e70 + aCSEventLogLevel contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2cae740 + ACS-Event-Log-Level contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2caa560 + struct dsdb_attribute contains 435 bytes in 8 blocks (ref 0) d=(nil) 0x27b80b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cb6650 + ACS-Enable-RSVP-Message-Logging contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2cb2050 + ACS-Enable-RSVP-Message-Logging contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2cba900 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2cc7850 + 1.2.840.113556.1.4.768 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ccfce0 + aCSEnableRSVPMessageLogging contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x2ccb750 + ACS-Enable-RSVP-Message-Logging contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2cd7d70 + struct dsdb_attribute contains 416 bytes in 8 blocks (ref 0) d=(nil) 0x27bc860 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cd3df0 + ACS-Enable-RSVP-Accounting contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2cdfa00 + ACS-Enable-RSVP-Accounting contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2cdbc80 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2ce3dd0 + 1.2.840.113556.1.4.899 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2cf0050 + aCSEnableRSVPAccounting contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cebeb0 + ACS-Enable-RSVP-Accounting contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x2cf8150 + struct dsdb_attribute contains 400 bytes in 8 blocks (ref 0) d=(nil) 0x280dce0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cf4250 + ACS-Enable-ACS-Service contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d00050 + ACS-Enable-ACS-Service contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2cfbf10 + 2.5.5.8 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2d040e0 + 1.2.840.113556.1.4.770 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d10020 + aCSEnableACSService contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2d174f0 + ACS-Enable-ACS-Service contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d18800 + struct dsdb_attribute contains 377 bytes in 8 blocks (ref 0) d=(nil) 0x28932f0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d1fb80 + ACS-DSBM-Refresh contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2d20f30 + ACS-DSBM-Refresh contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2d1ca30 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2d29470 + 1.2.840.113556.1.4.777 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d34bb0 + aCSDSBMRefresh contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2d2da70 + ACS-DSBM-Refresh contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2d3a1c0 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x28c30b0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d35c70 + ACS-DSBM-Priority contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2d3e250 + ACS-DSBM-Priority contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2d4a2e0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2d45e10 + 1.2.840.113556.1.4.776 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2d527f0 + aCSDSBMPriority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2d5a960 + ACS-DSBM-Priority contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2e93a40 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x294f490 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d569d0 + ACS-DSBM-DeadTime contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2e99750 + ACS-DSBM-DeadTime contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2ef9640 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2f0d3b0 + 1.2.840.113556.1.4.778 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f20580 + aCSDSBMDeadTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2f3a5f0 + ACS-DSBM-DeadTime contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2f56fb0 + struct dsdb_attribute contains 366 bytes in 8 blocks (ref 0) d=(nil) 0x2a601d0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d62ea0 + ACS-Direction contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2f5f690 + ACS-Direction contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2f6e4c0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2f8ca90 + 1.2.840.113556.1.4.757 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2f89050 + aCSDirection contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2f924b0 + ACS-Direction contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2fa3c00 + struct dsdb_attribute contains 381 bytes in 8 blocks (ref 0) d=(nil) 0x2aaadf0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d5ed40 + ACS-Cache-Timeout contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2fc2c80 + ACS-Cache-Timeout contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2fda8a0 + 2.5.5.9 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2fe37d0 + 1.2.840.113556.1.4.779 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2ff9860 + aCSCacheTimeout contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2ff5c20 + ACS-Cache-Timeout contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2fff100 + struct dsdb_attribute contains 425 bytes in 8 blocks (ref 0) d=(nil) 0x2b63c90 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d6ac20 + ACS-Allocable-RSVP-Bandwidth contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2d66df0 + ACS-Allocable-RSVP-Bandwidth contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2d73160 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3008a00 + 1.2.840.113556.1.4.766 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3049d80 + aCSAllocableRSVPBandwidth contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2d6ecd0 + ACS-Allocable-RSVP-Bandwidth contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2d7b6d0 + struct dsdb_attribute contains 443 bytes in 8 blocks (ref 0) d=(nil) 0x2d72cd0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d83dc0 + ACS-Aggregate-Token-Rate-Per-User contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2d7f7d0 + ACS-Aggregate-Token-Rate-Per-User contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2d8bee0 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x3052cb0 + 1.2.840.113556.1.4.760 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x3069170 + aCSAggregateTokenRatePerUser contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x2d87bc0 + ACS-Aggregate-Token-Rate-Per-User contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2d93f00 + struct dsdb_attribute contains 395 bytes in 8 blocks (ref 0) d=(nil) 0x2fb57a0 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d90040 + Account-Name-History contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x30727b0 + Account-Name-History contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x30849e0 + 2.5.5.12 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x309ff20 + 1.2.840.113556.1.4.1307 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d9bb90 + accountNameHistory contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x30a4b00 + Account-Name-History contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x30c3e20 + struct dsdb_attribute contains 375 bytes in 8 blocks (ref 0) d=(nil) 0x30ade10 + struct ldb_schema_attribute contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x196dfc0 + Account-Expires contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x30cccf0 + Account-Expires contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x30d6050 + 2.5.5.16 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x30f1900 + 1.2.840.113556.1.4.159 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x30fa840 + accountExpires contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x30f76a0 + Account-Expires contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1962d60 + FF0000000000000000000000000000000000000000 contains 43 bytes in 1 blocks (ref 0) d=(nil) 0x2d97bf0 + struct dsdb_schema_prefixmap contains 1318 bytes in 43 blocks (ref 0) d=(nil) 0x2e7e170 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2da3c10 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2d9fb80 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x2daba60 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x2da7c50 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2db3ac0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2daf9f0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2db79d0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2dbff30 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2dcc5b0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2dd0b20 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2de5390 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2de9850 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2df62c0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2df1a20 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2dfe7a0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2dfa4c0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2e069a0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2e027d0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2e0e8d0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2e0a920 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2e16a40 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2e12ad0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x2e1e770 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x2e1a8e0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x2e26b40 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2e22980 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2e2ea10 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2e2ac50 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e37370 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e32b30 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e3f620 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e3b660 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x2e47460 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e437c0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e52ea0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e5c5e0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e54370 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e5db20 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2e677a0 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x2e75350 + DATA_BLOB: ../source4/dsdb/schema/schema_prefixmap.c:548 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x2e70560 + struct dsdb_schema_prefixmap_oid contains 984 bytes in 1 blocks (ref 0) d=(nil) 0x196d8d0 + struct ldb_dn contains 130 bytes in 2 blocks (ref 0) d=(nil) 0x1965140 + CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x196d430 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18415a0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1840d50 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183f960 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183f060 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183e6b0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183df20 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183dea0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183d520 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183cb80 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183c1c0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183ba00 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x183a780 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1839d70 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1839410 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1838cb0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1838270 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1837ab0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18370c0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18366f0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1835e20 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1835350 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1834ab0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1833ef0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1833770 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1832fd0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18323d0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1831970 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18311d0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1830a30 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x182ffe0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x182f600 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x182ecb0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x182e2a0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x182d990 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x182d080 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x182b3c0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x182aa70 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18291f0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18288a0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1828820 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18287a0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1827d60 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1802850 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18027d0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1801da0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18016c0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x17fc1f0 + struct ops_list_entry contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x17fdfa0 + struct auth_session_info contains 808 bytes in 20 blocks (ref 3) d=0x2af2789e17b4 0x17fc760 + struct cli_credentials contains 381 bytes in 5 blocks (ref 0) d=(nil) 0x17fca30 + SAMBA2000.EXAMPLE.COM contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x17fc010 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x17fc6f0 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x17fc170 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x17fbfa0 + struct dom_sid contains 68 bytes in 1 blocks (ref 0) d=(nil) 0x17fc0c0 + struct auth_user_info contains 163 bytes in 9 blocks (ref 0) d=(nil) 0x17fc270 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x17fc680 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x17fc610 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x17fc5a0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x17fc530 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x17fc4c0 + System contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x17fc450 + NT AUTHORITY contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x17fc3d0 + SYSTEM contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x17fc360 + struct security_token contains 100 bytes in 2 blocks (ref 0) d=(nil) 0x17fcc40 + struct dom_sid contains 68 bytes in 1 blocks (ref 0) d=(nil) 0x17fccd0 + DATA_BLOB: ../source4/auth/session.c:81 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x17fc9b0 + struct auth_user_info_torture contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x17fc8a0 + struct tevent_context contains 272489 bytes in 7793 blocks (ref 1) d=0x2af2770dc78a 0x17fbbb0 + struct task_server contains 1348 bytes in 30 blocks (ref 0) d=(nil) 0x1adca60 + struct stream_socket contains 232 bytes in 6 blocks (ref 0) d=(nil) 0x25f69e0 + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x25f6b20 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1b68af0 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x25f6a80 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x25f6890 + struct stream_socket contains 232 bytes in 6 blocks (ref 0) d=(nil) 0x1b28af0 + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1b28c30 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x25f6910 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x1b28b90 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1b28d20 + struct imessaging_context contains 820 bytes in 17 blocks (ref 0) d=(nil) 0x1adcb10 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2af9ed0 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x2af9d80 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2af9e30 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2625670 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2625510 + struct socket_address contains 100 bytes in 2 blocks (ref 0) d=(nil) 0x29d7290 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.14 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x29d7330 + struct socket_context contains 108 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x29d71f0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.14 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x2625460 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29d7160 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x286f2b0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.14 contains 65 bytes in 3 blocks (ref 0) d=(nil) 0x286f3f0 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 5 bytes in 2 blocks (ref 0) d=(nil) 0x226e5a0 + 1.14 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x23af3b0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x286f350 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x21413e0 + struct task_server contains 2386 bytes in 40 blocks (ref 0) d=(nil) 0x25679f0 + struct echo_server contains 1012 bytes in 17 blocks (ref 0) d=(nil) 0x2883b30 + struct echo_socket contains 1004 bytes in 16 blocks (ref 0) d=(nil) 0x343a880 + struct echo_udp_socket contains 828 bytes in 13 blocks (ref 0) d=(nil) 0x3003bb0 + struct tevent_req contains 464 bytes in 6 blocks (ref 0) d=(nil) 0x2c28fd0 + struct tdgram_recvfrom_state contains 272 bytes in 4 blocks (ref 0) d=0x2af27c33ffee 0x27a81b0 + struct tevent_req contains 232 bytes in 3 blocks (ref 0) d=(nil) 0x27a8250 + struct tdgram_bsd_recvfrom_state contains 40 bytes in 1 blocks (ref 0) d=0x2af27c3432f9 0x27a83f0 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x27a8330 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x2c290b0 + struct tevent_queue contains 148 bytes in 3 blocks (ref 0) d=0x2af2770de48c 0x3003d90 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x2c28f10 + echo_udp_send_queue contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2c28e90 + struct tdgram_context contains 192 bytes in 3 blocks (ref 0) d=0x2af27c33fe7e 0x3003c40 + struct tdgram_bsd contains 152 bytes in 2 blocks (ref 0) d=0x2af27c343df5 0x3003ce0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1adc990 + struct tsocket_address contains 160 bytes in 2 blocks (ref 0) d=(nil) 0x1d135a0 + struct tsocket_address_bsd contains 136 bytes in 1 blocks (ref 0) d=(nil) 0x21f3770 + struct interface contains 490 bytes in 5 blocks (ref 0) d=(nil) 0x2587d40 + 255.0.0.0 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x29eb880 + 127.255.255.255 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e640 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1a374e0 + 127.0.0.25/8 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2cd79f0 + struct imessaging_context contains 820 bytes in 17 blocks (ref 0) d=(nil) 0x2090280 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x21f36c0 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x2230ab0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1d13500 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1d13460 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x22309e0 + struct socket_address contains 100 bytes in 2 blocks (ref 0) d=(nil) 0x248e9b0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.13 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x2abd9f0 + struct socket_context contains 108 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x248e910 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.13 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x2abdaa0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x239eb30 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22a7df0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.13 contains 65 bytes in 3 blocks (ref 0) d=(nil) 0x22a7d40 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 5 bytes in 2 blocks (ref 0) d=(nil) 0x1a5de20 + 1.13 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x2f56c40 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x239ebd0 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2cd7c80 + struct task_server contains 5342 bytes in 79 blocks (ref 0) d=(nil) 0x1a5de90 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x297fab0 + reference to: struct dns_socket + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x297f8c0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1a5df50 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x22976e0 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2d2d9f0 + struct dns_server contains 4226 bytes in 54 blocks (ref 0) d=(nil) 0x2a3c1a0 + struct dns_socket contains 1003 bytes in 16 blocks (ref 1) d=(nil) 0x2abdbf0 + struct dns_udp_socket contains 827 bytes in 13 blocks (ref 0) d=(nil) 0x2a3c0a0 + struct tevent_req contains 464 bytes in 6 blocks (ref 0) d=(nil) 0x272e7a0 + struct tdgram_recvfrom_state contains 272 bytes in 4 blocks (ref 0) d=0x2af27c33ffee 0x1a335c0 + struct tevent_req contains 232 bytes in 3 blocks (ref 0) d=(nil) 0x2883970 + struct tdgram_bsd_recvfrom_state contains 40 bytes in 1 blocks (ref 0) d=0x2af27c3432f9 0x1a33660 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x2567930 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x2567b30 + struct tevent_queue contains 147 bytes in 3 blocks (ref 0) d=0x2af2770de48c 0x2a3c2e0 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x1f5d470 + dns_udp_send_queue contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3003ea0 + struct tdgram_context contains 192 bytes in 3 blocks (ref 0) d=0x2af27c33fe7e 0x1a33420 + struct tdgram_bsd contains 152 bytes in 2 blocks (ref 0) d=0x2af27c343df5 0x25eed60 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1ad8aa0 + struct tsocket_address contains 160 bytes in 2 blocks (ref 0) d=(nil) 0x23af1c0 + struct tsocket_address_bsd contains 136 bytes in 1 blocks (ref 0) d=(nil) 0x1a37360 + struct dns_server_zone contains 186 bytes in 3 blocks (ref 0) d=(nil) 0x2297420 + struct ldb_dn contains 154 bytes in 2 blocks (ref 0) d=(nil) 0x239e9b0 + DC=samba2000.example.com,CN=MicrosoftDNS,CN=System,DC=samba2000,DC=example,DC=com contains 82 bytes in 1 blocks (ref 0) d=(nil) 0x239ea70 + struct ldb_result contains 1119 bytes in 12 blocks (ref 0) d=(nil) 0x248ebf0 + struct ldb_message * contains 1079 bytes in 11 blocks (ref 0) d=(nil) 0x2567aa0 + struct ldb_message contains 540 bytes in 5 blocks (ref 0) d=(nil) 0x29d7450 + struct ldb_message_element contains 516 bytes in 4 blocks (ref 0) d=(nil) 0x1f5d220 + struct ldb_val contains 31 bytes in 2 blocks (ref 0) d=(nil) 0x1d13640 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x21f3640 + name contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x2c28e20 + struct ldb_message contains 515 bytes in 5 blocks (ref 0) d=(nil) 0x27a84a0 + struct ldb_message_element contains 491 bytes in 4 blocks (ref 0) d=(nil) 0x272e570 + struct ldb_val contains 38 bytes in 2 blocks (ref 0) d=(nil) 0x297f990 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1adc910 + name contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x2883ac0 + struct dns_server_tkey_store contains 1040 bytes in 2 blocks (ref 0) d=(nil) 0x22308d0 + struct dns_server_tkey * contains 1024 bytes in 1 blocks (ref 0) d=(nil) 0x27c7c30 + reference to: struct ldb_context + struct cli_credentials contains 838 bytes in 19 blocks (ref 0) d=(nil) 0x23487f0 + struct keytab_container contains 24 bytes in 2 blocks (ref 0) d=0x2af275fd9c7e 0x2625750 + reference to: struct smb_krb5_context + struct smb_krb5_context contains 24 bytes in 1 blocks (ref 1) d=0x2af27a4dcdf0 0x286f510 + DC5$ contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x2cd7a70 + SAMBA2000.EXAMPLE.COM contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1a33520 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e550 + password set via cli_credentials_set_password contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x239eca0 + host/dc5.samba2000.example.com@SAMBA2000.EXAMPLE.COM contains 53 bytes in 1 blocks (ref 0) d=(nil) 0x28838d0 + (&(flatname=SAMBA2000)(objectclass=primaryDomain)) contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x21f35a0 + struct db_context contains 200 bytes in 4 blocks (ref 0) d=(nil) 0x2cd7b60 + struct db_tdb_ctx contains 32 bytes in 3 blocks (ref 0) d=(nil) 0x1ad8d00 + struct tdb_wrap contains 8 bytes in 2 blocks (ref 0) d=(nil) 0x1a5e080 + reference to: struct tdb_wrap_private + /home/rusty/samba/st/fl2000dc/private/secrets.tdb contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x297fa10 + SAMBA2000.EXAMPLE.COM contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2a3c240 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2cd7d00 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d2d770 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x23489f0 + struct imessaging_context contains 820 bytes in 17 blocks (ref 0) d=(nil) 0x2348a60 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x29cef50 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x2f56cb0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x29ceeb0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2abdc70 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x210ca90 + struct socket_address contains 100 bytes in 2 blocks (ref 0) d=(nil) 0x297f820 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.12 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x1ad8c10 + struct socket_context contains 108 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1a372c0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.12 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x210c920 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2883bb0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1d136c0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.12 contains 65 bytes in 3 blocks (ref 0) d=(nil) 0x22a7c60 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 5 bytes in 2 blocks (ref 0) d=(nil) 0x2f56db0 + 1.12 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x2090210 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x1e0a7b0 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2587cc0 + struct task_server contains 1230 bytes in 25 blocks (ref 0) d=(nil) 0x25eee70 + struct dnsupdate_service contains 256 bytes in 4 blocks (ref 0) d=(nil) 0x1a371f0 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x2297570 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x22974b0 + reference to: struct ldb_context + struct imessaging_context contains 910 bytes in 20 blocks (ref 0) d=(nil) 0x20fd000 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2297630 + const char * contains 26 bytes in 2 blocks (ref 0) d=(nil) 0x21415f0 + dnsupdate contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23af0b0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x29eb6e0 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x29eb590 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x29eb640 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x25eecc0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x25eebf0 + struct socket_address contains 100 bytes in 2 blocks (ref 0) d=(nil) 0x226e350 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.11 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x23af250 + struct socket_context contains 108 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x343aa60 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.11 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x23af300 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a33700 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x238e520 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.11 contains 65 bytes in 3 blocks (ref 0) d=(nil) 0x226e2a0 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 5 bytes in 2 blocks (ref 0) d=(nil) 0x2d2d700 + 1.11 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x2d2d7f0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x2577a40 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x343a790 + struct task_server contains 2781 bytes in 72 blocks (ref 0) d=(nil) 0x2077b00 + struct kccsrv_service contains 1746 bytes in 50 blocks (ref 0) d=(nil) 0x2b7ce40 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x1f10030 + struct ldb_dn contains 360 bytes in 11 blocks (ref 0) d=(nil) 0x1e0a8e0 + struct ldb_dn_component contains 240 bytes in 9 blocks (ref 0) d=(nil) 0x1f100f0 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2a1f9b0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x20fcf90 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x27881d0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x20fcea0 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ec7720 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x343a9f0 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2788040 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x343a900 + CN=Configuration,DC=samba2000,DC=example,DC=com contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x2a1f820 + struct kccsrv_partition contains 460 bytes in 14 blocks (ref 0) d=(nil) 0x2761fb0 + struct ldb_dn contains 428 bytes in 13 blocks (ref 0) d=(nil) 0x2090140 + struct ldb_dn_component contains 298 bytes in 11 blocks (ref 0) d=(nil) 0x1e0a650 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x343a810 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2141460 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1a37460 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1d133f0 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1d85540 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e810 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2d0ffa0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e7a0 + Schema contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e730 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e6c0 + CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x2761e50 + struct kccsrv_partition contains 392 bytes in 12 blocks (ref 0) d=(nil) 0x1a5e100 + struct ldb_dn contains 360 bytes in 11 blocks (ref 0) d=(nil) 0x2f56e20 + struct ldb_dn_component contains 240 bytes in 9 blocks (ref 0) d=(nil) 0x238e3b0 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e5d0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2141670 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x23aee20 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2141580 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x27880c0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2141510 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x287bef0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1db5e40 + CN=Configuration,DC=samba2000,DC=example,DC=com contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1f0ff90 + struct kccsrv_partition contains 310 bytes in 10 blocks (ref 0) d=(nil) 0x29eb7f0 + struct ldb_dn contains 278 bytes in 9 blocks (ref 0) d=(nil) 0x2577980 + struct ldb_dn_component contains 175 bytes in 7 blocks (ref 0) d=(nil) 0x238e5b0 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf880 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1ec7520 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x265bd50 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x20b7d10 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x24cedf0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1e16fc0 + DC=samba2000,DC=example,DC=com contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1e0a850 + reference to: struct ldb_context + struct imessaging_context contains 971 bytes in 21 blocks (ref 0) d=(nil) 0x2077bb0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2f56ee0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2a1f770 + const char * contains 23 bytes in 2 blocks (ref 0) d=(nil) 0x20fcf10 + kccsrv contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x263c460 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2b7cd90 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x2b7cc40 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2b7ccf0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2396880 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2396720 + struct socket_address contains 100 bytes in 2 blocks (ref 0) d=(nil) 0x1e77e40 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.10 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x23965c0 + struct socket_context contains 108 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1e77da0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.10 contains 60 bytes in 1 blocks (ref 0) d=(nil) 0x2396670 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e77d10 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1e77c80 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.10 contains 65 bytes in 3 blocks (ref 0) d=(nil) 0x2077d50 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 5 bytes in 2 blocks (ref 0) d=(nil) 0x20c3df0 + 1.10 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf6a0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x1e77be0 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x26c1600 + struct task_server contains 1282 bytes in 29 blocks (ref 0) d=(nil) 0x226a8c0 + struct stream_socket contains 332 bytes in 8 blocks (ref 0) d=(nil) 0x29472e0 + reference to: struct ntp_signd_server + reference to: struct loadparm_context + struct socket_context contains 190 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2947380 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1f34300 + /home/rusty/samba/st/fl2000dc/ntp_signd_socket/socket contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x1f34260 + struct socket_address contains 94 bytes in 2 blocks (ref 0) d=(nil) 0x2947420 + /home/rusty/samba/st/fl2000dc/ntp_signd_socket/socket contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x1f34130 + struct ntp_signd_server contains 70 bytes in 3 blocks (ref 1) d=(nil) 0x2f64130 + /home/rusty/samba/st/fl2000dc/ntp_signd_socket/socket contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x2947240 + reference to: struct ldb_context + struct imessaging_context contains 816 bytes in 17 blocks (ref 0) d=(nil) 0x2d49b50 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2947190 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x1a1fe20 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1a1fed0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1a1fd80 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1a1fc20 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x1a3b150 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.9 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x1a3b1f0 + struct socket_context contains 107 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1a3b0b0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.9 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x1a3b2a0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a3b020 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d49c60 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.9 contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x2d49da0 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 4 bytes in 2 blocks (ref 0) d=(nil) 0x20cf810 + 1.9 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf790 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x2d49d00 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2098210 + struct task_server contains 9595 bytes in 159 blocks (ref 0) d=(nil) 0x238a600 + struct stream_socket contains 348 bytes in 8 blocks (ref 0) d=(nil) 0x22b8100 + reference to: struct wbsrv_listen_socket + reference to: struct loadparm_context + struct socket_context contains 198 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x22b81a0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x261d9c0 + /home/rusty/samba/st/fl2000dc/winbindd_privileged_socket/pipe contains 62 bytes in 1 blocks (ref 0) d=(nil) 0x261d910 + struct socket_address contains 102 bytes in 2 blocks (ref 0) d=(nil) 0x22b8240 + /home/rusty/samba/st/fl2000dc/winbindd_privileged_socket/pipe contains 62 bytes in 1 blocks (ref 0) d=(nil) 0x261d7d0 + struct stream_socket contains 326 bytes in 8 blocks (ref 0) d=(nil) 0x20c7930 + reference to: struct wbsrv_listen_socket + reference to: struct loadparm_context + struct socket_context contains 187 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x20c79d0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1f61210 + /home/rusty/samba/st/fl2000dc/winbindd_socket/pipe contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x1f61170 + struct socket_address contains 91 bytes in 2 blocks (ref 0) d=(nil) 0x20c7a70 + /home/rusty/samba/st/fl2000dc/winbindd_socket/pipe contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x20c7b10 + struct wbsrv_service contains 7818 bytes in 120 blocks (ref 0) d=(nil) 0x2224130 + struct wbsrv_listen_socket contains 86 bytes in 2 blocks (ref 1) d=(nil) 0x22b7fc0 + /home/rusty/samba/st/fl2000dc/winbindd_privileged_socket/pipe contains 62 bytes in 1 blocks (ref 0) d=(nil) 0x22b8050 + struct wbsrv_listen_socket contains 75 bytes in 2 blocks (ref 1) d=(nil) 0x227e7c0 + /home/rusty/samba/st/fl2000dc/winbindd_socket/pipe contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x227e850 + struct dom_sid contains 68 bytes in 1 blocks (ref 0) d=(nil) 0x227eb80 + struct dom_sid contains 68 bytes in 1 blocks (ref 0) d=(nil) 0x2787f80 + struct ldb_context contains 2587 bytes in 29 blocks (ref 0) d=0x2af275bb6e14 0x287bd50 + struct ldb_wrap contains 82 bytes in 3 blocks (ref 0) d=0x2af27642a067 0x20b7ac0 + reference to: struct auth_session_info + idmap.ldb contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d0fcc0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x227eaf0 + NULL Base DN invalid for a base search contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x227e730 + ldb_tdb backend contains 400 bytes in 13 blocks (ref 0) d=(nil) 0x2098460 + struct ltdb_private contains 360 bytes in 12 blocks (ref 0) d=(nil) 0x2d0fee0 + struct ltdb_cache contains 248 bytes in 10 blocks (ref 0) d=(nil) 0x2276530 + struct ldb_message contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22765c0 + struct ldb_message contains 200 bytes in 8 blocks (ref 0) d=(nil) 0x2276650 + struct ldb_message_element contains 93 bytes in 5 blocks (ref 0) d=(nil) 0x1d85700 + struct ldb_val contains 52 bytes in 3 blocks (ref 0) d=(nil) 0x1db5cb0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1db5dc0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1db5d40 + @IDXATTR contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1db5c30 + struct ldb_dn contains 83 bytes in 2 blocks (ref 0) d=(nil) 0x1d855c0 + @INDEXLIST contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1d85680 + struct ltdb_wrap contains 40 bytes in 1 blocks (ref 0) d=0x2af290dc12e8 0x20983c0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x287be60 + /home/rusty/samba/st/fl2000dc/private/idmap.ldb contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x263c710 + /home/rusty/samba/st/fl2000dc/private/idmap.ldb contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1ffd890 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2245aa0 + struct ldb_dn_extended_syntax contains 320 bytes in 1 blocks (ref 0) d=(nil) 0x22bcb80 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2098330 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x263c680 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2276730 + /home/rusty/samba/bin/modules/ldb contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x263c880 + struct ldb_schema_attribute contains 1320 bytes in 1 blocks (ref 0) d=(nil) 0x2fda300 + struct idmap_context contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x24cee70 + reference to: struct ldb_context + struct dom_sid contains 68 bytes in 1 blocks (ref 0) d=(nil) 0x1db5eb0 + struct ldb_dn contains 254 bytes in 5 blocks (ref 0) d=(nil) 0x26c1540 + struct ldb_dn_component contains 163 bytes in 3 blocks (ref 0) d=(nil) 0x1dc5f20 + Primary Domains contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1dc6020 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x20c3bd0 + cn=Primary Domains contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1a98c70 + struct ldb_context contains 4516 bytes in 76 blocks (ref 0) d=0x2af275bb6e14 0x26c1390 + struct ldb_message contains 947 bytes in 15 blocks (ref 0) d=(nil) 0x2e70440 + struct ldb_message_element contains 631 bytes in 7 blocks (ref 0) d=(nil) 0x2245810 + struct ldb_val contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x265bf50 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x24df480 + secureChannelType contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x265bdd0 + struct ldb_val contains 41 bytes in 2 blocks (ref 0) d=(nil) 0x2d0fe60 + ../lib/ldb/common/ldb_pack.c:264 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x22bcd30 + objectSid contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d0fde0 + struct ldb_dn contains 292 bytes in 7 blocks (ref 0) d=(nil) 0x265be50 + struct ldb_dn_component contains 182 bytes in 5 blocks (ref 0) d=(nil) 0x1ffd610 + Primary Domains contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1ffd810 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x263c810 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ffd790 + flatname contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1ffd710 + flatname=SAMBA2000,cn=Primary Domains contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x1dc60a0 + struct ldb_wrap contains 84 bytes in 2 blocks (ref 0) d=0x2af27642a067 0x1aa8af0 + secrets.ldb contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1f69010 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x263c3d0 + ldb_module: update_keytab contains 74 bytes in 3 blocks (ref 0) d=(nil) 0x26a9df0 + struct update_kt_private contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x20a03c0 + .name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1a08720 + ldb_module: secrets_tdb_sync contains 135 bytes in 4 blocks (ref 0) d=(nil) 0x1aa8cf0 + struct secrets_tdb_sync_private contains 66 bytes in 2 blocks (ref 0) d=(nil) 0x26c1310 + /home/rusty/samba/st/fl2000dc/private contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x20b01b0 + .name contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1ec7600 + ldb_module: objectguid contains 63 bytes in 2 blocks (ref 0) d=(nil) 0x2b63f00 + .name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x272e110 + ldb_module: rdn_name contains 61 bytes in 2 blocks (ref 0) d=(nil) 0x2224050 + .name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2844760 + ldb_module: samba_secrets contains 66 bytes in 2 blocks (ref 0) d=(nil) 0x218aee0 + .name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1a08880 + ldb_tdb backend contains 791 bytes in 29 blocks (ref 0) d=(nil) 0x2946fd0 + struct ltdb_private contains 751 bytes in 28 blocks (ref 0) d=(nil) 0x1e883f0 + struct ltdb_cache contains 639 bytes in 26 blocks (ref 0) d=(nil) 0x1f65110 + struct ldb_message contains 401 bytes in 16 blocks (ref 0) d=(nil) 0x272e390 + struct ldb_message_element contains 293 bytes in 13 blocks (ref 0) d=(nil) 0x24df230 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1f68ec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1aa8a70 + sAMAccountName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1f68e40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x20c3d70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1f68dc0 + realm contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x20cf720 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1f5ce40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x20c3cf0 + flatname contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1f5cdc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x2834f40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2834fc0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2bc06a0 + struct ldb_dn contains 84 bytes in 2 blocks (ref 0) d=(nil) 0x263c230 + @ATTRIBUTES contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2946db0 + struct ldb_message contains 214 bytes in 9 blocks (ref 0) d=(nil) 0x2844590 + struct ldb_message_element contains 107 bytes in 6 blocks (ref 0) d=(nil) 0x2301ec0 + struct ldb_val contains 66 bytes in 4 blocks (ref 0) d=(nil) 0x1f5cf90 + ../lib/ldb/common/ldb_pack.c:264 contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x2400fb0 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x20b0380 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2e8bca0 + @IDXATTR contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x24df400 + struct ldb_dn contains 83 bytes in 2 blocks (ref 0) d=(nil) 0x2cba820 + @INDEXLIST contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2cba6b0 + struct ltdb_wrap contains 40 bytes in 1 blocks (ref 0) d=0x2af290dc12e8 0x23aecd0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x227e5f0 + /home/rusty/samba/st/fl2000dc/private/secrets.ldb contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x1dc61d0 + /home/rusty/samba/st/fl2000dc/private/secrets.ldb contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x227ed00 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20a02a0 + struct ldb_dn_extended_syntax contains 320 bytes in 1 blocks (ref 0) d=(nil) 0x2787a80 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x28446d0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a089d0 + /home/rusty/samba/bin/modules/ldb contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x24df4f0 + struct ldb_schema_attribute contains 1425 bytes in 5 blocks (ref 0) d=(nil) 0x319bb30 + sAMAccountName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2946d30 + realm contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1c029b0 + flatname contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x20b0400 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x218ae00 + struct tevent_context contains 144 bytes in 2 blocks (ref 0) d=0x2af2770dc78a 0x22f1a60 + struct std_event_context contains 24 bytes in 1 blocks (ref 0) d=0x2af2770e1c09 0x20a0330 + struct imessaging_context contains 1039 bytes in 22 blocks (ref 0) d=(nil) 0x2cba5a0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x226a810 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x226a760 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x226a620 + const char * contains 31 bytes in 2 blocks (ref 0) d=(nil) 0x20b7b80 + winbind_server contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x20b7a40 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x227e680 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x20c3c40 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x218ad60 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2d0fd40 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2302020 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x2946f30 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.8 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x1a98bb0 + struct socket_context contains 107 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1dc6130 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.8 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x227ec50 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x263c340 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1c02a20 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.8 contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x1f68f50 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 4 bytes in 2 blocks (ref 0) d=(nil) 0x271ae20 + 1.8 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ec7590 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x22bca60 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x263c910 + struct task_server contains 8348 bytes in 112 blocks (ref 0) d=(nil) 0x268a1f0 + struct dreplsrv_service contains 6931 bytes in 84 blocks (ref 0) d=(nil) 0x1e88240 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x20b8060 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x2466dc0 + struct dreplsrv_partition contains 2799 bytes in 24 blocks (ref 0) d=(nil) 0x20a00f0 + struct drsuapi_DsReplicaCursor2 contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x22b8710 + DC=samba2000,DC=example,DC=com contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1f5d080 + struct ldb_dn contains 2536 bytes in 21 blocks (ref 0) d=(nil) 0x28447e0 + struct ldb_dn_ext_component contains 2105 bytes in 5 blocks (ref 0) d=(nil) 0x2787c30 + uint8_t contains 1024 bytes in 1 blocks (ref 0) d=(nil) 0x26345e0 + SID contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2787cd0 + uint8_t contains 1024 bytes in 1 blocks (ref 0) d=(nil) 0x256f850 + GUID contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x2d4a090 + struct ldb_dn_component contains 206 bytes in 13 blocks (ref 0) d=(nil) 0x2b63fe0 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1aa8c70 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1aa8c00 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2d4a010 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2d49fa0 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1a98b30 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x20a0230 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a98ac0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1a98a50 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2302180 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2787d40 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x20b0300 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2b640e0 + DC=samba2000,DC=example,DC=com contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x23020f0 + ;;DC=samba2000,DC=example,DC=com contains 122 bytes in 1 blocks (ref 0) d=(nil) 0x218ac70 + struct dreplsrv_partition contains 1931 bytes in 30 blocks (ref 0) d=(nil) 0x2834e00 + struct drsuapi_DsReplicaCursor2 contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x2e704d0 + CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x29263f0 + struct ldb_dn contains 1641 bytes in 27 blocks (ref 0) d=(nil) 0x2835090 + struct ldb_dn_ext_component contains 1053 bytes in 3 blocks (ref 0) d=(nil) 0x20cf690 + uint8_t contains 1024 bytes in 1 blocks (ref 0) d=(nil) 0x320bd60 + GUID contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x2844660 + struct ldb_dn_component contains 356 bytes in 21 blocks (ref 0) d=(nil) 0x272e190 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x20b0280 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2b63e80 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2b63e00 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x23aef20 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x23aeea0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2946ec0 + CONFIGURATION contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2946e30 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2223fd0 + SCHEMA contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x2223f50 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf970 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2d4a1c0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2224200 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1f68d30 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x20b0480 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x20cf880 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf710 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x20cf790 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x20c78b0 + Schema contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1a08950 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf800 + CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x2f64070 + ;CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 102 bytes in 1 blocks (ref 0) d=(nil) 0x20c3b00 + struct dreplsrv_partition contains 1833 bytes in 26 blocks (ref 0) d=(nil) 0x2f64250 + struct drsuapi_DsReplicaCursor2 contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x24ced60 + CN=Configuration,DC=samba2000,DC=example,DC=com contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x286bf10 + struct ldb_dn contains 1553 bytes in 23 blocks (ref 0) d=(nil) 0x287bf70 + struct ldb_dn_ext_component contains 1053 bytes in 3 blocks (ref 0) d=(nil) 0x272e300 + uint8_t contains 1024 bytes in 1 blocks (ref 0) d=(nil) 0x21c7890 + GUID contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1fe60f0 + struct ldb_dn_component contains 288 bytes in 17 blocks (ref 0) d=(nil) 0x26a9fe0 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1ecf8f0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2301fb0 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1a08800 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1e88380 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1a98cf0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x238a750 + CONFIGURATION contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x23aed80 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x23aec60 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x218ae70 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1f5cf20 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x287bcd0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1d85830 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x26a9ed0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x266baf0 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1f61060 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x20aff70 + CN=Configuration,DC=samba2000,DC=example,DC=com contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x2f641b0 + ;CN=Configuration,DC=samba2000,DC=example,DC=com contains 92 bytes in 1 blocks (ref 0) d=(nil) 0x22767c0 + reference to: struct ldb_context + struct imessaging_context contains 1353 bytes in 27 blocks (ref 0) d=(nil) 0x2de5240 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2d4a100 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1ec7460 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1c02ab0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2e70210 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2d4a230 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x263c4d0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x22f1cd0 + const char * contains 25 bytes in 2 blocks (ref 0) d=(nil) 0x1c02930 + dreplsrv contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x22bcb00 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1e88190 + struct dispatch_fn * contains 200 bytes in 4 blocks (ref 0) d=(nil) 0x20b7c50 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2787ee0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x238a6b0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x238a560 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1d0b8f0 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x1d0b6f0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.7 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x1d0b790 + struct socket_context contains 107 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1cdb4f0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.7 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x1d0b840 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cdb270 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1cdb460 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.7 contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x1cdb3b0 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 4 bytes in 2 blocks (ref 0) d=(nil) 0x2213f50 + 1.7 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x226a530 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x1cdb310 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2de5110 + struct task_server contains 6873 bytes in 137 blocks (ref 0) d=(nil) 0x291e210 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x2cb1e50 + reference to: struct kdc_socket + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x2a9a3e0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x28c33c0 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x2a9a340 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1c06310 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x1a9cb70 + reference to: struct kdc_socket + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x24f6ca0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x21bb9a0 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x2682df0 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19f90b0 + struct kdc_server contains 4948 bytes in 97 blocks (ref 0) d=(nil) 0x2543aa0 + struct kdc_socket contains 1011 bytes in 16 blocks (ref 0) d=(nil) 0x287baf0 + struct kdc_udp_socket contains 827 bytes in 13 blocks (ref 0) d=(nil) 0x2213d80 + struct tevent_req contains 464 bytes in 6 blocks (ref 0) d=(nil) 0x2c959c0 + struct tdgram_recvfrom_state contains 272 bytes in 4 blocks (ref 0) d=0x2af27c33ffee 0x2893520 + struct tevent_req contains 232 bytes in 3 blocks (ref 0) d=(nil) 0x28935c0 + struct tdgram_bsd_recvfrom_state contains 40 bytes in 1 blocks (ref 0) d=0x2af27c3432f9 0x2689fd0 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x28936a0 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x2893460 + struct tevent_queue contains 147 bytes in 3 blocks (ref 0) d=0x2af2770de48c 0x2c957e0 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x2c95900 + kdc_udp_send_queue contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2c95880 + struct tdgram_context contains 192 bytes in 3 blocks (ref 0) d=0x2af27c33fe7e 0x1c3a790 + struct tdgram_bsd contains 152 bytes in 2 blocks (ref 0) d=0x2af27c343df5 0x2213e90 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x268a070 + struct tsocket_address contains 160 bytes in 2 blocks (ref 0) d=(nil) 0x1c3a700 + struct tsocket_address_bsd contains 136 bytes in 1 blocks (ref 0) d=(nil) 0x2213c80 + struct kdc_socket contains 1011 bytes in 16 blocks (ref 0) d=(nil) 0x2400f20 + struct kdc_udp_socket contains 827 bytes in 13 blocks (ref 0) d=(nil) 0x2ab9e50 + struct tevent_req contains 464 bytes in 6 blocks (ref 0) d=(nil) 0x21d3880 + struct tdgram_recvfrom_state contains 272 bytes in 4 blocks (ref 0) d=0x2af27c33ffee 0x21f6930 + struct tevent_req contains 232 bytes in 3 blocks (ref 0) d=(nil) 0x30a0210 + struct tdgram_bsd_recvfrom_state contains 40 bytes in 1 blocks (ref 0) d=0x2af27c3432f9 0x2098290 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x2af9f80 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x3295100 + struct tevent_queue contains 147 bytes in 3 blocks (ref 0) d=0x2af2770de48c 0x287ba50 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x1d37c50 + kdc_udp_send_queue contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1ff5cd0 + struct tdgram_context contains 192 bytes in 3 blocks (ref 0) d=0x2af27c33fe7e 0x287b900 + struct tdgram_bsd contains 152 bytes in 2 blocks (ref 0) d=0x2af27c343df5 0x287b9a0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1c3a630 + struct tsocket_address contains 160 bytes in 2 blocks (ref 0) d=(nil) 0x2ab9cc0 + struct tsocket_address_bsd contains 136 bytes in 1 blocks (ref 0) d=(nil) 0x2ab9d50 + struct kdc_socket contains 1011 bytes in 16 blocks (ref 1) d=(nil) 0x222c560 + struct kdc_udp_socket contains 827 bytes in 13 blocks (ref 0) d=(nil) 0x1ed75c0 + struct tevent_req contains 464 bytes in 6 blocks (ref 0) d=(nil) 0x1ff5b30 + struct tdgram_recvfrom_state contains 272 bytes in 4 blocks (ref 0) d=0x2af27c33ffee 0x237e4c0 + struct tevent_req contains 232 bytes in 3 blocks (ref 0) d=(nil) 0x237e560 + struct tdgram_bsd_recvfrom_state contains 40 bytes in 1 blocks (ref 0) d=0x2af27c3432f9 0x2400db0 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x237e640 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x1ff5c10 + struct tevent_queue contains 147 bytes in 3 blocks (ref 0) d=0x2af2770de48c 0x24208d0 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x24209f0 + kdc_udp_send_queue contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2420970 + struct tdgram_context contains 192 bytes in 3 blocks (ref 0) d=0x2af27c33fe7e 0x1ed7650 + struct tdgram_bsd contains 152 bytes in 2 blocks (ref 0) d=0x2af27c343df5 0x1ed76f0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2400e50 + struct tsocket_address contains 160 bytes in 2 blocks (ref 0) d=(nil) 0x222c5f0 + struct tsocket_address_bsd contains 136 bytes in 1 blocks (ref 0) d=(nil) 0x2cb1d50 + struct kdc_socket contains 1011 bytes in 16 blocks (ref 1) d=(nil) 0x24207b0 + struct kdc_udp_socket contains 827 bytes in 13 blocks (ref 0) d=(nil) 0x2d72ed0 + struct tevent_req contains 464 bytes in 6 blocks (ref 0) d=(nil) 0x1e06ee0 + struct tdgram_recvfrom_state contains 272 bytes in 4 blocks (ref 0) d=0x2af27c33ffee 0x2682f70 + struct tevent_req contains 232 bytes in 3 blocks (ref 0) d=(nil) 0x2683010 + struct tdgram_bsd_recvfrom_state contains 40 bytes in 1 blocks (ref 0) d=0x2af27c3432f9 0x1a9c9e0 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x1a9c920 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x1e06fc0 + struct tevent_queue contains 147 bytes in 3 blocks (ref 0) d=0x2af2770de48c 0x1fe6260 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x1fe6300 + kdc_udp_send_queue contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2cb1fd0 + struct tdgram_context contains 192 bytes in 3 blocks (ref 0) d=0x2af27c33fe7e 0x1da5ab0 + struct tdgram_bsd contains 152 bytes in 2 blocks (ref 0) d=0x2af27c343df5 0x1da5b50 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x222c490 + struct tsocket_address contains 160 bytes in 2 blocks (ref 0) d=(nil) 0x1bf2bf0 + struct tsocket_address_bsd contains 136 bytes in 1 blocks (ref 0) d=(nil) 0x2d73020 + struct samba_kdc_base_context contains 824 bytes in 28 blocks (ref 0) d=(nil) 0x1fe61e0 + HDB contains 808 bytes in 27 blocks (ref 0) d=(nil) 0x1fc2650 + struct samba_kdc_db_context contains 584 bytes in 26 blocks (ref 0) d=(nil) 0x1c060d0 + struct ldb_dn contains 512 bytes in 24 blocks (ref 0) d=(nil) 0x271ed10 + char contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x212a980 + struct ldb_dn_component contains 340 bytes in 21 blocks (ref 0) d=(nil) 0x1dce430 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1a10500 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x266b8b0 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x28642b0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1a10490 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2122850 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2864240 + USERS contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x24df320 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x21cb700 + KRBTGT contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x2c15540 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x30b1e40 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2883a50 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2a3c380 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x29262a0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x210cb90 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x309ffa0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x29d73e0 + Users contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x2577c80 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x3456750 + krbtgt contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x29cf0e0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x30a4a90 + CN=krbtgt,CN=Users,DC=samba2000,DC=example,DC=com contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x28c32a0 + reference to: struct ldb_context + struct HDB * contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x21bb920 + struct smb_krb5_context contains 24 bytes in 2 blocks (ref 0) d=0x2af27a4dcdf0 0x2cb1f40 + reference to: struct tevent_context + reference to: struct ldb_context + struct interface contains 490 bytes in 5 blocks (ref 0) d=(nil) 0x294f6a0 + 255.0.0.0 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2543a20 + 127.255.255.255 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x25439a0 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2543920 + 127.0.0.25/8 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1ba2480 + struct imessaging_context contains 907 bytes in 20 blocks (ref 0) d=(nil) 0x27b82f0 + const char * contains 27 bytes in 2 blocks (ref 0) d=(nil) 0x1e06de0 + kdc_server contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2de51c0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x268a140 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1ba23d0 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x2333650 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1ba2330 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1ba2290 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2333580 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x291e2c0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.6 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x2e8bbf0 + struct socket_context contains 107 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x27b84a0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.6 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x23334d0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e8bb60 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x20afeb0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.6 contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x2e8bab0 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 4 bytes in 2 blocks (ref 0) d=(nil) 0x1ba9640 + 1.6 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2756a50 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x27b8400 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x22fa0c0 + struct task_server contains 3209 bytes in 55 blocks (ref 0) d=(nil) 0x2543ba0 + struct cldapd_server contains 1810 bytes in 30 blocks (ref 0) d=(nil) 0x2605a60 + struct cldap_socket contains 897 bytes in 14 blocks (ref 0) d=0x2af27ec689f0 0x25beec0 + struct tevent_req contains 464 bytes in 6 blocks (ref 0) d=(nil) 0x280e070 + struct tdgram_recvfrom_state contains 272 bytes in 4 blocks (ref 0) d=0x2af27c33ffee 0x21b3570 + struct tevent_req contains 232 bytes in 3 blocks (ref 0) d=(nil) 0x2100e20 + struct tdgram_bsd_recvfrom_state contains 40 bytes in 1 blocks (ref 0) d=0x2af27c3432f9 0x21b3610 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x2100f00 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x21b34b0 + struct tevent_queue contains 145 bytes in 3 blocks (ref 0) d=0x2af2770de48c 0x20afd50 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x20afdf0 + cldap_send_queue contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x21b3390 + struct tdgram_context contains 192 bytes in 3 blocks (ref 0) d=0x2af27c33fe7e 0x25bf010 + struct tdgram_bsd contains 152 bytes in 2 blocks (ref 0) d=0x2af27c343df5 0x2372240 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x291e140 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25bef80 + struct cldap_socket contains 897 bytes in 14 blocks (ref 0) d=0x2af27ec689f0 0x2169630 + struct tevent_req contains 464 bytes in 6 blocks (ref 0) d=(nil) 0x25e7020 + struct tdgram_recvfrom_state contains 272 bytes in 4 blocks (ref 0) d=0x2af27c33ffee 0x25bf0e0 + struct tevent_req contains 232 bytes in 3 blocks (ref 0) d=(nil) 0x2372160 + struct tdgram_bsd_recvfrom_state contains 40 bytes in 1 blocks (ref 0) d=0x2af27c3432f9 0x22fa020 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x22f9f60 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x257f660 + struct tevent_queue contains 145 bytes in 3 blocks (ref 0) d=0x2af2770de48c 0x22e9f40 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x2276350 + cldap_send_queue contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x24eec90 + struct tdgram_context contains 192 bytes in 3 blocks (ref 0) d=0x2af27c33fe7e 0x257f830 + struct tdgram_bsd contains 152 bytes in 2 blocks (ref 0) d=0x2af27c343df5 0x1ba94e0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x280dfa0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22c4bb0 + reference to: struct ldb_context + struct interface contains 490 bytes in 5 blocks (ref 0) d=(nil) 0x2135f10 + 255.0.0.0 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x24eedb0 + 127.255.255.255 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2169510 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2766d40 + 127.0.0.25/8 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2766c20 + struct imessaging_context contains 845 bytes in 19 blocks (ref 0) d=(nil) 0x22c4cf0 + const char * contains 29 bytes in 2 blocks (ref 0) d=(nil) 0x23723c0 + cldap_server contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x25bf180 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1ba9590 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x2766dc0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x23e88f0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x24eee30 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1ba21c0 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x294f600 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.5 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x2b53760 + struct socket_context contains 107 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x21b3410 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.5 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x2605b70 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2605ae0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2b53650 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.5 contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x257f780 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 4 bytes in 2 blocks (ref 0) d=(nil) 0x1dbdfe0 + 1.5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x24eb180 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x1da5a10 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x22e9ec0 + struct task_server contains 3080 bytes in 74 blocks (ref 0) d=(nil) 0x2df61c0 + struct stream_socket contains 332 bytes in 8 blocks (ref 0) d=(nil) 0x2276180 + reference to: struct ldapsrv_service + reference to: struct loadparm_context + struct socket_context contains 190 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x22762b0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x22f9e00 + /home/rusty/samba/st/fl2000dc/private/ldap_priv/ldapi contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x2333430 + struct socket_address contains 94 bytes in 2 blocks (ref 0) d=(nil) 0x22c4b10 + /home/rusty/samba/st/fl2000dc/private/ldap_priv/ldapi contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x1ba9440 + struct stream_socket contains 312 bytes in 8 blocks (ref 0) d=(nil) 0x2e8bd10 + reference to: struct ldapsrv_service + reference to: struct loadparm_context + struct socket_context contains 180 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x291e0a0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x23722f0 + /home/rusty/samba/st/fl2000dc/private/ldapi contains 44 bytes in 1 blocks (ref 0) d=(nil) 0x257f8e0 + struct socket_address contains 84 bytes in 2 blocks (ref 0) d=(nil) 0x2169590 + /home/rusty/samba/st/fl2000dc/private/ldapi contains 44 bytes in 1 blocks (ref 0) d=(nil) 0x25e6f80 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x26059c0 + reference to: struct ldapsrv_service + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x24eed10 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x27b8220 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x1fc27b0 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x23e8870 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x23e87d0 + reference to: struct ldapsrv_service + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x2b535b0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x280ded0 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x2766ca0 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2887a20 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x1967960 + reference to: struct ldapsrv_service + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1a1b460 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2887aa0 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x1a1b3c0 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x26dfb50 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x2bb95d0 + reference to: struct ldapsrv_service + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1a1b5e0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2386650 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x21ab780 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x21ab5c0 + struct ldapsrv_service contains 628 bytes in 12 blocks (ref 6) d=(nil) 0x19ed570 + struct tevent_queue contains 147 bytes in 3 blocks (ref 0) d=0x2af2770de48c 0x1a1b540 + struct tevent_immediate contains 80 bytes in 1 blocks (ref 0) d=(nil) 0x22e9e00 + ldapsrv_call_queue contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x22e9d80 + struct tstream_tls_params contains 226 bytes in 2 blocks (ref 0) d=0x2af27a4d8b44 0x26d8010 + ../lib/util/util_file.c:180 contains 202 bytes in 1 blocks (ref 0) d=(nil) 0x2386510 + /home/rusty/samba/st/fl2000dc/private/tls/key.pem contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x2dbfe40 + /home/rusty/samba/st/fl2000dc/private/tls/cert.pem contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x2dbfda0 + /home/rusty/samba/st/fl2000dc/private/tls/ca.pem contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x2d83cd0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1ebff40 + /home/rusty/samba/st/fl2000dc/private/tls/dhparms.pem contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x2d83c30 + DC5.samba2000.example.com contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x2854400 + struct imessaging_context contains 816 bytes in 17 blocks (ref 0) d=(nil) 0x239a160 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2c368d0 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x2bad700 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2c36830 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2bad660 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x22edec0 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x24d73b0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.4 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x24d7450 + struct socket_context contains 107 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1d95b90 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.4 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x22ede10 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x324d460 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c157d0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.4 contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x2b37890 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 4 bytes in 2 blocks (ref 0) d=(nil) 0x235dfe0 + 1.4 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x252b970 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x2b377f0 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2088550 + struct task_server contains 4717 bytes in 65 blocks (ref 0) d=(nil) 0x29064c0 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x2bb9510 + reference to: struct wreplsrv_service + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x29e6dc0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x31fab00 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x19ed600 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2001780 + struct wreplsrv_service contains 3576 bytes in 38 blocks (ref 1) d=(nil) 0x2d7b550 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x1b00b30 + struct wreplsrv_owner contains 67 bytes in 2 blocks (ref 0) d=(nil) 0x1e80270 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x27569d0 + struct wreplsrv_partner contains 206 bytes in 3 blocks (ref 0) d=(nil) 0x2be4fc0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2001800 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x212e820 + struct ldb_context contains 2428 bytes in 21 blocks (ref 0) d=0x2af275bb6e14 0x24eb070 + struct ldb_wrap contains 126 bytes in 3 blocks (ref 0) d=0x2af27642a067 0x2088490 + reference to: struct auth_session_info + /home/rusty/samba/st/fl2000dc/private/wins_config.ldb contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x1f07fe0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2001880 + ldb_tdb backend contains 224 bytes in 6 blocks (ref 0) d=(nil) 0x1c8b660 + struct ltdb_private contains 184 bytes in 5 blocks (ref 0) d=(nil) 0x2cae5c0 + struct ltdb_cache contains 72 bytes in 3 blocks (ref 0) d=(nil) 0x1c8b700 + struct ldb_message contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b89df0 + struct ldb_message contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b89e80 + struct ltdb_wrap contains 40 bytes in 1 blocks (ref 0) d=0x2af290dc12e8 0x2cae680 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a3f7b0 + /home/rusty/samba/st/fl2000dc/private/wins_config.ldb contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x2a3f710 + /home/rusty/samba/st/fl2000dc/private/wins_config.ldb contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x2ad2200 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1be2a00 + struct ldb_dn_extended_syntax contains 320 bytes in 1 blocks (ref 0) d=(nil) 0x34397b0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2d97a70 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2040700 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2ad2300 + /home/rusty/samba/bin/modules/ldb contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1be2af0 + struct ldb_schema_attribute contains 1320 bytes in 1 blocks (ref 0) d=(nil) 0x3076af0 + /home/rusty/samba/st/fl2000dc/private/wins_config.ldb contains 54 bytes in 1 blocks (ref 0) d=(nil) 0x2756930 + struct winsdb_handle contains 91 bytes in 4 blocks (ref 0) d=(nil) 0x1f89cc0 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1b54bf0 + reference to: struct ldb_context + /home/rusty/samba/st/fl2000dc/statedir/wins.ldb contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1b54b50 + struct interface contains 490 bytes in 5 blocks (ref 0) d=(nil) 0x2327210 + 255.0.0.0 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1b74eb0 + 127.255.255.255 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1bbafc0 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1d5ce30 + 127.0.0.25/8 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2ac2890 + struct imessaging_context contains 845 bytes in 19 blocks (ref 0) d=(nil) 0x31613e0 + const char * contains 29 bytes in 2 blocks (ref 0) d=(nil) 0x2c15860 + wrepl_server contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x289f9d0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x2bfd1c0 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x1acd4e0 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x2bfd120 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1acd440 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1ae8cb0 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x2ee7800 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.3 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x2ee78a0 + struct socket_context contains 107 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x1e63e00 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.3 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x1ae8c00 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b2cc10 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x290a6d0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.3 contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x2d3a110 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 4 bytes in 2 blocks (ref 0) d=(nil) 0x1b5cbc0 + 1.3 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b50a40 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x1b00bf0 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2c2e2c0 + struct task_server contains 14180 bytes in 191 blocks (ref 0) d=(nil) 0x2bf53e0 + struct interface contains 490 bytes in 5 blocks (ref 0) d=(nil) 0x2667ab0 + 255.0.0.0 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2777820 + 127.255.255.255 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x24bec90 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x202c740 + 127.0.0.25/8 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1f30540 + struct nbtd_server contains 12017 bytes in 156 blocks (ref 0) d=(nil) 0x1b04b80 + struct wins_server contains 3119 bytes in 33 blocks (ref 0) d=(nil) 0x1e2a900 + struct winsdb_handle contains 3095 bytes in 32 blocks (ref 0) d=(nil) 0x27778a0 + struct ldb_context contains 3004 bytes in 29 blocks (ref 1) d=0x2af275bb6e14 0x1a56540 + struct ldb_wrap contains 120 bytes in 2 blocks (ref 0) d=0x2af27642a067 0x269a810 + /home/rusty/samba/st/fl2000dc/statedir/wins.ldb contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x2040790 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1dadc10 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x269a780 + ldb_module: wins_ldb contains 594 bytes in 9 blocks (ref 0) d=(nil) 0x1d2cb00 + struct winsdb_handle contains 43 bytes in 2 blocks (ref 0) d=(nil) 0x1d60f50 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1d60fe0 + struct interface contains 490 bytes in 5 blocks (ref 0) d=(nil) 0x1e539b0 + 255.0.0.0 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2a93410 + 127.255.255.255 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1d2cbb0 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1e0f2a0 + 127.0.0.25/8 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x29b1200 + .name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1e0f320 + ldb_tdb backend contains 224 bytes in 6 blocks (ref 0) d=(nil) 0x1b2cca0 + struct ltdb_private contains 184 bytes in 5 blocks (ref 0) d=(nil) 0x2987a70 + struct ltdb_cache contains 72 bytes in 3 blocks (ref 0) d=(nil) 0x2513d60 + struct ldb_message contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2513df0 + struct ldb_message contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a93380 + struct ltdb_wrap contains 40 bytes in 1 blocks (ref 0) d=0x2af290dc12e8 0x1a88640 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19d62c0 + /home/rusty/samba/st/fl2000dc/statedir/wins.ldb contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1e5fb20 + /home/rusty/samba/st/fl2000dc/statedir/wins.ldb contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1f27f00 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1ab53c0 + struct ldb_dn_extended_syntax contains 320 bytes in 1 blocks (ref 0) d=(nil) 0x207f800 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19d6230 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29b1280 + /home/rusty/samba/bin/modules/ldb contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x28fdd90 + struct ldb_schema_attribute contains 1320 bytes in 1 blocks (ref 0) d=(nil) 0x312da60 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1a885c0 + /home/rusty/samba/st/fl2000dc/statedir/wins.ldb contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x28fde20 + reference to: struct ldb_context + struct nbtd_interface contains 936 bytes in 19 blocks (ref 0) d=(nil) 0x24bebd0 + struct nbtd_iface_name contains 90 bytes in 2 blocks (ref 0) d=(nil) 0x2c2e1f0 + * contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1e67db0 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x2d56850 + __SAMBA__ contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1ad51b0 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x19ce5e0 + __SAMBA__ contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2cebe00 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x196d4e0 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2c51c10 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x2020a20 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2b88230 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x2cc7780 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d8bd60 + struct nbtd_iface_name contains 92 bytes in 2 blocks (ref 0) d=(nil) 0x2ad6040 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2a50490 + struct nbtd_iface_name contains 92 bytes in 2 blocks (ref 0) d=(nil) 0x2a60050 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x289b840 + struct nbtd_iface_name contains 92 bytes in 2 blocks (ref 0) d=(nil) 0x27eaf50 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e0f3a0 + struct nbtd_interface contains 6265 bytes in 67 blocks (ref 0) d=(nil) 0x1cbf070 + struct nbtd_iface_name contains 90 bytes in 2 blocks (ref 0) d=(nil) 0x29063f0 + * contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x2c46b00 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x1f79840 + __SAMBA__ contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19ce6b0 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x2405090 + __SAMBA__ contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x196d5b0 + struct nbtd_iface_name contains 178 bytes in 3 blocks (ref 0) d=(nil) 0x297aec0 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x2b94f00 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2020af0 + struct nbtd_iface_name contains 178 bytes in 3 blocks (ref 0) d=(nil) 0x2b575c0 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x2cc76c0 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d8bde0 + struct nbtd_iface_name contains 178 bytes in 3 blocks (ref 0) d=(nil) 0x296fae0 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x2a1fa20 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1b4cd30 + struct nbtd_iface_name contains 172 bytes in 3 blocks (ref 0) d=(nil) 0x2aa2c40 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x20fd110 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2a60120 + struct nbtd_iface_name contains 172 bytes in 3 blocks (ref 0) d=(nil) 0x2811ed0 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x2a54250 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x27eb020 + struct nbtd_iface_name contains 172 bytes in 3 blocks (ref 0) d=(nil) 0x2ab2980 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x1ef2910 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1cce9b0 + struct nbt_dgram_socket contains 398 bytes in 9 blocks (ref 0) d=(nil) 0x2028890 + struct dgram_mailslot_handler contains 65 bytes in 2 blocks (ref 0) d=0x2af278253b94 0x244b8d0 + \MAILSLOT\BROWSE contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x244b970 + struct dgram_mailslot_handler contains 70 bytes in 2 blocks (ref 0) d=0x2af278253b94 0x2266670 + \MAILSLOT\NET\NTLOGON contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1c17440 + struct dgram_mailslot_handler contains 71 bytes in 2 blocks (ref 0) d=0x2af278253b94 0x1e70190 + \MAILSLOT\NET\NETLOGON contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x29f2e40 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x202c670 + struct socket_context contains 48 bytes in 1 blocks (ref 0) d=0x2af27c33abf0 0x2028940 + struct nbt_dgram_socket contains 398 bytes in 9 blocks (ref 0) d=(nil) 0x1e700e0 + struct dgram_mailslot_handler contains 65 bytes in 2 blocks (ref 0) d=0x2af278253b94 0x244f650 + \MAILSLOT\BROWSE contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x244f6f0 + struct dgram_mailslot_handler contains 70 bytes in 2 blocks (ref 0) d=0x2af278253b94 0x22665d0 + \MAILSLOT\NET\NTLOGON contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x206c2e0 + struct dgram_mailslot_handler contains 71 bytes in 2 blocks (ref 0) d=0x2af278253b94 0x206c240 + \MAILSLOT\NET\NETLOGON contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1afbfd0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1f30470 + struct socket_context contains 48 bytes in 1 blocks (ref 0) d=0x2af27c33abf0 0x1d8d840 + struct nbt_name_socket contains 3776 bytes in 17 blocks (ref 0) d=(nil) 0x1d8d780 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1e2a830 + struct idr_context contains 3560 bytes in 14 blocks (ref 0) d=(nil) 0x1be6b80 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x2815c20 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x2ccfb60 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x27c0400 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x27426b0 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x26ec160 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x2696760 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x2686ef0 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x252f6d0 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x2527b20 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x250fd00 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x24bad60 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x24b6f20 + struct idr_layer contains 272 bytes in 1 blocks (ref 0) d=(nil) 0x247ae50 + struct socket_context contains 48 bytes in 1 blocks (ref 0) d=0x2af27c33abf0 0x1cefbb0 + struct nbt_name_socket contains 240 bytes in 4 blocks (ref 0) d=(nil) 0x1cefaf0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1d06ed0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b04c50 + struct socket_context contains 48 bytes in 1 blocks (ref 0) d=0x2af27c33abf0 0x1cbf130 + 255.0.0.0 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x217a690 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1966000 + 127.255.255.255 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x20ea0b0 + struct nbtd_interface contains 1609 bytes in 35 blocks (ref 0) d=(nil) 0x1b14c40 + struct nbtd_iface_name contains 90 bytes in 2 blocks (ref 0) d=(nil) 0x2d3a040 + * contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1eb0420 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x1ad50e0 + __SAMBA__ contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1f79910 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x2cebd30 + __SAMBA__ contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2405160 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x2c51b40 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x297af90 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x2c9db00 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1b4ccb0 + struct nbtd_iface_name contains 98 bytes in 2 blocks (ref 0) d=(nil) 0x296fbb0 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2d8be60 + struct nbtd_iface_name contains 92 bytes in 2 blocks (ref 0) d=(nil) 0x2bbd220 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2aa2d10 + struct nbtd_iface_name contains 92 bytes in 2 blocks (ref 0) d=(nil) 0x2a503c0 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2811fa0 + struct nbtd_iface_name contains 92 bytes in 2 blocks (ref 0) d=(nil) 0x27eedc0 + DC5 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1dadcd0 + struct nbt_dgram_socket contains 398 bytes in 9 blocks (ref 0) d=(nil) 0x1c06cb0 + struct dgram_mailslot_handler contains 65 bytes in 2 blocks (ref 0) d=0x2af278253b94 0x1c1fb30 + \MAILSLOT\BROWSE contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x254fec0 + struct dgram_mailslot_handler contains 70 bytes in 2 blocks (ref 0) d=0x2af278253b94 0x1c1fa90 + \MAILSLOT\NET\NTLOGON contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2401200 + struct dgram_mailslot_handler contains 71 bytes in 2 blocks (ref 0) d=0x2af278253b94 0x1c06d60 + \MAILSLOT\NET\NETLOGON contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x23e8b10 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1c17370 + struct socket_context contains 48 bytes in 1 blocks (ref 0) d=0x2af27c33abf0 0x1b39330 + struct nbt_name_socket contains 240 bytes in 4 blocks (ref 0) d=(nil) 0x1b39270 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1be6ab0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2e52ff0 + struct socket_context contains 48 bytes in 1 blocks (ref 0) d=0x2af27c33abf0 0x1b14d00 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x21d3d20 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x21c3b00 + 255.255.255.255 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x21dbaa0 + struct interface contains 490 bytes in 5 blocks (ref 0) d=(nil) 0x2634b30 + 255.0.0.0 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x21a2e50 + 127.255.255.255 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1aecc70 + 127.0.0.25 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1da5e70 + 127.0.0.25/8 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1d7d6c0 + struct imessaging_context contains 1119 bytes in 24 blocks (ref 0) d=(nil) 0x2bf9390 + const char * contains 47 bytes in 3 blocks (ref 0) d=(nil) 0x1e5fbe0 + nbt_server contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2d56920 + wins_server contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1f27fa0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1eb8250 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1eb81a0 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1ccea30 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1ab5450 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x26c4a00 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x2073650 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x26c4960 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x20735b0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2e52f20 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x2e02710 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.2 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x2e37210 + struct socket_context contains 107 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x2e02670 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.2 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x2e372c0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2dbbc30 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2cefef0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.2 contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x2dbbb80 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 4 bytes in 2 blocks (ref 0) d=(nil) 0x2967f30 + 1.2 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x29577e0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x2ceff90 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x275e1e0 + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x19f0bf0 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 248 bytes in 9 blocks (ref 1) d=(nil) 0x1c96ef0 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x21f7900 + reference to: struct dcesrv_socket_context + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x219a8d0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1965d00 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x219a830 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x20106e0 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 334 bytes in 10 blocks (ref 1) d=(nil) 0x2d5a8e0 + struct stream_socket contains 318 bytes in 8 blocks (ref 0) d=(nil) 0x217a5f0 + reference to: struct dcesrv_socket_context + reference to: struct loadparm_context + struct socket_context contains 183 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x218b030 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x20985e0 + /home/rusty/samba/st/fl2000dc/ncalrpc/EPMAPPER contains 47 bytes in 1 blocks (ref 0) d=(nil) 0x1ecfa60 + struct socket_address contains 87 bytes in 2 blocks (ref 0) d=(nil) 0x22c0e30 + /home/rusty/samba/st/fl2000dc/ncalrpc/EPMAPPER contains 47 bytes in 1 blocks (ref 0) d=(nil) 0x2375b40 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x1d48e60 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 248 bytes in 9 blocks (ref 1) d=(nil) 0x3426d30 + struct stream_socket contains 232 bytes in 7 blocks (ref 0) d=(nil) 0x21c3a60 + reference to: struct dcesrv_socket_context + reference to: struct loadparm_context + struct socket_context contains 136 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x21dba00 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x222c850 + struct socket_address contains 48 bytes in 2 blocks (ref 0) d=(nil) 0x21d3c80 + 0.0.0.0 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2d52770 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 332 bytes in 10 blocks (ref 1) d=(nil) 0x1d6cc30 + struct stream_socket contains 316 bytes in 8 blocks (ref 0) d=(nil) 0x275e140 + reference to: struct dcesrv_socket_context + reference to: struct loadparm_context + struct socket_context contains 182 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x29f2da0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1e90af0 + /home/rusty/samba/st/fl2000dc/ncalrpc/DEFAULT contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x1da5dd0 + struct socket_address contains 86 bytes in 2 blocks (ref 0) d=(nil) 0x19b6f40 + /home/rusty/samba/st/fl2000dc/ncalrpc/DEFAULT contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x1d7d620 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x2080170 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x22d9680 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x2553cd0 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x2793cb0 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x29a4750 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x2a971b0 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x26d4f10 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x24e3910 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x253fd50 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x2707610 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x27b42e0 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x2c91680 + reference to: struct dcesrv_context + struct dcesrv_socket_context contains 16 bytes in 2 blocks (ref 0) d=(nil) 0x2c05000 + reference to: struct dcesrv_context + struct dcesrv_context contains 18538 bytes in 413 blocks (ref 19) d=(nil) 0x215d780 + struct named_pipe_socket contains 421 bytes in 11 blocks (ref 1) d=(nil) 0x2e5c660 + struct stream_socket contains 324 bytes in 8 blocks (ref 0) d=(nil) 0x29e3980 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 186 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2e5c6f0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2a63de0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/epmapper contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x2a44270 + struct socket_address contains 90 bytes in 2 blocks (ref 0) d=(nil) 0x2a0f5e0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/epmapper contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x2a0f680 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/epmapper contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x29e38e0 + \pipe\epmapper contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19fc5d0 + /home/rusty/samba/st/fl2000dc/ncalrpc/EPMAPPER contains 47 bytes in 1 blocks (ref 0) d=(nil) 0x20ea010 + struct named_pipe_socket contains 413 bytes in 11 blocks (ref 1) d=(nil) 0x22874f0 + struct stream_socket contains 320 bytes in 8 blocks (ref 0) d=(nil) 0x236e430 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 184 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x23e8a70 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x24cabc0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/wkssvc contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1965f60 + struct socket_address contains 88 bytes in 2 blocks (ref 0) d=(nil) 0x2401160 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/wkssvc contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x254fe20 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/wkssvc contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x231b0a0 + \pipe\wkssvc contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1bde950 + 1024 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x2d3e1e0 + /home/rusty/samba/st/fl2000dc/ncalrpc/DEFAULT contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x2181c90 + DEFAULT contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1e98bd0 + struct named_pipe_socket contains 417 bytes in 11 blocks (ref 1) d=(nil) 0x1b6cc00 + struct stream_socket contains 322 bytes in 8 blocks (ref 0) d=(nil) 0x19fc530 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 185 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x1ab0640 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x20a7de0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/rpcecho contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x2010640 + struct socket_address contains 89 bytes in 2 blocks (ref 0) d=(nil) 0x1afbf30 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/rpcecho contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x1c96e50 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/rpcecho contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x19f0b50 + \pipe\rpcecho contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2060630 + struct named_pipe_socket contains 405 bytes in 11 blocks (ref 1) d=(nil) 0x2d526e0 + struct stream_socket contains 316 bytes in 8 blocks (ref 0) d=(nil) 0x3224d00 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 182 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2cf8040 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1bc6a90 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/samr contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x2030470 + struct socket_address contains 86 bytes in 2 blocks (ref 0) d=(nil) 0x2c890c0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/samr contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x295fe70 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/samr contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x2dd9010 + \pipe\samr contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x20daf10 + struct named_pipe_socket contains 421 bytes in 11 blocks (ref 1) d=(nil) 0x1bde8c0 + struct stream_socket contains 324 bytes in 8 blocks (ref 0) d=(nil) 0x1b509a0 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 186 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x1b45090 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2005260 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/netlogon contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x1fe5f20 + struct socket_address contains 90 bytes in 2 blocks (ref 0) d=(nil) 0x1b41040 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/netlogon contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x1b30ec0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/netlogon contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x1b5cb20 + \pipe\netlogon contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x25379a0 + struct named_pipe_socket contains 413 bytes in 11 blocks (ref 1) d=(nil) 0x20605a0 + struct stream_socket contains 320 bytes in 8 blocks (ref 0) d=(nil) 0x1fc6560 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 184 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x1fb5d20 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x1de6490 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/lsarpc contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1e67d10 + struct socket_address contains 88 bytes in 2 blocks (ref 0) d=(nil) 0x1ebfea0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/lsarpc contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1eb0380 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/lsarpc contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1fda6d0 + \pipe\lsarpc contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x25a3ae0 + struct named_pipe_socket contains 409 bytes in 11 blocks (ref 1) d=(nil) 0x2537910 + struct stream_socket contains 318 bytes in 8 blocks (ref 0) d=(nil) 0x2437c60 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 183 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2408f10 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x221c610 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/lsass contains 47 bytes in 1 blocks (ref 0) d=(nil) 0x226a490 + struct socket_address contains 87 bytes in 2 blocks (ref 0) d=(nil) 0x23c3900 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/lsass contains 47 bytes in 1 blocks (ref 0) d=(nil) 0x235df40 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/lsass contains 47 bytes in 1 blocks (ref 0) d=(nil) 0x24ff950 + \pipe\lsass contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x298f870 + struct named_pipe_socket contains 417 bytes in 11 blocks (ref 1) d=(nil) 0x298f7e0 + struct stream_socket contains 322 bytes in 8 blocks (ref 0) d=(nil) 0x2922560 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 185 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x290e640 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x270b550 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/spoolss contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x276b1a0 + struct socket_address contains 89 bytes in 2 blocks (ref 0) d=(nil) 0x28a3730 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/spoolss contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x2850300 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/spoolss contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x292e5d0 + \pipe\spoolss contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2a28180 + struct named_pipe_socket contains 457 bytes in 11 blocks (ref 1) d=(nil) 0x271ad90 + struct stream_socket contains 342 bytes in 8 blocks (ref 0) d=(nil) 0x24e77b0 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 195 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2c46a60 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2a38350 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/protected_storage contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x2a837a0 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x2b8ccc0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/protected_storage contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x2b43fd0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/protected_storage contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x266f990 + \pipe\protected_storage contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x280a130 + struct named_pipe_socket contains 421 bytes in 11 blocks (ref 1) d=(nil) 0x26e4500 + struct stream_socket contains 324 bytes in 8 blocks (ref 0) d=(nil) 0x2e0e7d0 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 186 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2ad9ff0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2496bc0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/unixinfo contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x24a6c60 + struct socket_address contains 90 bytes in 2 blocks (ref 0) d=(nil) 0x26ccfd0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/unixinfo contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x2aca5e0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/unixinfo contains 50 bytes in 1 blocks (ref 0) d=(nil) 0x2e2ab50 + \pipe\unixinfo contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x26d4e90 + struct named_pipe_socket contains 417 bytes in 11 blocks (ref 1) d=(nil) 0x2825610 + struct stream_socket contains 322 bytes in 8 blocks (ref 0) d=(nil) 0x24b2ce0 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 185 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x277b6d0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2b0ea10 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/browser contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x2dfa3c0 + struct socket_address contains 89 bytes in 2 blocks (ref 0) d=(nil) 0x27a00c0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/browser contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x2f362d0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/browser contains 49 bytes in 1 blocks (ref 0) d=(nil) 0x24db440 + \pipe\browser contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x24e3890 + struct named_pipe_socket contains 413 bytes in 11 blocks (ref 1) d=(nil) 0x252b8e0 + struct stream_socket contains 320 bytes in 8 blocks (ref 0) d=(nil) 0x282d370 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 184 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2840aa0 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x28bb420 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/ntsvcs contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x288f770 + struct socket_address contains 88 bytes in 2 blocks (ref 0) d=(nil) 0x2848660 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/ntsvcs contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x285c2d0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/ntsvcs contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x281d8d0 + \pipe\ntsvcs contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x253fcd0 + struct named_pipe_socket contains 425 bytes in 11 blocks (ref 1) d=(nil) 0x26ff820 + struct stream_socket contains 326 bytes in 8 blocks (ref 0) d=(nil) 0x27466a0 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 187 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2597b70 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2517cb0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/dnsserver contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x27fe730 + struct socket_address contains 91 bytes in 2 blocks (ref 0) d=(nil) 0x250bbc0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/dnsserver contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x27f6a40 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/dnsserver contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x273a750 + \pipe\dnsserver contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2707590 + struct named_pipe_socket contains 413 bytes in 11 blocks (ref 1) d=(nil) 0x27d3b20 + struct stream_socket contains 320 bytes in 8 blocks (ref 0) d=(nil) 0x26027a0 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 184 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2629580 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x26d0f40 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/winreg contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x26b1d20 + struct socket_address contains 88 bytes in 2 blocks (ref 0) d=(nil) 0x2658180 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/winreg contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x267f1f0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/winreg contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x25fa960 + \pipe\winreg contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x27b4260 + struct named_pipe_socket contains 413 bytes in 11 blocks (ref 1) d=(nil) 0x2c85110 + struct stream_socket contains 320 bytes in 8 blocks (ref 0) d=(nil) 0x2d20e30 + reference to: struct named_pipe_socket + reference to: struct loadparm_context + struct socket_context contains 184 bytes in 3 blocks (ref 0) d=0x2af27c33abf0 0x2d29370 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x2b78c50 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/srvsvc contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x2b503f0 + struct socket_address contains 88 bytes in 2 blocks (ref 0) d=(nil) 0x2caa460 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/srvsvc contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x2cd3cf0 + /home/rusty/samba/st/fl2000dc/ncalrpc/np/srvsvc contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x2ce3cd0 + \pipe\srvsvc contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2c91600 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2c71fd0 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2c6e390 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2c75ba0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2c66a50 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2c4e900 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2c1d900 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2c3a800 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2c32580 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x2c0d3c0 + reference to: struct dcerpc_binding + \pipe\srvsvc contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2a73c90 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x2ab6980 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2c04f80 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2aaea40 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2a57ef0 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2a343b0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2aae9d0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2a87550 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2a07510 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2bd8a30 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2be9060 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2bf1100 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x29ef780 + reference to: struct dcerpc_binding + \pipe\winreg contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2ba5120 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x2b4c210 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2a73c10 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2bb1440 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2ae9cd0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2bc4e30 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x2b84d80 + reference to: struct dcerpc_binding + \pipe\dnsserver contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2e26ac0 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x2ba9410 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2ba50a0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2da3b80 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2bccb50 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2d8ff40 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2da3b10 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2d93e00 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2d7f6d0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2e3f5b0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2d6ab20 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2e3b560 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x2e32a30 + reference to: struct dcerpc_binding + \pipe\ntsvcs contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2e1e670 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x2e16940 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2e26a40 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2e1e6f0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2e0a820 + \pipe\protected_storage contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x2e06910 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 0) d=(nil) 0x2de9750 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x31d1fb0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2e068a0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2dcc4b0 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2db39c0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2e4c260 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2dab960 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2e825b0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2e4c1f0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2f085d0 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2f51ed0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x30200a0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2f8dd40 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2ffab10 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x30c3d20 + reference to: struct dcerpc_binding + \pipe\browser contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x21bbc20 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x31f2060 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x31d1f30 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x196ccc0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x19b71f0 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x325a800 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x196cc50 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x322d950 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2b64200 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x230acc0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x23e05f0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x232b760 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x22f1e40 + reference to: struct dcerpc_binding + \pipe\unixinfo contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a42ec0 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x1f64ce0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x21bbba0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x19c6b10 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1967280 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x19d23f0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x19c6aa0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1a3f0d0 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x1ac9210 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1a42f40 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1ae0990 + \pipe\lsass contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1b3d2d0 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 0) d=(nil) 0x1b08b60 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1af0bb0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1af0b40 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1b20f90 + \pipe\lsarpc contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1bc2cb0 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 0) d=(nil) 0x1b78c70 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1b3d250 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1bc2d30 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1b9a080 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x1ba6260 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1c33650 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1bae120 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x1bcaa90 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1c4ac50 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1beaa90 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1c27b50 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x1c3f0d0 + reference to: struct dcerpc_binding + \pipe\protected_storage contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1c4abc0 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x1c5e610 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1c528a0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1c52920 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1c623e0 + \pipe\lsass contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1c76d00 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 0) d=(nil) 0x1c7eff0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1c76d80 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1c9f540 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1c83150 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1c8f430 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x1ca3270 + reference to: struct dcerpc_binding + \pipe\spoolss contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1d510c0 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x1cf3ae0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1cd37d0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1cd3760 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1cffd10 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x1d24650 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1d51140 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1d34850 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x1d58d60 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1db9d50 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1d64d50 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1d89950 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x1dca320 + reference to: struct dcerpc_binding + \pipe\lsass contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1e269e0 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x1dfa880 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1dde120 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1dde0b0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1e22980 + \pipe\netlogon contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1f14100 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 0) d=(nil) 0x1e53c60 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1e26960 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1ea8950 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1e57a00 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1e84060 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x1edb7a0 + reference to: struct dcerpc_binding + \pipe\lsarpc contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1ff9c30 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x1f1fbc0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1f14080 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1f48b70 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1f23dc0 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x1f4cd30 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1f48b00 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1f71440 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x1fa9820 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1fea120 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1fbe660 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1fce9d0 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x1ff5e70 + reference to: struct dcerpc_binding + \pipe\netlogon contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x22a3c80 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x2018dc0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1ff9bb0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2064610 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2058400 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x208c2f0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x20645a0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x20f5620 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x21232b0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x21fb6d0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x21321f0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2139cd0 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x2254e50 + reference to: struct dcerpc_binding + \pipe\samr contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2207690 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x22e1940 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x22a3c00 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2361f10 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x23559e0 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x23b36e0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2361ea0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x24301b0 + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x2443c40 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2486c50 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x24572b0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2463080 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x248ab70 + reference to: struct dcerpc_binding + \pipe\rpcecho contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1a9cce0 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x1fc66e0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2a67f20 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2207620 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x249ea00 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x253bab0 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x1ff1f20 + reference to: struct dcerpc_binding + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 1) d=(nil) 0x34393f0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1dd6130 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1a6a730 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1b60aa0 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x1ce7b90 + reference to: struct dcerpc_binding + struct dcerpc_binding contains 81 bytes in 2 blocks (ref 1) d=(nil) 0x1efbc80 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1dd60c0 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1f23f30 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1f44850 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x27d7890 + reference to: struct dcerpc_binding + \pipe\wkssvc contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x20e2b90 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x26a2440 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x22185c0 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2351c80 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2e1a950 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1aa0950 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x1de24f0 + reference to: struct dcerpc_binding + EPMAPPER contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2b26f40 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x2ba9590 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1b50b50 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x2351c10 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1c2b960 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x2f24c50 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x2110ad0 + reference to: struct dcerpc_binding + 135 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1fee280 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x30d4c10 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1db9e60 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1fee210 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x1fd2960 + struct dcesrv_if_list contains 104 bytes in 1 blocks (ref 0) d=(nil) 0x249abd0 + struct dcesrv_endpoint contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x19e9990 + reference to: struct dcerpc_binding + \pipe\epmapper contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2eff520 + struct dcerpc_binding contains 97 bytes in 3 blocks (ref 1) d=(nil) 0x1f449b0 + const char * contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2c01340 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x189a650 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a67da0 + struct task_server contains 880 bytes in 18 blocks (ref 0) d=(nil) 0x19c2cf0 + struct imessaging_context contains 816 bytes in 17 blocks (ref 0) d=(nil) 0x2c5ef40 + struct irpc_list contains 64 bytes in 1 blocks (ref 0) d=(nil) 0x1ab9380 + struct dispatch_fn * contains 136 bytes in 3 blocks (ref 0) d=(nil) 0x1d71030 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1a52730 + struct dispatch_fn contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1cebb30 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x19e5c90 + struct socket_address contains 99 bytes in 2 blocks (ref 0) d=(nil) 0x1ea0bb0 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.1 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x28b3760 + struct socket_context contains 107 bytes in 2 blocks (ref 0) d=0x2af27c33abf0 0x229ba00 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.1 contains 59 bytes in 1 blocks (ref 0) d=(nil) 0x1966190 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2014fc0 + struct idr_context contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2a48550 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg/msg.1.1 contains 63 bytes in 3 blocks (ref 0) d=(nil) 0x1e0b2d0 + talloc_new: ../source4/lib/messaging/messaging.c:138 contains 4 bytes in 2 blocks (ref 0) d=(nil) 0x1a08c60 + 1.1 contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2f24b60 + /home/rusty/samba/st/fl2000dc/private/smbd.tmp/msg contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x1e5fd30 + reference to: struct loadparm_context + struct task_state contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1b28f00 + talloc_new: ../source4/smbd/server.c:191 contains 186762 bytes in 6208 blocks (ref 0) d=(nil) 0x17fbf30 + struct ldb_context contains 3017 bytes in 40 blocks (ref 0) d=0x2af275bb6e14 0x2cb6540 + struct ldb_wrap contains 86 bytes in 2 blocks (ref 0) d=0x2af27642a067 0x2c917a0 + privilege.ldb contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2333310 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1b08d00 + NULL Base DN invalid for a base search contains 39 bytes in 1 blocks (ref 0) d=(nil) 0x19bb0a0 + ldb_tdb backend contains 632 bytes in 22 blocks (ref 0) d=(nil) 0x1f7d840 + struct ltdb_private contains 592 bytes in 21 blocks (ref 0) d=(nil) 0x2533700 + struct ltdb_cache contains 480 bytes in 19 blocks (ref 0) d=(nil) 0x1fde3a0 + struct ldb_message contains 256 bytes in 10 blocks (ref 0) d=(nil) 0x17fd020 + struct ldb_message_element contains 148 bytes in 7 blocks (ref 0) d=(nil) 0x29641f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1eeb2f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1c7aca0 + privilege contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1dd23d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x27e3310 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x27e7110 + comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1c7f170 + struct ldb_dn contains 84 bytes in 2 blocks (ref 0) d=(nil) 0x1f04070 + @ATTRIBUTES contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1eb43e0 + struct ldb_message contains 200 bytes in 8 blocks (ref 0) d=(nil) 0x1f33f80 + struct ldb_message_element contains 93 bytes in 5 blocks (ref 0) d=(nil) 0x225a680 + struct ldb_val contains 52 bytes in 3 blocks (ref 0) d=(nil) 0x2b0ebb0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2b98fd0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2afe520 + @IDXATTR contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x2d7f870 + struct ldb_dn contains 83 bytes in 2 blocks (ref 0) d=(nil) 0x2be9200 + @INDEXLIST contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2932620 + struct ltdb_wrap contains 40 bytes in 1 blocks (ref 0) d=0x2af290dc12e8 0x1c27300 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3439680 + /home/rusty/samba/st/fl2000dc/private/privilege.ldb contains 52 bytes in 1 blocks (ref 0) d=(nil) 0x2c092f0 + /home/rusty/samba/st/fl2000dc/private/privilege.ldb contains 52 bytes in 1 blocks (ref 0) d=(nil) 0x18417b0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x3437ee0 + struct ldb_dn_extended_syntax contains 320 bytes in 1 blocks (ref 0) d=(nil) 0x1cd6ae0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x26dfe70 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a6e930 + /home/rusty/samba/bin/modules/ldb contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x196df30 + struct ldb_schema_attribute contains 1386 bytes in 3 blocks (ref 0) d=(nil) 0x3137080 + privilege contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2424ad0 + comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2d6ed70 + struct tevent_context contains 144 bytes in 2 blocks (ref 0) d=0x2af2770dc78a 0x29acc10 + struct std_event_context contains 24 bytes in 1 blocks (ref 0) d=0x2af2770e1c09 0x3456320 + struct ldb_context contains 183745 bytes in 6167 blocks (ref 11) d=0x2af275bb6e14 0x17fe020 + struct GUID contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1d857b0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x265c000 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1fc25c0 + bool contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x24aef30 + struct GUID contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1d44b00 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2c49ff0 + struct ldb_wrap contains 80 bytes in 3 blocks (ref 0) d=0x2af27642a067 0x1ab9500 + reference to: struct auth_session_info + sam.ldb contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x204c160 + reference to: struct dsdb_schema + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x29a4850 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1a1b270 + int contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x2f24af0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1bbecc0 + int contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1b1c410 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1965470 + int contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1965200 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34567c0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x34563b0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1894240 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x189b5d0 + struct ldb_dn contains 340 bytes in 16 blocks (ref 0) d=(nil) 0x189a380 + char contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x32809e0 + struct ldb_dn_component contains 206 bytes in 13 blocks (ref 0) d=(nil) 0x189a440 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x19b72f0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189d030 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19b7170 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1968a30 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1965ee0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1972120 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x189bb90 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189bb20 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x17fef90 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1893790 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1894610 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189a540 + DC=samba2000,DC=example,DC=com contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x189b440 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x189b330 + struct ldb_dn contains 544 bytes in 24 blocks (ref 0) d=(nil) 0x17fed60 + char contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x1972190 + struct ldb_dn_component contains 356 bytes in 21 blocks (ref 0) d=(nil) 0x189a1b0 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1962c70 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19642f0 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189c3a0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1962ec0 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1964360 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1962e50 + CONFIGURATION contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1921a90 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1962de0 + SCHEMA contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x19646f0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1962cf0 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x189a310 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1899210 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x17ff390 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18991a0 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x17ff310 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x17fec60 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x17ff1e0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1893920 + Schema contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x18938b0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1893840 + CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x18990f0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x189b2a0 + struct ldb_dn contains 456 bytes in 20 blocks (ref 0) d=(nil) 0x1893320 + char contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x1c06190 + struct ldb_dn_component contains 288 bytes in 17 blocks (ref 0) d=(nil) 0x189a780 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1e16e00 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x29e6ee0 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1e16d80 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x2868410 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1da5c20 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x22244b0 + CONFIGURATION contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1da5ca0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x31614f0 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1893ed0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189a8b0 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x17fe720 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189af10 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1894010 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x17fee60 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x17fd890 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189b760 + CN=Configuration,DC=samba2000,DC=example,DC=com contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x189b8d0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x189b210 + struct ldb_dn contains 278 bytes in 9 blocks (ref 0) d=(nil) 0x189b040 + struct ldb_dn_component contains 175 bytes in 7 blocks (ref 0) d=(nil) 0x1894090 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x18941d0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1893590 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x17fe3d0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x17ff410 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18932a0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18936a0 + DC=samba2000,DC=example,DC=com contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x189b180 + ldb_module: resolve_oids contains 65 bytes in 2 blocks (ref 0) d=(nil) 0x189a080 + .name contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x189a120 + ldb_module: rootdse contains 1895 bytes in 80 blocks (ref 0) d=(nil) 0x1899fe0 + struct private_data contains 1835 bytes in 78 blocks (ref 0) d=(nil) 0x1894350 + struct ldb_dn * contains 1227 bytes in 58 blocks (ref 0) d=(nil) 0x1963290 + struct ldb_dn contains 486 bytes in 23 blocks (ref 0) d=(nil) 0x1963910 + CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x1922660 + struct ldb_dn_component contains 356 bytes in 21 blocks (ref 0) d=(nil) 0x1963320 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19225f0 + uint8_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1922580 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1921890 + uint8_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1921820 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19217b0 + uint8_t contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1921730 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1923030 + uint8_t contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1922fb0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1922f40 + uint8_t contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1922260 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19221f0 + uint8_t contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1922170 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189edb0 + uint8_t contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1964500 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189ed40 + uint8_t contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1896490 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189ecd0 + uint8_t contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x18a3b00 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1963bc0 + uint8_t contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1922370 + struct ldb_dn contains 408 bytes in 19 blocks (ref 0) d=(nil) 0x189c420 + CN=Configuration,DC=samba2000,DC=example,DC=com contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x18a3a60 + struct ldb_dn_component contains 288 bytes in 17 blocks (ref 0) d=(nil) 0x1896d50 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18a39f0 + uint8_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1897450 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18973e0 + uint8_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1897220 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18971b0 + uint8_t contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1897740 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189e9a0 + uint8_t contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18976c0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18975e0 + uint8_t contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x189e920 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1897570 + uint8_t contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1921340 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189e680 + uint8_t contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x189dd00 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1921640 + uint8_t contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1921d40 + struct ldb_dn contains 309 bytes in 15 blocks (ref 0) d=(nil) 0x1896510 + DC=samba2000,DC=example,DC=com contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1895c90 + struct ldb_dn_component contains 206 bytes in 13 blocks (ref 0) d=(nil) 0x1895d20 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189e610 + uint8_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x189e5a0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189db70 + uint8_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x189db00 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189da90 + uint8_t contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189eb80 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189eb10 + uint8_t contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189e450 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189e3e0 + uint8_t contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x189f220 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189f0c0 + uint8_t contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x189f1a0 + char * contains 568 bytes in 19 blocks (ref 0) d=(nil) 0x1921240 + 1.2.840.113556.1.4.1341 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x189bd10 + 1.2.840.113556.1.4.1413 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18e5d10 + 1.2.840.113556.1.4.1340 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1922710 + 1.2.840.113556.1.4.1339 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x189bfc0 + 1.2.840.113556.1.4.1413 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1922810 + 1.2.840.113556.1.4.1413 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18959b0 + 1.2.840.113556.1.4.1413 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x189ea10 + 1.2.840.113556.1.4.2064 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x189ad60 + 1.2.840.113556.1.4.417 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x189b550 + 1.2.840.113556.1.4.529 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18942d0 + 1.2.840.113556.1.4.1338 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x17ff480 + 1.2.840.113556.1.4.805 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x189b3c0 + 1.2.840.113556.1.4.801 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x189ac60 + 1.2.840.113556.1.4.801 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x189ab50 + 1.2.840.113556.1.4.1504 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x17fe5d0 + 1.2.840.113556.1.4.473 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1894e80 + 1.2.840.113556.1.4.319 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x189aad0 + 1.2.840.113556.1.4.841 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x189a930 + .name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1894a80 + ldb_module: schema_load contains 88 bytes in 5 blocks (ref 0) d=(nil) 0x1895020 + struct schema_load_private_data contains 24 bytes in 3 blocks (ref 0) d=(nil) 0x189ae10 + struct tdb_wrap contains 8 bytes in 2 blocks (ref 0) d=(nil) 0x196a560 + reference to: struct tdb_wrap_private + .name contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18950c0 + ldb_module: lazy_commit contains 64 bytes in 2 blocks (ref 0) d=(nil) 0x1898f80 + .name contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1894f90 + ldb_module: dirsync contains 60 bytes in 2 blocks (ref 0) d=(nil) 0x1898ee0 + .name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1893d10 + ldb_module: paged_results contains 82 bytes in 3 blocks (ref 0) d=(nil) 0x1895200 + struct private_data contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x189aa50 + .name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18952a0 + ldb_module: ranged_results contains 67 bytes in 2 blocks (ref 0) d=(nil) 0x1894ba0 + .name contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1841620 + ldb_module: anr contains 56 bytes in 2 blocks (ref 0) d=(nil) 0x1899f40 + .name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1894950 + ldb_module: server_sort contains 64 bytes in 2 blocks (ref 0) d=(nil) 0x1899e10 + .name contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1899eb0 + ldb_module: asq contains 56 bytes in 2 blocks (ref 0) d=(nil) 0x1899d70 + .name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18948d0 + ldb_module: extended_dn_store contains 70 bytes in 2 blocks (ref 0) d=(nil) 0x1899c40 + .name contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1899ce0 + ldb_module: extended_dn_in contains 67 bytes in 2 blocks (ref 0) d=(nil) 0x1899b10 + .name contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1899bb0 + ldb_module: objectclass contains 64 bytes in 2 blocks (ref 0) d=(nil) 0x18999e0 + .name contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1899a80 + ldb_module: descriptor contains 63 bytes in 2 blocks (ref 0) d=(nil) 0x1899940 + .name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18933e0 + ldb_module: acl contains 520 bytes in 22 blocks (ref 0) d=(nil) 0x18998a0 + struct acl_private contains 464 bytes in 20 blocks (ref 0) d=(nil) 0x189a9b0 + const char * contains 416 bytes in 19 blocks (ref 0) d=(nil) 0x189bc00 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x189cc70 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x189cbf0 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x189cb70 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x189caf0 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x189ca70 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x189c9f0 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18944f0 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x189c970 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x189c8f0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x189c870 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189c7f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189c770 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x189c6f0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x189c670 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18947a0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1894720 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1894470 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x189b850 + .name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1893d90 + ldb_module: aclread contains 61 bytes in 3 blocks (ref 0) d=(nil) 0x1899800 + struct aclread_private contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1893520 + .name contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1893710 + ldb_module: samldb contains 59 bytes in 2 blocks (ref 0) d=(nil) 0x1899760 + .name contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x17fe4d0 + ldb_module: password_hash contains 66 bytes in 2 blocks (ref 0) d=(nil) 0x1899630 + .name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18996d0 + ldb_module: operational contains 72 bytes in 3 blocks (ref 0) d=(nil) 0x1899500 + struct operational_data contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189c260 + .name contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18995a0 + ldb_module: instancetype contains 65 bytes in 2 blocks (ref 0) d=(nil) 0x18993d0 + .name contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1899470 + ldb_module: objectclass_attrs contains 70 bytes in 2 blocks (ref 0) d=(nil) 0x18992a0 + .name contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1899340 + ldb_module: rdn_name contains 61 bytes in 2 blocks (ref 0) d=(nil) 0x1893c70 + .name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x17fdd70 + ldb_module: subtree_delete contains 67 bytes in 2 blocks (ref 0) d=(nil) 0x1893b40 + .name contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1893be0 + ldb_module: repl_meta_data contains 107 bytes in 3 blocks (ref 0) d=(nil) 0x1893600 + struct replmd_private contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x189a5b0 + .name contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1893ab0 + ldb_module: subtree_rename contains 67 bytes in 2 blocks (ref 0) d=(nil) 0x17fe660 + .name contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1893460 + ldb_module: linked_attributes contains 70 bytes in 2 blocks (ref 0) d=(nil) 0x1841710 + .name contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1895170 + ldb_module: extended_dn_out_ldb contains 97 bytes in 4 blocks (ref 0) d=(nil) 0x17feed0 + struct extended_dn_out_private contains 25 bytes in 2 blocks (ref 0) d=(nil) 0x189abd0 + struct dsdb_extended_dn_store_format contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x1893a40 + .name contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x1894f00 + ldb_module: show_deleted contains 67 bytes in 3 blocks (ref 0) d=(nil) 0x1894b00 + struct show_deleted_state contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1893fa0 + .name contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1894df0 + ldb_module: new_partition contains 66 bytes in 2 blocks (ref 0) d=(nil) 0x1893990 + .name contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1894d60 + ldb_module: partition contains 110216 bytes in 4014 blocks (ref 0) d=(nil) 0x1899050 + struct partition_private_data contains 110154 bytes in 4012 blocks (ref 0) d=(nil) 0x1894820 + struct partition_metadata contains 117 bytes in 4 blocks (ref 0) d=(nil) 0x189c050 + struct tdb_wrap contains 101 bytes in 3 blocks (ref 0) d=(nil) 0x189ae90 + struct tdb_wrap_private contains 93 bytes in 2 blocks (ref 1) d=0x2af279e7ff20 0x189cf10 + /home/rusty/samba/st/fl2000dc/private/sam.ldb.d/metadata.tdb contains 61 bytes in 1 blocks (ref 0) d=(nil) 0x1921190 + struct dsdb_partition * contains 109106 bytes in 3970 blocks (ref 0) d=(nil) 0x1896cc0 + struct dsdb_partition contains 52516 bytes in 1919 blocks (ref 0) d=(nil) 0x189ee40 + ../lib/ldb/common/ldb_pack.c:264 contains 130 bytes in 1 blocks (ref 0) d=(nil) 0x189d5b0 + partition_next contains 622 bytes in 19 blocks (ref 0) d=(nil) 0x1922e90 + ldb_module: schema_data contains 582 bytes in 18 blocks (ref 0) d=(nil) 0x1922ba0 + struct schema_data_private_data contains 518 bytes in 16 blocks (ref 0) d=(nil) 0x1896690 + struct ldb_dn contains 502 bytes in 15 blocks (ref 0) d=(nil) 0x19277f0 + CN=Aggregate,CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 71 bytes in 1 blocks (ref 0) d=(nil) 0x1922910 + struct ldb_dn_component contains 359 bytes in 13 blocks (ref 0) d=(nil) 0x19223f0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19228a0 + uint8_t contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19222f0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1922e20 + uint8_t contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1922db0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1922d40 + uint8_t contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1922cc0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1922c50 + uint8_t contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1927920 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19278b0 + uint8_t contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1922ae0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1922a70 + uint8_t contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1922a00 + .name contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19220e0 + ldb_tdb backend contains 51046 bytes in 1872 blocks (ref 0) d=(nil) 0x18969f0 + struct ltdb_private contains 51006 bytes in 1871 blocks (ref 0) d=(nil) 0x1896810 + struct ltdb_cache contains 50894 bytes in 1869 blocks (ref 0) d=(nil) 0x1921f30 + struct ldb_message contains 46931 bytes in 1741 blocks (ref 0) d=(nil) 0x1921fc0 + struct ldb_message_element contains 46823 bytes in 1738 blocks (ref 0) d=(nil) 0x1927af0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1962b70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1962bf0 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1962af0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19629f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1962a70 + wWWHomePage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1962970 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1962870 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19628f0 + wbemPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19627f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19626f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1962770 + vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1962680 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1962580 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1962600 + uSNSource contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1962500 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1962400 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1962480 + uSNLastObjRem contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1962380 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1962280 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1962300 + uSNDSALastObjRemoved contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1962200 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1962100 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1962180 + uSNCreated contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1962080 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1961f80 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1962000 + uSNChanged contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1961f00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961e00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961e80 + userWorkstations contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961d80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961c80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961d00 + userSharedFolderOther contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1961c00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961b00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961b80 + userSharedFolder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961a80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961a00 + userPrincipalName contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1961900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961880 + userParameters contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1961780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961700 + userClass contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1961600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961580 + url contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1961490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961410 + uPNSuffixes contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1961310 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961210 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961290 + unstructuredAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1961190 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1961090 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961110 + uniqueIdentifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1961010 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1960f10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1960f90 + uNCName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1960e90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1960d90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1960e10 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1960d20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1960c20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1960ca0 + trustPartner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1960ba0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1960aa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1960b20 + treeName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1960a20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1960920 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19609a0 + transportDLLName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19608a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19607a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1960820 + transportAddressAttribute contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1960710 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1960610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1960690 + title contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x19605a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19604a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1960520 + timeVolChange contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1960420 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1960320 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19603a0 + timeRefresh contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19602a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19601a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1960220 + textEncodedORAddress contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1960120 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1960020 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19600a0 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x195ffa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195fea0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195ff20 + systemPossSuperiors contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x195fe20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195fd20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195fda0 + systemMustContain contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x195fca0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195fba0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195fc20 + systemMayContain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195fb20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195fa20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195faa0 + systemAuxiliaryClass contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x195f9a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195f8a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195f920 + superScopeDescription contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x195f820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195f720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195f7a0 + superiorDNSRoot contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x195f6a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195f5a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195f620 + subClassOf contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x195f520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195f420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195f4a0 + structuralObjectClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x195f3a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195f2a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195f320 + streetAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x195f220 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195f120 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195f1a0 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x195f0b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195efb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195f030 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x195ef40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195ee40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195eec0 + sPNMappings contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x195edc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195ecc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195ed40 + sn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x195ec50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195eb50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195ebd0 + signatureAlgorithms contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x195ead0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195e9d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195ea50 + shortServerName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x195e950 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195e850 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195e8d0 + shellPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x195e7d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195e6d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195e750 + shellContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195e650 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195e550 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195e5d0 + setupCommand contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x195e4d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195e3d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195e450 + servicePrincipalName contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x195e350 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195e250 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195e2d0 + serviceDNSNameType contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x195e1d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195e0d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195e150 + serviceDNSName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x195e050 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195df50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195dfd0 + serviceClassName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195ded0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195ddd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195de50 + serviceBindingInformation contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x195dd40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195dc40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195dcc0 + serverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x195dbc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195dac0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195db40 + scriptPath contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x195da40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195d940 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195d9c0 + sAMAccountName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x195d8c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195d7c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195d840 + rpcNsTransferSyntax contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x195d740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195d640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195d6c0 + rpcNsProfileEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x195d5c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195d4c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195d540 + rpcNsObjectID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x195d440 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195d340 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195d3c0 + rpcNsInterfaceID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195d2c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195d1c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195d240 + rpcNsGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x195d140 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195d040 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195d0c0 + rpcNsCodeset contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x195cfc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195cec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195cf40 + rpcNsBindings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x195ce40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195cd40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195cdc0 + rpcNsAnnotation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x195ccc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195cbc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195cc40 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x195cb40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195ca40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195cac0 + rightsGuid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x195c9c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x195c8c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x195c940 + rIDUsedPool contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x195c840 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x195c740 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x195c7c0 + rIDPreviousAllocationPool contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x195c6b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x195c5b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x195c630 + rIDAvailablePool contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195c530 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x195c430 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x195c4b0 + rIDAllocationPool contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x195c3b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195c2b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195c330 + replicaSource contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x195c230 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195c130 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195c1b0 + remoteStorageGUID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x195c0b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195bfb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195c030 + remoteSource contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x195bf30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195be30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195beb0 + remoteServerName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195bdb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195bcb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195bd30 + rDNAttID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x195bc30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195bb30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195bbb0 + queryPoint contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x195bab0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195b9b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195ba30 + queryFilter contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x195b930 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x195b830 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x195b8b0 + pwdLastSet contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x195b7b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195b6b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195b730 + purportedSearch contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x195b630 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x195b530 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x195b5b0 + proxyLifetime contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x195b4b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195b3b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195b430 + proxyAddresses contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x195b330 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195b230 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195b2b0 + profilePath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x195b1b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x195b0b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x195b130 + privilegeValue contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x195b030 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195af30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195afb0 + privilegeDisplayName contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x195aeb0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x195adb0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x195ae30 + priorSetTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x195ad30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195ac30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195acb0 + printStatus contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x195abb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195aab0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195ab30 + printSpooling contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x195aa30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195a930 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195a9b0 + printShareName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x195a8b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195a7b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195a830 + printSeparatorFile contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x195a730 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195a630 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195a6b0 + printRateUnit contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x195a5b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195a4b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195a530 + printOwner contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x195a430 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195a330 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195a3b0 + printOrientationsSupported contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x195a2a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195a1a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195a220 + printNotify contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x195a120 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x195a020 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x195a0a0 + printNetworkAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1959fa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1959ea0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1959f20 + printMediaSupported contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1959e20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1959d20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1959da0 + printMediaReady contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1959ca0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1959ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1959c20 + printMACAddress contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1959b20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1959a20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1959aa0 + printLanguage contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19599a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19598a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1959920 + printFormName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1959820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1959720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19597a0 + printerName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19596a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19595a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1959620 + printBinNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1959520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1959420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19594a0 + primaryTelexNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19593a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19592a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1959320 + primaryInternationalISDNNumber contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1959210 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1959110 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1959190 + presentationAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1959090 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958f90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1959010 + preferredLanguage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1958f10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958e10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958e90 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1958d90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958c90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958d10 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1958c10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958b10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958b90 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1958a90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958990 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958a10 + possSuperiors contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1958910 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958810 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958890 + possibleInferiors contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1958790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958710 + portName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1958610 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958510 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958590 + pKIExtendedKeyUsage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1958490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958410 + pKIDefaultCSPs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1958310 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958210 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958290 + pKICriticalExtensions contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1958190 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1958090 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1958110 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1958000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1957f00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1957f80 + personalTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1957e80 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1957d80 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1957e00 + pekKeyChangeInterval contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1957d00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1957c00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1957c80 + pager contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1957b90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1957a90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1957b10 + packageName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1957a10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1957910 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1957990 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19578a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19577a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1957820 + otherTelephone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1957720 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1957620 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19576a0 + otherPager contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19575a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19574a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1957520 + otherMobile contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1957420 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1957320 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19573a0 + otherMailbox contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19572a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19571a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1957220 + otherLoginWorkstations contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1957120 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1957020 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19570a0 + otherIpPhone contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1956fa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956ea0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956f20 + otherHomePhone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1956e20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956d20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956da0 + otherFacsimileTelephoneNumber contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1956c90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956b90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956c10 + organizationalStatus contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1956b10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956a10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956a90 + optionDescription contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1956990 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956890 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956910 + operatingSystemVersion contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1956810 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956710 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956790 + operatingSystemServicePack contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1956680 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956580 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956600 + operatingSystemHotfix contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1956500 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956400 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956480 + operatingSystem contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1956380 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956280 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956300 + oEMInformation contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1956200 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1956100 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956180 + objectClasses contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1956080 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1955f80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1956000 + objectClass contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1955f00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1955e00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1955e80 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1955d90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1955c90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1955d10 + notes contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1955c20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1955b20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1955ba0 + networkAddress contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1955aa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19559a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1955a20 + netbootTools contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1955920 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1955820 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19558a0 + netbootSIFFile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19557a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19556a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1955720 + netbootNewMachineNamingPolicy contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1955610 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1955510 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1955590 + netbootMirrorDataFile contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1955490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1955390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1955410 + netbootMachineFilePath contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1955310 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1955210 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1955290 + netbootLocallyInstalledOSes contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1955180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1955080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1955100 + netbootIntelliMirrorOSes contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1954ff0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954ef0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954f70 + netbootInitialization contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1954e70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954d70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954df0 + nETBIOSName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1954cf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954bf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954c70 + name contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1954b80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954a80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954b00 + mustContain contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1954a00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954900 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954980 + msWMI-TargetType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954880 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954800 + msWMI-TargetPath contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954700 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954600 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954680 + msWMI-TargetNameSpace contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1954580 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954480 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954500 + msWMI-TargetClass contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1954400 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954300 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954380 + msWMI-StringValidValues contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1954270 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1954170 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19541f0 + msWMI-StringDefault contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19540f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1953ff0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1954070 + msWMI-SourceOrganization contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1953f60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1953e60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1953ee0 + msWMI-ScopeGuid contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1953de0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1953ce0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1953d60 + msWMI-QueryLanguage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1953c60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1953b60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1953be0 + msWMI-Query contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1953ae0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19539e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1953a60 + msWMI-PropertyName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1953960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1953860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19538e0 + msWMI-Parm4 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19537e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19536e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1953760 + msWMI-Parm3 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1953660 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1953560 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19535e0 + msWMI-Parm2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19534e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19533e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1953460 + msWMI-Parm1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1953360 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1953260 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19532e0 + msWMI-NormalizedClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19531e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19530e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1953160 + msWMI-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1953060 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1952f60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1952fe0 + msWMI-Mof contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1952ee0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1952de0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1952e60 + msWMI-Int8ValidValues contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1952d60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1952c60 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1952ce0 + msWMI-Int8Min contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1952be0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1952ae0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1952b60 + msWMI-Int8Max contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1952a60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1952960 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19529e0 + msWMI-Int8Default contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19528e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19527e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1952860 + msWMI-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1952760 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1952660 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19526e0 + msWMI-CreationDate contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19525e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19524e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1952560 + msWMI-ClassDefinition contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1952460 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1952360 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19523e0 + msWMI-Class contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19522e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19521e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1952260 + msWMI-ChangeDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1952160 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1952060 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19520e0 + msWMI-Author contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1951fe0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1951ee0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1951f60 + msTSWorkDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1951e60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1951d60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1951de0 + msTSProperty02 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1951ce0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1951be0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1951c60 + msTSProperty01 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1951b60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1951a60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1951ae0 + msTSProfilePath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19519e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19518e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1951960 + msTSManagingLS4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1951860 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1951760 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19517e0 + msTSManagingLS3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19516e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19515e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1951660 + msTSManagingLS2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1951560 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1951460 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19514e0 + msTSManagingLS contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19513e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19512e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1951360 + msTSLSProperty02 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1951260 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1951160 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19511e0 + msTSLSProperty01 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19510e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1950fe0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1951060 + msTSLicenseVersion4 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1950f60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1950e60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1950ee0 + msTSLicenseVersion3 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1950de0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1950ce0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1950d60 + msTSLicenseVersion2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1950c60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1950b60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1950be0 + msTSLicenseVersion contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1950ae0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19509e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1950a60 + msTSInitialProgram contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1950960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1950860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19508e0 + msTSHomeDrive contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19507e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19506e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1950760 + msTSHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1950660 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1950560 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19505e0 + msTSEndpointPlugin contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19504e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19503e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1950460 + msTSEndpointData contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1950360 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1950260 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19502e0 + msTPM-OwnerInformation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19501e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19500e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1950160 + msTAPI-uid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1950060 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194ff60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194ffe0 + msTAPI-ProtocolId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x194fee0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194fde0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194fe60 + msTAPI-IpAddress contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194fd60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194fc60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194fce0 + msSFU30SearchContainer contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x194fbe0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194fae0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194fb60 + msSFU30SearchAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x194fa50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194f950 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194f9d0 + msSFU30ResultAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x194f8c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194f7c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194f840 + msSFU30OrderNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x194f740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194f640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194f6c0 + msSFU30MasterServerName contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x194f5b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194f4b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194f530 + msSFU30MapFilter contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194f430 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194f330 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194f3b0 + msSFU30KeyAttributes contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x194f2b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194f1b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194f230 + msSFU30IntraFieldSeparator contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x194f120 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194f020 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194f0a0 + msSFU30FieldSeparator contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x194efa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194eea0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194ef20 + msRRASVendorAttributeEntry contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x194ee10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194ed10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194ed90 + msRRASAttribute contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x194ec90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194eb90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194ec10 + msPKI-Supersede-Templates contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x194eb00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194ea00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194ea80 + msPKI-Site-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x194e980 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194e880 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194e900 + msPKI-RA-Policies contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x194e800 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194e700 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194e780 + msPKI-RA-Application-Policies contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x194e670 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194e570 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194e5f0 + msPKI-OIDLocalizedName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x194e4f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194e3f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194e470 + msPKI-OID-User-Notice contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x194e370 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194e270 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194e2f0 + msPKI-OID-CPS contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x194e1f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194e0f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194e170 + msPKI-Enrollment-Servers contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x194e060 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194df60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194dfe0 + msPKI-Certificate-Policy contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x194ded0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194ddd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194de50 + msPKI-Certificate-Application-Policy contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x194dd40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194dc40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194dcc0 + msPKI-Cert-Template-OID contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x194dbb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194dab0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194db30 + mSMQSiteNameEx contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x194da30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194d930 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194d9b0 + mSMQSiteName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x194d8b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194d7b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194d830 + mSMQQueueNameExt contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194d730 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194d630 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194d6b0 + mSMQLabelEx contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x194d5b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194d4b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194d530 + mSMQLabel contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x194d430 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194d330 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194d3b0 + mSMQCSPName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x194d2b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194d1b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194d230 + mSMQComputerTypeEx contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x194d130 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194d030 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194d0b0 + mSMQComputerType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194cfb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194ceb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194cf30 + msMQ-Recipient-FormatName contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x194ce20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194cd20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194cda0 + MSMQ-MulticastAddress contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x194cca0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194cba0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194cc20 + msiScriptPath contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x194cb20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194ca20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194caa0 + msiScriptName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x194c9a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194c8a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194c920 + msImaging-PSPString contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x194c820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194c720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194c7a0 + msIIS-FTPRoot contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x194c6a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194c5a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194c620 + msIIS-FTPDir contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x194c520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194c420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194c4a0 + msiFileList contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x194c3a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194c2a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194c320 + msieee80211-ID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x194c220 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194c120 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194c1a0 + msFVE-RecoveryPassword contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x194c0a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194bfa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194c020 + msFRS-Topology-Pref contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x194bf20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194be20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194bea0 + msExchLabeledURI contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194bda0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194bca0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194bd20 + msExchHouseIdentifier contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x194bc20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194bb20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194bba0 + msExchAssistantName contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x194baa0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x194b9a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x194ba20 + msDS-USNLastSyncSuccess contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x194b910 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x194b810 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x194b890 + msDS-UserPasswordExpiryTimeComputed contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x194b780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194b680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194b700 + msDS-UpdateScript contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x194b600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194b500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194b580 + msDS-TopQuotaUsage contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x194b480 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194b380 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194b400 + msDS-SPNSuffixes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194b300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194b200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194b280 + msDS-SourceObjectDN contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x194b180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194b080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194b100 + msDS-SiteName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x194b000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194af00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194af80 + msDS-Settings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x194ae80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194ad80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194ae00 + msDS-Security-Group-Extra-Classes contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x194acf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194abf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194ac70 + msDS-ReplValueMetaData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x194ab70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194aa70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194aaf0 + msDS-ReplAttributeMetaData contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x194a9e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194a8e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194a960 + msDS-PromotionSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x194a860 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194a760 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194a7e0 + msDS-PrincipalName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x194a6e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194a5e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194a660 + msDS-PhoneticLastName contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x194a560 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194a460 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194a4e0 + msDS-PhoneticFirstName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x194a3e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194a2e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194a360 + msDS-PhoneticDisplayName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x194a250 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x194a150 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194a1d0 + msDS-PhoneticDepartment contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x194a0c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1949fc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x194a040 + msDS-PhoneticCompanyName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1949f30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1949e30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1949eb0 + msDS-Other-Settings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1949db0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1949cb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1949d30 + msDS-Non-Security-Group-Extra-Classes contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x1949c20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1949b20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1949ba0 + msDS-NCReplOutboundNeighbors contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1949a90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1949990 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1949a10 + msDS-NCReplInboundNeighbors contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1949900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1949800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1949880 + msDS-NCReplCursors contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1949780 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1949680 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1949700 + msDS-MinimumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19495f0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19494f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1949570 + msDS-MaximumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1949460 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1949360 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19493e0 + msDS-LockoutObservationWindow contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19492d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19491d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1949250 + msDS-LockoutDuration contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1949150 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1949050 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19490d0 + msDS-LastSuccessfulInteractiveLogonTime contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1948fb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1948eb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948f30 + msDS-LastKnownRDN contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1948e30 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1948d30 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1948db0 + msDS-LastFailedInteractiveLogonTime contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1948ca0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1948ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948c20 + msDS-FilterContainers contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1948b20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1948a20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948aa0 + msDS-ExternalStore contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19489a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19488a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948920 + msDS-ExternalKey contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1948720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19487a0 + msDS-DnsRootAlias contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19486a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19485a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1948620 + msDS-Cached-Membership-Time-Stamp contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1948510 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1948410 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948490 + msDS-AzScopeName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948390 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1948290 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948310 + msDS-AzLDAPQuery contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948210 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1948110 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948190 + msDS-AzLastImportedBizRulePath contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1948080 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1947f80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1948000 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1947f00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1947e00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1947e80 + msDS-AzClassId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1947d80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1947c80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1947d00 + msDS-AzBizRuleLanguage contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1947c00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1947b00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1947b80 + msDS-AzBizRule contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1947a80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1947980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1947a00 + msDS-AzApplicationVersion contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19478f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19477f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1947870 + msDS-AzApplicationName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1947770 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1947670 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19476f0 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19475f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19474f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1947570 + msDS-Auxiliary-Classes contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1947470 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1947370 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19473f0 + msDS-AllowedToDelegateTo contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19472e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19471e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1947260 + msDS-AllowedDNSSuffixes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1947150 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1947050 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19470d0 + msDS-AdditionalSamAccountName contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1946fc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1946ec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1946f40 + msDS-AdditionalDnsHostName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1946e30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1946d30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1946db0 + msDFSR-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1946cb0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1946bb0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1946c30 + msDFSR-StagingSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1946b30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1946a30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1946ab0 + msDFSR-StagingPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19469b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19468b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1946930 + msDFSR-RootSizeInMb contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1946830 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1946730 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19467b0 + msDFSR-RootPath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19466b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19465b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1946630 + msDFSR-RdcMinFileSizeInKb contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1946520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1946420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19464a0 + msDFSR-OnDemandExclusionFileFilter contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1946390 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1946290 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1946310 + msDFSR-OnDemandExclusionDirectoryFilter contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x19461f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19460f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1946170 + msDFSR-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1946070 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1945f70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1945ff0 + msDFSR-FileFilter contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1945ef0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1945df0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1945e70 + msDFSR-DirectoryFilter contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1945d70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1945c70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1945cf0 + msDFSR-DfsPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1945bf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1945af0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1945b70 + msDFSR-DfsLinkTarget contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1945a70 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1945970 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19459f0 + msDFSR-DeletedSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19458f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19457f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1945870 + msDFSR-DeletedPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1945770 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1945670 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19456f0 + msDFSR-DefaultCompressionExclusionFilter contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x19455d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19454d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1945550 + msDFSR-ConflictSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1945440 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1945340 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19453c0 + msDFSR-ConflictPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19452c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19451c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1945240 + msDFSR-CommonStagingSizeInMb contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1945130 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1945030 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19450b0 + msDFSR-CommonStagingPath contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1944fa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1944ea0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944f20 + msDFS-ShortNameLinkPathv2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1944e10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1944d10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944d90 + msDFS-Propertiesv2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1944c90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1944b90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944c10 + msDFS-LinkPathv2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944b10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1944a10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944a90 + msDFS-Commentv2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1944990 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1944890 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944910 + mS-SQL-Vines contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1944810 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1944710 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944790 + mS-SQL-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1944690 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1944590 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944610 + mS-SQL-Type contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1944510 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1944410 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944490 + mS-SQL-TCPIP contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1944390 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1944290 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1944310 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1944210 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1944110 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944190 + mS-SQL-SPX contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1944090 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1943f90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1944010 + mS-SQL-SortOrder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943f10 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1943e10 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1943e90 + mS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1943d90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1943c90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943d10 + mS-SQL-ServiceAccount contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1943c10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1943b10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943b90 + mS-SQL-RegisteredOwner contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1943a90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1943990 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943a10 + mS-SQL-Publisher contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943910 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1943810 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943890 + mS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1943790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1943690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943710 + mS-SQL-NamedPipe contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943610 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1943510 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943590 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1943490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1943390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943410 + mS-SQL-MultiProtocol contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1943310 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1943210 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1943290 + mS-SQL-Memory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1943190 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1943090 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1943110 + mS-SQL-Location contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1943010 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942f10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942f90 + mS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1942e90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942d90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942e10 + mS-SQL-LastDiagnosticDate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1942d00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942c00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942c80 + mS-SQL-LastBackupDate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1942b80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942a80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942b00 + mS-SQL-Language contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1942a00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942900 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942980 + mS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1942880 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942800 + mS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1942700 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942600 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942680 + mS-SQL-GPSLongitude contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1942580 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942480 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942500 + mS-SQL-GPSLatitude contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1942400 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942300 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942380 + mS-SQL-GPSHeight contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942280 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942180 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942200 + mS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1942100 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1942000 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1942080 + mS-SQL-Database contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1941f80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1941e80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941f00 + mS-SQL-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1941e00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1941d00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941d80 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1941c80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1941b80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941c00 + mS-SQL-ConnectionURL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1941b00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1941a00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941a80 + mS-SQL-Applications contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1941980 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1941880 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941900 + mS-SQL-AppleTalk contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941800 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1941700 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941780 + mS-SQL-Alias contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1941680 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1941580 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941600 + ms-net-ieee-8023-GP-PolicyGUID contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x19414f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19413f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941470 + ms-net-ieee-8023-GP-PolicyData contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1941360 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1941260 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19412e0 + ms-net-ieee-80211-GP-PolicyGUID contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x19411d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19410d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1941150 + ms-net-ieee-80211-GP-PolicyData contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x1941040 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1940f40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1940fc0 + monikerDisplayName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1940ec0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1940dc0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1940e40 + modifiedCountAtLastProm contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1940d30 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1940c30 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1940cb0 + modifiedCount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1940bb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1940ab0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1940b30 + mobile contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1940a40 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1940940 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19409c0 + minTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19408c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19407c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1940840 + minPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1940740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1940640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19406c0 + middleName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19405c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19404c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1940540 + mhsORAddress contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1940440 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1940340 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19403c0 + meetingURL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19402c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19401c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1940240 + meetingType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1940140 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1940040 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19400c0 + meetingScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x193ffc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193fec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193ff40 + meetingRecurrence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x193fe40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193fd40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193fdc0 + meetingRating contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x193fcc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193fbc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193fc40 + meetingProtocol contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x193fb40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193fa40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193fac0 + meetingOwner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x193f9c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193f8c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193f940 + meetingOriginator contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x193f840 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193f740 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193f7c0 + meetingName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x193f6c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193f5c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193f640 + meetingLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x193f540 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193f440 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193f4c0 + meetingLanguage contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x193f3c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193f2c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193f340 + meetingKeyword contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x193f240 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193f140 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193f1c0 + meetingIsEncrypted contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x193f0c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193efc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193f040 + meetingIP contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x193ef40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193ee40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193eec0 + meetingID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x193edc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193ecc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193ed40 + meetingDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x193ec40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193eb40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193ebc0 + meetingContactInfo contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x193eac0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193e9c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193ea40 + meetingApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x193e940 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193e840 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193e8c0 + meetingAdvertiseScope contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x193e7c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193e6c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193e740 + mayContain contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x193e640 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193e540 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193e5c0 + maxTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x193e4c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193e3c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193e440 + maxStorage contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x193e340 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193e240 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193e2c0 + maxRenewAge contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x193e1c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193e0c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193e140 + maxPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x193e040 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193df40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193dfc0 + mailAddress contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x193dec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193ddc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193de40 + mail contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x193dd50 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193dc50 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193dcd0 + machinePasswordChangeInterval contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x193dbc0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193dac0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193db40 + lSAModifiedCount contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193da40 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193d940 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193d9c0 + lSACreationTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x193d8c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193d7c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193d840 + lockoutTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x193d740 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193d640 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193d6c0 + lockOutObservationWindow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x193d5b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193d4b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193d530 + lockoutDuration contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x193d430 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193d330 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193d3b0 + location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x193d2b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193d1b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193d230 + localizedDescription contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x193d130 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193d030 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193d0b0 + legacyExchangeDN contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193cfb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193ceb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193cf30 + lDAPDisplayName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x193ce30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193cd30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193cdb0 + lDAPAdminLimits contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x193ccb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193cbb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193cc30 + lastUpdateSequence contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x193cb30 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193ca30 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193cab0 + lastSetTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x193c9b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193c8b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193c930 + lastLogonTimestamp contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x193c830 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193c730 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193c7b0 + lastLogon contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x193c6b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193c5b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193c630 + lastLogoff contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x193c530 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193c430 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193c4b0 + lastContentIndexed contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x193c3b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x193c2b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193c330 + lastBackupRestorationTime contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x193c220 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193c120 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193c1a0 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x193c0a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193bfa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193c020 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x193bf30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193be30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193beb0 + knowledgeInformation contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x193bdb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193bcb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193bd30 + keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x193bc30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193bb30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193bbb0 + iPSECNegotiationPolicyType contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x193baa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193b9a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193ba20 + iPSECNegotiationPolicyAction contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x193b910 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193b810 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193b890 + ipsecName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x193b790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193b690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193b710 + ipsecID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193b610 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193b510 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193b590 + ipPhone contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x193b490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193b390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193b410 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x193b300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193b200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193b280 + initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x193b180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193b080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193b100 + initialAuthOutgoing contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x193b000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193af00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193af80 + initialAuthIncoming contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x193ae80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193ad80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193ae00 + info contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x193ad10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193ac10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193ac90 + indexedScopes contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x193ab90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193aa90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193ab10 + iconPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x193aa10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193a910 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193a990 + houseIdentifier contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x193a890 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193a790 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193a810 + host contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x193a720 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193a620 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193a6a0 + homePostalAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x193a5a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193a4a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193a520 + homePhone contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x193a420 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193a320 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193a3a0 + homeDrive contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x193a2a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193a1a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193a220 + homeDirectory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x193a120 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x193a020 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x193a0a0 + helpFileName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1939fa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1939ea0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1939f20 + groupsToIgnore contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1939e20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1939d20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1939da0 + groupPriority contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1939ca0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1939ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1939c20 + gPLink contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1939b30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1939a30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1939ab0 + gPCWQLFilter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19399b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19398b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1939930 + gPCUserExtensionNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1939830 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1939730 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19397b0 + gPCMachineExtensionNames contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19396a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19395a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1939620 + gPCFileSysPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1939520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1939420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19394a0 + governsID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19393a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19392a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1939320 + givenName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1939220 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1939120 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19391a0 + generationQualifier contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19390a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938fa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1939020 + fRSWorkingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1938f20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938e20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938ea0 + fRSVersion contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1938da0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938ca0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938d20 + fRSStagingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1938c20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938b20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938ba0 + fRSServiceCommandStatus contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1938a90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938990 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938a10 + fRSServiceCommand contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1938910 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938810 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938890 + fRSRootPath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1938790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938710 + fRSFileFilter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1938610 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938510 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938590 + fRSFaultCondition contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1938490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938410 + fRSDirectoryFilter contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1938310 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938210 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938290 + fRSControlOutboundBacklog contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1938180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1938080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1938100 + fRSControlInboundBacklog contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1937ff0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1937ef0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1937f70 + fRSControlDataCreation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1937e70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1937d70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1937df0 + friendlyNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1937cf0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1937bf0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1937c70 + forceLogoff contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1937b70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1937a70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1937af0 + flatName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19379f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19378f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1937970 + fileExtPriority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1937870 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1937770 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19377f0 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19376e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19375e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1937660 + extraColumns contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1937560 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1937460 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19374e0 + extensionName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19373e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19372e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1937360 + extendedClassInfo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1937260 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1937160 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19371e0 + extendedAttributeInfo contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19370e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1936fe0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1937060 + enrollmentProviders contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1936f60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1936e60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1936ee0 + employeeType contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1936de0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1936ce0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1936d60 + employeeNumber contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1936c60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1936b60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1936be0 + employeeID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1936ae0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19369e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1936a60 + dSUIAdminNotification contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1936960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1936860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19368e0 + dSHeuristics contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19367e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19366e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1936760 + driverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1936660 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1936560 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19365e0 + drink contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x19364f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19363f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1936470 + domainReplica contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1936370 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1936270 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19362f0 + documentVersion contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19361f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19360f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1936170 + documentTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1936070 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1935f70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1935ff0 + documentPublisher contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1935ef0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1935df0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1935e70 + documentLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1935d70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1935c70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1935cf0 + documentIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1935bf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1935af0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1935b70 + dnsRoot contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1935a70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1935970 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19359f0 + dNSHostName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19358f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19357f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1935870 + dmdName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1935770 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1935670 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19356f0 + division contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19355f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19354f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1935570 + dITContentRules contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1935470 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1935370 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19353f0 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19352f0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19351f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1935270 + dhcpUpdateTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1935170 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1935070 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19350f0 + dhcpUniqueKey contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1934ff0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1934ef0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1934f70 + dhcpObjName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1934e70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1934d70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1934df0 + dhcpObjDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1934cf0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1934bf0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1934c70 + dhcpMaxKey contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1934b70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1934a70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1934af0 + dhcpIdentification contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19349f0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19348f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1934970 + dhcpFlags contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1934870 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1934770 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19347f0 + desktopProfile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19346f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19345f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1934670 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1934570 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1934470 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19344f0 + departmentNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19343f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19342f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1934370 + department contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1934270 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1934170 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19341f0 + defaultSecurityDescriptor contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x19340e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1933fe0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1934060 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1933f70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1933e70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1933ef0 + creator contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1933df0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1933cf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1933d70 + creationWizard contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1933c70 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1933b70 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1933bf0 + creationTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1933af0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19339f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1933a70 + createWizardExt contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1933970 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1933870 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19338f0 + createDialog contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19337f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19336f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1933770 + contextMenu contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1933670 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1933570 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19335f0 + cOMUniqueLIBID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19334f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19333f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1933470 + cOMTypelibId contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1933370 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1933270 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19332f0 + cOMTreatAsClassId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19331f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19330f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1933170 + cOMProgID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1933070 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932f70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932ff0 + company contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1932ef0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932df0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932e70 + cOMOtherProgId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1932d70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932c70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932cf0 + comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1932bf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932af0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932b70 + cOMInterfaceID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1932a70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932970 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19329f0 + cOMCLSID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19328f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19327f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932870 + cOMClassID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1932770 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932670 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19326f0 + co contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1932600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932580 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1932490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932410 + classDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932310 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932210 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932290 + certificateTemplates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1932190 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1932090 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1932110 + cAWEBURL contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1932010 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1931f10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931f90 + cAUsages contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1931e90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1931d90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931e10 + categories contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1931d10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1931c10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931c90 + catalogs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1931b90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1931a90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931b10 + carLicense contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1931a10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1931910 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931990 + canUpgradeScript contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931890 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1931790 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931810 + canonicalName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1931710 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1931610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931690 + cAConnect contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1931590 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1931490 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931510 + cACertificateDN contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1931410 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1931310 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931390 + c contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x19312a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19311a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931220 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1931120 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1931020 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19310a0 + builtinModifiedCount contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1930fa0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1930ea0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1930f20 + builtinCreationTime contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1930e20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1930d20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1930da0 + buildingName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1930ca0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1930ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1930c20 + badPasswordTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1930b20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1930a20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1930aa0 + auxiliaryClass contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19309a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19308a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1930920 + attributeTypes contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1930820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1930720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19307a0 + attributeSyntax contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19306a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19305a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1930620 + attributeID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1930520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1930420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19304a0 + attributeDisplayNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19303a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19302a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1930320 + assetNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1930220 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1930120 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19301a0 + appliesTo contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x19300a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192ffa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1930020 + applicationName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x192ff20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192fe20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192fea0 + aNR contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x192fdb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192fcb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192fd30 + altSecurityIdentities contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x192fc30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192fb30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192fbb0 + allowedChildClassesEffective contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x192faa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192f9a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192fa20 + allowedChildClasses contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x192f920 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192f820 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192f8a0 + allowedAttributesEffective contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x192f790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192f690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192f710 + allowedAttributes contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x192f610 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192f510 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192f590 + adminPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x192f490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192f390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192f410 + adminMultiselectPropertyPages contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x192f300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192f200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192f280 + adminDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192f180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192f080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192f100 + adminDescription contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192f000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192ef00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192ef80 + adminContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192ee80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192ed80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192ee00 + addressType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x192ed00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192ec00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192ec80 + additionalTrustedServiceNames contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x192eb70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192ea70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192eaf0 + aCSTimeOfDay contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x192e9f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192e8f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192e970 + aCSServerList contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x192e870 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192e770 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192e7f0 + aCSRSVPLogFilesLocation contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x192e6e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192e5e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192e660 + aCSRSVPAccountFilesLocation contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x192e550 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192e450 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192e4d0 + aCSPolicyName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x192e3d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192e2d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192e350 + aCSPermissionBits contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x192e250 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192e150 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192e1d0 + aCSNonReservedTxSize contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x192e0d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192dfd0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192e050 + aCSNonReservedTxLimit contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x192df50 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192de50 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192ded0 + aCSNonReservedTokenSize contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x192ddc0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192dcc0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192dd40 + aCSNonReservedPeakRate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x192dc40 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192db40 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192dbc0 + aCSNonReservedMinPolicedSize contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x192dab0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192d9b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192da30 + aCSNonReservedMaxSDUSize contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x192d920 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192d820 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192d8a0 + aCSMinimumPolicedSize contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x192d7a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192d6a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192d720 + aCSMinimumLatency contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x192d620 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192d520 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192d5a0 + aCSMinimumDelayVariation contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x192d490 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192d390 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192d410 + aCSMaxTokenRatePerFlow contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x192d310 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192d210 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192d290 + aCSMaxTokenBucketPerFlow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x192d180 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192d080 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192d100 + aCSMaxPeakBandwidthPerFlow contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x192cff0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192cef0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192cf70 + aCSMaxPeakBandwidth contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x192ce70 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192cd70 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192cdf0 + aCSMaximumSDUSize contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x192ccf0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192cbf0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192cc70 + aCSMaxAggregatePeakRatePerUser contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x192cb60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192ca60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192cae0 + aCSIdentityName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x192c9e0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192c8e0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192c960 + aCSAllocableRSVPBandwidth contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x192c850 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192c750 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192c7d0 + aCSAggregateTokenRatePerUser contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x192c6c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x192c5c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x192c640 + accountNameHistory contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x192c540 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x192c440 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x192c4c0 + accountExpires contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x192c3c0 + struct ldb_dn contains 84 bytes in 2 blocks (ref 0) d=(nil) 0x19279b0 + @ATTRIBUTES contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1927a70 + struct ldb_message contains 3939 bytes in 127 blocks (ref 0) d=(nil) 0x1922050 + struct ldb_message_element contains 3832 bytes in 124 blocks (ref 0) d=(nil) 0x1923230 + struct ldb_val contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x1927700 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1927780 + @IDXVERSION contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1927680 + struct ldb_val contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x1927590 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1927610 + @IDXONE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1927510 + struct ldb_val contains 3671 bytes in 116 blocks (ref 0) d=(nil) 0x1923380 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1927490 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1927410 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1927390 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1927320 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19272a0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1927220 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19271a0 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1927120 + ../lib/ldb/common/ldb_pack.c:264 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x19270b0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1927030 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1926fb0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1926f30 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1926eb0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1926e30 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1926db0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1926d30 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1926cb0 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1926c30 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1926bb0 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1926b30 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1926ab0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1926a30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19269b0 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1926940 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x19268c0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1926840 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19267b0 + ../lib/ldb/common/ldb_pack.c:264 contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1926720 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x19266a0 + ../lib/ldb/common/ldb_pack.c:264 contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1926610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1926590 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1926510 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1926490 + ../lib/ldb/common/ldb_pack.c:264 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1926400 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1926370 + ../lib/ldb/common/ldb_pack.c:264 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19262e0 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1926260 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19261e0 + ../lib/ldb/common/ldb_pack.c:264 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1926150 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19260d0 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1926050 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1925fd0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1925f50 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1925ed0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1925e50 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1925dd0 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1925d50 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1925cc0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1925c40 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1925bb0 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1925b20 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1925aa0 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1925a20 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19259a0 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1925910 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1925880 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1925800 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1925780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1925700 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1925680 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1925600 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1925580 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1925500 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1925480 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1925400 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1925380 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1925300 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1925280 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1925200 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1925180 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1925100 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1925080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1925000 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1924f80 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1924f00 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1924e80 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1924e00 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1924d80 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1924d00 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1924c80 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1924c00 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1924b80 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1924b00 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1924a80 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1924a00 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1924980 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1924910 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1924890 + ../lib/ldb/common/ldb_pack.c:264 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1924800 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1924780 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1924700 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1924680 + ../lib/ldb/common/ldb_pack.c:264 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1924610 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1924590 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1924510 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1924490 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1924410 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1924390 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1924310 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1924290 + ../lib/ldb/common/ldb_pack.c:264 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1924210 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1924190 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1924110 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19240a0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1924020 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1923fa0 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1923f20 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1923ea0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1923e20 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1923da0 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1923d20 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1923ca0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1923c20 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1923ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1923b20 + @IDXATTR contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1923300 + struct ldb_dn contains 83 bytes in 2 blocks (ref 0) d=(nil) 0x19230f0 + @INDEXLIST contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19231b0 + struct ltdb_wrap contains 40 bytes in 1 blocks (ref 0) d=0x2af290dc12e8 0x18968d0 + /home/rusty/samba/st/fl2000dc/private/sam.ldb.d/CN=SCHEMA,CN=CONFIGURATION,DC=SAMBA2000,DC=EXAMPLE,DC=COM.ldb contains 110 bytes in 1 blocks (ref 0) d=(nil) 0x1896730 + struct dsdb_control_current_partition contains 560 bytes in 25 blocks (ref 0) d=(nil) 0x189eee0 + struct ldb_dn contains 544 bytes in 24 blocks (ref 0) d=(nil) 0x19640c0 + char contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x19675f0 + struct ldb_dn_component contains 356 bytes in 21 blocks (ref 0) d=(nil) 0x1963f20 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1963890 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1963e30 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1963ea0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1963d40 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1963db0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1963c50 + CONFIGURATION contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1963500 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1963b50 + SCHEMA contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1963cc0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1963590 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1963a60 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19639f0 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1963ad0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1963490 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1963810 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19637a0 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1963720 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19636b0 + Schema contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1963640 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19227a0 + CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x1964180 + struct dsdb_partition contains 51816 bytes in 1897 blocks (ref 0) d=(nil) 0x1896a90 + ../lib/ldb/common/ldb_pack.c:264 contains 110 bytes in 1 blocks (ref 0) d=(nil) 0x189d4d0 + partition_next contains 51086 bytes in 1873 blocks (ref 0) d=(nil) 0x1896e80 + ldb_tdb backend contains 51046 bytes in 1872 blocks (ref 0) d=(nil) 0x1895760 + struct ltdb_private contains 51006 bytes in 1871 blocks (ref 0) d=(nil) 0x1895530 + struct ltdb_cache contains 50894 bytes in 1869 blocks (ref 0) d=(nil) 0x1895800 + struct ldb_message contains 46931 bytes in 1741 blocks (ref 0) d=(nil) 0x1895890 + struct ldb_message_element contains 46823 bytes in 1738 blocks (ref 0) d=(nil) 0x18e6010 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1921090 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1921110 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1921010 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1920f10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1920f90 + wWWHomePage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1920e90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1920d90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1920e10 + wbemPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1920d10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1920c10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1920c90 + vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1920ba0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1920aa0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1920b20 + uSNSource contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1920a20 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1920920 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19209a0 + uSNLastObjRem contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19208a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19207a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1920820 + uSNDSALastObjRemoved contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1920720 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1920620 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19206a0 + uSNCreated contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19205a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19204a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1920520 + uSNChanged contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1920420 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1920320 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19203a0 + userWorkstations contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19202a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19201a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1920220 + userSharedFolderOther contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1920120 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1920020 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19200a0 + userSharedFolder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191ffa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191fea0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191ff20 + userPrincipalName contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x191fe20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191fd20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191fda0 + userParameters contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x191fca0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191fba0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191fc20 + userClass contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x191fb20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191fa20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191faa0 + url contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x191f9b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191f8b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191f930 + uPNSuffixes contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x191f830 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191f730 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191f7b0 + unstructuredAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x191f6b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191f5b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191f630 + uniqueIdentifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191f530 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191f430 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191f4b0 + uNCName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x191f3b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191f2b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191f330 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x191f240 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191f140 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191f1c0 + trustPartner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x191f0c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191efc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191f040 + treeName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x191ef40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191ee40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191eec0 + transportDLLName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191edc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191ecc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191ed40 + transportAddressAttribute contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x191ec30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191eb30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191ebb0 + title contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x191eac0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x191e9c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x191ea40 + timeVolChange contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x191e940 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x191e840 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x191e8c0 + timeRefresh contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x191e7c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191e6c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191e740 + textEncodedORAddress contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x191e640 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191e540 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191e5c0 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x191e4c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191e3c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191e440 + systemPossSuperiors contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x191e340 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191e240 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191e2c0 + systemMustContain contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x191e1c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191e0c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191e140 + systemMayContain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191e040 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191df40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191dfc0 + systemAuxiliaryClass contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x191dec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191ddc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191de40 + superScopeDescription contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x191dd40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191dc40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191dcc0 + superiorDNSRoot contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x191dbc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191dac0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191db40 + subClassOf contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x191da40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191d940 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191d9c0 + structuralObjectClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x191d8c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191d7c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191d840 + streetAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x191d740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191d640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191d6c0 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x191d5d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191d4d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191d550 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x191d460 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191d360 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191d3e0 + sPNMappings contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x191d2e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191d1e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191d260 + sn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x191d170 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191d070 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191d0f0 + signatureAlgorithms contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x191cff0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191cef0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191cf70 + shortServerName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x191ce70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191cd70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191cdf0 + shellPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x191ccf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191cbf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191cc70 + shellContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191cb70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191ca70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191caf0 + setupCommand contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x191c9f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191c8f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191c970 + servicePrincipalName contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x191c870 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191c770 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191c7f0 + serviceDNSNameType contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x191c6f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191c5f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191c670 + serviceDNSName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x191c570 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191c470 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191c4f0 + serviceClassName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191c3f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191c2f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191c370 + serviceBindingInformation contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x191c260 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191c160 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191c1e0 + serverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x191c0e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191bfe0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191c060 + scriptPath contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x191bf60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191be60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191bee0 + sAMAccountName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x191bde0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191bce0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191bd60 + rpcNsTransferSyntax contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x191bc60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191bb60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191bbe0 + rpcNsProfileEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x191bae0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191b9e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191ba60 + rpcNsObjectID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x191b960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191b860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191b8e0 + rpcNsInterfaceID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191b7e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191b6e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191b760 + rpcNsGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x191b660 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191b560 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191b5e0 + rpcNsCodeset contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x191b4e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191b3e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191b460 + rpcNsBindings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x191b360 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191b260 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191b2e0 + rpcNsAnnotation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x191b1e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191b0e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191b160 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x191b060 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191af60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191afe0 + rightsGuid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x191aee0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x191ade0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x191ae60 + rIDUsedPool contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x191ad60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x191ac60 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x191ace0 + rIDPreviousAllocationPool contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x191abd0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x191aad0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x191ab50 + rIDAvailablePool contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191aa50 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x191a950 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x191a9d0 + rIDAllocationPool contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x191a8d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191a7d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191a850 + replicaSource contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x191a750 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191a650 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191a6d0 + remoteStorageGUID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x191a5d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191a4d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191a550 + remoteSource contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x191a450 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191a350 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191a3d0 + remoteServerName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191a2d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191a1d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191a250 + rDNAttID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x191a150 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x191a050 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x191a0d0 + queryPoint contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1919fd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1919ed0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1919f50 + queryFilter contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1919e50 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1919d50 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1919dd0 + pwdLastSet contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1919cd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1919bd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1919c50 + purportedSearch contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1919b50 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1919a50 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1919ad0 + proxyLifetime contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19199d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19198d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1919950 + proxyAddresses contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1919850 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1919750 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19197d0 + profilePath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19196d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19195d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1919650 + privilegeValue contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1919550 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1919450 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19194d0 + privilegeDisplayName contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x19193d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19192d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1919350 + priorSetTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1919250 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1919150 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19191d0 + printStatus contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19190d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1918fd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1919050 + printSpooling contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1918f50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1918e50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1918ed0 + printShareName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1918dd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1918cd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1918d50 + printSeparatorFile contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1918c50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1918b50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1918bd0 + printRateUnit contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1918ad0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19189d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1918a50 + printOwner contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1918950 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1918850 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19188d0 + printOrientationsSupported contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x19187c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19186c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1918740 + printNotify contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1918640 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1918540 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19185c0 + printNetworkAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19184c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19183c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1918440 + printMediaSupported contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1918340 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1918240 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19182c0 + printMediaReady contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19181c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19180c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1918140 + printMACAddress contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1918040 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1917f40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1917fc0 + printLanguage contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1917ec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1917dc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1917e40 + printFormName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1917d40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1917c40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1917cc0 + printerName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1917bc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1917ac0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1917b40 + printBinNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1917a40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1917940 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19179c0 + primaryTelexNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19178c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19177c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1917840 + primaryInternationalISDNNumber contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1917730 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1917630 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19176b0 + presentationAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19175b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19174b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1917530 + preferredLanguage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1917430 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1917330 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19173b0 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19172b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19171b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1917230 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1917130 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1917030 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19170b0 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1916fb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1916eb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1916f30 + possSuperiors contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1916e30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1916d30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1916db0 + possibleInferiors contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1916cb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1916bb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1916c30 + portName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1916b30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1916a30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1916ab0 + pKIExtendedKeyUsage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19169b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19168b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1916930 + pKIDefaultCSPs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1916830 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1916730 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19167b0 + pKICriticalExtensions contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19166b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19165b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1916630 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1916520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1916420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19164a0 + personalTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19163a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19162a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1916320 + pekKeyChangeInterval contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1916220 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1916120 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19161a0 + pager contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x19160b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1915fb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1916030 + packageName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1915f30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1915e30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1915eb0 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1915dc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1915cc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1915d40 + otherTelephone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1915c40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1915b40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1915bc0 + otherPager contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1915ac0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19159c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1915a40 + otherMobile contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1915940 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1915840 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19158c0 + otherMailbox contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19157c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19156c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1915740 + otherLoginWorkstations contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1915640 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1915540 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19155c0 + otherIpPhone contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19154c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19153c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1915440 + otherHomePhone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1915340 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1915240 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19152c0 + otherFacsimileTelephoneNumber contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19151b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19150b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1915130 + organizationalStatus contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1915030 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1914f30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1914fb0 + optionDescription contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1914eb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1914db0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1914e30 + operatingSystemVersion contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1914d30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1914c30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1914cb0 + operatingSystemServicePack contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1914ba0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1914aa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1914b20 + operatingSystemHotfix contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1914a20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1914920 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19149a0 + operatingSystem contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19148a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19147a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1914820 + oEMInformation contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1914720 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1914620 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19146a0 + objectClasses contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19145a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19144a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1914520 + objectClass contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1914420 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1914320 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19143a0 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x19142b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19141b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1914230 + notes contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1914140 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1914040 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19140c0 + networkAddress contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1913fc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1913ec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913f40 + netbootTools contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1913e40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1913d40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913dc0 + netbootSIFFile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1913cc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1913bc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913c40 + netbootNewMachineNamingPolicy contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1913b30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1913a30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913ab0 + netbootMirrorDataFile contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19139b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19138b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913930 + netbootMachineFilePath contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1913830 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1913730 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19137b0 + netbootLocallyInstalledOSes contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x19136a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19135a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913620 + netbootIntelliMirrorOSes contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1913510 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1913410 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913490 + netbootInitialization contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1913390 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1913290 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913310 + nETBIOSName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1913210 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1913110 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913190 + name contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x19130a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912fa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1913020 + mustContain contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1912f20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912e20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912ea0 + msWMI-TargetType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912da0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912ca0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912d20 + msWMI-TargetPath contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912c20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912b20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912ba0 + msWMI-TargetNameSpace contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1912aa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19129a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912a20 + msWMI-TargetClass contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1912920 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912820 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19128a0 + msWMI-StringValidValues contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1912790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912710 + msWMI-StringDefault contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1912610 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912510 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912590 + msWMI-SourceOrganization contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1912480 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912380 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912400 + msWMI-ScopeGuid contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1912300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912280 + msWMI-QueryLanguage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1912180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1912080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1912100 + msWMI-Query contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1912000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1911f00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1911f80 + msWMI-PropertyName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1911e80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1911d80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1911e00 + msWMI-Parm4 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1911d00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1911c00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1911c80 + msWMI-Parm3 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1911b80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1911a80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1911b00 + msWMI-Parm2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1911a00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1911900 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1911980 + msWMI-Parm1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1911880 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1911780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1911800 + msWMI-NormalizedClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1911700 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1911600 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1911680 + msWMI-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1911580 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1911480 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1911500 + msWMI-Mof contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1911400 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1911300 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1911380 + msWMI-Int8ValidValues contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1911280 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1911180 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1911200 + msWMI-Int8Min contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1911100 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1911000 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1911080 + msWMI-Int8Max contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1910f80 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1910e80 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1910f00 + msWMI-Int8Default contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1910e00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1910d00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910d80 + msWMI-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1910c80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1910b80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910c00 + msWMI-CreationDate contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1910b00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1910a00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910a80 + msWMI-ClassDefinition contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1910980 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1910880 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910900 + msWMI-Class contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1910800 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1910700 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910780 + msWMI-ChangeDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910680 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1910580 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910600 + msWMI-Author contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1910500 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1910400 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910480 + msTSWorkDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1910380 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1910280 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910300 + msTSProperty02 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1910200 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1910100 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910180 + msTSProperty01 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1910080 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190ff80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1910000 + msTSProfilePath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x190ff00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190fe00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190fe80 + msTSManagingLS4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x190fd80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190fc80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190fd00 + msTSManagingLS3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x190fc00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190fb00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190fb80 + msTSManagingLS2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x190fa80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190f980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190fa00 + msTSManagingLS contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x190f900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190f800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190f880 + msTSLSProperty02 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190f780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190f680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190f700 + msTSLSProperty01 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190f600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190f500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190f580 + msTSLicenseVersion4 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x190f480 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190f380 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190f400 + msTSLicenseVersion3 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x190f300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190f200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190f280 + msTSLicenseVersion2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x190f180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190f080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190f100 + msTSLicenseVersion contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x190f000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190ef00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190ef80 + msTSInitialProgram contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x190ee80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190ed80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190ee00 + msTSHomeDrive contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x190ed00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190ec00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190ec80 + msTSHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x190eb80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190ea80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190eb00 + msTSEndpointPlugin contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x190ea00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190e900 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190e980 + msTSEndpointData contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190e880 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190e780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190e800 + msTPM-OwnerInformation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x190e700 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190e600 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190e680 + msTAPI-uid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x190e580 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190e480 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190e500 + msTAPI-ProtocolId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x190e400 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190e300 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190e380 + msTAPI-IpAddress contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190e280 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190e180 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190e200 + msSFU30SearchContainer contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x190e100 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190e000 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190e080 + msSFU30SearchAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x190df70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190de70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190def0 + msSFU30ResultAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x190dde0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190dce0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190dd60 + msSFU30OrderNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x190dc60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190db60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190dbe0 + msSFU30MasterServerName contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x190dad0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190d9d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190da50 + msSFU30MapFilter contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190d950 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190d850 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190d8d0 + msSFU30KeyAttributes contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x190d7d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190d6d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190d750 + msSFU30IntraFieldSeparator contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x190d640 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190d540 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190d5c0 + msSFU30FieldSeparator contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x190d4c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190d3c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190d440 + msRRASVendorAttributeEntry contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x190d330 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190d230 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190d2b0 + msRRASAttribute contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x190d1b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190d0b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190d130 + msPKI-Supersede-Templates contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x190d020 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190cf20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190cfa0 + msPKI-Site-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x190cea0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190cda0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190ce20 + msPKI-RA-Policies contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x190cd20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190cc20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190cca0 + msPKI-RA-Application-Policies contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x190cb90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190ca90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190cb10 + msPKI-OIDLocalizedName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x190ca10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190c910 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190c990 + msPKI-OID-User-Notice contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x190c890 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190c790 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190c810 + msPKI-OID-CPS contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x190c710 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190c610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190c690 + msPKI-Enrollment-Servers contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x190c580 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190c480 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190c500 + msPKI-Certificate-Policy contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x190c3f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190c2f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190c370 + msPKI-Certificate-Application-Policy contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x190c260 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190c160 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190c1e0 + msPKI-Cert-Template-OID contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x190c0d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190bfd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190c050 + mSMQSiteNameEx contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x190bf50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190be50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190bed0 + mSMQSiteName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x190bdd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190bcd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190bd50 + mSMQQueueNameExt contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190bc50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190bb50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190bbd0 + mSMQLabelEx contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x190bad0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190b9d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190ba50 + mSMQLabel contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x190b950 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190b850 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190b8d0 + mSMQCSPName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x190b7d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190b6d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190b750 + mSMQComputerTypeEx contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x190b650 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190b550 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190b5d0 + mSMQComputerType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190b4d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190b3d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190b450 + msMQ-Recipient-FormatName contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x190b340 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190b240 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190b2c0 + MSMQ-MulticastAddress contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x190b1c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190b0c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190b140 + msiScriptPath contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x190b040 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190af40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190afc0 + msiScriptName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x190aec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190adc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190ae40 + msImaging-PSPString contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x190ad40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190ac40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190acc0 + msIIS-FTPRoot contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x190abc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190aac0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190ab40 + msIIS-FTPDir contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x190aa40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190a940 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190a9c0 + msiFileList contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x190a8c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190a7c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190a840 + msieee80211-ID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x190a740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190a640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190a6c0 + msFVE-RecoveryPassword contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x190a5c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190a4c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190a540 + msFRS-Topology-Pref contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x190a440 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190a340 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190a3c0 + msExchLabeledURI contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190a2c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190a1c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190a240 + msExchHouseIdentifier contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x190a140 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x190a040 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x190a0c0 + msExchAssistantName contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1909fc0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1909ec0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1909f40 + msDS-USNLastSyncSuccess contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1909e30 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1909d30 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1909db0 + msDS-UserPasswordExpiryTimeComputed contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1909ca0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1909ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1909c20 + msDS-UpdateScript contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1909b20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1909a20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1909aa0 + msDS-TopQuotaUsage contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19099a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19098a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1909920 + msDS-SPNSuffixes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1909820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1909720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19097a0 + msDS-SourceObjectDN contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19096a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19095a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1909620 + msDS-SiteName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1909520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1909420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19094a0 + msDS-Settings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19093a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19092a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1909320 + msDS-Security-Group-Extra-Classes contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1909210 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1909110 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1909190 + msDS-ReplValueMetaData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1909090 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1908f90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1909010 + msDS-ReplAttributeMetaData contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1908f00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1908e00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1908e80 + msDS-PromotionSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1908d80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1908c80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1908d00 + msDS-PrincipalName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1908c00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1908b00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1908b80 + msDS-PhoneticLastName contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1908a80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1908980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1908a00 + msDS-PhoneticFirstName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1908900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1908800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1908880 + msDS-PhoneticDisplayName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1908770 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1908670 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19086f0 + msDS-PhoneticDepartment contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x19085e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19084e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1908560 + msDS-PhoneticCompanyName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1908450 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1908350 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19083d0 + msDS-Other-Settings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19082d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19081d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1908250 + msDS-Non-Security-Group-Extra-Classes contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x1908140 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1908040 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19080c0 + msDS-NCReplOutboundNeighbors contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1907fb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1907eb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1907f30 + msDS-NCReplInboundNeighbors contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1907e20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1907d20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1907da0 + msDS-NCReplCursors contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1907ca0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1907ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1907c20 + msDS-MinimumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1907b10 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1907a10 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1907a90 + msDS-MaximumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1907980 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1907880 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1907900 + msDS-LockoutObservationWindow contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19077f0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19076f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1907770 + msDS-LockoutDuration contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1907670 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1907570 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19075f0 + msDS-LastSuccessfulInteractiveLogonTime contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x19074d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19073d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1907450 + msDS-LastKnownRDN contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1907350 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1907250 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19072d0 + msDS-LastFailedInteractiveLogonTime contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x19071c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19070c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1907140 + msDS-FilterContainers contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1907040 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1906f40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1906fc0 + msDS-ExternalStore contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1906ec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1906dc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1906e40 + msDS-ExternalKey contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1906d40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1906c40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1906cc0 + msDS-DnsRootAlias contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1906bc0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1906ac0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1906b40 + msDS-Cached-Membership-Time-Stamp contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1906a30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1906930 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19069b0 + msDS-AzScopeName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19068b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19067b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1906830 + msDS-AzLDAPQuery contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1906730 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1906630 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19066b0 + msDS-AzLastImportedBizRulePath contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x19065a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19064a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1906520 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1906420 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1906320 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19063a0 + msDS-AzClassId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19062a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19061a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1906220 + msDS-AzBizRuleLanguage contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1906120 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1906020 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19060a0 + msDS-AzBizRule contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1905fa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1905ea0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1905f20 + msDS-AzApplicationVersion contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1905e10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1905d10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1905d90 + msDS-AzApplicationName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1905c90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1905b90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1905c10 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1905b10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1905a10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1905a90 + msDS-Auxiliary-Classes contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1905990 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1905890 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1905910 + msDS-AllowedToDelegateTo contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1905800 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1905700 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1905780 + msDS-AllowedDNSSuffixes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1905670 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1905570 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19055f0 + msDS-AdditionalSamAccountName contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x19054e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19053e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1905460 + msDS-AdditionalDnsHostName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1905350 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1905250 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19052d0 + msDFSR-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19051d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19050d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1905150 + msDFSR-StagingSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1905050 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1904f50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1904fd0 + msDFSR-StagingPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1904ed0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1904dd0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1904e50 + msDFSR-RootSizeInMb contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1904d50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1904c50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1904cd0 + msDFSR-RootPath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1904bd0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1904ad0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1904b50 + msDFSR-RdcMinFileSizeInKb contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1904a40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1904940 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19049c0 + msDFSR-OnDemandExclusionFileFilter contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x19048b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19047b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1904830 + msDFSR-OnDemandExclusionDirectoryFilter contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1904710 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1904610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1904690 + msDFSR-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1904590 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1904490 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1904510 + msDFSR-FileFilter contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1904410 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1904310 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1904390 + msDFSR-DirectoryFilter contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1904290 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1904190 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1904210 + msDFSR-DfsPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1904110 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1904010 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1904090 + msDFSR-DfsLinkTarget contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1903f90 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1903e90 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1903f10 + msDFSR-DeletedSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1903e10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1903d10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1903d90 + msDFSR-DeletedPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1903c90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1903b90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1903c10 + msDFSR-DefaultCompressionExclusionFilter contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x1903af0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19039f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1903a70 + msDFSR-ConflictSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1903960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1903860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19038e0 + msDFSR-ConflictPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x19037e0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19036e0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1903760 + msDFSR-CommonStagingSizeInMb contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1903650 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1903550 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19035d0 + msDFSR-CommonStagingPath contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x19034c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19033c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1903440 + msDFS-ShortNameLinkPathv2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1903330 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1903230 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19032b0 + msDFS-Propertiesv2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x19031b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19030b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1903130 + msDFS-LinkPathv2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1903030 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1902f30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1902fb0 + msDFS-Commentv2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1902eb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1902db0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1902e30 + mS-SQL-Vines contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1902d30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1902c30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1902cb0 + mS-SQL-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1902bb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1902ab0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1902b30 + mS-SQL-Type contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1902a30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1902930 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19029b0 + mS-SQL-TCPIP contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x19028b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x19027b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1902830 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1902730 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1902630 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19026b0 + mS-SQL-SPX contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x19025b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19024b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1902530 + mS-SQL-SortOrder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1902430 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1902330 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19023b0 + mS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19022b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19021b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1902230 + mS-SQL-ServiceAccount contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1902130 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1902030 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19020b0 + mS-SQL-RegisteredOwner contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1901fb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1901eb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901f30 + mS-SQL-Publisher contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901e30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1901d30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901db0 + mS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1901cb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1901bb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901c30 + mS-SQL-NamedPipe contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901b30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1901a30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901ab0 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x19019b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19018b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901930 + mS-SQL-MultiProtocol contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1901830 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1901730 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x19017b0 + mS-SQL-Memory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x19016b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19015b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901630 + mS-SQL-Location contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1901530 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1901430 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19014b0 + mS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x19013b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19012b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901330 + mS-SQL-LastDiagnosticDate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1901220 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1901120 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19011a0 + mS-SQL-LastBackupDate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x19010a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1900fa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1901020 + mS-SQL-Language contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1900f20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1900e20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1900ea0 + mS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1900da0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1900ca0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1900d20 + mS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1900c20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1900b20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1900ba0 + mS-SQL-GPSLongitude contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1900aa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19009a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1900a20 + mS-SQL-GPSLatitude contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1900920 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1900820 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19008a0 + mS-SQL-GPSHeight contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19007a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19006a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1900720 + mS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1900620 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1900520 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19005a0 + mS-SQL-Database contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x19004a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19003a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1900420 + mS-SQL-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1900320 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1900220 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x19002a0 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x19001a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x19000a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1900120 + mS-SQL-ConnectionURL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1900020 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fff20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fffa0 + mS-SQL-Applications contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18ffea0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ffda0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ffe20 + mS-SQL-AppleTalk contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ffd20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ffc20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ffca0 + mS-SQL-Alias contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18ffba0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ffaa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ffb20 + ms-net-ieee-8023-GP-PolicyGUID contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x18ffa10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ff910 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ff990 + ms-net-ieee-8023-GP-PolicyData contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x18ff880 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ff780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ff800 + ms-net-ieee-80211-GP-PolicyGUID contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x18ff6f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ff5f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ff670 + ms-net-ieee-80211-GP-PolicyData contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x18ff560 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ff460 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ff4e0 + monikerDisplayName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18ff3e0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ff2e0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ff360 + modifiedCountAtLastProm contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18ff250 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ff150 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ff1d0 + modifiedCount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18ff0d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fefd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ff050 + mobile contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x18fef60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fee60 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18feee0 + minTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18fede0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fece0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fed60 + minPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18fec60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18feb60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18febe0 + middleName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18feae0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fe9e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fea60 + mhsORAddress contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18fe960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fe860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fe8e0 + meetingURL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18fe7e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fe6e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fe760 + meetingType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18fe660 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fe560 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fe5e0 + meetingScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18fe4e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fe3e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fe460 + meetingRecurrence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18fe360 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fe260 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fe2e0 + meetingRating contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18fe1e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fe0e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fe160 + meetingProtocol contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18fe060 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fdf60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fdfe0 + meetingOwner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18fdee0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fdde0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fde60 + meetingOriginator contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18fdd60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fdc60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fdce0 + meetingName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18fdbe0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fdae0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fdb60 + meetingLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18fda60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fd960 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fd9e0 + meetingLanguage contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18fd8e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fd7e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fd860 + meetingKeyword contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18fd760 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fd660 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fd6e0 + meetingIsEncrypted contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18fd5e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fd4e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fd560 + meetingIP contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18fd460 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fd360 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fd3e0 + meetingID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18fd2e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fd1e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fd260 + meetingDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18fd160 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fd060 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fd0e0 + meetingContactInfo contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18fcfe0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fcee0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fcf60 + meetingApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18fce60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fcd60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fcde0 + meetingAdvertiseScope contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18fcce0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fcbe0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fcc60 + mayContain contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18fcb60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fca60 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fcae0 + maxTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18fc9e0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fc8e0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fc960 + maxStorage contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18fc860 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fc760 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fc7e0 + maxRenewAge contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18fc6e0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fc5e0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fc660 + maxPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18fc560 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fc460 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fc4e0 + mailAddress contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18fc3e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fc2e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fc360 + mail contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x18fc270 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fc170 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fc1f0 + machinePasswordChangeInterval contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x18fc0e0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fbfe0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fc060 + lSAModifiedCount contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fbf60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fbe60 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fbee0 + lSACreationTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18fbde0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fbce0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fbd60 + lockoutTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18fbc60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fbb60 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fbbe0 + lockOutObservationWindow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18fbad0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fb9d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fba50 + lockoutDuration contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18fb950 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fb850 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fb8d0 + location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18fb7d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fb6d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fb750 + localizedDescription contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18fb650 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fb550 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fb5d0 + legacyExchangeDN contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fb4d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fb3d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fb450 + lDAPDisplayName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18fb350 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fb250 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fb2d0 + lDAPAdminLimits contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18fb1d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fb0d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fb150 + lastUpdateSequence contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18fb050 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18faf50 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fafd0 + lastSetTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18faed0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fadd0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fae50 + lastLogonTimestamp contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18fad50 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fac50 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18facd0 + lastLogon contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18fabd0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18faad0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fab50 + lastLogoff contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18faa50 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fa950 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fa9d0 + lastContentIndexed contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18fa8d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18fa7d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18fa850 + lastBackupRestorationTime contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18fa740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fa640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fa6c0 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18fa5c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fa4c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fa540 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x18fa450 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fa350 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fa3d0 + knowledgeInformation contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18fa2d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fa1d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fa250 + keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18fa150 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18fa050 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18fa0d0 + iPSECNegotiationPolicyType contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x18f9fc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f9ec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f9f40 + iPSECNegotiationPolicyAction contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x18f9e30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f9d30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f9db0 + ipsecName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18f9cb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f9bb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f9c30 + ipsecID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f9b30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f9a30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f9ab0 + ipPhone contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f99b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f98b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f9930 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18f9820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f9720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f97a0 + initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18f96a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f95a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f9620 + initialAuthOutgoing contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18f9520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f9420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f94a0 + initialAuthIncoming contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18f93a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f92a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f9320 + info contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x18f9230 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f9130 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f91b0 + indexedScopes contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18f90b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f8fb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f9030 + iconPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18f8f30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f8e30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f8eb0 + houseIdentifier contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18f8db0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f8cb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f8d30 + host contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x18f8c40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f8b40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f8bc0 + homePostalAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18f8ac0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f89c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f8a40 + homePhone contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18f8940 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f8840 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f88c0 + homeDrive contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18f87c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f86c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f8740 + homeDirectory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18f8640 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f8540 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f85c0 + helpFileName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18f84c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f83c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f8440 + groupsToIgnore contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f8340 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f8240 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f82c0 + groupPriority contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18f81c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f80c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f8140 + gPLink contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x18f8050 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f7f50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f7fd0 + gPCWQLFilter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18f7ed0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f7dd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f7e50 + gPCUserExtensionNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18f7d50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f7c50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f7cd0 + gPCMachineExtensionNames contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18f7bc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f7ac0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f7b40 + gPCFileSysPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f7a40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f7940 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f79c0 + governsID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18f78c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f77c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f7840 + givenName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18f7740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f7640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f76c0 + generationQualifier contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18f75c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f74c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f7540 + fRSWorkingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f7440 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f7340 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f73c0 + fRSVersion contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18f72c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f71c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f7240 + fRSStagingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f7140 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f7040 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f70c0 + fRSServiceCommandStatus contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18f6fb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f6eb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f6f30 + fRSServiceCommand contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18f6e30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f6d30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f6db0 + fRSRootPath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18f6cb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f6bb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f6c30 + fRSFileFilter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18f6b30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f6a30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f6ab0 + fRSFaultCondition contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18f69b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f68b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f6930 + fRSDirectoryFilter contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18f6830 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f6730 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f67b0 + fRSControlOutboundBacklog contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18f66a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f65a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f6620 + fRSControlInboundBacklog contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18f6510 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f6410 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f6490 + fRSControlDataCreation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18f6390 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f6290 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f6310 + friendlyNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18f6210 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18f6110 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f6190 + forceLogoff contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18f6090 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5f90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f6010 + flatName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18f5f10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5e10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5e90 + fileExtPriority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18f5d90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5c90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5d10 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18f5c00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5b00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5b80 + extraColumns contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18f5a80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5a00 + extensionName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18f5900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5880 + extendedClassInfo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18f5780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5700 + extendedAttributeInfo contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18f5600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5580 + enrollmentProviders contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18f5480 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5380 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5400 + employeeType contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18f5300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5280 + employeeNumber contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f5180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f5080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f5100 + employeeID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18f5000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4f00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4f80 + dSUIAdminNotification contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18f4e80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4d80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4e00 + dSHeuristics contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18f4d00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4c00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4c80 + driverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18f4b80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4a80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4b00 + drink contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x18f4a10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4910 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4990 + domainReplica contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18f4890 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4790 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4810 + documentVersion contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18f4710 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4690 + documentTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18f4590 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4490 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4510 + documentPublisher contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18f4410 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4310 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4390 + documentLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4290 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4190 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4210 + documentIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18f4110 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f4010 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f4090 + dnsRoot contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f3f90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f3e90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f3f10 + dNSHostName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18f3e10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f3d10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f3d90 + dmdName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f3c90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f3b90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f3c10 + division contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18f3b10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f3a10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f3a90 + dITContentRules contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18f3990 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f3890 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f3910 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18f3810 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18f3710 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f3790 + dhcpUpdateTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f3690 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18f3590 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f3610 + dhcpUniqueKey contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18f3510 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f3410 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f3490 + dhcpObjName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18f3390 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f3290 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f3310 + dhcpObjDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18f3210 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18f3110 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f3190 + dhcpMaxKey contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18f3090 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f2f90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f3010 + dhcpIdentification contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18f2f10 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18f2e10 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f2e90 + dhcpFlags contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18f2d90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f2c90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f2d10 + desktopProfile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f2c10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f2b10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f2b90 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18f2a90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f2990 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f2a10 + departmentNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f2910 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f2810 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f2890 + department contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18f2790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f2690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f2710 + defaultSecurityDescriptor contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18f2600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f2500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f2580 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18f2490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f2390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f2410 + creator contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f2310 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f2210 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f2290 + creationWizard contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f2190 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18f2090 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f2110 + creationTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18f2010 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1f10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1f90 + createWizardExt contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18f1e90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1d90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1e10 + createDialog contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18f1d10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1c10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1c90 + contextMenu contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18f1b90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1a90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1b10 + cOMUniqueLIBID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f1a10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1910 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1990 + cOMTypelibId contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18f1890 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1790 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1810 + cOMTreatAsClassId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18f1710 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1690 + cOMProgID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18f1590 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1490 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1510 + company contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f1410 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1310 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1390 + cOMOtherProgId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f1290 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1190 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1210 + comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18f1110 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f1010 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f1090 + cOMInterfaceID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18f0f90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f0e90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f0f10 + cOMCLSID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18f0e10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f0d10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f0d90 + cOMClassID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18f0c90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f0b90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f0c10 + co contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18f0b20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f0a20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f0aa0 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18f09b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f08b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f0930 + classDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f0830 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f0730 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f07b0 + certificateTemplates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18f06b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f05b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f0630 + cAWEBURL contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18f0530 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f0430 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f04b0 + cAUsages contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18f03b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f02b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f0330 + categories contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18f0230 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18f0130 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f01b0 + catalogs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18f00b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18effb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18f0030 + carLicense contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18eff30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18efe30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18efeb0 + canUpgradeScript contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18efdb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18efcb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18efd30 + canonicalName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18efc30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18efb30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18efbb0 + cAConnect contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18efab0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ef9b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18efa30 + cACertificateDN contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18ef930 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ef830 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ef8b0 + c contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x18ef7c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ef6c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ef740 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ef640 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ef540 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ef5c0 + builtinModifiedCount contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18ef4c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ef3c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ef440 + builtinCreationTime contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18ef340 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ef240 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ef2c0 + buildingName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18ef1c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ef0c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ef140 + badPasswordTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18ef040 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18eef40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18eefc0 + auxiliaryClass contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18eeec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18eedc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18eee40 + attributeTypes contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18eed40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18eec40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18eecc0 + attributeSyntax contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18eebc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18eeac0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18eeb40 + attributeID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18eea40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ee940 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ee9c0 + attributeDisplayNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18ee8c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ee7c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ee840 + assetNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18ee740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ee640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ee6c0 + appliesTo contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18ee5c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ee4c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ee540 + applicationName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18ee440 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ee340 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ee3c0 + aNR contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x18ee2d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ee1d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ee250 + altSecurityIdentities contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18ee150 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ee050 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ee0d0 + allowedChildClassesEffective contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x18edfc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18edec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18edf40 + allowedChildClasses contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18ede40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18edd40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18eddc0 + allowedAttributesEffective contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x18edcb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18edbb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18edc30 + allowedAttributes contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18edb30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18eda30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18edab0 + adminPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18ed9b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ed8b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed930 + adminMultiselectPropertyPages contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x18ed820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ed720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed7a0 + adminDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed6a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ed5a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed620 + adminDescription contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ed420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed4a0 + adminContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed3a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ed2a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed320 + addressType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18ed220 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ed120 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed1a0 + additionalTrustedServiceNames contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x18ed090 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ecf90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ed010 + aCSTimeOfDay contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18ecf10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ece10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ece90 + aCSServerList contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18ecd90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ecc90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ecd10 + aCSRSVPLogFilesLocation contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18ecc00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ecb00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ecb80 + aCSRSVPAccountFilesLocation contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x18eca70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18ec970 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18ec9f0 + aCSPolicyName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18ec8f0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ec7f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ec870 + aCSPermissionBits contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18ec770 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ec670 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ec6f0 + aCSNonReservedTxSize contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18ec5f0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ec4f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ec570 + aCSNonReservedTxLimit contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18ec470 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ec370 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ec3f0 + aCSNonReservedTokenSize contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18ec2e0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ec1e0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ec260 + aCSNonReservedPeakRate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18ec160 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ec060 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ec0e0 + aCSNonReservedMinPolicedSize contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x18ebfd0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ebed0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ebf50 + aCSNonReservedMaxSDUSize contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18ebe40 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ebd40 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ebdc0 + aCSMinimumPolicedSize contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18ebcc0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ebbc0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ebc40 + aCSMinimumLatency contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18ebb40 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18eba40 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ebac0 + aCSMinimumDelayVariation contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18eb9b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18eb8b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18eb930 + aCSMaxTokenRatePerFlow contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18eb830 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18eb730 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18eb7b0 + aCSMaxTokenBucketPerFlow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18eb6a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18eb5a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18eb620 + aCSMaxPeakBandwidthPerFlow contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x18eb510 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18eb410 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18eb490 + aCSMaxPeakBandwidth contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18eb390 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18eb290 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18eb310 + aCSMaximumSDUSize contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18eb210 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18eb110 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18eb190 + aCSMaxAggregatePeakRatePerUser contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x18eb080 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18eaf80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18eb000 + aCSIdentityName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18eaf00 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18eae00 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18eae80 + aCSAllocableRSVPBandwidth contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18ead70 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18eac70 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18eacf0 + aCSAggregateTokenRatePerUser contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x18eabe0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18eaae0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18eab60 + accountNameHistory contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18eaa60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18ea960 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18ea9e0 + accountExpires contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18ea8e0 + struct ldb_dn contains 84 bytes in 2 blocks (ref 0) d=(nil) 0x18e5ed0 + @ATTRIBUTES contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e5f90 + struct ldb_message contains 3939 bytes in 127 blocks (ref 0) d=(nil) 0x1895920 + struct ldb_message_element contains 3832 bytes in 124 blocks (ref 0) d=(nil) 0x1897c30 + struct ldb_val contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x18e5c20 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x18e5ca0 + @IDXVERSION contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e5ba0 + struct ldb_val contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x18e5ab0 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x18e5b30 + @IDXONE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18e5a30 + struct ldb_val contains 3671 bytes in 116 blocks (ref 0) d=(nil) 0x1897d80 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18e59b0 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18e5930 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18e58b0 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18e5840 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18e57c0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e5740 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18e56c0 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18e5640 + ../lib/ldb/common/ldb_pack.c:264 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x18e55d0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e5550 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18e54d0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18e5450 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18e53d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18e5350 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18e52d0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e5250 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18e51d0 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18e5150 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18e50d0 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18e5050 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18e4fd0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e4f50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18e4ed0 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x18e4e60 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18e4de0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e4d60 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x18e4cd0 + ../lib/ldb/common/ldb_pack.c:264 contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x18e4c40 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18e4bc0 + ../lib/ldb/common/ldb_pack.c:264 contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x18e4b30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18e4ab0 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18e4a30 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18e49b0 + ../lib/ldb/common/ldb_pack.c:264 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18e4920 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18e4890 + ../lib/ldb/common/ldb_pack.c:264 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18e4800 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18e4780 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18e4700 + ../lib/ldb/common/ldb_pack.c:264 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x18e4670 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18e45f0 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18e4570 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18e44f0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e4470 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18e43f0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e4370 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e42f0 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18e4270 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18e41e0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e4160 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18e40d0 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18e4040 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18e3fc0 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18e3f40 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e3ec0 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x18e3e30 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x18e3da0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18e3d20 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18e3ca0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18e3c20 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18e3ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e3b20 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e3aa0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e3a20 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e39a0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e3920 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e38a0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e3820 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18e37a0 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18e3720 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18e36a0 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18e3620 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18e35a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18e3520 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e34a0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e3420 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e33a0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18e3320 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e32a0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e3220 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e31a0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e3120 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e30a0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e3020 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18e2fa0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18e2f20 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18e2ea0 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18e2e30 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18e2db0 + ../lib/ldb/common/ldb_pack.c:264 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x18e2d20 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18e2ca0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e2c20 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18e2ba0 + ../lib/ldb/common/ldb_pack.c:264 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x18e2b30 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18e2ab0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18e2a30 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18e29b0 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1898e10 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1898d90 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1898d10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1898c90 + ../lib/ldb/common/ldb_pack.c:264 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1898c10 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1898b90 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1898b10 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1898aa0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1898a20 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18989a0 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1898920 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18988a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1898820 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18987a0 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1898720 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18986a0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1898620 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18985a0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1898520 + @IDXATTR contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1897d00 + struct ldb_dn contains 83 bytes in 2 blocks (ref 0) d=(nil) 0x1897af0 + @INDEXLIST contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1897bb0 + struct ltdb_wrap contains 40 bytes in 1 blocks (ref 0) d=0x2af290dc12e8 0x1896c20 + /home/rusty/samba/st/fl2000dc/private/sam.ldb.d/CN=CONFIGURATION,DC=SAMBA2000,DC=EXAMPLE,DC=COM.ldb contains 100 bytes in 1 blocks (ref 0) d=(nil) 0x1895460 + struct dsdb_control_current_partition contains 472 bytes in 21 blocks (ref 0) d=(nil) 0x1896b30 + struct ldb_dn contains 456 bytes in 20 blocks (ref 0) d=(nil) 0x1921930 + char contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x19676e0 + struct ldb_dn_component contains 288 bytes in 17 blocks (ref 0) d=(nil) 0x1921420 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1921550 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1897650 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1897130 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1897500 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1897020 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19216c0 + CONFIGURATION contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18970a0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x19215d0 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x18972c0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1897830 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1896f30 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18977c0 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18e5db0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1896fb0 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1897360 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18e5e30 + CN=Configuration,DC=samba2000,DC=example,DC=com contains 48 bytes in 1 blocks (ref 0) d=(nil) 0x19219f0 + struct dsdb_partition contains 4742 bytes in 153 blocks (ref 0) d=(nil) 0x189dbe0 + ../lib/ldb/common/ldb_pack.c:264 contains 76 bytes in 1 blocks (ref 0) d=(nil) 0x189d410 + partition_next contains 4179 bytes in 133 blocks (ref 0) d=(nil) 0x18953c0 + ldb_tdb backend contains 4139 bytes in 132 blocks (ref 0) d=(nil) 0x189e090 + struct ltdb_private contains 4099 bytes in 131 blocks (ref 0) d=(nil) 0x189de60 + struct ltdb_cache contains 3987 bytes in 129 blocks (ref 0) d=(nil) 0x189e130 + struct ldb_message contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18a88c0 + struct ldb_message contains 3939 bytes in 127 blocks (ref 0) d=(nil) 0x189e1c0 + struct ldb_message_element contains 3832 bytes in 124 blocks (ref 0) d=(nil) 0x189f2a0 + struct ldb_val contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x2203180 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1a10420 + @IDXVERSION contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2203100 + struct ldb_val contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x2203080 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1a10330 + @IDXONE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x2203000 + struct ldb_val contains 3671 bytes in 116 blocks (ref 0) d=(nil) 0x3169c70 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x2997920 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x29978a0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2997820 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x262d120 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x29977a0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2997720 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x29976a0 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x2997620 + ../lib/ldb/common/ldb_pack.c:264 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x262d030 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2654350 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x26542d0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2654250 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x26541d0 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x2654150 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x26540d0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2654050 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x25a7880 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x25a7800 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x25a7780 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x25a7700 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x25a7680 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x25a7600 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x25a7580 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x262cf40 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x23025d0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2302550 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x23024c0 + ../lib/ldb/common/ldb_pack.c:264 contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x2302430 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x23023b0 + ../lib/ldb/common/ldb_pack.c:264 contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x2302320 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x22ac0e0 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x22ac060 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x22abfe0 + ../lib/ldb/common/ldb_pack.c:264 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x22abf50 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x22abec0 + ../lib/ldb/common/ldb_pack.c:264 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x22abe30 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x34566d0 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x3456650 + ../lib/ldb/common/ldb_pack.c:264 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x34565c0 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x3456540 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x34564c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x3456440 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x30a4a10 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x30a4990 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x30a4910 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x30a4890 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x30a4810 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x30a4780 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x25077d0 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x2507740 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x25076b0 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x2507630 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x25075b0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2507530 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1cfbaa0 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1cfba10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1cfb990 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1cfb910 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1cfb890 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x3104a90 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x3104a10 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x3104990 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3104910 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x3104890 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2facd30 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2faccb0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2facc30 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x2facbb0 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x21d3b50 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x21d3ad0 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x21d3a50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x21d39d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x2d18760 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2d186e0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2d18660 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2d185e0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x2c8d580 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2c8d500 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2c8d480 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2c8d400 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2c154c0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2c15440 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x2c153c0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2c15340 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18460e0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1846060 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x291e6a0 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x2172000 + ../lib/ldb/common/ldb_pack.c:264 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1845fd0 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x2171f80 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2171f00 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x323b260 + ../lib/ldb/common/ldb_pack.c:264 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x20b8190 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x323b1e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1a182a0 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1a18220 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x212ab70 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x212aaf0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18a8840 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18a87c0 + ../lib/ldb/common/ldb_pack.c:264 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x2a0b430 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x189f370 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x2a0b6f0 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1b68c60 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x2c15620 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1a10610 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x189e250 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x262d230 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x22c0d30 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x21f69d0 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x212a900 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x22c0c30 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1841850 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1895340 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1a2f820 + @IDXATTR contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18a8740 + struct ldb_dn contains 83 bytes in 2 blocks (ref 0) d=(nil) 0x189f430 + @INDEXLIST contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18a86c0 + struct ltdb_wrap contains 40 bytes in 1 blocks (ref 0) d=0x2af290dc12e8 0x189c1b0 + /home/rusty/samba/st/fl2000dc/private/sam.ldb.d/DC=SAMBA2000,DC=EXAMPLE,DC=COM.ldb contains 83 bytes in 1 blocks (ref 0) d=(nil) 0x189dda0 + struct dsdb_control_current_partition contains 356 bytes in 17 blocks (ref 0) d=(nil) 0x189dc80 + struct ldb_dn contains 340 bytes in 16 blocks (ref 0) d=(nil) 0x18965d0 + char contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x196d820 + struct ldb_dn_component contains 206 bytes in 13 blocks (ref 0) d=(nil) 0x1895e70 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1896410 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18963a0 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1896320 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18962b0 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1896230 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18961c0 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x1896150 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18960e0 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189f040 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1896070 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x189efc0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1896000 + DC=samba2000,DC=example,DC=com contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1895f70 + struct partition_module * contains 587 bytes in 30 blocks (ref 0) d=(nil) 0x189ba30 + struct partition_module contains 33 bytes in 3 blocks (ref 0) d=(nil) 0x189d6a0 + char * contains 17 bytes in 2 blocks (ref 0) d=(nil) 0x189da10 + contains 1 bytes in 1 blocks (ref 0) d=(nil) 0x189d9a0 + struct partition_module contains 530 bytes in 26 blocks (ref 0) d=(nil) 0x18943f0 + struct ldb_dn contains 486 bytes in 23 blocks (ref 0) d=(nil) 0x189c4f0 + struct ldb_dn_component contains 356 bytes in 21 blocks (ref 0) d=(nil) 0x189d840 + COM contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x189e8a0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189f130 + EXAMPLE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189e820 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189e370 + SAMBA2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x189e7a0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189e530 + CONFIGURATION contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x189e2e0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189eaa0 + SCHEMA contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x189e720 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189ec60 + com contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x189c140 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189c0d0 + example contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x189d7c0 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189d750 + samba2000 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x189b660 + DC contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189ccf0 + Configuration contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x189b4d0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x189be90 + Schema contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x189c2e0 + CN contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18931e0 + CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com contains 58 bytes in 1 blocks (ref 0) d=(nil) 0x189c5b0 + char * contains 28 bytes in 2 blocks (ref 0) d=(nil) 0x189b100 + schema_data contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x189afc0 + struct ldb_dn * contains 280 bytes in 7 blocks (ref 0) d=(nil) 0x189cfa0 + struct ldb_dn contains 81 bytes in 2 blocks (ref 0) d=(nil) 0x189b970 + @OPTIONS contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x189ace0 + struct ldb_dn contains 83 bytes in 2 blocks (ref 0) d=(nil) 0x189bdb0 + @INDEXLIST contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x189b6e0 + struct ldb_dn contains 84 bytes in 2 blocks (ref 0) d=(nil) 0x189cd60 + @ATTRIBUTES contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x189b7d0 + .name contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x17fe450 + struct ldb_message contains 275 bytes in 8 blocks (ref 0) d=(nil) 0x1894580 + struct ldb_message_element contains 145 bytes in 5 blocks (ref 0) d=(nil) 0x1894c40 + struct ldb_val contains 105 bytes in 3 blocks (ref 0) d=(nil) 0x17fdba0 + *: contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x17ff120 + CN=Schema,CN=Configuration,DC=samba2000,DC=example,DC=com:schema_data contains 70 bytes in 1 blocks (ref 0) d=(nil) 0x18949d0 + modules contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x17fe550 + struct ldb_dn contains 106 bytes in 2 blocks (ref 0) d=(nil) 0x1893e10 + @DSDB_OPAQUE_PARTITION_MODULE_MSG contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1894690 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1894cd0 + ldb_module: samba_dsdb contains 63 bytes in 2 blocks (ref 0) d=(nil) 0x17ff260 + .name contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x17ff0a0 + ldb_tdb backend contains 51046 bytes in 1872 blocks (ref 0) d=(nil) 0x17feaa0 + struct ltdb_private contains 51006 bytes in 1871 blocks (ref 0) d=(nil) 0x17fe1f0 + struct ltdb_cache contains 50894 bytes in 1869 blocks (ref 0) d=(nil) 0x17fe2b0 + struct ldb_message contains 46931 bytes in 1741 blocks (ref 0) d=(nil) 0x17feb40 + struct ldb_message_element contains 46823 bytes in 1738 blocks (ref 0) d=(nil) 0x18462d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1881350 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18813d0 + x121Address contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18812d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18811d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1881250 + wWWHomePage contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1881150 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1881050 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18810d0 + wbemPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1880fd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1880ed0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1880f50 + vendor contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1880e60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1880d60 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1880de0 + uSNSource contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1880ce0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1880be0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1880c60 + uSNLastObjRem contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1880b60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1880a60 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1880ae0 + uSNDSALastObjRemoved contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18809e0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18808e0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1880960 + uSNCreated contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1880860 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1880760 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18807e0 + uSNChanged contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18806e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18805e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1880660 + userWorkstations contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1880560 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1880460 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18804e0 + userSharedFolderOther contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18803e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18802e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1880360 + userSharedFolder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1880260 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1880160 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18801e0 + userPrincipalName contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18800e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187ffe0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1880060 + userParameters contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x187ff60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187fe60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187fee0 + userClass contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x187fde0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187fce0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187fd60 + url contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x187fc70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187fb70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187fbf0 + uPNSuffixes contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x187faf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187f9f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187fa70 + unstructuredAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x187f970 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187f870 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187f8f0 + uniqueIdentifier contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187f7f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187f6f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187f770 + uNCName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x187f670 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187f570 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187f5f0 + uid contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x187f500 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187f400 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187f480 + trustPartner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x187f380 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187f280 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187f300 + treeName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x187f200 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187f100 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187f180 + transportDLLName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187f080 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187ef80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187f000 + transportAddressAttribute contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x187eef0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187edf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187ee70 + title contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x187ed80 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x187ec80 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x187ed00 + timeVolChange contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x187ec00 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x187eb00 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x187eb80 + timeRefresh contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x187ea80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187e980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187ea00 + textEncodedORAddress contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x187e900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187e800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187e880 + telephoneNumber contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x187e780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187e680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187e700 + systemPossSuperiors contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x187e600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187e500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187e580 + systemMustContain contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x187e480 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187e380 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187e400 + systemMayContain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187e300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187e200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187e280 + systemAuxiliaryClass contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x187e180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187e080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187e100 + superScopeDescription contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x187e000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187df00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187df80 + superiorDNSRoot contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x187de80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187dd80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187de00 + subClassOf contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x187dd00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187dc00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187dc80 + structuralObjectClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x187db80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187da80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187db00 + streetAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x187da00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187d900 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187d980 + street contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x187d890 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187d790 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187d810 + st contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x187d720 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187d620 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187d6a0 + sPNMappings contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x187d5a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187d4a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187d520 + sn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x187d430 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187d330 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187d3b0 + signatureAlgorithms contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x187d2b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187d1b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187d230 + shortServerName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x187d130 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187d030 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187d0b0 + shellPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x187cfb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187ceb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187cf30 + shellContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187ce30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187cd30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187cdb0 + setupCommand contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x187ccb0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187cbb0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187cc30 + servicePrincipalName contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x187cb30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187ca30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187cab0 + serviceDNSNameType contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x187c9b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187c8b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187c930 + serviceDNSName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x187c830 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187c730 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187c7b0 + serviceClassName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187c6b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187c5b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187c630 + serviceBindingInformation contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x187c520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187c420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187c4a0 + serverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x187c3a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187c2a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187c320 + scriptPath contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x187c220 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187c120 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187c1a0 + sAMAccountName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x187c0a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187bfa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187c020 + rpcNsTransferSyntax contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x187bf20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187be20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187bea0 + rpcNsProfileEntry contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x187bda0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187bca0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187bd20 + rpcNsObjectID contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x187bc20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187bb20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187bba0 + rpcNsInterfaceID contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187baa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187b9a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187ba20 + rpcNsGroup contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x187b920 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187b820 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187b8a0 + rpcNsCodeset contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x187b7a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187b6a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187b720 + rpcNsBindings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x187b620 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187b520 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187b5a0 + rpcNsAnnotation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x187b4a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187b3a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187b420 + roomNumber contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x187b320 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187b220 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187b2a0 + rightsGuid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x187b1a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x187b0a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x187b120 + rIDUsedPool contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x187b020 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x187af20 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x187afa0 + rIDPreviousAllocationPool contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x187ae90 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x187ad90 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x187ae10 + rIDAvailablePool contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187ad10 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x187ac10 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x187ac90 + rIDAllocationPool contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x187ab90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187aa90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187ab10 + replicaSource contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x187aa10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187a910 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187a990 + remoteStorageGUID contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x187a890 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187a790 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187a810 + remoteSource contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x187a710 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187a610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187a690 + remoteServerName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187a590 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187a490 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187a510 + rDNAttID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x187a410 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187a310 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187a390 + queryPoint contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x187a290 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x187a190 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x187a210 + queryFilter contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x187a110 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x187a010 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x187a090 + pwdLastSet contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1879f90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1879e90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1879f10 + purportedSearch contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1879e10 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1879d10 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1879d90 + proxyLifetime contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1879c90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1879b90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1879c10 + proxyAddresses contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1879b10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1879a10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1879a90 + profilePath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1879990 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1879890 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1879910 + privilegeValue contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1879810 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1879710 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1879790 + privilegeDisplayName contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1879690 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1879590 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1879610 + priorSetTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1879510 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1879410 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1879490 + printStatus contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1879390 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1879290 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1879310 + printSpooling contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1879210 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1879110 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1879190 + printShareName contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1879090 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878f90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1879010 + printSeparatorFile contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1878f10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878e10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878e90 + printRateUnit contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1878d90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878c90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878d10 + printOwner contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1878c10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878b10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878b90 + printOrientationsSupported contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1878a80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878a00 + printNotify contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1878900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878880 + printNetworkAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1878780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878700 + printMediaSupported contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1878600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878580 + printMediaReady contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1878480 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878380 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878400 + printMACAddress contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1878300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878280 + printLanguage contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1878180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1878080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1878100 + printFormName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1878000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1877f00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1877f80 + printerName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1877e80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1877d80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1877e00 + printBinNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1877d00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1877c00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1877c80 + primaryTelexNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1877b80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1877a80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1877b00 + primaryInternationalISDNNumber contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x18779f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18778f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1877970 + presentationAddress contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1877870 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1877770 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18777f0 + preferredLanguage contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18776f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18775f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1877670 + postOfficeBox contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1877570 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1877470 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18774f0 + postalCode contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18773f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18772f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1877370 + postalAddress contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1877270 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1877170 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18771f0 + possSuperiors contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18770f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1876ff0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1877070 + possibleInferiors contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1876f70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1876e70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1876ef0 + portName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1876df0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1876cf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1876d70 + pKIExtendedKeyUsage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1876c70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1876b70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1876bf0 + pKIDefaultCSPs contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1876af0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18769f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1876a70 + pKICriticalExtensions contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1876970 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1876870 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18768f0 + physicalDeliveryOfficeName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x18767e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18766e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1876760 + personalTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1876660 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1876560 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18765e0 + pekKeyChangeInterval contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18764e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18763e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1876460 + pager contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1876370 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1876270 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18762f0 + packageName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18761f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18760f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1876170 + ou contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1876080 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875f80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1876000 + otherTelephone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1875f00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875e00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1875e80 + otherPager contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1875d80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875c80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1875d00 + otherMobile contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1875c00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875b00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1875b80 + otherMailbox contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1875a80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1875a00 + otherLoginWorkstations contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1875900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1875880 + otherIpPhone contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1875780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1875700 + otherHomePhone contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1875600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1875580 + otherFacsimileTelephoneNumber contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1875470 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875370 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18753f0 + organizationalStatus contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18752f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18751f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1875270 + optionDescription contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1875170 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1875070 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18750f0 + operatingSystemVersion contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1874ff0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1874ef0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1874f70 + operatingSystemServicePack contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1874e60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1874d60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1874de0 + operatingSystemHotfix contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1874ce0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1874be0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1874c60 + operatingSystem contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1874b60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1874a60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1874ae0 + oEMInformation contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18749e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18748e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1874960 + objectClasses contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1874860 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1874760 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18747e0 + objectClass contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18746e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18745e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1874660 + o contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1874570 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1874470 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18744f0 + notes contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1874400 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1874300 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1874380 + networkAddress contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1874280 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1874180 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1874200 + netbootTools contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1874100 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1874000 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1874080 + netbootSIFFile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1873f80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1873e80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1873f00 + netbootNewMachineNamingPolicy contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1873df0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1873cf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1873d70 + netbootMirrorDataFile contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1873c70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1873b70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1873bf0 + netbootMachineFilePath contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1873af0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18739f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1873a70 + netbootLocallyInstalledOSes contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1873960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1873860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18738e0 + netbootIntelliMirrorOSes contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18737d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18736d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1873750 + netbootInitialization contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1873650 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1873550 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18735d0 + nETBIOSName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18734d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18733d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1873450 + name contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1873360 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1873260 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18732e0 + mustContain contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18731e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18730e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1873160 + msWMI-TargetType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1873060 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1872f60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1872fe0 + msWMI-TargetPath contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1872ee0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1872de0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1872e60 + msWMI-TargetNameSpace contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1872d60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1872c60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1872ce0 + msWMI-TargetClass contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1872be0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1872ae0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1872b60 + msWMI-StringValidValues contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1872a50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1872950 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18729d0 + msWMI-StringDefault contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18728d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18727d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1872850 + msWMI-SourceOrganization contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1872740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1872640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18726c0 + msWMI-ScopeGuid contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18725c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18724c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1872540 + msWMI-QueryLanguage contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1872440 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1872340 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18723c0 + msWMI-Query contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18722c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18721c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1872240 + msWMI-PropertyName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1872140 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1872040 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18720c0 + msWMI-Parm4 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1871fc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1871ec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1871f40 + msWMI-Parm3 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1871e40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1871d40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1871dc0 + msWMI-Parm2 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1871cc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1871bc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1871c40 + msWMI-Parm1 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1871b40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1871a40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1871ac0 + msWMI-NormalizedClass contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18719c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18718c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1871940 + msWMI-Name contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1871840 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1871740 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18717c0 + msWMI-Mof contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18716c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18715c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1871640 + msWMI-Int8ValidValues contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1871540 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1871440 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18714c0 + msWMI-Int8Min contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18713c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18712c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1871340 + msWMI-Int8Max contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1871240 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1871140 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18711c0 + msWMI-Int8Default contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18710c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1870fc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1871040 + msWMI-ID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1870f40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1870e40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1870ec0 + msWMI-CreationDate contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1870dc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1870cc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1870d40 + msWMI-ClassDefinition contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1870c40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1870b40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1870bc0 + msWMI-Class contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1870ac0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18709c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1870a40 + msWMI-ChangeDate contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1870940 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1870840 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18708c0 + msWMI-Author contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18707c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18706c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1870740 + msTSWorkDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1870640 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1870540 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18705c0 + msTSProperty02 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18704c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18703c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1870440 + msTSProperty01 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1870340 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1870240 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18702c0 + msTSProfilePath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18701c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18700c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1870140 + msTSManagingLS4 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1870040 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186ff40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186ffc0 + msTSManagingLS3 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x186fec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186fdc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186fe40 + msTSManagingLS2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x186fd40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186fc40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186fcc0 + msTSManagingLS contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x186fbc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186fac0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186fb40 + msTSLSProperty02 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186fa40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186f940 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186f9c0 + msTSLSProperty01 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186f8c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186f7c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186f840 + msTSLicenseVersion4 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x186f740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186f640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186f6c0 + msTSLicenseVersion3 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x186f5c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186f4c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186f540 + msTSLicenseVersion2 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x186f440 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186f340 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186f3c0 + msTSLicenseVersion contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x186f2c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186f1c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186f240 + msTSInitialProgram contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x186f140 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186f040 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186f0c0 + msTSHomeDrive contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x186efc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186eec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186ef40 + msTSHomeDirectory contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x186ee40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186ed40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186edc0 + msTSEndpointPlugin contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x186ecc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186ebc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186ec40 + msTSEndpointData contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186eb40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186ea40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186eac0 + msTPM-OwnerInformation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x186e9c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186e8c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186e940 + msTAPI-uid contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x186e840 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186e740 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186e7c0 + msTAPI-ProtocolId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x186e6c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186e5c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186e640 + msTAPI-IpAddress contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186e540 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186e440 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186e4c0 + msSFU30SearchContainer contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x186e3c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186e2c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186e340 + msSFU30SearchAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x186e230 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186e130 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186e1b0 + msSFU30ResultAttributes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x186e0a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186dfa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186e020 + msSFU30OrderNumber contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x186df20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186de20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186dea0 + msSFU30MasterServerName contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x186dd90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186dc90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186dd10 + msSFU30MapFilter contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186dc10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186db10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186db90 + msSFU30KeyAttributes contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x186da90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186d990 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186da10 + msSFU30IntraFieldSeparator contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x186d900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186d800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186d880 + msSFU30FieldSeparator contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x186d780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186d680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186d700 + msRRASVendorAttributeEntry contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x186d5f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186d4f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186d570 + msRRASAttribute contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x186d470 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186d370 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186d3f0 + msPKI-Supersede-Templates contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x186d2e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186d1e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186d260 + msPKI-Site-Name contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x186d160 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186d060 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186d0e0 + msPKI-RA-Policies contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x186cfe0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186cee0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186cf60 + msPKI-RA-Application-Policies contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x186ce50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186cd50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186cdd0 + msPKI-OIDLocalizedName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x186ccd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186cbd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186cc50 + msPKI-OID-User-Notice contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x186cb50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186ca50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186cad0 + msPKI-OID-CPS contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x186c9d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186c8d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186c950 + msPKI-Enrollment-Servers contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x186c840 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186c740 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186c7c0 + msPKI-Certificate-Policy contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x186c6b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186c5b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186c630 + msPKI-Certificate-Application-Policy contains 37 bytes in 1 blocks (ref 0) d=(nil) 0x186c520 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186c420 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186c4a0 + msPKI-Cert-Template-OID contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x186c390 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186c290 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186c310 + mSMQSiteNameEx contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x186c210 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186c110 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186c190 + mSMQSiteName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x186c090 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186bf90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186c010 + mSMQQueueNameExt contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186bf10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186be10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186be90 + mSMQLabelEx contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x186bd90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186bc90 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186bd10 + mSMQLabel contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x186bc10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186bb10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186bb90 + mSMQCSPName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x186ba90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186b990 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186ba10 + mSMQComputerTypeEx contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x186b910 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186b810 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186b890 + mSMQComputerType contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186b790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186b690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186b710 + msMQ-Recipient-FormatName contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x186b600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186b500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186b580 + MSMQ-MulticastAddress contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x186b480 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186b380 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186b400 + msiScriptPath contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x186b300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186b200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186b280 + msiScriptName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x186b180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186b080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186b100 + msImaging-PSPString contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x186b000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186af00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186af80 + msIIS-FTPRoot contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x186ae80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186ad80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186ae00 + msIIS-FTPDir contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x186ad00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186ac00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186ac80 + msiFileList contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x186ab80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186aa80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186ab00 + msieee80211-ID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x186aa00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186a900 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186a980 + msFVE-RecoveryPassword contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x186a880 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186a780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186a800 + msFRS-Topology-Pref contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x186a700 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186a600 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186a680 + msExchLabeledURI contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186a580 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186a480 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186a500 + msExchHouseIdentifier contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x186a400 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x186a300 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x186a380 + msExchAssistantName contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x186a280 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x186a180 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x186a200 + msDS-USNLastSyncSuccess contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x186a0f0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1869ff0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x186a070 + msDS-UserPasswordExpiryTimeComputed contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1869f60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1869e60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1869ee0 + msDS-UpdateScript contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1869de0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1869ce0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1869d60 + msDS-TopQuotaUsage contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1869c60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1869b60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1869be0 + msDS-SPNSuffixes contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1869ae0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18699e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1869a60 + msDS-SourceObjectDN contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1869960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1869860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18698e0 + msDS-SiteName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18697e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18696e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1869760 + msDS-Settings contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1869660 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1869560 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18695e0 + msDS-Security-Group-Extra-Classes contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x18694d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18693d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1869450 + msDS-ReplValueMetaData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1869350 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1869250 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18692d0 + msDS-ReplAttributeMetaData contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x18691c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18690c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1869140 + msDS-PromotionSettings contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1869040 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1868f40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1868fc0 + msDS-PrincipalName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1868ec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1868dc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1868e40 + msDS-PhoneticLastName contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1868d40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1868c40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1868cc0 + msDS-PhoneticFirstName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1868bc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1868ac0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1868b40 + msDS-PhoneticDisplayName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1868a30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1868930 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18689b0 + msDS-PhoneticDepartment contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18688a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18687a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1868820 + msDS-PhoneticCompanyName contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1868710 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1868610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1868690 + msDS-Other-Settings contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1868590 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1868490 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1868510 + msDS-Non-Security-Group-Extra-Classes contains 38 bytes in 1 blocks (ref 0) d=(nil) 0x1868400 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1868300 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1868380 + msDS-NCReplOutboundNeighbors contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1868270 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1868170 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18681f0 + msDS-NCReplInboundNeighbors contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x18680e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1867fe0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1868060 + msDS-NCReplCursors contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1867f60 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1867e60 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1867ee0 + msDS-MinimumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1867dd0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1867cd0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1867d50 + msDS-MaximumPasswordAge contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1867c40 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1867b40 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1867bc0 + msDS-LockoutObservationWindow contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1867ab0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18679b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1867a30 + msDS-LockoutDuration contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1867930 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1867830 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18678b0 + msDS-LastSuccessfulInteractiveLogonTime contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x1867790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1867690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1867710 + msDS-LastKnownRDN contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1867610 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1867510 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1867590 + msDS-LastFailedInteractiveLogonTime contains 36 bytes in 1 blocks (ref 0) d=(nil) 0x1867480 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1867380 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1867400 + msDS-FilterContainers contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1867300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1867200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1867280 + msDS-ExternalStore contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1867180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1867080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1867100 + msDS-ExternalKey contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1867000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1866f00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1866f80 + msDS-DnsRootAlias contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1866e80 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1866d80 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1866e00 + msDS-Cached-Membership-Time-Stamp contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1866cf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1866bf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1866c70 + msDS-AzScopeName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1866b70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1866a70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1866af0 + msDS-AzLDAPQuery contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18669f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18668f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1866970 + msDS-AzLastImportedBizRulePath contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x1866860 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1866760 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18667e0 + msDS-AzGenericData contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18666e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18665e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1866660 + msDS-AzClassId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1866560 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1866460 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18664e0 + msDS-AzBizRuleLanguage contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18663e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18662e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1866360 + msDS-AzBizRule contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1866260 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1866160 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18661e0 + msDS-AzApplicationVersion contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18660d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1865fd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1866050 + msDS-AzApplicationName contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1865f50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1865e50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1865ed0 + msDS-AzApplicationData contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1865dd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1865cd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1865d50 + msDS-Auxiliary-Classes contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1865c50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1865b50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1865bd0 + msDS-AllowedToDelegateTo contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1865ac0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18659c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1865a40 + msDS-AllowedDNSSuffixes contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1865930 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1865830 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18658b0 + msDS-AdditionalSamAccountName contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x18657a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18656a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1865720 + msDS-AdditionalDnsHostName contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1865610 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1865510 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1865590 + msDFSR-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1865490 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1865390 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1865410 + msDFSR-StagingSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1865310 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1865210 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1865290 + msDFSR-StagingPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1865190 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1865090 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1865110 + msDFSR-RootSizeInMb contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1865010 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1864f10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1864f90 + msDFSR-RootPath contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1864e90 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1864d90 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1864e10 + msDFSR-RdcMinFileSizeInKb contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1864d00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1864c00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1864c80 + msDFSR-OnDemandExclusionFileFilter contains 35 bytes in 1 blocks (ref 0) d=(nil) 0x1864b70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1864a70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1864af0 + msDFSR-OnDemandExclusionDirectoryFilter contains 40 bytes in 1 blocks (ref 0) d=(nil) 0x18649d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18648d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1864950 + msDFSR-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1864850 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1864750 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18647d0 + msDFSR-FileFilter contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18646d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18645d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1864650 + msDFSR-DirectoryFilter contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1864550 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1864450 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18644d0 + msDFSR-DfsPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18643d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18642d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1864350 + msDFSR-DfsLinkTarget contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1864250 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1864150 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18641d0 + msDFSR-DeletedSizeInMb contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x18640d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1863fd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1864050 + msDFSR-DeletedPath contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1863f50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1863e50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1863ed0 + msDFSR-DefaultCompressionExclusionFilter contains 41 bytes in 1 blocks (ref 0) d=(nil) 0x1863db0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1863cb0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1863d30 + msDFSR-ConflictSizeInMb contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1863c20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1863b20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1863ba0 + msDFSR-ConflictPath contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1863aa0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18639a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1863a20 + msDFSR-CommonStagingSizeInMb contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x1863910 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1863810 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1863890 + msDFSR-CommonStagingPath contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1863780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1863680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1863700 + msDFS-ShortNameLinkPathv2 contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18635f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18634f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1863570 + msDFS-Propertiesv2 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1863470 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1863370 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18633f0 + msDFS-LinkPathv2 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18632f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18631f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1863270 + msDFS-Commentv2 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1863170 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1863070 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18630f0 + mS-SQL-Vines contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1862ff0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1862ef0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1862f70 + mS-SQL-Version contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1862e70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1862d70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1862df0 + mS-SQL-Type contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1862cf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1862bf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1862c70 + mS-SQL-TCPIP contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1862b70 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1862a70 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1862af0 + mS-SQL-Status contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18629f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18628f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1862970 + mS-SQL-SPX contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1862870 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1862770 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18627f0 + mS-SQL-SortOrder contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18626f0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18625f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1862670 + mS-SQL-Size contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1862570 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1862470 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18624f0 + mS-SQL-ServiceAccount contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18623f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18622f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1862370 + mS-SQL-RegisteredOwner contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1862270 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1862170 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18621f0 + mS-SQL-Publisher contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18620f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1861ff0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1862070 + mS-SQL-PublicationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1861f70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1861e70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1861ef0 + mS-SQL-NamedPipe contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1861df0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1861cf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1861d70 + mS-SQL-Name contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1861c70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1861b70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1861bf0 + mS-SQL-MultiProtocol contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1861af0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18619f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1861a70 + mS-SQL-Memory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1861970 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1861870 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18618f0 + mS-SQL-Location contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18617f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18616f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1861770 + mS-SQL-LastUpdatedDate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1861670 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1861570 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18615f0 + mS-SQL-LastDiagnosticDate contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18614e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18613e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1861460 + mS-SQL-LastBackupDate contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1861360 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1861260 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18612e0 + mS-SQL-Language contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18611e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18610e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1861160 + mS-SQL-Keywords contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1861060 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1860f60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1860fe0 + mS-SQL-InformationURL contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1860ee0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1860de0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1860e60 + mS-SQL-GPSLongitude contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1860d60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1860c60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1860ce0 + mS-SQL-GPSLatitude contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1860be0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1860ae0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1860b60 + mS-SQL-GPSHeight contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1860a60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1860960 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18609e0 + mS-SQL-Description contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18608e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18607e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1860860 + mS-SQL-Database contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1860760 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1860660 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18606e0 + mS-SQL-CreationDate contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18605e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18604e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1860560 + mS-SQL-Contact contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1860460 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1860360 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18603e0 + mS-SQL-ConnectionURL contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18602e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18601e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1860260 + mS-SQL-Applications contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1860160 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1860060 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18600e0 + mS-SQL-AppleTalk contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185ffe0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185fee0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185ff60 + mS-SQL-Alias contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x185fe60 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185fd60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185fde0 + ms-net-ieee-8023-GP-PolicyGUID contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x185fcd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185fbd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185fc50 + ms-net-ieee-8023-GP-PolicyData contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x185fb40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185fa40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185fac0 + ms-net-ieee-80211-GP-PolicyGUID contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x185f9b0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185f8b0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185f930 + ms-net-ieee-80211-GP-PolicyData contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x185f820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185f720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185f7a0 + monikerDisplayName contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x185f6a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185f5a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185f620 + modifiedCountAtLastProm contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x185f510 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185f410 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185f490 + modifiedCount contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x185f390 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185f290 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185f310 + mobile contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x185f220 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185f120 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185f1a0 + minTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x185f0a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185efa0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185f020 + minPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x185ef20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185ee20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185eea0 + middleName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x185eda0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185eca0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185ed20 + mhsORAddress contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x185ec20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185eb20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185eba0 + meetingURL contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x185eaa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185e9a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185ea20 + meetingType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x185e920 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185e820 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185e8a0 + meetingScope contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x185e7a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185e6a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185e720 + meetingRecurrence contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x185e620 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185e520 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185e5a0 + meetingRating contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x185e4a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185e3a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185e420 + meetingProtocol contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x185e320 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185e220 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185e2a0 + meetingOwner contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x185e1a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185e0a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185e120 + meetingOriginator contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x185e020 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185df20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185dfa0 + meetingName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x185dea0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185dda0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185de20 + meetingLocation contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x185dd20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185dc20 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185dca0 + meetingLanguage contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x185dba0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185daa0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185db20 + meetingKeyword contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x185da20 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185d920 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185d9a0 + meetingIsEncrypted contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x185d8a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185d7a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185d820 + meetingIP contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x185d720 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185d620 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185d6a0 + meetingID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x185d5a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185d4a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185d520 + meetingDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x185d420 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185d320 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185d3a0 + meetingContactInfo contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x185d2a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185d1a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185d220 + meetingApplication contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x185d120 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185d020 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185d0a0 + meetingAdvertiseScope contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x185cfa0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185cea0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185cf20 + mayContain contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x185ce20 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185cd20 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185cda0 + maxTicketAge contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x185cca0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185cba0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185cc20 + maxStorage contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x185cb20 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185ca20 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185caa0 + maxRenewAge contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x185c9a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185c8a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185c920 + maxPwdAge contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x185c820 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185c720 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185c7a0 + mailAddress contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x185c6a0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185c5a0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185c620 + mail contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x185c530 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185c430 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185c4b0 + machinePasswordChangeInterval contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x185c3a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185c2a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185c320 + lSAModifiedCount contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185c220 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185c120 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185c1a0 + lSACreationTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x185c0a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185bfa0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185c020 + lockoutTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x185bf20 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185be20 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185bea0 + lockOutObservationWindow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x185bd90 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185bc90 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185bd10 + lockoutDuration contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x185bc10 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185bb10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185bb90 + location contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x185ba90 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185b990 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185ba10 + localizedDescription contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x185b910 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185b810 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185b890 + legacyExchangeDN contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185b790 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185b690 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185b710 + lDAPDisplayName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x185b610 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185b510 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185b590 + lDAPAdminLimits contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x185b490 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185b390 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185b410 + lastUpdateSequence contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x185b310 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185b210 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185b290 + lastSetTime contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x185b190 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185b090 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185b110 + lastLogonTimestamp contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x185b010 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185af10 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185af90 + lastLogon contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x185ae90 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185ad90 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185ae10 + lastLogoff contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x185ad10 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185ac10 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185ac90 + lastContentIndexed contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x185ab90 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x185aa90 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x185ab10 + lastBackupRestorationTime contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x185aa00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185a900 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185a980 + labeledURI contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x185a880 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185a780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185a800 + l contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x185a710 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185a610 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185a690 + knowledgeInformation contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x185a590 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185a490 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185a510 + keywords contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x185a410 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185a310 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185a390 + iPSECNegotiationPolicyType contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x185a280 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x185a180 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185a200 + iPSECNegotiationPolicyAction contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x185a0f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1859ff0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x185a070 + ipsecName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1859f70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1859e70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1859ef0 + ipsecID contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1859df0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1859cf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1859d70 + ipPhone contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1859c70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1859b70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1859bf0 + internationalISDNNumber contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1859ae0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18599e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1859a60 + initials contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1859960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1859860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18598e0 + initialAuthOutgoing contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18597e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18596e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1859760 + initialAuthIncoming contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1859660 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1859560 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18595e0 + info contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x18594f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18593f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1859470 + indexedScopes contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1859370 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1859270 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18592f0 + iconPath contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18591f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18590f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1859170 + houseIdentifier contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1859070 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858f70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858ff0 + host contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1858f00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858e00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858e80 + homePostalAddress contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1858d80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858c80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858d00 + homePhone contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1858c00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858b00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858b80 + homeDrive contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1858a80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858a00 + homeDirectory contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1858900 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858800 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858880 + helpFileName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1858780 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858680 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858700 + groupsToIgnore contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1858600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858580 + groupPriority contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1858480 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858380 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858400 + gPLink contains 7 bytes in 1 blocks (ref 0) d=(nil) 0x1858310 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858210 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858290 + gPCWQLFilter contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1858190 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1858090 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1858110 + gPCUserExtensionNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1858010 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857f10 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857f90 + gPCMachineExtensionNames contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1857e80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857d80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857e00 + gPCFileSysPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1857d00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857c00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857c80 + governsID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1857b80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857a80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857b00 + givenName contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1857a00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857900 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857980 + generationQualifier contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1857880 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857800 + fRSWorkingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1857700 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857600 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857680 + fRSVersion contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1857580 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857480 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857500 + fRSStagingPath contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1857400 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857300 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857380 + fRSServiceCommandStatus contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1857270 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1857170 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18571f0 + fRSServiceCommand contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18570f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1856ff0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1857070 + fRSRootPath contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1856f70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1856e70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1856ef0 + fRSFileFilter contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1856df0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1856cf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1856d70 + fRSFaultCondition contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1856c70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1856b70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1856bf0 + fRSDirectoryFilter contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1856af0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18569f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1856a70 + fRSControlOutboundBacklog contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x1856960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1856860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18568e0 + fRSControlInboundBacklog contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x18567d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18566d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1856750 + fRSControlDataCreation contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1856650 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1856550 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18565d0 + friendlyNames contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18564d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18563d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1856450 + forceLogoff contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1856350 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1856250 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18562d0 + flatName contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18561d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18560d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1856150 + fileExtPriority contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1856050 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1855f50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1855fd0 + facsimileTelephoneNumber contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1855ec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1855dc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1855e40 + extraColumns contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1855d40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1855c40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1855cc0 + extensionName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1855bc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1855ac0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1855b40 + extendedClassInfo contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1855a40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1855940 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18559c0 + extendedAttributeInfo contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18558c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18557c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1855840 + enrollmentProviders contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1855740 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1855640 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18556c0 + employeeType contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18555c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18554c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1855540 + employeeNumber contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1855440 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1855340 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18553c0 + employeeID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18552c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18551c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1855240 + dSUIAdminNotification contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1855140 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1855040 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18550c0 + dSHeuristics contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1854fc0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1854ec0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1854f40 + driverName contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1854e40 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1854d40 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1854dc0 + drink contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x1854cd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1854bd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1854c50 + domainReplica contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1854b50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1854a50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1854ad0 + documentVersion contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18549d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18548d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1854950 + documentTitle contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1854850 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1854750 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18547d0 + documentPublisher contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18546d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18545d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1854650 + documentLocation contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1854550 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1854450 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18544d0 + documentIdentifier contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18543d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18542d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1854350 + dnsRoot contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1854250 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1854150 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18541d0 + dNSHostName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18540d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1853fd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1854050 + dmdName contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1853f50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1853e50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1853ed0 + division contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1853dd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1853cd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1853d50 + dITContentRules contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1853c50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1853b50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1853bd0 + displayName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1853ad0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18539d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1853a50 + dhcpUpdateTime contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1853950 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1853850 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18538d0 + dhcpUniqueKey contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x18537d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18536d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1853750 + dhcpObjName contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1853650 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1853550 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18535d0 + dhcpObjDescription contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18534d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18533d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1853450 + dhcpMaxKey contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1853350 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1853250 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18532d0 + dhcpIdentification contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18531d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x18530d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1853150 + dhcpFlags contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1853050 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1852f50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1852fd0 + desktopProfile contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1852ed0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1852dd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1852e50 + description contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1852d50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1852c50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1852cd0 + departmentNumber contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1852bd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1852ad0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1852b50 + department contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1852a50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1852950 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18529d0 + defaultSecurityDescriptor contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x18528c0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18527c0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1852840 + dc contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1852750 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1852650 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18526d0 + creator contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18525d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18524d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1852550 + creationWizard contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1852450 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x1852350 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18523d0 + creationTime contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x18522d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18521d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1852250 + createWizardExt contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1852150 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1852050 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18520d0 + createDialog contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1851fd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1851ed0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1851f50 + contextMenu contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1851e50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1851d50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1851dd0 + cOMUniqueLIBID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1851cd0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1851bd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1851c50 + cOMTypelibId contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1851b50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1851a50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1851ad0 + cOMTreatAsClassId contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x18519d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18518d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1851950 + cOMProgID contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1851850 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1851750 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18517d0 + company contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18516d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18515d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1851650 + cOMOtherProgId contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1851550 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1851450 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18514d0 + comment contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x18513d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18512d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1851350 + cOMInterfaceID contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1851250 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1851150 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18511d0 + cOMCLSID contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18510d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1850fd0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1851050 + cOMClassID contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1850f50 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1850e50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1850ed0 + co contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1850de0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1850ce0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1850d60 + cn contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1850c70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1850b70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1850bf0 + classDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1850af0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18509f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1850a70 + certificateTemplates contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1850970 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1850870 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18508f0 + cAWEBURL contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18507f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18506f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1850770 + cAUsages contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1850670 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1850570 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18505f0 + categories contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18504f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18503f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1850470 + catalogs contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1850370 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x1850270 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18502f0 + carLicense contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18501f0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x18500f0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1850170 + canUpgradeScript contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1850070 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184ff70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184fff0 + canonicalName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x184fef0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184fdf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184fe70 + cAConnect contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x184fd70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184fc70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184fcf0 + cACertificateDN contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x184fbf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184faf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184fb70 + c contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x184fa80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184f980 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184fa00 + businessCategory contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184f900 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184f800 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184f880 + builtinModifiedCount contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x184f780 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184f680 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184f700 + builtinCreationTime contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x184f600 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184f500 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184f580 + buildingName contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x184f480 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184f380 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184f400 + badPasswordTime contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x184f300 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184f200 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184f280 + auxiliaryClass contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x184f180 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184f080 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184f100 + attributeTypes contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x184f000 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184ef00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184ef80 + attributeSyntax contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x184ee80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184ed80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184ee00 + attributeID contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x184ed00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184ec00 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184ec80 + attributeDisplayNames contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x184eb80 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184ea80 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184eb00 + assetNumber contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x184ea00 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184e900 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184e980 + appliesTo contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x184e880 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184e780 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184e800 + applicationName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x184e700 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184e600 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184e680 + aNR contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x184e590 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184e490 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184e510 + altSecurityIdentities contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x184e410 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184e310 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184e390 + allowedChildClassesEffective contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x184e280 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184e180 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184e200 + allowedChildClasses contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x184e100 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184e000 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184e080 + allowedAttributesEffective contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x184df70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184de70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184def0 + allowedAttributes contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x184ddf0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184dcf0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184dd70 + adminPropertyPages contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x184dc70 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184db70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184dbf0 + adminMultiselectPropertyPages contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x184dae0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184d9e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184da60 + adminDisplayName contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184d960 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184d860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184d8e0 + adminDescription contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184d7e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184d6e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184d760 + adminContextMenu contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184d660 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184d560 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184d5e0 + addressType contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x184d4e0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184d3e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184d460 + additionalTrustedServiceNames contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x184d350 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184d250 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184d2d0 + aCSTimeOfDay contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x184d1d0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184d0d0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184d150 + aCSServerList contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x184d050 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184cf50 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184cfd0 + aCSRSVPLogFilesLocation contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x184cec0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184cdc0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184ce40 + aCSRSVPAccountFilesLocation contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x184cd30 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184cc30 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184ccb0 + aCSPolicyName contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x184cbb0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184cab0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184cb30 + aCSPermissionBits contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x184ca30 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184c930 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184c9b0 + aCSNonReservedTxSize contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x184c8b0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184c7b0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184c830 + aCSNonReservedTxLimit contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x184c730 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184c630 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184c6b0 + aCSNonReservedTokenSize contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x184c5a0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184c4a0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184c520 + aCSNonReservedPeakRate contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x184c420 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184c320 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184c3a0 + aCSNonReservedMinPolicedSize contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x184c290 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184c190 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184c210 + aCSNonReservedMaxSDUSize contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x184c100 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184c000 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184c080 + aCSMinimumPolicedSize contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x184bf80 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184be80 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184bf00 + aCSMinimumLatency contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x184be00 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184bd00 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184bd80 + aCSMinimumDelayVariation contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x184bc70 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184bb70 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184bbf0 + aCSMaxTokenRatePerFlow contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x184baf0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184b9f0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184ba70 + aCSMaxTokenBucketPerFlow contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x184b960 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184b860 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184b8e0 + aCSMaxPeakBandwidthPerFlow contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x184b7d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184b6d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184b750 + aCSMaxPeakBandwidth contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x184b650 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184b550 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184b5d0 + aCSMaximumSDUSize contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x184b4d0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184b3d0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184b450 + aCSMaxAggregatePeakRatePerUser contains 31 bytes in 1 blocks (ref 0) d=(nil) 0x184b340 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184b240 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184b2c0 + aCSIdentityName contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x184b1c0 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184b0c0 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184b140 + aCSAllocableRSVPBandwidth contains 26 bytes in 1 blocks (ref 0) d=(nil) 0x184b030 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184af30 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184afb0 + aCSAggregateTokenRatePerUser contains 29 bytes in 1 blocks (ref 0) d=(nil) 0x184aea0 + struct ldb_val contains 33 bytes in 2 blocks (ref 0) d=(nil) 0x184ada0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x184ae20 + accountNameHistory contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x184ad20 + struct ldb_val contains 24 bytes in 2 blocks (ref 0) d=(nil) 0x184ac20 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x184aca0 + accountExpires contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x184aba0 + struct ldb_dn contains 84 bytes in 2 blocks (ref 0) d=(nil) 0x1846190 + @ATTRIBUTES contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1846250 + struct ldb_message contains 3939 bytes in 127 blocks (ref 0) d=(nil) 0x17febd0 + struct ldb_message_element contains 3832 bytes in 124 blocks (ref 0) d=(nil) 0x1841a10 + struct ldb_val contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x1845ee0 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1845f60 + @IDXVERSION contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1845e60 + struct ldb_val contains 18 bytes in 2 blocks (ref 0) d=(nil) 0x1845d70 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1845df0 + @IDXONE contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1845cf0 + struct ldb_val contains 3671 bytes in 116 blocks (ref 0) d=(nil) 0x1841b60 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1845c70 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1845bf0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1845b70 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1845b00 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1845a80 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1845a00 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1845980 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1845900 + ../lib/ldb/common/ldb_pack.c:264 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1845890 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1845810 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1845790 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1845710 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1845690 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1845610 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1845590 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1845510 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1845490 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x1845410 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1845390 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1845310 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1845290 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1845210 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1845190 + ../lib/ldb/common/ldb_pack.c:264 contains 2 bytes in 1 blocks (ref 0) d=(nil) 0x1845120 + ../lib/ldb/common/ldb_pack.c:264 contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x18450a0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1845020 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1844f90 + ../lib/ldb/common/ldb_pack.c:264 contains 30 bytes in 1 blocks (ref 0) d=(nil) 0x1844f00 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1844e80 + ../lib/ldb/common/ldb_pack.c:264 contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x1844df0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1844d70 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1844cf0 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1844c70 + ../lib/ldb/common/ldb_pack.c:264 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1844be0 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1844b50 + ../lib/ldb/common/ldb_pack.c:264 contains 25 bytes in 1 blocks (ref 0) d=(nil) 0x1844ac0 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1844a40 + ../lib/ldb/common/ldb_pack.c:264 contains 22 bytes in 1 blocks (ref 0) d=(nil) 0x18449c0 + ../lib/ldb/common/ldb_pack.c:264 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1844930 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x18448b0 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1844830 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18447b0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1844730 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18446b0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1844630 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18445b0 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1844530 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x18444a0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1844420 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1844390 + ../lib/ldb/common/ldb_pack.c:264 contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x1844300 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1844280 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1844200 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1844180 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x18440f0 + ../lib/ldb/common/ldb_pack.c:264 contains 28 bytes in 1 blocks (ref 0) d=(nil) 0x1844060 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1843fe0 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1843f60 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1843ee0 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1843e60 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1843de0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1843d60 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1843ce0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1843c60 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1843be0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1843b60 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1843ae0 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1843a60 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18439e0 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1843960 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x18438e0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1843860 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x18437e0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1843760 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18436e0 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1843660 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x18435e0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1843560 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x18434e0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1843460 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18433e0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1843360 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x18432e0 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1843260 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x18431e0 + ../lib/ldb/common/ldb_pack.c:264 contains 12 bytes in 1 blocks (ref 0) d=(nil) 0x1843160 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x18430f0 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1843070 + ../lib/ldb/common/ldb_pack.c:264 contains 27 bytes in 1 blocks (ref 0) d=(nil) 0x1842fe0 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1842f60 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1842ee0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1842e60 + ../lib/ldb/common/ldb_pack.c:264 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x1842df0 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1842d70 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1842cf0 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1842c70 + ../lib/ldb/common/ldb_pack.c:264 contains 20 bytes in 1 blocks (ref 0) d=(nil) 0x1842bf0 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1842b70 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1842af0 + ../lib/ldb/common/ldb_pack.c:264 contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x1842a70 + ../lib/ldb/common/ldb_pack.c:264 contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x18429f0 + ../lib/ldb/common/ldb_pack.c:264 contains 23 bytes in 1 blocks (ref 0) d=(nil) 0x1842970 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x18428f0 + ../lib/ldb/common/ldb_pack.c:264 contains 3 bytes in 1 blocks (ref 0) d=(nil) 0x1842880 + ../lib/ldb/common/ldb_pack.c:264 contains 15 bytes in 1 blocks (ref 0) d=(nil) 0x1842800 + ../lib/ldb/common/ldb_pack.c:264 contains 14 bytes in 1 blocks (ref 0) d=(nil) 0x1842780 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1842700 + ../lib/ldb/common/ldb_pack.c:264 contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x1842680 + ../lib/ldb/common/ldb_pack.c:264 contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x1842600 + ../lib/ldb/common/ldb_pack.c:264 contains 19 bytes in 1 blocks (ref 0) d=(nil) 0x1842580 + ../lib/ldb/common/ldb_pack.c:264 contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x1842500 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1842480 + ../lib/ldb/common/ldb_pack.c:264 contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1842400 + ../lib/ldb/common/ldb_pack.c:264 contains 13 bytes in 1 blocks (ref 0) d=(nil) 0x1842380 + ../lib/ldb/common/ldb_pack.c:264 contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x1842300 + @IDXATTR contains 9 bytes in 1 blocks (ref 0) d=(nil) 0x1841ae0 + struct ldb_dn contains 83 bytes in 2 blocks (ref 0) d=(nil) 0x18418d0 + @INDEXLIST contains 11 bytes in 1 blocks (ref 0) d=(nil) 0x1841990 + struct ltdb_wrap contains 40 bytes in 1 blocks (ref 0) d=0x2af290dc12e8 0x17fdc90 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x17fd800 + /home/rusty/samba/st/fl2000dc/private/sam.ldb contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x17fe980 + /home/rusty/samba/st/fl2000dc/private/sam.ldb contains 46 bytes in 1 blocks (ref 0) d=(nil) 0x17fd700 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x17fda10 + struct ldb_dn_extended_syntax contains 320 bytes in 1 blocks (ref 0) d=(nil) 0x17fe7d0 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x17fcf90 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x17fd980 + struct ldb_opaque contains 24 bytes in 1 blocks (ref 0) d=(nil) 0x17fdb10 + /home/rusty/samba/bin/modules/ldb contains 34 bytes in 1 blocks (ref 0) d=(nil) 0x17fc920 + struct ldb_schema_attribute contains 15048 bytes in 1 blocks (ref 0) d=(nil) 0x18dee70 + struct tevent_timer contains 80 bytes in 1 blocks (ref 0) d=0x2af2770e2f2c 0x17fbe70 + struct tevent_fd contains 88 bytes in 1 blocks (ref 0) d=0x2af2770e2515 0x17fbd30 + struct std_event_context contains 24 bytes in 1 blocks (ref 0) d=0x2af2770e1c09 0x17fbca0 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb8e0 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb850 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb7c0 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb730 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb6a0 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb610 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb580 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb4f0 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb460 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb3d0 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb340 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb2b0 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb120 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb090 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17fb000 + struct registered_server contains 32 bytes in 1 blocks (ref 0) d=(nil) 0x17faf70 + struct auth_backend contains 358 bytes in 15 blocks (ref 0) d=(nil) 0x17fae50 + ../source4/auth/ntlm/auth.c:663 contains 37 bytes in 2 blocks (ref 0) d=(nil) 0x181b8c0 + unix contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x17faf00 + ../source4/auth/ntlm/auth.c:663 contains 49 bytes in 2 blocks (ref 0) d=(nil) 0x17fad40 + name_to_ntstatus contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x17fadd0 + ../source4/auth/ntlm/auth.c:663 contains 49 bytes in 2 blocks (ref 0) d=(nil) 0x17fac30 + winbind_wbclient contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x17facc0 + ../source4/auth/ntlm/auth.c:663 contains 40 bytes in 2 blocks (ref 0) d=(nil) 0x17fab20 + winbind contains 8 bytes in 1 blocks (ref 0) d=(nil) 0x17fabb0 + ../source4/auth/ntlm/auth.c:663 contains 42 bytes in 2 blocks (ref 0) d=(nil) 0x17faa10 + anonymous contains 10 bytes in 1 blocks (ref 0) d=(nil) 0x17faaa0 + ../source4/auth/ntlm/auth.c:663 contains 49 bytes in 2 blocks (ref 0) d=(nil) 0x17fa900 + sam_ignoredomain contains 17 bytes in 1 blocks (ref 0) d=(nil) 0x17fa990 + ../source4/auth/ntlm/auth.c:663 contains 36 bytes in 2 blocks (ref 0) d=(nil) 0x18039c0 + sam contains 4 bytes in 1 blocks (ref 0) d=(nil) 0x17fa890 + struct sys_notify_backend contains 16 bytes in 1 blocks (ref 0) d=(nil) 0x17d4460 + struct gensec_security_ops * contains 72 bytes in 1 blocks (ref 0) d=(nil) 0x17de590 + struct tdb_wrap contains 97 bytes in 3 blocks (ref 0) d=(nil) 0x17d4180 + struct tdb_wrap_private contains 89 bytes in 2 blocks (ref 0) d=0x2af279e7ff20 0x17d43d0 + /home/rusty/samba/st/fl2000dc/private/schannel_store.tdb contains 57 bytes in 1 blocks (ref 0) d=(nil) 0x17dd870 + struct tdb_wrap contains 91 bytes in 3 blocks (ref 0) d=(nil) 0x17d4220 + struct tdb_wrap_private contains 83 bytes in 2 blocks (ref 0) d=0x2af279e7ff20 0x17d42a0 + /home/rusty/samba/st/fl2000dc/private/randseed.tdb contains 51 bytes in 1 blocks (ref 0) d=(nil) 0x17d4330 + struct smb_iconv_handle contains 610 bytes in 8 blocks (ref 0) d=0x2af276ec3872 0x17d4590 + iconv(UTF8,CP850) contains 82 bytes in 2 blocks (ref 0) d=0x2af276ec79ca 0x21cb650 + .name contains 18 bytes in 1 blocks (ref 0) d=(nil) 0x2203200 + iconv(UTF8,UTF-16LE) contains 85 bytes in 2 blocks (ref 0) d=0x2af276ec79ca 0x25bf5f0 + .name contains 21 bytes in 1 blocks (ref 0) d=(nil) 0x1a103a0 + talloc_new: ../lib/util/charset/codepoints.c:251 contains 11 bytes in 3 blocks (ref 0) d=(nil) 0x17d47b0 + UTF8 contains 5 bytes in 1 blocks (ref 0) d=(nil) 0x17d4890 + CP850 contains 6 bytes in 1 blocks (ref 0) d=(nil) 0x17d4820 diff --git a/nostrdb/ccan/ccan/tal/str/LICENSE b/nostrdb/ccan/ccan/tal/str/LICENSE new file mode 120000 index 000000000..2b1feca54 --- /dev/null +++ b/nostrdb/ccan/ccan/tal/str/LICENSE @@ -0,0 +1 @@ +../../../licenses/BSD-MIT \ No newline at end of file diff --git a/nostrdb/ccan/ccan/tal/str/_info b/nostrdb/ccan/ccan/tal/str/_info new file mode 100644 index 000000000..9b9c70b6b --- /dev/null +++ b/nostrdb/ccan/ccan/tal/str/_info @@ -0,0 +1,61 @@ +#include "config.h" +#include +#include + +/** + * tal/str - string helper routines which use tal + * + * This is a grab bag of functions for string operations, designed to enhance + * the standard string.h; these are separated from the non-tal-needing + * string utilities in "str.h". Each string created by this library + * will have tal_count() equal to strlen() + 1 (assuming you didn't create + * a string containing a NUL, such as using tal_fmt("%c", 0)). + * + * Example: + * #include + * #include + * #include + * + * // Dumb demo program to double-linespace a file. + * int main(int argc, char *argv[]) + * { + * char *textfile; + * char **lines; + * + * if (argc > 2) + * errx(1, "Takes 0 or 1 arguments"); + * // Grab lines in file. + * textfile = grab_file(NULL, argv[1]); + * if (!textfile) + * err(1, "Failed reading %s", argv[1]); + * lines = tal_strsplit(textfile, textfile, "\n", STR_EMPTY_OK); + * + * // Join them back together with two linefeeds. + * printf("%s", tal_strjoin(textfile, lines, "\n\n", STR_TRAIL)); + * + * // Free everything, just because we can. + * tal_free(textfile); + * return 0; + * } + * + * License: BSD-MIT + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + printf("ccan/str\n"); +#ifdef TAL_USE_TALLOC + printf("ccan/tal/talloc\n"); +#else + printf("ccan/tal\n"); +#endif + printf("ccan/take\n"); + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/tal/str/str.c b/nostrdb/ccan/ccan/tal/str/str.c index 3ec0be72e..cec31c752 100644 --- a/nostrdb/ccan/ccan/tal/str/str.c +++ b/nostrdb/ccan/ccan/tal/str/str.c @@ -4,311 +4,312 @@ #include #include #include +#include "str.h" #include #include #include #include #include -#include "str.h" +#include char *tal_strdup_(const tal_t *ctx, const char *p, const char *label) { - /* We have to let through NULL for take(). */ - return tal_dup_arr_label(ctx, char, p, p ? strlen(p) + 1: 1, 0, label); + /* We have to let through NULL for take(). */ + return tal_dup_arr_label(ctx, char, p, p ? strlen(p) + 1: 1, 0, label); } char *tal_strndup_(const tal_t *ctx, const char *p, size_t n, const char *label) { - size_t len; - char *ret; - - /* We have to let through NULL for take(). */ - if (likely(p)) - len = strnlen(p, n); - else - len = n; - - ret = tal_dup_arr_label(ctx, char, p, len, 1, label); - if (ret) - ret[len] = '\0'; - return ret; + size_t len; + char *ret; + + /* We have to let through NULL for take(). */ + if (likely(p)) + len = strnlen(p, n); + else + len = n; + + ret = tal_dup_arr_label(ctx, char, p, len, 1, label); + if (ret) + ret[len] = '\0'; + return ret; } char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt, ...) { - va_list ap; - char *ret; + va_list ap; + char *ret; - va_start(ap, fmt); - ret = tal_vfmt_(ctx, fmt, ap, label); - va_end(ap); + va_start(ap, fmt); + ret = tal_vfmt_(ctx, fmt, ap, label); + va_end(ap); - return ret; + return ret; } static bool do_vfmt(char **buf, size_t off, const char *fmt, va_list ap) { - /* A decent guess to start. */ - size_t max = strlen(fmt) * 2 + 1; - bool ok; - - for (;;) { - va_list ap2; - int ret; - - if (!tal_resize(buf, off + max)) { - ok = false; - break; - } - - va_copy(ap2, ap); - ret = vsnprintf(*buf + off, max, fmt, ap2); - va_end(ap2); - - if (ret < max) { - ok = true; - /* Make sure tal_count() is correct! */ - tal_resize(buf, off + ret + 1); - break; - } - max *= 2; - } - - if (taken(fmt)) - tal_free(fmt); - return ok; + /* A decent guess to start. */ + size_t max = strlen(fmt) * 2 + 1; + bool ok; + + for (;;) { + va_list ap2; + int ret; + + if (!tal_resize(buf, off + max)) { + ok = false; + break; + } + + va_copy(ap2, ap); + ret = vsnprintf(*buf + off, max, fmt, ap2); + va_end(ap2); + + if (ret < max) { + ok = true; + /* Make sure tal_count() is correct! */ + tal_resize(buf, off + ret + 1); + break; + } + max *= 2; + } + + if (taken(fmt)) + tal_free(fmt); + return ok; } char *tal_vfmt_(const tal_t *ctx, const char *fmt, va_list ap, const char *label) { - char *buf; + char *buf; - if (!fmt && taken(fmt)) - return NULL; + if (!fmt && taken(fmt)) + return NULL; - /* A decent guess to start. */ - buf = tal_arr_label(ctx, char, strlen(fmt) * 2, label); - if (!do_vfmt(&buf, 0, fmt, ap)) - buf = tal_free(buf); - return buf; + /* A decent guess to start. */ + buf = tal_arr_label(ctx, char, strlen(fmt) * 2, label); + if (!do_vfmt(&buf, 0, fmt, ap)) + buf = tal_free(buf); + return buf; } bool tal_append_vfmt(char **baseptr, const char *fmt, va_list ap) { - if (!fmt && taken(fmt)) - return false; + if (!fmt && taken(fmt)) + return false; - return do_vfmt(baseptr, strlen(*baseptr), fmt, ap); + return do_vfmt(baseptr, strlen(*baseptr), fmt, ap); } bool tal_append_fmt(char **baseptr, const char *fmt, ...) { - va_list ap; - bool ret; + va_list ap; + bool ret; - va_start(ap, fmt); - ret = tal_append_vfmt(baseptr, fmt, ap); - va_end(ap); + va_start(ap, fmt); + ret = tal_append_vfmt(baseptr, fmt, ap); + va_end(ap); - return ret; + return ret; } char *tal_strcat_(const tal_t *ctx, const char *s1, const char *s2, - const char *label) + const char *label) { - size_t len1, len2; - char *ret; - - if (unlikely(!s2) && taken(s2)) { - if (taken(s1)) - tal_free(s1); - return NULL; - } - /* We have to let through NULL for take(). */ - len1 = s1 ? strlen(s1) : 0; - len2 = strlen(s2); - - ret = tal_dup_arr_label(ctx, char, s1, len1, len2 + 1, label); - if (likely(ret)) - memcpy(ret + len1, s2, len2 + 1); - - if (taken(s2)) - tal_free(s2); - return ret; + size_t len1, len2; + char *ret; + + if (unlikely(!s2) && taken(s2)) { + if (taken(s1)) + tal_free(s1); + return NULL; + } + /* We have to let through NULL for take(). */ + len1 = s1 ? strlen(s1) : 0; + len2 = strlen(s2); + + ret = tal_dup_arr_label(ctx, char, s1, len1, len2 + 1, label); + if (likely(ret)) + memcpy(ret + len1, s2, len2 + 1); + + if (taken(s2)) + tal_free(s2); + return ret; } char **tal_strsplit_(const tal_t *ctx, - const char *string, const char *delims, enum strsplit flags, - const char *label) + const char *string, const char *delims, enum strsplit flags, + const char *label) { - char **parts, *str; - size_t max = 64, num = 0; - - parts = tal_arr(ctx, char *, max + 1); - if (unlikely(!parts)) { - if (taken(string)) - tal_free(string); - if (taken(delims)) - tal_free(delims); - return NULL; - } - str = tal_strdup(parts, string); - if (unlikely(!str)) - goto fail; - if (unlikely(!delims) && is_taken(delims)) - goto fail; - - if (flags == STR_NO_EMPTY) - str += strspn(str, delims); - - while (*str != '\0') { - size_t len = strcspn(str, delims), dlen; - - parts[num] = str; - dlen = strspn(str + len, delims); - parts[num][len] = '\0'; - if (flags == STR_EMPTY_OK && dlen) - dlen = 1; - str += len + dlen; - if (++num == max && !tal_resize(&parts, max*=2 + 1)) - goto fail; - } - parts[num] = NULL; - - /* Ensure that tal_count() is correct. */ - if (unlikely(!tal_resize(&parts, num+1))) - goto fail; - - if (taken(delims)) - tal_free(delims); - return parts; + char **parts, *str; + size_t max = 64, num = 0; + + parts = tal_arr(ctx, char *, max + 1); + if (unlikely(!parts)) { + if (taken(string)) + tal_free(string); + if (taken(delims)) + tal_free(delims); + return NULL; + } + str = tal_strdup(parts, string); + if (unlikely(!str)) + goto fail; + if (unlikely(!delims) && is_taken(delims)) + goto fail; + + if (flags == STR_NO_EMPTY) + str += strspn(str, delims); + + while (*str != '\0') { + size_t len = strcspn(str, delims), dlen; + + parts[num] = str; + dlen = strspn(str + len, delims); + parts[num][len] = '\0'; + if (flags == STR_EMPTY_OK && dlen) + dlen = 1; + str += len + dlen; + if (++num == max && !tal_resize(&parts, max*=2 + 1)) + goto fail; + } + parts[num] = NULL; + + /* Ensure that tal_count() is correct. */ + if (unlikely(!tal_resize(&parts, num+1))) + goto fail; + + if (taken(delims)) + tal_free(delims); + return parts; fail: - tal_free(parts); - if (taken(delims)) - tal_free(delims); - return NULL; + tal_free(parts); + if (taken(delims)) + tal_free(delims); + return NULL; } char *tal_strjoin_(const tal_t *ctx, - char *strings[], const char *delim, enum strjoin flags, - const char *label) + char *strings[], const char *delim, enum strjoin flags, + const char *label) { - unsigned int i; - char *ret = NULL; - size_t totlen = 0, dlen; - - if (unlikely(!strings) && is_taken(strings)) - goto fail; - - if (unlikely(!delim) && is_taken(delim)) - goto fail; - - dlen = strlen(delim); - ret = tal_arr_label(ctx, char, dlen*2+1, label); - if (!ret) - goto fail; - - ret[0] = '\0'; - for (i = 0; strings[i]; i++) { - size_t len = strlen(strings[i]); - - if (flags == STR_NO_TRAIL && !strings[i+1]) - dlen = 0; - if (!tal_resize(&ret, totlen + len + dlen + 1)) - goto fail; - memcpy(ret + totlen, strings[i], len); - totlen += len; - memcpy(ret + totlen, delim, dlen); - totlen += dlen; - } - ret[totlen] = '\0'; - /* Make sure tal_count() is correct! */ - tal_resize(&ret, totlen+1); + unsigned int i; + char *ret = NULL; + size_t totlen = 0, dlen; + + if (unlikely(!strings) && is_taken(strings)) + goto fail; + + if (unlikely(!delim) && is_taken(delim)) + goto fail; + + dlen = strlen(delim); + ret = tal_arr_label(ctx, char, dlen*2+1, label); + if (!ret) + goto fail; + + ret[0] = '\0'; + for (i = 0; strings[i]; i++) { + size_t len = strlen(strings[i]); + + if (flags == STR_NO_TRAIL && !strings[i+1]) + dlen = 0; + if (!tal_resize(&ret, totlen + len + dlen + 1)) + goto fail; + memcpy(ret + totlen, strings[i], len); + totlen += len; + memcpy(ret + totlen, delim, dlen); + totlen += dlen; + } + ret[totlen] = '\0'; + /* Make sure tal_count() is correct! */ + tal_resize(&ret, totlen+1); out: - if (taken(strings)) - tal_free(strings); - if (taken(delim)) - tal_free(delim); - return ret; + if (taken(strings)) + tal_free(strings); + if (taken(delim)) + tal_free(delim); + return ret; fail: - ret = tal_free(ret); - goto out; + ret = tal_free(ret); + goto out; } static size_t count_open_braces(const char *string) { #if 1 - size_t num = 0, esc = 0; - - while (*string) { - if (*string == '\\') - esc++; - else { - /* An odd number of \ means it's escaped. */ - if (*string == '(' && (esc & 1) == 0) - num++; - esc = 0; - } - string++; - } - return num; + size_t num = 0, esc = 0; + + while (*string) { + if (*string == '\\') + esc++; + else { + /* An odd number of \ means it's escaped. */ + if (*string == '(' && (esc & 1) == 0) + num++; + esc = 0; + } + string++; + } + return num; #else - return strcount(string, "("); + return strcount(string, "("); #endif } bool tal_strreg_(const tal_t *ctx, const char *string, const char *label, - const char *regex, ...) + const char *regex, ...) { - size_t nmatch = 1 + count_open_braces(regex); - regmatch_t matches[nmatch]; - regex_t r; - bool ret = false; - unsigned int i; - va_list ap; - - if (unlikely(!regex) && is_taken(regex)) - goto fail_no_re; - - if (regcomp(&r, regex, REG_EXTENDED) != 0) - goto fail_no_re; - - if (unlikely(!string) && is_taken(string)) - goto fail; - - if (regexec(&r, string, nmatch, matches, 0) != 0) - goto fail; - - ret = true; - va_start(ap, regex); - for (i = 1; i < nmatch; i++) { - char **arg = va_arg(ap, char **); - if (arg) { - /* eg. ([a-z])? can give "no match". */ - if (matches[i].rm_so == -1) - *arg = NULL; - else { - *arg = tal_strndup_(ctx, - string + matches[i].rm_so, - matches[i].rm_eo - - matches[i].rm_so, - label); - /* FIXME: If we fail, we set some and leak! */ - if (!*arg) { - ret = false; - break; - } - } - } - } - va_end(ap); + size_t nmatch = 1 + count_open_braces(regex); + regmatch_t matches[nmatch]; + regex_t r; + bool ret = false; + unsigned int i; + va_list ap; + + if (unlikely(!regex) && is_taken(regex)) + goto fail_no_re; + + if (regcomp(&r, regex, REG_EXTENDED) != 0) + goto fail_no_re; + + if (unlikely(!string) && is_taken(string)) + goto fail; + + if (regexec(&r, string, nmatch, matches, 0) != 0) + goto fail; + + ret = true; + va_start(ap, regex); + for (i = 1; i < nmatch; i++) { + char **arg = va_arg(ap, char **); + if (arg) { + /* eg. ([a-z])? can give "no match". */ + if (matches[i].rm_so == -1) + *arg = NULL; + else { + *arg = tal_strndup_(ctx, + string + matches[i].rm_so, + matches[i].rm_eo + - matches[i].rm_so, + label); + /* FIXME: If we fail, we set some and leak! */ + if (!*arg) { + ret = false; + break; + } + } + } + } + va_end(ap); fail: - regfree(&r); + regfree(&r); fail_no_re: - if (taken(regex)) - tal_free(regex); - if (taken(string)) - tal_free(string); - return ret; + if (taken(regex)) + tal_free(regex); + if (taken(string)) + tal_free(string); + return ret; } diff --git a/nostrdb/ccan/ccan/tal/str/str.h b/nostrdb/ccan/ccan/tal/str/str.h index 56a0f22b2..f93948440 100644 --- a/nostrdb/ccan/ccan/tal/str/str.h +++ b/nostrdb/ccan/ccan/tal/str/str.h @@ -4,7 +4,7 @@ #ifdef TAL_USE_TALLOC #include #else -#include "ccan/tal/tal.h" +#include #endif #include #include @@ -30,7 +30,7 @@ char *tal_strdup_(const tal_t *ctx, const char *p TAKES, const char *label); */ #define tal_strndup(ctx, p, n) tal_strndup_(ctx, p, n, TAL_LABEL(char, "[]")) char *tal_strndup_(const tal_t *ctx, const char *p TAKES, size_t n, - const char *label); + const char *label); /** * tal_fmt - allocate a formatted string @@ -39,10 +39,10 @@ char *tal_strndup_(const tal_t *ctx, const char *p TAKES, size_t n, * * The returned string will have tal_count() == strlen() + 1. */ -#define tal_fmt(ctx, ...) \ - tal_fmt_(ctx, TAL_LABEL(char, "[]"), __VA_ARGS__) +#define tal_fmt(ctx, ...) \ + tal_fmt_(ctx, TAL_LABEL(char, "[]"), __VA_ARGS__) char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt TAKES, - ...) PRINTF_FMT(3,4); + ...) PRINTF_FMT(3,4); /** * tal_vfmt - allocate a formatted string (va_list version) @@ -52,11 +52,11 @@ char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt TAKES, * * The returned string will have tal_count() == strlen() + 1. */ -#define tal_vfmt(ctx, fmt, va) \ - tal_vfmt_(ctx, fmt, va, TAL_LABEL(char, "[]")) +#define tal_vfmt(ctx, fmt, va) \ + tal_vfmt_(ctx, fmt, va, TAL_LABEL(char, "[]")) char *tal_vfmt_(const tal_t *ctx, const char *fmt TAKES, va_list ap, - const char *label) - PRINTF_FMT(2,0); + const char *label) + PRINTF_FMT(2,0); /** * tal_append_fmt - append a formatted string to a talloc string. @@ -89,11 +89,11 @@ bool tal_append_vfmt(char **baseptr, const char *fmt TAKES, va_list ap); */ #define tal_strcat(ctx, s1, s2) tal_strcat_(ctx, s1, s2, TAL_LABEL(char, "[]")) char *tal_strcat_(const tal_t *ctx, const char *s1 TAKES, const char *s2 TAKES, - const char *label); + const char *label); enum strsplit { - STR_EMPTY_OK, - STR_NO_EMPTY + STR_EMPTY_OK, + STR_NO_EMPTY }; /** @@ -115,33 +115,33 @@ enum strsplit { * return the number of elements plus 1 (for that NULL). * * Example: - * #include - * ... - * static unsigned int count_long_lines(const char *string) - * { - * char **lines; - * unsigned int i, long_lines = 0; - * - * // Can only fail on out-of-memory. - * lines = tal_strsplit(NULL, string, "\n", STR_NO_EMPTY); - * for (i = 0; lines[i] != NULL; i++) - * if (strlen(lines[i]) > 80) - * long_lines++; - * tal_free(lines); - * return long_lines; - * } + * #include + * ... + * static unsigned int count_long_lines(const char *string) + * { + * char **lines; + * unsigned int i, long_lines = 0; + * + * // Can only fail on out-of-memory. + * lines = tal_strsplit(NULL, string, "\n", STR_NO_EMPTY); + * for (i = 0; lines[i] != NULL; i++) + * if (strlen(lines[i]) > 80) + * long_lines++; + * tal_free(lines); + * return long_lines; + * } */ -#define tal_strsplit(ctx, string, delims, flag) \ - tal_strsplit_(ctx, string, delims, flag, TAL_LABEL(char *, "[]")) +#define tal_strsplit(ctx, string, delims, flag) \ + tal_strsplit_(ctx, string, delims, flag, TAL_LABEL(char *, "[]")) char **tal_strsplit_(const tal_t *ctx, - const char *string TAKES, - const char *delims TAKES, - enum strsplit flag, - const char *label); + const char *string TAKES, + const char *delims TAKES, + enum strsplit flag, + const char *label); enum strjoin { - STR_TRAIL, - STR_NO_TRAIL + STR_TRAIL, + STR_NO_TRAIL }; /** @@ -158,24 +158,24 @@ enum strjoin { * The returned string will have tal_count() == strlen() + 1. * * Example: - * // Append the string "--EOL" to each line. - * static char *append_to_all_lines(const char *string) - * { - * char **lines, *ret; - * - * lines = tal_strsplit(NULL, string, "\n", STR_EMPTY_OK); - * ret = tal_strjoin(NULL, lines, "-- EOL\n", STR_TRAIL); - * tal_free(lines); - * return ret; - * } + * // Append the string "--EOL" to each line. + * static char *append_to_all_lines(const char *string) + * { + * char **lines, *ret; + * + * lines = tal_strsplit(NULL, string, "\n", STR_EMPTY_OK); + * ret = tal_strjoin(NULL, lines, "-- EOL\n", STR_TRAIL); + * tal_free(lines); + * return ret; + * } */ -#define tal_strjoin(ctx, strings, delim, flags) \ - tal_strjoin_(ctx, strings, delim, flags, TAL_LABEL(char, "[]")) +#define tal_strjoin(ctx, strings, delim, flags) \ + tal_strjoin_(ctx, strings, delim, flags, TAL_LABEL(char, "[]")) char *tal_strjoin_(const void *ctx, - char *strings[] TAKES, - const char *delim TAKES, - enum strjoin flags, - const char *label); + char *strings[] TAKES, + const char *delim TAKES, + enum strjoin flags, + const char *label); /** * tal_strreg - match/extract from a string via (extended) regular expressions. @@ -196,30 +196,30 @@ char *tal_strjoin_(const void *ctx, * The allocated strings will have tal_count() == strlen() + 1. * * See Also: - * regcomp(3), regex(3). + * regcomp(3), regex(3). * * Example: - * // Given "My name is Rusty" outputs "Hello Rusty!\n" - * // Given "my first name is Rusty Russell" outputs "Hello Rusty Russell!\n" - * // Given "My name isnt Rusty Russell" outputs "Hello there!\n" - * int main(int argc, char *argv[]) - * { - * char *person, *input; - * - * (void)argc; - * // Join args and trim trailing space. - * input = tal_strjoin(NULL, argv+1, " ", STR_NO_TRAIL); - * if (tal_strreg(NULL, input, - * "[Mm]y (first )?name is ([A-Za-z ]+)", - * NULL, &person)) - * printf("Hello %s!\n", person); - * else - * printf("Hello there!\n"); - * return 0; - * } + * // Given "My name is Rusty" outputs "Hello Rusty!\n" + * // Given "my first name is Rusty Russell" outputs "Hello Rusty Russell!\n" + * // Given "My name isnt Rusty Russell" outputs "Hello there!\n" + * int main(int argc, char *argv[]) + * { + * char *person, *input; + * + * (void)argc; + * // Join args and trim trailing space. + * input = tal_strjoin(NULL, argv+1, " ", STR_NO_TRAIL); + * if (tal_strreg(NULL, input, + * "[Mm]y (first )?name is ([A-Za-z ]+)", + * NULL, &person)) + * printf("Hello %s!\n", person); + * else + * printf("Hello there!\n"); + * return 0; + * } */ -#define tal_strreg(ctx, string, ...) \ - tal_strreg_(ctx, string, TAL_LABEL(char, "[]"), __VA_ARGS__) +#define tal_strreg(ctx, string, ...) \ + tal_strreg_(ctx, string, TAL_LABEL(char, "[]"), __VA_ARGS__) bool tal_strreg_(const void *ctx, const char *string TAKES, - const char *label, const char *regex, ...); + const char *label, const char *regex, ...); #endif /* CCAN_STR_TAL_H */ diff --git a/nostrdb/ccan/ccan/tal/tal.c b/nostrdb/ccan/ccan/tal/tal.c index c9c8e9f79..1230d8cac 100644 --- a/nostrdb/ccan/ccan/tal/tal.c +++ b/nostrdb/ccan/ccan/tal/tal.c @@ -1,9 +1,8 @@ /* Licensed under BSD-MIT - see LICENSE file for details */ -#include "tal.h" -#include "ccan/compiler/compiler.h" -#include "ccan/list/list.h" -#include "ccan/alignof/alignof.h" - +#include +#include +#include +#include #include #include #include @@ -22,63 +21,65 @@ /* 32-bit type field, first byte 0 in either endianness. */ enum prop_type { - CHILDREN = 0x00c1d500, - NAME = 0x00111100, - NOTIFIER = 0x00071f00, + CHILDREN = 0x00c1d500, + NAME = 0x00111100, + NOTIFIER = 0x00071f00, }; struct tal_hdr { - struct list_node list; - struct prop_hdr *prop; - /* XOR with TAL_PTR_OBFUSTICATOR */ - intptr_t parent_child; - size_t bytelen; + struct list_node list; + /* Use is_prop_hdr tell if this is a struct prop_hdr or string! */ + char *prop; + /* XOR with TAL_PTR_OBFUSTICATOR */ + intptr_t parent_child; + size_t bytelen; }; struct prop_hdr { - enum prop_type type; - struct prop_hdr *next; + enum prop_type type; + /* Use is_prop_hdr to tell if this is a struct prop_hdr or string! */ + char *next; }; struct children { - struct prop_hdr hdr; /* CHILDREN */ - struct tal_hdr *parent; - struct list_head children; /* Head of siblings. */ + struct prop_hdr hdr; /* CHILDREN */ + struct tal_hdr *parent; + struct list_head children; /* Head of siblings. */ }; struct name { - struct prop_hdr hdr; /* NAME */ - char name[]; + struct prop_hdr hdr; /* NAME */ + char name[]; }; struct notifier { - struct prop_hdr hdr; /* NOTIFIER */ - enum tal_notify_type types; - union notifier_cb { - void (*notifyfn)(tal_t *, enum tal_notify_type, void *); - void (*destroy)(tal_t *); /* If NOTIFY_IS_DESTRUCTOR set */ - void (*destroy2)(tal_t *, void *); /* If NOTIFY_EXTRA_ARG */ - } u; + struct prop_hdr hdr; /* NOTIFIER */ + enum tal_notify_type types; + union notifier_cb { + void (*notifyfn)(tal_t *, enum tal_notify_type, void *); + void (*destroy)(tal_t *); /* If NOTIFY_IS_DESTRUCTOR set */ + void (*destroy2)(tal_t *, void *); /* If NOTIFY_EXTRA_ARG */ + } u; }; /* Extra arg */ struct notifier_extra_arg { - struct notifier n; - void *arg; + struct notifier n; + void *arg; }; #define EXTRA_ARG(n) (((struct notifier_extra_arg *)(n))->arg) static struct { - struct tal_hdr hdr; - struct children c; + struct tal_hdr hdr; + struct children c; } null_parent = { { { &null_parent.hdr.list, &null_parent.hdr.list }, - &null_parent.c.hdr, TAL_PTR_OBFUSTICATOR, 0 }, - { { CHILDREN, NULL }, - &null_parent.hdr, - { { &null_parent.c.children.n, - &null_parent.c.children.n } } - } + (char *)&null_parent.c.hdr, TAL_PTR_OBFUSTICATOR, 0 }, + { { CHILDREN, NULL }, + &null_parent.hdr, + { { &null_parent.c.children.n, + &null_parent.c.children.n } } + } }; @@ -91,42 +92,44 @@ static size_t notifiers = 0; static inline void COLD call_error(const char *msg) { - errorfn(msg); + errorfn(msg); } static bool get_destroying_bit(intptr_t parent_child) { - return parent_child & 1; + return parent_child & 1; } static void set_destroying_bit(intptr_t *parent_child) { - *parent_child |= 1; + *parent_child |= 1; } static struct children *ignore_destroying_bit(intptr_t parent_child) { - return (void *)((parent_child ^ TAL_PTR_OBFUSTICATOR) & ~(intptr_t)1); + return (void *)((parent_child ^ TAL_PTR_OBFUSTICATOR) & ~(intptr_t)1); } /* This means valgrind can see leaks. */ void tal_cleanup(void) { - struct tal_hdr *i; + struct tal_hdr *i; - while ((i = list_top(&null_parent.c.children, struct tal_hdr, list))) { - list_del(&i->list); - memset(i, 0, sizeof(*i)); - } + while ((i = list_top(&null_parent.c.children, struct tal_hdr, list))) { + list_del(&i->list); + memset(i, 0, sizeof(*i)); + } - /* Cleanup any taken pointers. */ - take_cleanup(); + /* Cleanup any taken pointers. */ + take_cleanup(); } /* We carefully start all real properties with a zero byte. */ -static bool is_literal(const struct prop_hdr *prop) +static struct prop_hdr *is_prop_hdr(const char *ptr) { - return ((char *)prop)[0] != 0; + if (*ptr != 0) + return NULL; + return (struct prop_hdr *)ptr; } #ifndef NDEBUG @@ -134,20 +137,20 @@ static const void *bounds_start, *bounds_end; static void update_bounds(const void *new, size_t size) { - if (unlikely(!bounds_start)) { - bounds_start = new; - bounds_end = (char *)new + size; - } else if (new < bounds_start) - bounds_start = new; - else if ((char *)new + size > (char *)bounds_end) - bounds_end = (char *)new + size; + if (unlikely(!bounds_start)) { + bounds_start = new; + bounds_end = (char *)new + size; + } else if (new < bounds_start) + bounds_start = new; + else if ((char *)new + size > (char *)bounds_end) + bounds_end = (char *)new + size; } static bool in_bounds(const void *p) { - return !p - || (p >= (void *)&null_parent && p <= (void *)(&null_parent + 1)) - || (p >= bounds_start && p <= bounds_end); + return !p + || (p >= (void *)&null_parent && p <= (void *)(&null_parent + 1)) + || (p >= bounds_start && p <= bounds_end); } #else static void update_bounds(const void *new, size_t size) @@ -156,242 +159,273 @@ static void update_bounds(const void *new, size_t size) static bool in_bounds(const void *p) { - return true; + return true; } #endif static void check_bounds(const void *p) { - if (!in_bounds(p)) - call_error("Not a valid header"); + if (!in_bounds(p)) + call_error("Not a valid header"); } static struct tal_hdr *to_tal_hdr(const void *ctx) { - struct tal_hdr *t; + struct tal_hdr *t; - t = (struct tal_hdr *)((char *)ctx - sizeof(struct tal_hdr)); - check_bounds(t); - check_bounds(ignore_destroying_bit(t->parent_child)); - check_bounds(t->list.next); - check_bounds(t->list.prev); - if (t->prop && !is_literal(t->prop)) - check_bounds(t->prop); - return t; + t = (struct tal_hdr *)((char *)ctx - sizeof(struct tal_hdr)); + check_bounds(t); + check_bounds(ignore_destroying_bit(t->parent_child)); + check_bounds(t->list.next); + check_bounds(t->list.prev); + if (t->prop) { + struct prop_hdr *p = is_prop_hdr(t->prop); + if (p) + check_bounds(p); + } + return t; } static struct tal_hdr *to_tal_hdr_or_null(const void *ctx) { - if (!ctx) - return &null_parent.hdr; - return to_tal_hdr(ctx); + if (!ctx) + return &null_parent.hdr; + return to_tal_hdr(ctx); } static void *from_tal_hdr(const struct tal_hdr *hdr) { - return (void *)(hdr + 1); + return (void *)(hdr + 1); } static void *from_tal_hdr_or_null(const struct tal_hdr *hdr) { - if (hdr == &null_parent.hdr) - return NULL; - return from_tal_hdr(hdr); + if (hdr == &null_parent.hdr) + return NULL; + return from_tal_hdr(hdr); } #ifdef TAL_DEBUG static struct tal_hdr *debug_tal(struct tal_hdr *tal) { - tal_check(from_tal_hdr_or_null(tal), "TAL_DEBUG "); - return tal; + tal_check(from_tal_hdr_or_null(tal), "TAL_DEBUG "); + return tal; } #else static struct tal_hdr *debug_tal(struct tal_hdr *tal) { - return tal; + return tal; } #endif static void notify(const struct tal_hdr *ctx, - enum tal_notify_type type, const void *info, - int saved_errno) + enum tal_notify_type type, const void *info, + int saved_errno) { - const struct prop_hdr *p; + const char *ptr; + const struct prop_hdr *p; - for (p = ctx->prop; p; p = p->next) { - struct notifier *n; + for (ptr = ctx->prop; ptr && (p = is_prop_hdr(ptr)) != NULL; ptr = p->next) { + struct notifier *n; - if (is_literal(p)) - break; if (p->type != NOTIFIER) - continue; - n = (struct notifier *)p; - if (n->types & type) { - errno = saved_errno; - if (n->types & NOTIFY_IS_DESTRUCTOR) { - /* Blatt this notifier in case it tries to - * tal_del_destructor() from inside */ - union notifier_cb cb = n->u; - /* It's a union, so this NULLs destroy2 too! */ - n->u.destroy = NULL; - if (n->types & NOTIFY_EXTRA_ARG) - cb.destroy2(from_tal_hdr(ctx), - EXTRA_ARG(n)); - else - cb.destroy(from_tal_hdr(ctx)); - } else - n->u.notifyfn(from_tal_hdr_or_null(ctx), type, - (void *)info); - } - } + continue; + n = (struct notifier *)p; + if (n->types & type) { + errno = saved_errno; + if (n->types & NOTIFY_IS_DESTRUCTOR) { + /* Blatt this notifier in case it tries to + * tal_del_destructor() from inside */ + union notifier_cb cb = n->u; + /* It's a union, so this NULLs destroy2 too! */ + n->u.destroy = NULL; + if (n->types & NOTIFY_EXTRA_ARG) + cb.destroy2(from_tal_hdr(ctx), + EXTRA_ARG(n)); + else + cb.destroy(from_tal_hdr(ctx)); + } else + n->u.notifyfn(from_tal_hdr_or_null(ctx), type, + (void *)info); + } + } } static void *allocate(size_t size) { - void *ret = allocfn(size); - if (!ret) - call_error("allocation failed"); - else - update_bounds(ret, size); - return ret; -} - -static struct prop_hdr **find_property_ptr(const struct tal_hdr *t, - enum prop_type type) -{ - struct prop_hdr **p; - - for (p = (struct prop_hdr **)&t->prop; *p; p = &(*p)->next) { - if (is_literal(*p)) { - if (type == NAME) - return p; - break; - } - if ((*p)->type == type) - return p; - } - return NULL; -} - -static void *find_property(const struct tal_hdr *parent, enum prop_type type) -{ - struct prop_hdr **p = find_property_ptr(parent, type); - - if (p) - return *p; + void *ret = allocfn(size); + if (!ret) + call_error("allocation failed"); + else + update_bounds(ret, size); + return ret; +} + +/* Returns a pointer to the pointer: can cast (*ret) to a (struct prop_ptr *) */ +static char **find_property_ptr(struct tal_hdr *t, enum prop_type type) +{ + char **ptr; + struct prop_hdr *p; + + /* NAME is special, as it can be a literal: see find_name_property */ + assert(type != NAME); + for (ptr = &t->prop; *ptr; ptr = &p->next) { + if (!is_prop_hdr(*ptr)) + break; + p = (struct prop_hdr *)*ptr; + if (p->type == type) + return ptr; + } + return NULL; +} + +/* This is special: + * NULL - not found + * *literal: true - char **, pointer to literal pointer. + * *literal: false - struct prop_hdr **, pointer to header ptr. + */ +static char **find_name_property(struct tal_hdr *t, bool *literal) +{ + char **ptr; + struct prop_hdr *p; + + for (ptr = &t->prop; *ptr; ptr = &p->next) { + if (!is_prop_hdr(*ptr)) { + *literal = true; + return ptr; + } + p = (struct prop_hdr *)*ptr; + if (p->type == NAME) { + *literal = false; + return ptr; + } + } + return NULL; +} + +static void *find_property(struct tal_hdr *parent, enum prop_type type) +{ + char **ptr = find_property_ptr(parent, type); + + if (ptr) + return (struct prop_hdr *)*ptr; return NULL; } static void init_property(struct prop_hdr *hdr, - struct tal_hdr *parent, - enum prop_type type) + struct tal_hdr *parent, + enum prop_type type) { - hdr->type = type; - hdr->next = parent->prop; - parent->prop = hdr; + hdr->type = type; + hdr->next = parent->prop; + parent->prop = (char *)hdr; } static struct notifier *add_notifier_property(struct tal_hdr *t, - enum tal_notify_type types, - void (*fn)(void *, - enum tal_notify_type, - void *), - void *extra_arg) + enum tal_notify_type types, + void (*fn)(void *, + enum tal_notify_type, + void *), + void *extra_arg) { - struct notifier *prop; + struct notifier *prop; - if (types & NOTIFY_EXTRA_ARG) - prop = allocate(sizeof(struct notifier_extra_arg)); - else - prop = allocate(sizeof(struct notifier)); + if (types & NOTIFY_EXTRA_ARG) + prop = allocate(sizeof(struct notifier_extra_arg)); + else + prop = allocate(sizeof(struct notifier)); - if (prop) { - init_property(&prop->hdr, t, NOTIFIER); - prop->types = types; - prop->u.notifyfn = fn; - if (types & NOTIFY_EXTRA_ARG) - EXTRA_ARG(prop) = extra_arg; - } - return prop; + if (prop) { + init_property(&prop->hdr, t, NOTIFIER); + prop->types = types; + prop->u.notifyfn = fn; + if (types & NOTIFY_EXTRA_ARG) + EXTRA_ARG(prop) = extra_arg; + } + return prop; } static enum tal_notify_type del_notifier_property(struct tal_hdr *t, - void (*fn)(tal_t *, - enum tal_notify_type, - void *), - bool match_extra_arg, - void *extra_arg) -{ - struct prop_hdr **p; - - for (p = (struct prop_hdr **)&t->prop; *p; p = &(*p)->next) { - struct notifier *n; - enum tal_notify_type types; - - if (is_literal(*p)) - break; - if ((*p)->type != NOTIFIER) - continue; - n = (struct notifier *)*p; - if (n->u.notifyfn != fn) - continue; - - types = n->types; - if ((types & NOTIFY_EXTRA_ARG) - && match_extra_arg - && extra_arg != EXTRA_ARG(n)) - continue; - - *p = (*p)->next; - freefn(n); - return types & ~(NOTIFY_IS_DESTRUCTOR|NOTIFY_EXTRA_ARG); + void (*fn)(tal_t *, + enum tal_notify_type, + void *), + bool match_extra_arg, + void *extra_arg) +{ + char **ptr; + struct prop_hdr *p; + + for (ptr = &t->prop; *ptr; ptr = &p->next) { + struct notifier *n; + enum tal_notify_type types; + + p = is_prop_hdr(*ptr); + if (!p) + break; + + if (p->type != NOTIFIER) + continue; + n = (struct notifier *)p; + if (n->u.notifyfn != fn) + continue; + + types = n->types; + if ((types & NOTIFY_EXTRA_ARG) + && match_extra_arg + && extra_arg != EXTRA_ARG(n)) + continue; + + *ptr = p->next; + freefn(p); + return types & ~(NOTIFY_IS_DESTRUCTOR|NOTIFY_EXTRA_ARG); } return 0; } static struct name *add_name_property(struct tal_hdr *t, const char *name) { - struct name *prop; + struct name *prop; - prop = allocate(sizeof(*prop) + strlen(name) + 1); - if (prop) { - init_property(&prop->hdr, t, NAME); - strcpy(prop->name, name); - } - return prop; + prop = allocate(sizeof(*prop) + strlen(name) + 1); + if (prop) { + init_property(&prop->hdr, t, NAME); + strcpy(prop->name, name); + } + return prop; } static struct children *add_child_property(struct tal_hdr *parent, - struct tal_hdr *child UNNEEDED) + struct tal_hdr *child UNNEEDED) { - struct children *prop = allocate(sizeof(*prop)); - if (prop) { - init_property(&prop->hdr, parent, CHILDREN); - prop->parent = parent; - list_head_init(&prop->children); - } - return prop; + struct children *prop = allocate(sizeof(*prop)); + if (prop) { + init_property(&prop->hdr, parent, CHILDREN); + prop->parent = parent; + list_head_init(&prop->children); + } + return prop; } static bool add_child(struct tal_hdr *parent, struct tal_hdr *child) { - struct children *children = find_property(parent, CHILDREN); + struct children *children = find_property(parent, CHILDREN); if (!children) { - children = add_child_property(parent, child); - if (!children) - return false; - } - list_add(&children->children, &child->list); - child->parent_child = (intptr_t)children ^ TAL_PTR_OBFUSTICATOR; - return true; + children = add_child_property(parent, child); + if (!children) + return false; + } + list_add(&children->children, &child->list); + child->parent_child = (intptr_t)children ^ TAL_PTR_OBFUSTICATOR; + return true; } static void del_tree(struct tal_hdr *t, const tal_t *orig, int saved_errno) { - struct prop_hdr **prop, *p, *next; + struct prop_hdr *prop; + char *ptr, *next; - assert(!taken(from_tal_hdr(t))); + assert(!taken(from_tal_hdr(t))); /* Already being destroyed? Don't loop. */ if (unlikely(get_destroying_bit(t->parent_child))) @@ -399,25 +433,25 @@ static void del_tree(struct tal_hdr *t, const tal_t *orig, int saved_errno) set_destroying_bit(&t->parent_child); - /* Call free notifiers. */ - notify(t, TAL_NOTIFY_FREE, (tal_t *)orig, saved_errno); + /* Call free notifiers. */ + notify(t, TAL_NOTIFY_FREE, (tal_t *)orig, saved_errno); - /* Now free children and groups. */ - prop = find_property_ptr(t, CHILDREN); - if (prop) { - struct tal_hdr *i; - struct children *c = (struct children *)*prop; + /* Now free children and groups. */ + prop = find_property(t, CHILDREN); + if (prop) { + struct tal_hdr *i; + struct children *c = (struct children *)prop; - while ((i = list_top(&c->children, struct tal_hdr, list))) { - list_del(&i->list); - del_tree(i, orig, saved_errno); - } - } + while ((i = list_top(&c->children, struct tal_hdr, list))) { + list_del(&i->list); + del_tree(i, orig, saved_errno); + } + } /* Finally free our properties. */ - for (p = t->prop; p && !is_literal(p); p = next) { - next = p->next; - freefn(p); + for (ptr = t->prop; ptr && (prop = is_prop_hdr(ptr)); ptr = next) { + next = prop->next; + freefn(ptr); } freefn(t); } @@ -427,263 +461,273 @@ void *tal_alloc_(const tal_t *ctx, size_t size, bool clear, const char *label) struct tal_hdr *child, *parent = debug_tal(to_tal_hdr_or_null(ctx)); child = allocate(sizeof(struct tal_hdr) + size); - if (!child) - return NULL; - if (clear) - memset(from_tal_hdr(child), 0, size); + if (!child) + return NULL; + if (clear) + memset(from_tal_hdr(child), 0, size); child->prop = (void *)label; - child->bytelen = size; + child->bytelen = size; if (!add_child(parent, child)) { - freefn(child); - return NULL; - } - debug_tal(parent); - if (notifiers) - notify(parent, TAL_NOTIFY_ADD_CHILD, from_tal_hdr(child), 0); - return from_tal_hdr(debug_tal(child)); + freefn(child); + return NULL; + } + debug_tal(parent); + if (notifiers) + notify(parent, TAL_NOTIFY_ADD_CHILD, from_tal_hdr(child), 0); + return from_tal_hdr(debug_tal(child)); } static bool adjust_size(size_t *size, size_t count) { - const size_t extra = sizeof(struct tal_hdr); + const size_t extra = sizeof(struct tal_hdr); - /* Multiplication wrap */ + /* Multiplication wrap */ if (count && unlikely(*size * count / *size != count)) - goto overflow; + goto overflow; *size *= count; /* Make sure we don't wrap adding header. */ if (*size + extra < extra) - goto overflow; - return true; + goto overflow; + return true; overflow: - call_error("allocation size overflow"); - return false; + call_error("allocation size overflow"); + return false; } void *tal_alloc_arr_(const tal_t *ctx, size_t size, size_t count, bool clear, - const char *label) + const char *label) { - if (!adjust_size(&size, count)) - return NULL; + if (!adjust_size(&size, count)) + return NULL; - return tal_alloc_(ctx, size, clear, label); + return tal_alloc_(ctx, size, clear, label); } void *tal_free(const tal_t *ctx) { if (ctx) { - struct tal_hdr *t; - int saved_errno = errno; - t = debug_tal(to_tal_hdr(ctx)); - if (unlikely(get_destroying_bit(t->parent_child))) - return NULL; - if (notifiers) - notify(ignore_destroying_bit(t->parent_child)->parent, - TAL_NOTIFY_DEL_CHILD, ctx, saved_errno); - list_del(&t->list); - del_tree(t, ctx, saved_errno); - errno = saved_errno; - } - return NULL; + struct tal_hdr *t; + int saved_errno = errno; + t = debug_tal(to_tal_hdr(ctx)); + if (unlikely(get_destroying_bit(t->parent_child))) + return NULL; + if (notifiers) + notify(ignore_destroying_bit(t->parent_child)->parent, + TAL_NOTIFY_DEL_CHILD, ctx, saved_errno); + list_del(&t->list); + del_tree(t, ctx, saved_errno); + errno = saved_errno; + } + return NULL; } void *tal_steal_(const tal_t *new_parent, const tal_t *ctx) { if (ctx) { - struct tal_hdr *newpar, *t, *old_parent; + struct tal_hdr *newpar, *t, *old_parent; newpar = debug_tal(to_tal_hdr_or_null(new_parent)); t = debug_tal(to_tal_hdr(ctx)); /* Unlink it from old parent. */ - list_del(&t->list); - old_parent = ignore_destroying_bit(t->parent_child)->parent; + list_del(&t->list); + old_parent = ignore_destroying_bit(t->parent_child)->parent; if (unlikely(!add_child(newpar, t))) { - /* We can always add to old parent, because it has a - * children property already. */ - if (!add_child(old_parent, t)) - abort(); - return NULL; - } - debug_tal(newpar); - if (notifiers) - notify(t, TAL_NOTIFY_STEAL, new_parent, 0); + /* We can always add to old parent, because it has a + * children property already. */ + if (!add_child(old_parent, t)) + abort(); + return NULL; + } + debug_tal(newpar); + if (notifiers) + notify(t, TAL_NOTIFY_STEAL, new_parent, 0); } return (void *)ctx; } bool tal_add_destructor_(const tal_t *ctx, void (*destroy)(void *me)) { - tal_t *t = debug_tal(to_tal_hdr(ctx)); - return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR, - (void *)destroy, NULL); + tal_t *t = debug_tal(to_tal_hdr(ctx)); + return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR, + (void *)destroy, NULL); } bool tal_add_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), - void *arg) + void *arg) { - tal_t *t = debug_tal(to_tal_hdr(ctx)); - return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR - |NOTIFY_EXTRA_ARG, - (void *)destroy, arg); + tal_t *t = debug_tal(to_tal_hdr(ctx)); + return add_notifier_property(t, TAL_NOTIFY_FREE|NOTIFY_IS_DESTRUCTOR + |NOTIFY_EXTRA_ARG, + (void *)destroy, arg); } /* We could support notifiers with an extra arg, but we didn't add to API */ bool tal_add_notifier_(const tal_t *ctx, enum tal_notify_type types, - void (*callback)(tal_t *, enum tal_notify_type, void *)) + void (*callback)(tal_t *, enum tal_notify_type, void *)) { - struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); - struct notifier *n; + struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); + struct notifier *n; - assert(types); - assert((types & ~(TAL_NOTIFY_FREE | TAL_NOTIFY_STEAL | TAL_NOTIFY_MOVE - | TAL_NOTIFY_RESIZE | TAL_NOTIFY_RENAME - | TAL_NOTIFY_ADD_CHILD | TAL_NOTIFY_DEL_CHILD - | TAL_NOTIFY_ADD_NOTIFIER - | TAL_NOTIFY_DEL_NOTIFIER)) == 0); + assert(types); + assert((types & ~(TAL_NOTIFY_FREE | TAL_NOTIFY_STEAL | TAL_NOTIFY_MOVE + | TAL_NOTIFY_RESIZE | TAL_NOTIFY_RENAME + | TAL_NOTIFY_ADD_CHILD | TAL_NOTIFY_DEL_CHILD + | TAL_NOTIFY_ADD_NOTIFIER + | TAL_NOTIFY_DEL_NOTIFIER)) == 0); - /* Don't call notifier about itself: set types after! */ + /* Don't call notifier about itself: set types after! */ n = add_notifier_property(t, 0, callback, NULL); - if (unlikely(!n)) - return false; + if (unlikely(!n)) + return false; - if (notifiers) - notify(t, TAL_NOTIFY_ADD_NOTIFIER, callback, 0); + if (notifiers) + notify(t, TAL_NOTIFY_ADD_NOTIFIER, callback, 0); - n->types = types; - if (types != TAL_NOTIFY_FREE) - notifiers++; - return true; + n->types = types; + if (types != TAL_NOTIFY_FREE) + notifiers++; + return true; } bool tal_del_notifier_(const tal_t *ctx, - void (*callback)(tal_t *, enum tal_notify_type, void *), - bool match_extra_arg, void *extra_arg) + void (*callback)(tal_t *, enum tal_notify_type, void *), + bool match_extra_arg, void *extra_arg) { - struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); - enum tal_notify_type types; + struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ctx)); + enum tal_notify_type types; types = del_notifier_property(t, callback, match_extra_arg, extra_arg); - if (types) { - notify(t, TAL_NOTIFY_DEL_NOTIFIER, callback, 0); - if (types != TAL_NOTIFY_FREE) - notifiers--; - return true; - } - return false; + if (types) { + notify(t, TAL_NOTIFY_DEL_NOTIFIER, callback, 0); + if (types != TAL_NOTIFY_FREE) + notifiers--; + return true; + } + return false; } bool tal_del_destructor_(const tal_t *ctx, void (*destroy)(void *me)) { - return tal_del_notifier_(ctx, (void *)destroy, false, NULL); + return tal_del_notifier_(ctx, (void *)destroy, false, NULL); } bool tal_del_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), - void *arg) + void *arg) { - return tal_del_notifier_(ctx, (void *)destroy, true, arg); + return tal_del_notifier_(ctx, (void *)destroy, true, arg); } bool tal_set_name_(tal_t *ctx, const char *name, bool literal) { struct tal_hdr *t = debug_tal(to_tal_hdr(ctx)); - struct prop_hdr **prop = find_property_ptr(t, NAME); + bool was_literal; + char **nptr; /* Get rid of any old name */ - if (prop) { - struct name *name = (struct name *)*prop; - if (is_literal(&name->hdr)) - *prop = NULL; - else { - *prop = name->hdr.next; - freefn(name); - } + nptr = find_name_property(t, &was_literal); + if (nptr) { + if (was_literal) + *nptr = NULL; + else { + struct name *oldname; + + oldname = (struct name *)*nptr; + *nptr = oldname->hdr.next; + freefn(oldname); + } } if (literal && name[0]) { - struct prop_hdr **p; + char **ptr; + struct prop_hdr *prop; /* Append literal. */ - for (p = &t->prop; *p && !is_literal(*p); p = &(*p)->next); - *p = (struct prop_hdr *)name; + for (ptr = &t->prop; *ptr; ptr = &prop->next) { + prop = is_prop_hdr(*ptr); + if (!prop) + break; + } + *ptr = (char *)name; } else if (!add_name_property(t, name)) - return false; + return false; - debug_tal(t); - if (notifiers) - notify(t, TAL_NOTIFY_RENAME, name, 0); - return true; + debug_tal(t); + if (notifiers) + notify(t, TAL_NOTIFY_RENAME, name, 0); + return true; } const char *tal_name(const tal_t *t) { - struct name *n; + char **nptr; + bool literal; - n = find_property(debug_tal(to_tal_hdr(t)), NAME); - if (!n) - return NULL; + nptr = find_name_property(debug_tal(to_tal_hdr(t)), &literal); + if (!nptr) + return NULL; + if (literal) + return *nptr; - if (is_literal(&n->hdr)) - return (const char *)n; - return n->name; + return ((struct name *)(*nptr))->name; } size_t tal_bytelen(const tal_t *ptr) { - /* NULL -> null_parent which has bytelen 0 */ - struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ptr)); + /* NULL -> null_parent which has bytelen 0 */ + struct tal_hdr *t = debug_tal(to_tal_hdr_or_null(ptr)); - return t->bytelen; + return t->bytelen; } /* Start one past first child: make stopping natural in circ. list. */ static struct tal_hdr *first_child(struct tal_hdr *parent) { - struct children *child; + struct children *child; - child = find_property(parent, CHILDREN); + child = find_property(parent, CHILDREN); if (!child) return NULL; - return list_top(&child->children, struct tal_hdr, list); + return list_top(&child->children, struct tal_hdr, list); } tal_t *tal_first(const tal_t *root) { struct tal_hdr *c, *t = debug_tal(to_tal_hdr_or_null(root)); - c = first_child(t); - if (!c) - return NULL; - return from_tal_hdr(c); + c = first_child(t); + if (!c) + return NULL; + return from_tal_hdr(c); } tal_t *tal_next(const tal_t *prev) { struct tal_hdr *next, *prevhdr = debug_tal(to_tal_hdr(prev)); - struct list_head *head; + struct list_head *head; - head = &ignore_destroying_bit(prevhdr->parent_child)->children; - next = list_next(head, prevhdr, list); - if (!next) - return NULL; - return from_tal_hdr(next); + head = &ignore_destroying_bit(prevhdr->parent_child)->children; + next = list_next(head, prevhdr, list); + if (!next) + return NULL; + return from_tal_hdr(next); } tal_t *tal_parent(const tal_t *ctx) { struct tal_hdr *t; - if (!ctx) - return NULL; + if (!ctx) + return NULL; - t = debug_tal(to_tal_hdr(ctx)); - if (ignore_destroying_bit(t->parent_child)->parent == &null_parent.hdr) - return NULL; + t = debug_tal(to_tal_hdr(ctx)); + if (ignore_destroying_bit(t->parent_child)->parent == &null_parent.hdr) + return NULL; return from_tal_hdr(ignore_destroying_bit(t->parent_child)->parent); } @@ -694,279 +738,283 @@ bool tal_resize_(tal_t **ctxp, size_t size, size_t count, bool clear) old_t = debug_tal(to_tal_hdr(*ctxp)); - if (!adjust_size(&size, count)) - return false; + if (!adjust_size(&size, count)) + return false; t = resizefn(old_t, sizeof(struct tal_hdr) + size); - if (!t) { - call_error("Reallocation failure"); - return false; - } - - /* Clear between old end and new end. */ - if (clear && size > t->bytelen) { - char *old_end = (char *)(t + 1) + t->bytelen; - memset(old_end, 0, size - t->bytelen); - } - - /* Update length. */ - t->bytelen = size; - update_bounds(t, sizeof(struct tal_hdr) + size); - - /* If it didn't move, we're done! */ + if (!t) { + call_error("Reallocation failure"); + return false; + } + + /* Clear between old end and new end. */ + if (clear && size > t->bytelen) { + char *old_end = (char *)(t + 1) + t->bytelen; + memset(old_end, 0, size - t->bytelen); + } + + /* Update length. */ + t->bytelen = size; + update_bounds(t, sizeof(struct tal_hdr) + size); + + /* If it didn't move, we're done! */ if (t != old_t) { - /* Fix up linked list pointers. */ - t->list.next->prev = t->list.prev->next = &t->list; - - /* Copy take() property. */ - if (taken(from_tal_hdr(old_t))) - take(from_tal_hdr(t)); - - /* Fix up child property's parent pointer. */ - child = find_property(t, CHILDREN); - if (child) { - assert(child->parent == old_t); - child->parent = t; - } - *ctxp = from_tal_hdr(debug_tal(t)); - if (notifiers) - notify(t, TAL_NOTIFY_MOVE, from_tal_hdr(old_t), 0); - } - if (notifiers) - notify(t, TAL_NOTIFY_RESIZE, (void *)size, 0); + /* Fix up linked list pointers. */ + t->list.next->prev = t->list.prev->next = &t->list; + + /* Copy take() property. */ + if (taken(from_tal_hdr(old_t))) + take(from_tal_hdr(t)); + + /* Fix up child property's parent pointer. */ + child = find_property(t, CHILDREN); + if (child) { + assert(child->parent == old_t); + child->parent = t; + } + *ctxp = from_tal_hdr(debug_tal(t)); + if (notifiers) + notify(t, TAL_NOTIFY_MOVE, from_tal_hdr(old_t), 0); + } + if (notifiers) + notify(t, TAL_NOTIFY_RESIZE, (void *)size, 0); - return true; + return true; } bool tal_expand_(tal_t **ctxp, const void *src, size_t size, size_t count) { - size_t old_len; - bool ret = false; + size_t old_len; + bool ret = false; - old_len = debug_tal(to_tal_hdr(*ctxp))->bytelen; + old_len = debug_tal(to_tal_hdr(*ctxp))->bytelen; - /* Check for additive overflow */ - if (old_len + count * size < old_len) { - call_error("dup size overflow"); - goto out; - } + /* Check for additive overflow */ + if (old_len + count * size < old_len) { + call_error("dup size overflow"); + goto out; + } - /* Don't point src inside thing we're expanding! */ - assert(src < *ctxp - || (char *)src >= (char *)(*ctxp) + old_len); + /* Don't point src inside thing we're expanding! */ + assert(src < *ctxp + || (char *)src >= (char *)(*ctxp) + old_len); - if (!tal_resize_(ctxp, size, old_len/size + count, false)) - goto out; + if (!tal_resize_(ctxp, size, old_len/size + count, false)) + goto out; - memcpy((char *)*ctxp + old_len, src, count * size); - ret = true; + memcpy((char *)*ctxp + old_len, src, count * size); + ret = true; out: - if (taken(src)) - tal_free(src); - return ret; + if (taken(src)) + tal_free(src); + return ret; } void *tal_dup_(const tal_t *ctx, const void *p, size_t size, - size_t n, size_t extra, bool nullok, const char *label) -{ - void *ret; - size_t nbytes = size; - - if (nullok && p == NULL) { - /* take(NULL) works. */ - (void)taken(p); - return NULL; - } - - if (!adjust_size(&nbytes, n)) { - if (taken(p)) - tal_free(p); - return NULL; - } - - /* Beware addition overflow! */ - if (n + extra < n) { - call_error("dup size overflow"); - if (taken(p)) - tal_free(p); - return NULL; - } - - if (taken(p)) { - if (unlikely(!p)) - return NULL; - if (unlikely(!tal_resize_((void **)&p, size, n + extra, false))) - return tal_free(p); - if (unlikely(!tal_steal(ctx, p))) - return tal_free(p); - return (void *)p; - } - - ret = tal_alloc_arr_(ctx, size, n + extra, false, label); - if (ret) - memcpy(ret, p, nbytes); - return ret; + size_t n, size_t extra, bool nullok, const char *label) +{ + void *ret; + size_t nbytes = size; + + if (nullok && p == NULL) { + /* take(NULL) works. */ + (void)taken(p); + return NULL; + } + + if (!adjust_size(&nbytes, n)) { + if (taken(p)) + tal_free(p); + return NULL; + } + + /* Beware addition overflow! */ + if (n + extra < n) { + call_error("dup size overflow"); + if (taken(p)) + tal_free(p); + return NULL; + } + + if (taken(p)) { + if (unlikely(!p)) + return NULL; + if (unlikely(!tal_resize_((void **)&p, size, n + extra, false))) + return tal_free(p); + if (unlikely(!tal_steal(ctx, p))) + return tal_free(p); + return (void *)p; + } + + ret = tal_alloc_arr_(ctx, size, n + extra, false, label); + if (ret && p) + memcpy(ret, p, nbytes); + return ret; } void *tal_dup_talarr_(const tal_t *ctx, const tal_t *src TAKES, const char *label) { - return tal_dup_(ctx, src, 1, tal_bytelen(src), 0, true, label); + return tal_dup_(ctx, src, 1, tal_bytelen(src), 0, true, label); } void tal_set_backend(void *(*alloc_fn)(size_t size), - void *(*resize_fn)(void *, size_t size), - void (*free_fn)(void *), - void (*error_fn)(const char *msg)) + void *(*resize_fn)(void *, size_t size), + void (*free_fn)(void *), + void (*error_fn)(const char *msg)) { - if (alloc_fn) - allocfn = alloc_fn; - if (resize_fn) - resizefn = resize_fn; - if (free_fn) - freefn = free_fn; - if (error_fn) - errorfn = error_fn; + if (alloc_fn) + allocfn = alloc_fn; + if (resize_fn) + resizefn = resize_fn; + if (free_fn) + freefn = free_fn; + if (error_fn) + errorfn = error_fn; } #ifdef CCAN_TAL_DEBUG static void dump_node(unsigned int indent, const struct tal_hdr *t) { - unsigned int i; - const struct prop_hdr *p; - - for (i = 0; i < indent; i++) - fprintf(stderr, " "); - fprintf(stderr, "%p len=%zu", t, t->bytelen); - for (p = t->prop; p; p = p->next) { - struct children *c; - struct name *n; - struct notifier *no; - if (is_literal(p)) { - fprintf(stderr, " \"%s\"", (const char *)p); - break; - } - switch (p->type) { - case CHILDREN: - c = (struct children *)p; - fprintf(stderr, " CHILDREN(%p):parent=%p,children={%p,%p}", - p, c->parent, - c->children.n.prev, c->children.n.next); - break; - case NAME: - n = (struct name *)p; - fprintf(stderr, " NAME(%p):%s", p, n->name); - break; - case NOTIFIER: - no = (struct notifier *)p; - fprintf(stderr, " NOTIFIER(%p):fn=%p", p, no->u.notifyfn); - break; - default: - fprintf(stderr, " **UNKNOWN(%p):%i**", p, p->type); - } - } - fprintf(stderr, "\n"); + unsigned int i; + const struct prop_hdr *prop; + const char *ptr; + + for (i = 0; i < indent; i++) + fprintf(stderr, " "); + fprintf(stderr, "%p len=%zu", t, t->bytelen); + for (ptr = t->prop; ptr; ptr = prop->next) { + struct children *c; + struct name *n; + struct notifier *no; + prop = is_prop_hdr(ptr); + if (!prop) { + fprintf(stderr, " \"%s\"", ptr); + break; + } + switch (prop->type) { + case CHILDREN: + c = (struct children *)prop; + fprintf(stderr, " CHILDREN(%p):parent=%p,children={%p,%p}", + prop, c->parent, + c->children.n.prev, c->children.n.next); + break; + case NAME: + n = (struct name *)prop; + fprintf(stderr, " NAME(%p):%s", prop, n->name); + break; + case NOTIFIER: + no = (struct notifier *)prop; + fprintf(stderr, " NOTIFIER(%p):fn=%p", prop, no->u.notifyfn); + break; + default: + fprintf(stderr, " **UNKNOWN(%p):%i**", prop, prop->type); + } + } + fprintf(stderr, "\n"); } static void tal_dump_(unsigned int level, const struct tal_hdr *t) { struct children *children; - dump_node(level, t); + dump_node(level, t); - children = find_property(t, CHILDREN); - if (children) { - struct tal_hdr *i; + children = find_property((struct tal_hdr *)t, CHILDREN); + if (children) { + struct tal_hdr *i; - list_for_each(&children->children, i, list) - tal_dump_(level + 1, i); - } + list_for_each(&children->children, i, list) + tal_dump_(level + 1, i); + } } void tal_dump(void) { - tal_dump_(0, &null_parent.hdr); + tal_dump_(0, &null_parent.hdr); } #endif /* CCAN_TAL_DEBUG */ #ifndef NDEBUG static bool check_err(struct tal_hdr *t, const char *errorstr, - const char *errmsg) + const char *errmsg) { - if (errorstr) { - /* Try not to malloc: it may be corrupted. */ - char msg[strlen(errorstr) + 20 + strlen(errmsg) + 1]; - sprintf(msg, "%s:%p %s", errorstr, from_tal_hdr(t), errmsg); - call_error(msg); - } - return false; + if (errorstr) { + /* Try not to malloc: it may be corrupted. */ + char msg[strlen(errorstr) + 20 + strlen(errmsg) + 1]; + sprintf(msg, "%s:%p %s", errorstr, from_tal_hdr(t), errmsg); + call_error(msg); + } + return false; } static bool check_node(struct children *parent_child, - struct tal_hdr *t, const char *errorstr) -{ - struct prop_hdr *p; - struct name *name = NULL; - struct children *children = NULL; - - if (!in_bounds(t)) - return check_err(t, errorstr, "invalid pointer"); - - if (ignore_destroying_bit(t->parent_child) != parent_child) - return check_err(t, errorstr, "incorrect parent"); - - for (p = t->prop; p; p = p->next) { - if (is_literal(p)) { - if (name) - return check_err(t, errorstr, - "has extra literal"); - break; - } - if (!in_bounds(p)) - return check_err(t, errorstr, - "has bad property pointer"); - - switch (p->type) { - case CHILDREN: - if (children) - return check_err(t, errorstr, - "has two child nodes"); - children = (struct children *)p; - break; - case NOTIFIER: - break; - case NAME: - if (name) - return check_err(t, errorstr, - "has two names"); - name = (struct name *)p; - break; - default: - return check_err(t, errorstr, "has unknown property"); - } - } - if (children) { - struct tal_hdr *i; - - if (!list_check(&children->children, errorstr)) - return false; - list_for_each(&children->children, i, list) { - if (!check_node(children, i, errorstr)) - return false; - } - } - return true; + struct tal_hdr *t, const char *errorstr) +{ + struct prop_hdr *prop; + char *p; + struct name *name = NULL; + struct children *children = NULL; + + if (!in_bounds(t)) + return check_err(t, errorstr, "invalid pointer"); + + if (ignore_destroying_bit(t->parent_child) != parent_child) + return check_err(t, errorstr, "incorrect parent"); + + for (p = t->prop; p; p = prop->next) { + prop = is_prop_hdr(p); + if (!prop) { + if (name) + return check_err(t, errorstr, + "has extra literal"); + break; + } + if (!in_bounds(prop)) + return check_err(t, errorstr, + "has bad property pointer"); + + switch (prop->type) { + case CHILDREN: + if (children) + return check_err(t, errorstr, + "has two child nodes"); + children = (struct children *)prop; + break; + case NOTIFIER: + break; + case NAME: + if (name) + return check_err(t, errorstr, + "has two names"); + name = (struct name *)prop; + break; + default: + return check_err(t, errorstr, "has unknown property"); + } + } + if (children) { + struct tal_hdr *i; + + if (!list_check(&children->children, errorstr)) + return false; + list_for_each(&children->children, i, list) { + if (!check_node(children, i, errorstr)) + return false; + } + } + return true; } bool tal_check(const tal_t *ctx, const char *errorstr) { - struct tal_hdr *t = to_tal_hdr_or_null(ctx); + struct tal_hdr *t = to_tal_hdr_or_null(ctx); - return check_node(ignore_destroying_bit(t->parent_child), t, errorstr); + return check_node(ignore_destroying_bit(t->parent_child), t, errorstr); } #else /* NDEBUG */ bool tal_check(const tal_t *ctx, const char *errorstr) { - return true; + return true; } #endif diff --git a/nostrdb/ccan/ccan/tal/tal.h b/nostrdb/ccan/ccan/tal/tal.h index 6e7f12e5d..c486f9e8e 100644 --- a/nostrdb/ccan/ccan/tal/tal.h +++ b/nostrdb/ccan/ccan/tal/tal.h @@ -1,13 +1,12 @@ /* Licensed under BSD-MIT - see LICENSE file for details */ #ifndef CCAN_TAL_H #define CCAN_TAL_H -#include "../config.h" -#include "ccan/compiler/compiler.h" -#include "ccan/likely/likely.h" -#include "ccan/typesafe_cb/typesafe_cb.h" -#include "ccan/str/str.h" -#include "ccan/take/take.h" - +#include "config.h" +#include +#include +#include +#include +#include #include #include #include @@ -32,11 +31,11 @@ typedef void tal_t; * tal_count() of the return will be 1. * * Example: - * int *p = tal(NULL, int); - * *p = 1; + * int *p = tal(NULL, int); + * *p = 1; */ -#define tal(ctx, type) \ - tal_label(ctx, type, TAL_LABEL(type, "")) +#define tal(ctx, type) \ + tal_label(ctx, type, TAL_LABEL(type, "")) /** * talz - zeroing allocator function @@ -46,11 +45,11 @@ typedef void tal_t; * Equivalent to tal() followed by memset() to zero. * * Example: - * p = talz(NULL, int); - * assert(*p == 0); + * p = talz(NULL, int); + * assert(*p == 0); */ -#define talz(ctx, type) \ - talz_label(ctx, type, TAL_LABEL(type, "")) +#define talz(ctx, type) \ + talz_label(ctx, type, TAL_LABEL(type, "")) /** * tal_free - free a tal-allocated pointer. @@ -64,7 +63,7 @@ typedef void tal_t; * for any destructors or notifiers. * * Example: - * p = tal_free(p); + * p = tal_free(p); */ void *tal_free(const tal_t *p); @@ -77,12 +76,12 @@ void *tal_free(const tal_t *p); * tal_count() of the returned pointer will be @count. * * Example: - * p = tal_arr(NULL, int, 2); - * p[0] = 0; - * p[1] = 1; + * p = tal_arr(NULL, int, 2); + * p[0] = 0; + * p[1] = 1; */ -#define tal_arr(ctx, type, count) \ - tal_arr_label(ctx, type, count, TAL_LABEL(type, "[]")) +#define tal_arr(ctx, type, count) \ + tal_arr_label(ctx, type, count, TAL_LABEL(type, "[]")) /** * tal_arrz - allocate an array of zeroed objects. @@ -93,11 +92,11 @@ void *tal_free(const tal_t *p); * Equivalent to tal_arr() followed by memset() to zero. * * Example: - * p = tal_arrz(NULL, int, 2); - * assert(p[0] == 0 && p[1] == 0); + * p = tal_arrz(NULL, int, 2); + * assert(p[0] == 0 && p[1] == 0); */ #define tal_arrz(ctx, type, count) \ - tal_arrz_label(ctx, type, count, TAL_LABEL(type, "[]")) + tal_arrz_label(ctx, type, count, TAL_LABEL(type, "[]")) /** * tal_resize - enlarge or reduce a tal object. @@ -111,10 +110,10 @@ void *tal_free(const tal_t *p); * has been moved. * * Example: - * tal_resize(&p, 100); + * tal_resize(&p, 100); */ #define tal_resize(p, count) \ - tal_resize_((void **)(p), sizeof**(p), (count), false) + tal_resize_((void **)(p), sizeof**(p), (count), false) /** * tal_resizez - enlarge or reduce a tal object; zero out extra. @@ -124,10 +123,10 @@ void *tal_free(const tal_t *p); * This returns true on success (and may move *@p), or false on failure. * * Example: - * tal_resizez(&p, 200); + * tal_resizez(&p, 200); */ #define tal_resizez(p, count) \ - tal_resize_((void **)(p), sizeof**(p), (count), true) + tal_resize_((void **)(p), sizeof**(p), (count), true) /** * tal_steal - change the parent of a tal-allocated pointer. @@ -141,10 +140,10 @@ void *tal_free(const tal_t *p); #if HAVE_STATEMENT_EXPR /* Weird macro avoids gcc's 'warning: value computed is not used'. */ #define tal_steal(ctx, ptr) \ - ({ (tal_typeof(ptr) tal_steal_((ctx),(ptr))); }) + ({ (tal_typeof(ptr) tal_steal_((ctx),(ptr))); }) #else #define tal_steal(ctx, ptr) \ - (tal_typeof(ptr) tal_steal_((ctx),(ptr))) + (tal_typeof(ptr) tal_steal_((ctx),(ptr))) #endif /** @@ -157,8 +156,8 @@ void *tal_free(const tal_t *p); * * Note that this can only fail if your allocfn fails and your errorfn returns. */ -#define tal_add_destructor(ptr, function) \ - tal_add_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) +#define tal_add_destructor(ptr, function) \ + tal_add_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) /** * tal_del_destructor - remove a destructor callback function. @@ -169,8 +168,8 @@ void *tal_free(const tal_t *p); * false. Note that if we're inside the destructor call itself, this will * return false. */ -#define tal_del_destructor(ptr, function) \ - tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) +#define tal_del_destructor(ptr, function) \ + tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) /** * tal_add_destructor2 - add a 2-arg callback function when context is destroyed. @@ -184,13 +183,13 @@ void *tal_free(const tal_t *p); * * Note that this can only fail if your allocfn fails and your errorfn returns. */ -#define tal_add_destructor2(ptr, function, arg) \ - tal_add_destructor2_((ptr), \ - typesafe_cb_cast(void (*)(tal_t *, void *), \ - void (*)(__typeof__(ptr), \ - __typeof__(arg)), \ - (function)), \ - (arg)) +#define tal_add_destructor2(ptr, function, arg) \ + tal_add_destructor2_((ptr), \ + typesafe_cb_cast(void (*)(tal_t *, void *), \ + void (*)(__typeof__(ptr), \ + __typeof__(arg)), \ + (function)), \ + (arg)) /** * tal_del_destructor - remove a destructor callback function. @@ -201,8 +200,8 @@ void *tal_free(const tal_t *p); * false. Note that if we're inside the destructor call itself, this will * return false. */ -#define tal_del_destructor(ptr, function) \ - tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) +#define tal_del_destructor(ptr, function) \ + tal_del_destructor_((ptr), typesafe_cb(void, void *, (function), (ptr))) /** * tal_del_destructor2 - remove 2-arg callback function. @@ -213,23 +212,23 @@ void *tal_free(const tal_t *p); * If @function has not been successfully added as a destructor with * @arg, this returns false. */ -#define tal_del_destructor2(ptr, function, arg) \ - tal_del_destructor2_((ptr), \ - typesafe_cb_cast(void (*)(tal_t *, void *), \ - void (*)(__typeof__(ptr), \ - __typeof__(arg)), \ - (function)), \ - (arg)) +#define tal_del_destructor2(ptr, function, arg) \ + tal_del_destructor2_((ptr), \ + typesafe_cb_cast(void (*)(tal_t *, void *), \ + void (*)(__typeof__(ptr), \ + __typeof__(arg)), \ + (function)), \ + (arg)) enum tal_notify_type { - TAL_NOTIFY_FREE = 1, - TAL_NOTIFY_STEAL = 2, - TAL_NOTIFY_MOVE = 4, - TAL_NOTIFY_RESIZE = 8, - TAL_NOTIFY_RENAME = 16, - TAL_NOTIFY_ADD_CHILD = 32, - TAL_NOTIFY_DEL_CHILD = 64, - TAL_NOTIFY_ADD_NOTIFIER = 128, - TAL_NOTIFY_DEL_NOTIFIER = 256 + TAL_NOTIFY_FREE = 1, + TAL_NOTIFY_STEAL = 2, + TAL_NOTIFY_MOVE = 4, + TAL_NOTIFY_RESIZE = 8, + TAL_NOTIFY_RENAME = 16, + TAL_NOTIFY_ADD_CHILD = 32, + TAL_NOTIFY_DEL_CHILD = 64, + TAL_NOTIFY_ADD_NOTIFIER = 128, + TAL_NOTIFY_DEL_NOTIFIER = 256 }; /** @@ -270,23 +269,23 @@ enum tal_notify_type { * callback. This is also called for tal_add_destructor and * tal_del_destructor. */ -#define tal_add_notifier(ptr, types, callback) \ - tal_add_notifier_((ptr), (types), \ - typesafe_cb_postargs(void, tal_t *, (callback), \ - (ptr), \ - enum tal_notify_type, void *)) +#define tal_add_notifier(ptr, types, callback) \ + tal_add_notifier_((ptr), (types), \ + typesafe_cb_postargs(void, tal_t *, (callback), \ + (ptr), \ + enum tal_notify_type, void *)) /** * tal_del_notifier - remove a notifier callback function. * @ptr: The tal allocated object. * @callback: the function to call. */ -#define tal_del_notifier(ptr, callback) \ - tal_del_notifier_((ptr), \ - typesafe_cb_postargs(void, void *, (callback), \ - (ptr), \ - enum tal_notify_type, void *), \ - false, NULL) +#define tal_del_notifier(ptr, callback) \ + tal_del_notifier_((ptr), \ + typesafe_cb_postargs(void, void *, (callback), \ + (ptr), \ + enum tal_notify_type, void *), \ + false, NULL) /** * tal_set_name - attach a name to a tal pointer. @@ -295,7 +294,7 @@ enum tal_notify_type { * * The name is copied, unless we're certain it's a string literal. */ -#define tal_set_name(ptr, name) \ +#define tal_set_name(ptr, name) \ tal_set_name_((ptr), (name), TAL_IS_LITERAL(name)) /** @@ -355,8 +354,8 @@ tal_t *tal_parent(const tal_t *ctx); * @type: the type (should match type of @p!) * @p: the object to copy (or reparented if take()). Must not be NULL. */ -#define tal_dup(ctx, type, p) \ - tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), false) +#define tal_dup(ctx, type, p) \ + tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), false) /** * tal_dup_or_null - duplicate an object, or just pass NULL. @@ -366,8 +365,8 @@ tal_t *tal_parent(const tal_t *ctx); * * if @p is NULL, just return NULL, otherwise to tal_dup(). */ -#define tal_dup_or_null(ctx, type, p) \ - tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), true) +#define tal_dup_or_null(ctx, type, p) \ + tal_dup_label(ctx, type, p, TAL_LABEL(type, ""), true) /** * tal_dup_arr - duplicate an array. @@ -377,8 +376,8 @@ tal_t *tal_parent(const tal_t *ctx); * @n: the number of sizeof(type) entries to copy. * @extra: the number of extra sizeof(type) entries to allocate. */ -#define tal_dup_arr(ctx, type, p, n, extra) \ - tal_dup_arr_label(ctx, type, p, n, extra, TAL_LABEL(type, "[]")) +#define tal_dup_arr(ctx, type, p, n, extra) \ + tal_dup_arr_label(ctx, type, p, n, extra, TAL_LABEL(type, "[]")) /** @@ -387,28 +386,28 @@ tal_t *tal_parent(const tal_t *ctx); * @type: the type (should match type of @p!) * @p: the tal array to copy (or resized & reparented if take()) * - * The common case of duplicating an entire tal array. + * The comon case of duplicating an entire tal array. */ -#define tal_dup_talarr(ctx, type, p) \ - ((type *)tal_dup_talarr_((ctx), tal_typechk_(p, type *), \ - TAL_LABEL(type, "[]"))) +#define tal_dup_talarr(ctx, type, p) \ + ((type *)tal_dup_talarr_((ctx), tal_typechk_(p, type *), \ + TAL_LABEL(type, "[]"))) /* Lower-level interfaces, where you want to supply your own label string. */ -#define tal_label(ctx, type, label) \ - ((type *)tal_alloc_((ctx), sizeof(type), false, label)) -#define talz_label(ctx, type, label) \ - ((type *)tal_alloc_((ctx), sizeof(type), true, label)) -#define tal_arr_label(ctx, type, count, label) \ - ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), false, label)) -#define tal_arrz_label(ctx, type, count, label) \ - ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), true, label)) -#define tal_dup_label(ctx, type, p, label, nullok) \ - ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ - sizeof(type), 1, 0, nullok, \ - label)) -#define tal_dup_arr_label(ctx, type, p, n, extra, label) \ - ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ - sizeof(type), (n), (extra), false, \ - label)) +#define tal_label(ctx, type, label) \ + ((type *)tal_alloc_((ctx), sizeof(type), false, label)) +#define talz_label(ctx, type, label) \ + ((type *)tal_alloc_((ctx), sizeof(type), true, label)) +#define tal_arr_label(ctx, type, count, label) \ + ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), false, label)) +#define tal_arrz_label(ctx, type, count, label) \ + ((type *)tal_alloc_arr_((ctx), sizeof(type), (count), true, label)) +#define tal_dup_label(ctx, type, p, label, nullok) \ + ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ + sizeof(type), 1, 0, nullok, \ + label)) +#define tal_dup_arr_label(ctx, type, p, n, extra, label) \ + ((type *)tal_dup_((ctx), tal_typechk_(p, type *), \ + sizeof(type), (n), (extra), false, \ + label)) /** * tal_set_backend - set the allocation or error functions to use @@ -418,15 +417,15 @@ tal_t *tal_parent(const tal_t *ctx); * @error_fn: called on errors or NULL (default is abort) * * The defaults are set up so tal functions never return NULL, but you - * can override error_fn to change that. error_fn can return, and is + * can override erorr_fn to change that. error_fn can return, and is * called if alloc_fn or resize_fn fail. * * If any parameter is NULL, that function is unchanged. */ void tal_set_backend(void *(*alloc_fn)(size_t size), - void *(*resize_fn)(void *, size_t size), - void (*free_fn)(void *), - void (*error_fn)(const char *msg)); + void *(*resize_fn)(void *, size_t size), + void (*free_fn)(void *), + void (*error_fn)(const char *msg)); /** * tal_expand - expand a tal array with contents. @@ -438,17 +437,17 @@ void tal_set_backend(void *(*alloc_fn)(size_t size), * be increased by @num2. * * Example: - * int *arr1 = tal_arrz(NULL, int, 2); - * int arr2[2] = { 1, 3 }; + * int *arr1 = tal_arrz(NULL, int, 2); + * int arr2[2] = { 1, 3 }; * - * tal_expand(&arr1, arr2, 2); - * assert(tal_count(arr1) == 4); - * assert(arr1[2] == 1); - * assert(arr1[3] == 3); + * tal_expand(&arr1, arr2, 2); + * assert(tal_count(arr1) == 4); + * assert(arr1[2] == 1); + * assert(arr1[3] == 3); */ -#define tal_expand(a1p, a2, num2) \ - tal_expand_((void **)(a1p), (a2), sizeof**(a1p), \ - (num2) + 0*sizeof(*(a1p) == (a2))) +#define tal_expand(a1p, a2, num2) \ + tal_expand_((void **)(a1p), (a2), sizeof**(a1p), \ + (num2) + 0*sizeof(*(a1p) == (a2))) /** * tal_cleanup - remove pointers from NULL node @@ -472,7 +471,7 @@ void tal_cleanup(void); * when a problem is found, otherwise it is not. * * See also: - * tal_set_backend() + * tal_set_backend() */ bool tal_check(const tal_t *ctx, const char *errorstr); @@ -493,7 +492,7 @@ void tal_dump(void); #else #ifdef CCAN_TAL_DEBUG #define TAL_LABEL(type, arr) \ - __FILE__ ":" stringify(__LINE__) ":" stringify(type) arr + __FILE__ ":" stringify(__LINE__) ":" stringify(type) arr #else #define TAL_LABEL(type, arr) stringify(type) arr #endif /* CCAN_TAL_DEBUG */ @@ -524,12 +523,12 @@ bool tal_set_name_(tal_t *ctx, const char *name, bool literal); void *tal_alloc_(const tal_t *ctx, size_t bytes, bool clear, const char *label); void *tal_alloc_arr_(const tal_t *ctx, size_t bytes, size_t count, bool clear, - const char *label); + const char *label); void *tal_dup_(const tal_t *ctx, const void *p TAKES, size_t size, - size_t n, size_t extra, bool nullok, const char *label); + size_t n, size_t extra, bool nullok, const char *label); void *tal_dup_talarr_(const tal_t *ctx, const tal_t *src TAKES, - const char *label); + const char *label); tal_t *tal_steal_(const tal_t *new_parent, const tal_t *t); @@ -538,16 +537,16 @@ bool tal_expand_(tal_t **ctxp, const void *src TAKES, size_t size, size_t count) bool tal_add_destructor_(const tal_t *ctx, void (*destroy)(void *me)); bool tal_add_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), - void *arg); + void *arg); bool tal_del_destructor_(const tal_t *ctx, void (*destroy)(void *me)); bool tal_del_destructor2_(const tal_t *ctx, void (*destroy)(void *me, void *arg), - void *arg); + void *arg); bool tal_add_notifier_(const tal_t *ctx, enum tal_notify_type types, - void (*notify)(tal_t *ctx, enum tal_notify_type, - void *info)); + void (*notify)(tal_t *ctx, enum tal_notify_type, + void *info)); bool tal_del_notifier_(const tal_t *ctx, - void (*notify)(tal_t *ctx, enum tal_notify_type, - void *info), - bool match_extra_arg, void *arg); + void (*notify)(tal_t *ctx, enum tal_notify_type, + void *info), + bool match_extra_arg, void *arg); #endif /* CCAN_TAL_H */ diff --git a/nostrdb/ccan/ccan/typesafe_cb/LICENSE b/nostrdb/ccan/ccan/typesafe_cb/LICENSE new file mode 120000 index 000000000..b7951dabd --- /dev/null +++ b/nostrdb/ccan/ccan/typesafe_cb/LICENSE @@ -0,0 +1 @@ +../../licenses/CC0 \ No newline at end of file diff --git a/nostrdb/ccan/ccan/typesafe_cb/_info b/nostrdb/ccan/ccan/typesafe_cb/_info new file mode 100644 index 000000000..b4f379dd4 --- /dev/null +++ b/nostrdb/ccan/ccan/typesafe_cb/_info @@ -0,0 +1,151 @@ +#include "config.h" +#include +#include + +/** + * typesafe_cb - macros for safe callbacks. + * + * The basis of the typesafe_cb header is typesafe_cb_cast(): a + * conditional cast macro. If an expression exactly matches a given + * type, it is cast to the target type, otherwise it is left alone. + * + * This allows us to create functions which take a small number of + * specific types, rather than being forced to use a void *. In + * particular, it is useful for creating typesafe callbacks as the + * helpers typesafe_cb(), typesafe_cb_preargs() and + * typesafe_cb_postargs() demonstrate. + * + * The standard way of passing arguments to callback functions in C is + * to use a void pointer, which the callback then casts back to the + * expected type. This unfortunately subverts the type checking the + * compiler would perform if it were a direct call. Here's an example: + * + * static void my_callback(void *_obj) + * { + * struct obj *obj = _obj; + * ... + * } + * ... + * register_callback(my_callback, &my_obj); + * + * If we wanted to use the natural type for my_callback (ie. "void + * my_callback(struct obj *obj)"), we could make register_callback() + * take a void * as its first argument, but this would subvert all + * type checking. We really want register_callback() to accept only + * the exactly correct function type to match the argument, or a + * function which takes a void *. + * + * This is where typesafe_cb() comes in: it uses typesafe_cb_cast() to + * cast the callback function if it matches the argument type: + * + * void _register_callback(void (*cb)(void *arg), void *arg); + * #define register_callback(cb, arg) \ + * _register_callback(typesafe_cb(void, void *, (cb), (arg)), \ + * (arg)) + * + * On compilers which don't support the extensions required + * typesafe_cb_cast() and friend become an unconditional cast, so your + * code will compile but you won't get type checking. + * + * Example: + * #include + * #include + * #include + * + * // Generic callback infrastructure. + * struct callback { + * struct callback *next; + * int value; + * int (*callback)(int value, void *arg); + * void *arg; + * }; + * static struct callback *callbacks; + * + * static void _register_callback(int value, int (*cb)(int, void *), + * void *arg) + * { + * struct callback *new = malloc(sizeof(*new)); + * new->next = callbacks; + * new->value = value; + * new->callback = cb; + * new->arg = arg; + * callbacks = new; + * } + * #define register_callback(value, cb, arg) \ + * _register_callback(value, \ + * typesafe_cb_preargs(int, void *, \ + * (cb), (arg), int),\ + * (arg)) + * + * static struct callback *find_callback(int value) + * { + * struct callback *i; + * + * for (i = callbacks; i; i = i->next) + * if (i->value == value) + * return i; + * return NULL; + * } + * + * // Define several silly callbacks. Note they don't use void *! + * #define DEF_CALLBACK(name, op) \ + * static int name(int val, int *arg) \ + * { \ + * printf("%s", #op); \ + * return val op *arg; \ + * } + * DEF_CALLBACK(multiply, *); + * DEF_CALLBACK(add, +); + * DEF_CALLBACK(divide, /); + * DEF_CALLBACK(sub, -); + * DEF_CALLBACK(or, |); + * DEF_CALLBACK(and, &); + * DEF_CALLBACK(xor, ^); + * DEF_CALLBACK(assign, =); + * + * // Silly game to find the longest chain of values. + * int main(int argc, char *argv[]) + * { + * int i, run = 1, num = argc > 1 ? atoi(argv[1]) : 0; + * + * for (i = 1; i < 1024;) { + * // Since run is an int, compiler checks "add" does too. + * register_callback(i++, add, &run); + * register_callback(i++, divide, &run); + * register_callback(i++, sub, &run); + * register_callback(i++, multiply, &run); + * register_callback(i++, or, &run); + * register_callback(i++, and, &run); + * register_callback(i++, xor, &run); + * register_callback(i++, assign, &run); + * } + * + * printf("%i ", num); + * while (run < 56) { + * struct callback *cb = find_callback(num % i); + * if (!cb) { + * printf("-> STOP\n"); + * return 1; + * } + * num = cb->callback(num, cb->arg); + * printf("->%i ", num); + * run++; + * } + * printf("-> Winner!\n"); + * return 0; + * } + * + * License: CC0 (Public domain) + * Author: Rusty Russell + */ +int main(int argc, char *argv[]) +{ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h b/nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h index acf346dd9..126d325c7 100644 --- a/nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h +++ b/nostrdb/ccan/ccan/typesafe_cb/typesafe_cb.h @@ -1,7 +1,7 @@ /* CC0 (Public domain) - see LICENSE file for details */ #ifndef CCAN_TYPESAFE_CB_H #define CCAN_TYPESAFE_CB_H -#include "../config.h" +#include "config.h" #if HAVE_TYPEOF && HAVE_BUILTIN_CHOOSE_EXPR && HAVE_BUILTIN_TYPES_COMPATIBLE_P /** @@ -24,16 +24,16 @@ * "typeof": it will not be evaluated if typeof is not supported. * * Example: - * // We can take either an unsigned long or a void *. - * void _set_some_value(void *val); - * #define set_some_value(e) \ - * _set_some_value(typesafe_cb_cast(void *, unsigned long, (e))) + * // We can take either an unsigned long or a void *. + * void _set_some_value(void *val); + * #define set_some_value(e) \ + * _set_some_value(typesafe_cb_cast(void *, unsigned long, (e))) */ -#define typesafe_cb_cast(desttype, oktype, expr) \ - __builtin_choose_expr( \ - __builtin_types_compatible_p(__typeof__(0?(expr):(expr)), \ - oktype), \ - (desttype)(expr), (expr)) +#define typesafe_cb_cast(desttype, oktype, expr) \ + __builtin_choose_expr( \ + __builtin_types_compatible_p(__typeof__(0?(expr):(expr)), \ + oktype), \ + (desttype)(expr), (expr)) #else #define typesafe_cb_cast(desttype, oktype, expr) ((desttype)(expr)) #endif @@ -51,18 +51,18 @@ * for expr) if you need more than 3 arguments. * * Example: - * // We can take either a long, unsigned long, void * or a const void *. - * void _set_some_value(void *val); - * #define set_some_value(expr) \ - * _set_some_value(typesafe_cb_cast3(void *,, \ - * long, unsigned long, const void *,\ - * (expr))) + * // We can take either a long, unsigned long, void * or a const void *. + * void _set_some_value(void *val); + * #define set_some_value(expr) \ + * _set_some_value(typesafe_cb_cast3(void *,, \ + * long, unsigned long, const void *,\ + * (expr))) */ -#define typesafe_cb_cast3(desttype, ok1, ok2, ok3, expr) \ - typesafe_cb_cast(desttype, ok1, \ - typesafe_cb_cast(desttype, ok2, \ - typesafe_cb_cast(desttype, ok3, \ - (expr)))) +#define typesafe_cb_cast3(desttype, ok1, ok2, ok3, expr) \ + typesafe_cb_cast(desttype, ok1, \ + typesafe_cb_cast(desttype, ok2, \ + typesafe_cb_cast(desttype, ok3, \ + (expr)))) /** * typesafe_cb - cast a callback function if it matches the arg @@ -79,14 +79,14 @@ * or assigned to a void * elsewhere anyway. * * Example: - * void _register_callback(void (*fn)(void *arg), void *arg); - * #define register_callback(fn, arg) \ - * _register_callback(typesafe_cb(void, (fn), void*, (arg)), (arg)) + * void _register_callback(void (*fn)(void *arg), void *arg); + * #define register_callback(fn, arg) \ + * _register_callback(typesafe_cb(void, (fn), void*, (arg)), (arg)) */ -#define typesafe_cb(rtype, atype, fn, arg) \ - typesafe_cb_cast(rtype (*)(atype), \ - rtype (*)(__typeof__(arg)), \ - (fn)) +#define typesafe_cb(rtype, atype, fn, arg) \ + typesafe_cb_cast(rtype (*)(atype), \ + rtype (*)(__typeof__(arg)), \ + (fn)) /** * typesafe_cb_preargs - cast a callback function if it matches the arg @@ -99,16 +99,16 @@ * before the @arg. * * Example: - * void _register_callback(void (*fn)(int, void *arg), void *arg); - * #define register_callback(fn, arg) \ - * _register_callback(typesafe_cb_preargs(void, void *, \ - * (fn), (arg), int), \ - * (arg)) + * void _register_callback(void (*fn)(int, void *arg), void *arg); + * #define register_callback(fn, arg) \ + * _register_callback(typesafe_cb_preargs(void, void *, \ + * (fn), (arg), int), \ + * (arg)) */ -#define typesafe_cb_preargs(rtype, atype, fn, arg, ...) \ - typesafe_cb_cast(rtype (*)(__VA_ARGS__, atype), \ - rtype (*)(__VA_ARGS__, __typeof__(arg)), \ - (fn)) +#define typesafe_cb_preargs(rtype, atype, fn, arg, ...) \ + typesafe_cb_cast(rtype (*)(__VA_ARGS__, atype), \ + rtype (*)(__VA_ARGS__, __typeof__(arg)), \ + (fn)) /** * typesafe_cb_postargs - cast a callback function if it matches the arg @@ -121,14 +121,14 @@ * after the @arg. * * Example: - * void _register_callback(void (*fn)(void *arg, int), void *arg); - * #define register_callback(fn, arg) \ - * _register_callback(typesafe_cb_postargs(void, (fn), void *, \ - * (arg), int), \ - * (arg)) + * void _register_callback(void (*fn)(void *arg, int), void *arg); + * #define register_callback(fn, arg) \ + * _register_callback(typesafe_cb_postargs(void, (fn), void *, \ + * (arg), int), \ + * (arg)) */ -#define typesafe_cb_postargs(rtype, atype, fn, arg, ...) \ - typesafe_cb_cast(rtype (*)(atype, __VA_ARGS__), \ - rtype (*)(__typeof__(arg), __VA_ARGS__), \ - (fn)) +#define typesafe_cb_postargs(rtype, atype, fn, arg, ...) \ + typesafe_cb_cast(rtype (*)(atype, __VA_ARGS__), \ + rtype (*)(__typeof__(arg), __VA_ARGS__), \ + (fn)) #endif /* CCAN_CAST_IF_TYPE_H */ diff --git a/nostrdb/ccan/ccan/utf8/LICENSE b/nostrdb/ccan/ccan/utf8/LICENSE new file mode 120000 index 000000000..2354d1294 --- /dev/null +++ b/nostrdb/ccan/ccan/utf8/LICENSE @@ -0,0 +1 @@ +../../licenses/BSD-MIT \ No newline at end of file diff --git a/nostrdb/ccan/ccan/utf8/_info b/nostrdb/ccan/ccan/utf8/_info new file mode 100644 index 000000000..4fe4437bd --- /dev/null +++ b/nostrdb/ccan/ccan/utf8/_info @@ -0,0 +1,48 @@ +#include "config.h" +#include +#include + +/** + * utf8 - Simple routines to encode/decode valid UTF-8. + * + * This code contains routines to encode and decode UTF-8 characters. + * Table and test code stolen entirely from: + * Copyright (c) 2017 Christian Hansen + * + * + * Example: + * int main(int argc, char *argv[]) + * { + * size_t i; + * struct utf8_state utf8_state = UTF8_STATE_INIT; + * bool decoded = true; + * + * for (i = 0; i < strlen(argv[1]); i++) { + * decoded = utf8_decode(&utf8_state, argv[1][i]); + * if (decoded) { + * if (errno != 0) + * err(1, "Invalid UTF8 char %zu-%zu", + * i - utf8_state.used_len, i); + * printf("Character %u\n", utf8_state.c); + * } + * } + * + * if (!decoded) + * errx(1, "Incomplete UTF8"); + * return 0; + * } + * + * License: BSD-MIT + */ +int main(int argc, char *argv[]) +{ + /* Expect exactly one argument */ + if (argc != 2) + return 1; + + if (strcmp(argv[1], "depends") == 0) { + return 0; + } + + return 1; +} diff --git a/nostrdb/ccan/ccan/utf8/utf8.c b/nostrdb/ccan/ccan/utf8/utf8.c index c66b9ae45..cb18041a5 100644 --- a/nostrdb/ccan/ccan/utf8/utf8.c +++ b/nostrdb/ccan/ccan/utf8/utf8.c @@ -1,6 +1,5 @@ -/* MIT (BSD) license - see LICENSE file for details - taken from ccan. thanks rusty! */ - -#include "utf8.h" +/* MIT (BSD) license - see LICENSE file for details */ +#include #include #include @@ -33,10 +32,10 @@ /* * UTF-8 Encoding Form * - * U+0000..U+007F 0xxxxxxx <= 7 bits - * U+0080..U+07FF 110xxxxx 10xxxxxx <= 11 bits - * U+0800..U+FFFF 1110xxxx 10xxxxxx 10xxxxxx <= 16 bits - * U+10000..U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx <= 21 bits + * U+0000..U+007F 0xxxxxxx <= 7 bits + * U+0080..U+07FF 110xxxxx 10xxxxxx <= 11 bits + * U+0800..U+FFFF 1110xxxx 10xxxxxx 10xxxxxx <= 16 bits + * U+10000..U+10FFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx <= 21 bits * * * U+0000..U+007F 00..7F @@ -59,122 +58,121 @@ */ bool utf8_decode(struct utf8_state *utf8_state, char c) { - if (utf8_state->used_len == utf8_state->total_len) { - utf8_state->used_len = 1; - /* First character in sequence. */ - if (((unsigned char)c & 0x80) == 0) { - /* ASCII, easy. */ - if (c == 0) - goto bad_encoding; - utf8_state->total_len = 1; - utf8_state->c = c; - goto finished_decoding; - } else if (((unsigned char)c & 0xE0) == 0xC0) { - utf8_state->total_len = 2; - utf8_state->c = ((unsigned char)c & 0x1F); - return false; - } else if (((unsigned char)c & 0xF0) == 0xE0) { - utf8_state->total_len = 3; - utf8_state->c = ((unsigned char)c & 0x0F); - return false; - } else if (((unsigned char)c & 0xF8) == 0xF0) { - utf8_state->total_len = 4; - utf8_state->c = ((unsigned char)c & 0x07); - return false; - } - goto bad_encoding; - } + if (utf8_state->used_len == utf8_state->total_len) { + utf8_state->used_len = 1; + /* First character in sequence. */ + if (((unsigned char)c & 0x80) == 0) { + /* ASCII, easy. */ + if (c == 0) + goto bad_encoding; + utf8_state->total_len = 1; + utf8_state->c = c; + goto finished_decoding; + } else if (((unsigned char)c & 0xE0) == 0xC0) { + utf8_state->total_len = 2; + utf8_state->c = ((unsigned char)c & 0x1F); + return false; + } else if (((unsigned char)c & 0xF0) == 0xE0) { + utf8_state->total_len = 3; + utf8_state->c = ((unsigned char)c & 0x0F); + return false; + } else if (((unsigned char)c & 0xF8) == 0xF0) { + utf8_state->total_len = 4; + utf8_state->c = ((unsigned char)c & 0x07); + return false; + } + goto bad_encoding; + } - if (((unsigned char)c & 0xC0) != 0x80) - goto bad_encoding; + if (((unsigned char)c & 0xC0) != 0x80) + goto bad_encoding; - utf8_state->c <<= 6; - utf8_state->c |= ((unsigned char)c & 0x3F); - - utf8_state->used_len++; - if (utf8_state->used_len == utf8_state->total_len) - goto finished_decoding; - return false; + utf8_state->c <<= 6; + utf8_state->c |= ((unsigned char)c & 0x3F); + + utf8_state->used_len++; + if (utf8_state->used_len == utf8_state->total_len) + goto finished_decoding; + return false; finished_decoding: - if (utf8_state->c == 0 || utf8_state->c > 0x10FFFF) - errno = ERANGE; - /* The UTF-16 "surrogate range": illegal in UTF-8 */ - else if (utf8_state->total_len == 3 - && (utf8_state->c & 0xFFFFF800) == 0x0000D800) - errno = ERANGE; - else { - int min_bits; - switch (utf8_state->total_len) { - case 1: - min_bits = 0; - break; - case 2: - min_bits = 7; - break; - case 3: - min_bits = 11; - break; - case 4: - min_bits = 16; - break; - default: - abort(); - } - if ((utf8_state->c >> min_bits) == 0) - errno = EFBIG; - else - errno = 0; - } - return true; + if (utf8_state->c == 0 || utf8_state->c > 0x10FFFF) + errno = ERANGE; + /* The UTF-16 "surrogate range": illegal in UTF-8 */ + else if (utf8_state->total_len == 3 + && (utf8_state->c & 0xFFFFF800) == 0x0000D800) + errno = ERANGE; + else { + int min_bits; + switch (utf8_state->total_len) { + case 1: + min_bits = 0; + break; + case 2: + min_bits = 7; + break; + case 3: + min_bits = 11; + break; + case 4: + min_bits = 16; + break; + default: + abort(); + } + if ((utf8_state->c >> min_bits) == 0) + errno = EFBIG; + else + errno = 0; + } + return true; bad_encoding: - utf8_state->total_len = utf8_state->used_len; - errno = EINVAL; - return true; + utf8_state->total_len = utf8_state->used_len; + errno = EINVAL; + return true; } size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]) { - if ((point >> 7) == 0) { - if (point == 0) { - errno = ERANGE; - return 0; - } - /* 0xxxxxxx */ - dest[0] = point; - return 1; - } + if ((point >> 7) == 0) { + if (point == 0) { + errno = ERANGE; + return 0; + } + /* 0xxxxxxx */ + dest[0] = point; + return 1; + } - if ((point >> 11) == 0) { - /* 110xxxxx 10xxxxxx */ - dest[1] = 0x80 | (point & 0x3F); - dest[0] = 0xC0 | (point >> 6); - return 2; - } + if ((point >> 11) == 0) { + /* 110xxxxx 10xxxxxx */ + dest[1] = 0x80 | (point & 0x3F); + dest[0] = 0xC0 | (point >> 6); + return 2; + } - if ((point >> 16) == 0) { - if (point >= 0xD800 && point <= 0xDFFF) { - errno = ERANGE; - return 0; - } - /* 1110xxxx 10xxxxxx 10xxxxxx */ - dest[2] = 0x80 | (point & 0x3F); - dest[1] = 0x80 | ((point >> 6) & 0x3F); - dest[0] = 0xE0 | (point >> 12); - return 3; - } + if ((point >> 16) == 0) { + if (point >= 0xD800 && point <= 0xDFFF) { + errno = ERANGE; + return 0; + } + /* 1110xxxx 10xxxxxx 10xxxxxx */ + dest[2] = 0x80 | (point & 0x3F); + dest[1] = 0x80 | ((point >> 6) & 0x3F); + dest[0] = 0xE0 | (point >> 12); + return 3; + } - if (point > 0x10FFFF) { - errno = ERANGE; - return 0; - } + if (point > 0x10FFFF) { + errno = ERANGE; + return 0; + } - /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ - dest[3] = 0x80 | (point & 0x3F); - dest[2] = 0x80 | ((point >> 6) & 0x3F); - dest[1] = 0x80 | ((point >> 12) & 0x3F); - dest[0] = 0xF0 | (point >> 18); - return 4; + /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */ + dest[3] = 0x80 | (point & 0x3F); + dest[2] = 0x80 | ((point >> 6) & 0x3F); + dest[1] = 0x80 | ((point >> 12) & 0x3F); + dest[0] = 0xF0 | (point >> 18); + return 4; } - diff --git a/nostrdb/ccan/ccan/utf8/utf8.h b/nostrdb/ccan/ccan/utf8/utf8.h index 3eac3a0ee..9a7469680 100644 --- a/nostrdb/ccan/ccan/utf8/utf8.h +++ b/nostrdb/ccan/ccan/utf8/utf8.h @@ -6,22 +6,22 @@ #include /* Unicode is limited to 21 bits. */ -#define UTF8_MAX_LEN 4 +#define UTF8_MAX_LEN 4 struct utf8_state { - /* How many characters we are expecting as part of this Unicode point */ - uint16_t total_len; - /* How many characters we've already seen. */ - uint16_t used_len; - /* Compound character, aka Unicode point. */ - uint32_t c; + /* How many characters we are expecting as part of this Unicode point */ + uint16_t total_len; + /* How many characters we've already seen. */ + uint16_t used_len; + /* Compound character, aka Unicode point. */ + uint32_t c; }; #define UTF8_STATE_INIT { 0, 0, 0 } static inline void utf8_state_init(struct utf8_state *utf8_state) { - memset(utf8_state, 0, sizeof(*utf8_state)); + memset(utf8_state, 0, sizeof(*utf8_state)); } /** @@ -51,5 +51,4 @@ bool utf8_decode(struct utf8_state *utf8_state, char c); * Sets errno to ERANGE if point was invalid. */ size_t utf8_encode(uint32_t point, char dest[UTF8_MAX_LEN]); - #endif /* CCAN_UTF8_H */ diff --git a/nostrdb/ccan/licenses/BSD-MIT b/nostrdb/ccan/licenses/BSD-MIT new file mode 100644 index 000000000..89de35479 --- /dev/null +++ b/nostrdb/ccan/licenses/BSD-MIT @@ -0,0 +1,17 @@ +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/nostrdb/ccan/licenses/CC0 b/nostrdb/ccan/licenses/CC0 new file mode 100644 index 000000000..feb9b118e --- /dev/null +++ b/nostrdb/ccan/licenses/CC0 @@ -0,0 +1,28 @@ +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: + + the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; + moral rights retained by the original author(s) and/or performer(s); + publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; + rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; + rights protecting the extraction, dissemination, use and reuse of data in a Work; + database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and + other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. + +4. Limitations and Disclaimers. + + No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. + Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. + Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. + Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. diff --git a/nostrdb/ccan/licenses/LGPL-2.1 b/nostrdb/ccan/licenses/LGPL-2.1 new file mode 100644 index 000000000..2d2d780e6 --- /dev/null +++ b/nostrdb/ccan/licenses/LGPL-2.1 @@ -0,0 +1,510 @@ + + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations +below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it +becomes a de-facto standard. To achieve this, non-free programs must +be allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control +compilation and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at least + three years, to give the same user the materials specified in + Subsection 6a, above, for a charge no more than the cost of + performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply, and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License +may add an explicit geographical distribution limitation excluding those +countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms +of the ordinary General Public License). + + To apply these terms, attach the following notices to the library. +It is safest to attach them to the start of each source file to most +effectively convey the exclusion of warranty; and each file should +have at least the "copyright" line and a pointer to where the full +notice is found. + + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or +your school, if any, to sign a "copyright disclaimer" for the library, +if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James + Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! + + diff --git a/nostrdb/ccan/licenses/LGPL-3 b/nostrdb/ccan/licenses/LGPL-3 new file mode 100644 index 000000000..fc8a5de7e --- /dev/null +++ b/nostrdb/ccan/licenses/LGPL-3 @@ -0,0 +1,165 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. From 157827ef55178197d04f05a22ffec94d9966dcb6 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Sat, 17 Aug 2024 15:21:42 +0930 Subject: [PATCH 137/146] nostrdb: ccan: update to latest. Only change for us: CCAN_TAL_NEVER_RETURN_NULL can be defined if we don't override tal error handling. Signed-off-by: Rusty Russell Signed-off-by: William Casarin --- nostrdb/ccan/README | 2 +- nostrdb/ccan/ccan/tal/str/str.c | 45 +++++---------------------- nostrdb/ccan/ccan/tal/str/str.h | 55 +++++++++++++++++++-------------- nostrdb/ccan/ccan/tal/tal.c | 17 ++++++++-- nostrdb/ccan/ccan/tal/tal.h | 17 ++++++++-- 5 files changed, 68 insertions(+), 68 deletions(-) diff --git a/nostrdb/ccan/README b/nostrdb/ccan/README index 3d02379e6..c0c5d6d12 100644 --- a/nostrdb/ccan/README +++ b/nostrdb/ccan/README @@ -2,4 +2,4 @@ CCAN imported from https://github.com/rustyrussell/ccan Use "make update-ccan" at top level to refresh from ../ccan. -CCAN version: init-2577-g1ae4c432 +CCAN version: init-2587-gf927e4be diff --git a/nostrdb/ccan/ccan/tal/str/str.c b/nostrdb/ccan/ccan/tal/str/str.c index cec31c752..617b942cd 100644 --- a/nostrdb/ccan/ccan/tal/str/str.c +++ b/nostrdb/ccan/ccan/tal/str/str.c @@ -14,21 +14,14 @@ char *tal_strdup_(const tal_t *ctx, const char *p, const char *label) { - /* We have to let through NULL for take(). */ - return tal_dup_arr_label(ctx, char, p, p ? strlen(p) + 1: 1, 0, label); + return tal_dup_arr_label(ctx, char, p, strlen(p) + 1, 0, label); } char *tal_strndup_(const tal_t *ctx, const char *p, size_t n, const char *label) { - size_t len; + size_t len = strnlen(p, n); char *ret; - /* We have to let through NULL for take(). */ - if (likely(p)) - len = strnlen(p, n); - else - len = n; - ret = tal_dup_arr_label(ctx, char, p, len, 1, label); if (ret) ret[len] = '\0'; @@ -84,9 +77,6 @@ char *tal_vfmt_(const tal_t *ctx, const char *fmt, va_list ap, const char *label { char *buf; - if (!fmt && taken(fmt)) - return NULL; - /* A decent guess to start. */ buf = tal_arr_label(ctx, char, strlen(fmt) * 2, label); if (!do_vfmt(&buf, 0, fmt, ap)) @@ -96,9 +86,6 @@ char *tal_vfmt_(const tal_t *ctx, const char *fmt, va_list ap, const char *label bool tal_append_vfmt(char **baseptr, const char *fmt, va_list ap) { - if (!fmt && taken(fmt)) - return false; - return do_vfmt(baseptr, strlen(*baseptr), fmt, ap); } @@ -120,13 +107,7 @@ char *tal_strcat_(const tal_t *ctx, const char *s1, const char *s2, size_t len1, len2; char *ret; - if (unlikely(!s2) && taken(s2)) { - if (taken(s1)) - tal_free(s1); - return NULL; - } - /* We have to let through NULL for take(). */ - len1 = s1 ? strlen(s1) : 0; + len1 = strlen(s1); len2 = strlen(s2); ret = tal_dup_arr_label(ctx, char, s1, len1, len2 + 1, label); @@ -151,13 +132,11 @@ char **tal_strsplit_(const tal_t *ctx, tal_free(string); if (taken(delims)) tal_free(delims); - return NULL; + return parts; } str = tal_strdup(parts, string); if (unlikely(!str)) goto fail; - if (unlikely(!delims) && is_taken(delims)) - goto fail; if (flags == STR_NO_EMPTY) str += strspn(str, delims); @@ -185,10 +164,14 @@ char **tal_strsplit_(const tal_t *ctx, return parts; fail: +#ifdef CCAN_TAL_NEVER_RETURN_NULL + abort(); +#else tal_free(parts); if (taken(delims)) tal_free(delims); return NULL; +#endif } char *tal_strjoin_(const tal_t *ctx, @@ -199,12 +182,6 @@ char *tal_strjoin_(const tal_t *ctx, char *ret = NULL; size_t totlen = 0, dlen; - if (unlikely(!strings) && is_taken(strings)) - goto fail; - - if (unlikely(!delim) && is_taken(delim)) - goto fail; - dlen = strlen(delim); ret = tal_arr_label(ctx, char, dlen*2+1, label); if (!ret) @@ -269,15 +246,9 @@ bool tal_strreg_(const tal_t *ctx, const char *string, const char *label, unsigned int i; va_list ap; - if (unlikely(!regex) && is_taken(regex)) - goto fail_no_re; - if (regcomp(&r, regex, REG_EXTENDED) != 0) goto fail_no_re; - if (unlikely(!string) && is_taken(string)) - goto fail; - if (regexec(&r, string, nmatch, matches, 0) != 0) goto fail; diff --git a/nostrdb/ccan/ccan/tal/str/str.h b/nostrdb/ccan/ccan/tal/str/str.h index f93948440..12b164782 100644 --- a/nostrdb/ccan/ccan/tal/str/str.h +++ b/nostrdb/ccan/ccan/tal/str/str.h @@ -12,17 +12,18 @@ /** * tal_strdup - duplicate a string * @ctx: NULL, or tal allocated object to be parent. - * @p: the string to copy (can be take()). + * @p: the string to copy (can be take(), must not be NULL). * * The returned string will have tal_count() == strlen() + 1. */ #define tal_strdup(ctx, p) tal_strdup_(ctx, p, TAL_LABEL(char, "[]")) -char *tal_strdup_(const tal_t *ctx, const char *p TAKES, const char *label); +char *tal_strdup_(const tal_t *ctx, const char *p TAKES, const char *label) + TAL_RETURN_PTR NON_NULL_ARGS(2); /** * tal_strndup - duplicate a limited amount of a string. * @ctx: NULL, or tal allocated object to be parent. - * @p: the string to copy (can be take()). + * @p: the string to copy (can be take(), must not be NULL). * @n: the maximum length to copy. * * Always gives a nul-terminated string, with strlen() <= @n. @@ -30,24 +31,25 @@ char *tal_strdup_(const tal_t *ctx, const char *p TAKES, const char *label); */ #define tal_strndup(ctx, p, n) tal_strndup_(ctx, p, n, TAL_LABEL(char, "[]")) char *tal_strndup_(const tal_t *ctx, const char *p TAKES, size_t n, - const char *label); + const char *label) + TAL_RETURN_PTR NON_NULL_ARGS(2); /** * tal_fmt - allocate a formatted string * @ctx: NULL, or tal allocated object to be parent. - * @fmt: the printf-style format (can be take()). + * @fmt: the printf-style format (can be take(), must not be NULL). * * The returned string will have tal_count() == strlen() + 1. */ #define tal_fmt(ctx, ...) \ tal_fmt_(ctx, TAL_LABEL(char, "[]"), __VA_ARGS__) char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt TAKES, - ...) PRINTF_FMT(3,4); + ...) PRINTF_FMT(3,4) TAL_RETURN_PTR NON_NULL_ARGS(3); /** * tal_vfmt - allocate a formatted string (va_list version) * @ctx: NULL, or tal allocated object to be parent. - * @fmt: the printf-style format (can be take()). + * @fmt: the printf-style format (can be take(), must not be NULL). * @va: the va_list containing the format args. * * The returned string will have tal_count() == strlen() + 1. @@ -56,40 +58,42 @@ char *tal_fmt_(const tal_t *ctx, const char *label, const char *fmt TAKES, tal_vfmt_(ctx, fmt, va, TAL_LABEL(char, "[]")) char *tal_vfmt_(const tal_t *ctx, const char *fmt TAKES, va_list ap, const char *label) - PRINTF_FMT(2,0); + PRINTF_FMT(2,0) TAL_RETURN_PTR NON_NULL_ARGS(2); /** * tal_append_fmt - append a formatted string to a talloc string. * @baseptr: a pointer to the tal string to be appended to. - * @fmt: the printf-style format (can be take()). + * @fmt: the printf-style format (can be take(), must not be NULL). * * Returns false on allocation failure. * Otherwise tal_count(*@baseptr) == strlen(*@baseptr) + 1. */ -bool tal_append_fmt(char **baseptr, const char *fmt TAKES, ...) PRINTF_FMT(2,3); +bool tal_append_fmt(char **baseptr, const char *fmt TAKES, ...) + PRINTF_FMT(2,3) NON_NULL_ARGS(2); /** * tal_append_vfmt - append a formatted string to a talloc string (va_list) * @baseptr: a pointer to the tal string to be appended to. - * @fmt: the printf-style format (can be take()). + * @fmt: the printf-style format (can be take(), must not be NULL). * @va: the va_list containing the format args. * * Returns false on allocation failure. * Otherwise tal_count(*@baseptr) == strlen(*@baseptr) + 1. */ -bool tal_append_vfmt(char **baseptr, const char *fmt TAKES, va_list ap); +bool tal_append_vfmt(char **baseptr, const char *fmt TAKES, va_list ap) + NON_NULL_ARGS(2); /** * tal_strcat - join two strings together * @ctx: NULL, or tal allocated object to be parent. - * @s1: the first string (can be take()). - * @s2: the second string (can be take()). + * @s1: the first string (can be take(), must not be NULL). + * @s2: the second string (can be take(), must not be NULL). * * The returned string will have tal_count() == strlen() + 1. */ #define tal_strcat(ctx, s1, s2) tal_strcat_(ctx, s1, s2, TAL_LABEL(char, "[]")) char *tal_strcat_(const tal_t *ctx, const char *s1 TAKES, const char *s2 TAKES, - const char *label); + const char *label) TAL_RETURN_PTR NON_NULL_ARGS(2,3); enum strsplit { STR_EMPTY_OK, @@ -99,8 +103,8 @@ enum strsplit { /** * tal_strsplit - Split string into an array of substrings * @ctx: the context to tal from (often NULL). - * @string: the string to split (can be take()). - * @delims: delimiters where lines should be split (can be take()). + * @string: the string to split (can be take(), must not be NULL). + * @delims: delimiters where lines should be split (can be take(), must not be NULL). * @flags: whether to include empty substrings. * * This function splits a single string into multiple strings. @@ -137,7 +141,8 @@ char **tal_strsplit_(const tal_t *ctx, const char *string TAKES, const char *delims TAKES, enum strsplit flag, - const char *label); + const char *label) + TAL_RETURN_PTR NON_NULL_ARGS(2,3); enum strjoin { STR_TRAIL, @@ -147,8 +152,8 @@ enum strjoin { /** * tal_strjoin - Join an array of substrings into one long string * @ctx: the context to tal from (often NULL). - * @strings: the NULL-terminated array of strings to join (can be take()) - * @delim: the delimiter to insert between the strings (can be take()) + * @strings: the NULL-terminated array of strings to join (can be take(), must not be NULL) + * @delim: the delimiter to insert between the strings (can be take(), must not be NULL) * @flags: whether to add a delimieter to the end * * This function joins an array of strings into a single string. The @@ -175,13 +180,14 @@ char *tal_strjoin_(const void *ctx, char *strings[] TAKES, const char *delim TAKES, enum strjoin flags, - const char *label); + const char *label) + TAL_RETURN_PTR NON_NULL_ARGS(2,3); /** * tal_strreg - match/extract from a string via (extended) regular expressions. * @ctx: the context to tal from (often NULL) - * @string: the string to try to match (can be take()) - * @regex: the regular expression to match (can be take()) + * @string: the string to try to match (can be take(), must not be NULL) + * @regex: the regular expression to match (can be take(), must not be NULL) * ...: pointers to strings to allocate for subexpressions. * * Returns true if we matched, in which case any parenthesized @@ -221,5 +227,6 @@ char *tal_strjoin_(const void *ctx, #define tal_strreg(ctx, string, ...) \ tal_strreg_(ctx, string, TAL_LABEL(char, "[]"), __VA_ARGS__) bool tal_strreg_(const void *ctx, const char *string TAKES, - const char *label, const char *regex, ...); + const char *label, const char *regex TAKES, ...) + NON_NULL_ARGS(2,4); #endif /* CCAN_STR_TAL_H */ diff --git a/nostrdb/ccan/ccan/tal/tal.c b/nostrdb/ccan/ccan/tal/tal.c index 1230d8cac..e799059fc 100644 --- a/nostrdb/ccan/ccan/tal/tal.c +++ b/nostrdb/ccan/ccan/tal/tal.c @@ -456,13 +456,24 @@ static void del_tree(struct tal_hdr *t, const tal_t *orig, int saved_errno) freefn(t); } +/* Don't have compiler complain we're returning NULL if we promised not to! */ +static void *null_alloc_failed(void) +{ +#ifdef CCAN_TAL_NEVER_RETURN_NULL + abort(); +#else + return NULL; +#endif /* CCAN_TAL_NEVER_RETURN_NULL */ +} + void *tal_alloc_(const tal_t *ctx, size_t size, bool clear, const char *label) { struct tal_hdr *child, *parent = debug_tal(to_tal_hdr_or_null(ctx)); child = allocate(sizeof(struct tal_hdr) + size); if (!child) - return NULL; + return null_alloc_failed(); + if (clear) memset(from_tal_hdr(child), 0, size); child->prop = (void *)label; @@ -470,7 +481,7 @@ void *tal_alloc_(const tal_t *ctx, size_t size, bool clear, const char *label) if (!add_child(parent, child)) { freefn(child); - return NULL; + return null_alloc_failed(); } debug_tal(parent); if (notifiers) @@ -501,7 +512,7 @@ void *tal_alloc_arr_(const tal_t *ctx, size_t size, size_t count, bool clear, const char *label) { if (!adjust_size(&size, count)) - return NULL; + return null_alloc_failed(); return tal_alloc_(ctx, size, clear, label); } diff --git a/nostrdb/ccan/ccan/tal/tal.h b/nostrdb/ccan/ccan/tal/tal.h index c486f9e8e..347a5e8c8 100644 --- a/nostrdb/ccan/ccan/tal/tal.h +++ b/nostrdb/ccan/ccan/tal/tal.h @@ -11,6 +11,14 @@ #include #include +/* Define this for better optimization if you never override errfn + * to something tat returns */ +#ifdef CCAN_TAL_NEVER_RETURN_NULL +#define TAL_RETURN_PTR RETURNS_NONNULL +#else +#define TAL_RETURN_PTR +#endif /* CCAN_TAL_NEVER_RETURN_NULL */ + /** * tal_t - convenient alias for void to mark tal pointers. * @@ -417,7 +425,8 @@ tal_t *tal_parent(const tal_t *ctx); * @error_fn: called on errors or NULL (default is abort) * * The defaults are set up so tal functions never return NULL, but you - * can override erorr_fn to change that. error_fn can return, and is + * can override error_fn to change that. error_fn can return (only if + * you haven't defined CCAN_TAL_NEVER_RETURN_NULL!), and is * called if alloc_fn or resize_fn fail. * * If any parameter is NULL, that function is unchanged. @@ -521,9 +530,11 @@ bool tal_set_name_(tal_t *ctx, const char *name, bool literal); #define tal_typechk_(ptr, ptype) (ptr) #endif -void *tal_alloc_(const tal_t *ctx, size_t bytes, bool clear, const char *label); +void *tal_alloc_(const tal_t *ctx, size_t bytes, bool clear, const char *label) + TAL_RETURN_PTR; void *tal_alloc_arr_(const tal_t *ctx, size_t bytes, size_t count, bool clear, - const char *label); + const char *label) + TAL_RETURN_PTR; void *tal_dup_(const tal_t *ctx, const void *p TAKES, size_t size, size_t n, size_t extra, bool nullok, const char *label); From 210cb30e47c33910aa2bd253286e7f80ca8b3283 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 14:43:25 -0800 Subject: [PATCH 138/146] c: re-add damus-only C stuff --- {nostrdb => damus-c}/damus-Bridging-Header.h | 1 - {nostrdb => damus-c}/wasm.c | 0 {nostrdb => damus-c}/wasm.h | 0 damus.xcodeproj/project.pbxproj | 525 +++++++++++-------- nostrdb/damus.c | 393 -------------- nostrdb/damus.h | 18 - 6 files changed, 293 insertions(+), 644 deletions(-) rename {nostrdb => damus-c}/damus-Bridging-Header.h (93%) rename {nostrdb => damus-c}/wasm.c (100%) rename {nostrdb => damus-c}/wasm.h (100%) delete mode 100644 nostrdb/damus.c delete mode 100644 nostrdb/damus.h diff --git a/nostrdb/damus-Bridging-Header.h b/damus-c/damus-Bridging-Header.h similarity index 93% rename from nostrdb/damus-Bridging-Header.h rename to damus-c/damus-Bridging-Header.h index f0d593f01..76b546b3e 100644 --- a/nostrdb/damus-Bridging-Header.h +++ b/damus-c/damus-Bridging-Header.h @@ -2,7 +2,6 @@ // Use this file to import your target's public headers that you would like to expose to Swift. // -#include "damus.h" #include "bolt11.h" #include "amount.h" #include "nostr_bech32.h" diff --git a/nostrdb/wasm.c b/damus-c/wasm.c similarity index 100% rename from nostrdb/wasm.c rename to damus-c/wasm.c diff --git a/nostrdb/wasm.h b/damus-c/wasm.h similarity index 100% rename from nostrdb/wasm.h rename to damus-c/wasm.h diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj index 349dd9859..405b28559 100644 --- a/damus.xcodeproj/project.pbxproj +++ b/damus.xcodeproj/project.pbxproj @@ -40,8 +40,6 @@ 4C06670128FC7C5900038D2A /* RelayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670028FC7C5900038D2A /* RelayView.swift */; }; 4C06670428FC7EC500038D2A /* Kingfisher in Frameworks */ = {isa = PBXBuildFile; productRef = 4C06670328FC7EC500038D2A /* Kingfisher */; }; 4C06670628FCB08600038D2A /* ImageCarousel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670528FCB08600038D2A /* ImageCarousel.swift */; }; - 4C06670B28FDE64700038D2A /* damus.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670A28FDE64700038D2A /* damus.c */; }; - 4C06670E28FDEAA000038D2A /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670D28FDEAA000038D2A /* utf8.c */; }; 4C0A3F8F280F640A000448DE /* ThreadModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F8E280F640A000448DE /* ThreadModel.swift */; }; 4C0A3F93280F66F5000448DE /* ReplyMap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C0A3F92280F66F5000448DE /* ReplyMap.swift */; }; 4C0C03992A61E27B0098B3B8 /* primal.wasm in Resources */ = {isa = PBXBuildFile; fileRef = 4C0C03972A61E27B0098B3B8 /* primal.wasm */; }; @@ -104,7 +102,6 @@ 4C30AC7829A577AB00E2BD5A /* EventCache.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7729A577AB00E2BD5A /* EventCache.swift */; }; 4C30AC8029A6A53F00E2BD5A /* ProfilePicturesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C30AC7F29A6A53F00E2BD5A /* ProfilePicturesView.swift */; }; 4C32B9332A99845B00DC3548 /* Ndb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E242A9932C100489948 /* Ndb.swift */; }; - 4C32B9342A9AD01A00DC3548 /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E2C2A9935D300489948 /* NdbProfile.swift */; }; 4C32B94C2A9AD44700DC3548 /* FbConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9372A9AD44700DC3548 /* FbConstants.swift */; }; 4C32B94D2A9AD44700DC3548 /* Offset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9382A9AD44700DC3548 /* Offset.swift */; }; 4C32B94E2A9AD44700DC3548 /* Mutable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9392A9AD44700DC3548 /* Mutable.swift */; }; @@ -156,19 +153,6 @@ 4C3D52B6298DB4E6001C5831 /* ZapEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3D52B5298DB4E6001C5831 /* ZapEvent.swift */; }; 4C3D52B8298DB5C6001C5831 /* TextEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3D52B7298DB5C6001C5831 /* TextEvent.swift */; }; 4C3DCC762A9FE9EC0091E592 /* NdbTxn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */; }; - 4C3EA63D28FF52D600C48A62 /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA63C28FF52D600C48A62 /* bolt11.c */; }; - 4C3EA64128FF553900C48A62 /* hash_u5.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64028FF553900C48A62 /* hash_u5.c */; }; - 4C3EA64428FF558100C48A62 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64328FF558100C48A62 /* sha256.c */; }; - 4C3EA64928FF597700C48A62 /* bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64828FF597700C48A62 /* bech32.c */; }; - 4C3EA64C28FF59AC00C48A62 /* bech32_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64B28FF59AC00C48A62 /* bech32_util.c */; }; - 4C3EA64F28FF59F200C48A62 /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64E28FF59F200C48A62 /* tal.c */; }; - 4C3EA66028FF5E7700C48A62 /* node_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA65F28FF5E7700C48A62 /* node_id.c */; }; - 4C3EA66528FF5F6800C48A62 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66428FF5F6800C48A62 /* mem.c */; }; - 4C3EA66828FF5F9900C48A62 /* hex.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66728FF5F9900C48A62 /* hex.c */; }; - 4C3EA66D28FF782800C48A62 /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66C28FF782800C48A62 /* amount.c */; }; - 4C3EA67528FF7A5A00C48A62 /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67428FF7A5A00C48A62 /* take.c */; }; - 4C3EA67728FF7A9800C48A62 /* talstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67628FF7A9800C48A62 /* talstr.c */; }; - 4C3EA67928FF7ABF00C48A62 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67828FF7ABF00C48A62 /* list.c */; }; 4C3EA67B28FF7B3900C48A62 /* InvoiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67A28FF7B3900C48A62 /* InvoiceTests.swift */; }; 4C3EA67D28FFBBA300C48A62 /* InvoicesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67C28FFBBA200C48A62 /* InvoicesView.swift */; }; 4C3EA67F28FFC01D00C48A62 /* InvoiceView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67E28FFC01D00C48A62 /* InvoiceView.swift */; }; @@ -242,7 +226,6 @@ 4C8D00C829DF791C0036AF10 /* CompatibleAttribute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00C729DF791C0036AF10 /* CompatibleAttribute.swift */; }; 4C8D00CA29DF80350036AF10 /* TruncatedText.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00C929DF80350036AF10 /* TruncatedText.swift */; }; 4C8D00CC29DF92DF0036AF10 /* Hashtags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CB29DF92DF0036AF10 /* Hashtags.swift */; }; - 4C8D00CF29E38B950036AF10 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */; }; 4C8D00D429E3C5D40036AF10 /* NIP19Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */; }; 4C8D1A6C29F1DFC200ACDF75 /* FriendIcon.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D1A6B29F1DFC200ACDF75 /* FriendIcon.swift */; }; 4C8D1A6F29F31E5000ACDF75 /* FriendsButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D1A6E29F31E5000ACDF75 /* FriendsButton.swift */; }; @@ -252,9 +235,7 @@ 4C90BD18283A9EE5008EE7EF /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD17283A9EE5008EE7EF /* LoginView.swift */; }; 4C90BD1A283AA67F008EE7EF /* Bech32.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD19283AA67F008EE7EF /* Bech32.swift */; }; 4C90BD1C283AC38E008EE7EF /* Bech32Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90BD1B283AC38E008EE7EF /* Bech32Tests.swift */; }; - 4C9146FD2A2A87C200DDEA40 /* wasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CA9276E2A2A5D110098A105 /* wasm.c */; }; 4C9146FE2A2A87C200DDEA40 /* nostrscript.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4F14A92A2A71AB0045A0B9 /* nostrscript.c */; }; - 4C9147002A2A891E00DDEA40 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C9146FF2A2A891E00DDEA40 /* error.c */; }; 4C94D6432BA5AEFE00C26EFF /* QuoteRepostsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C94D6422BA5AEFE00C26EFF /* QuoteRepostsView.swift */; }; 4C987B57283FD07F0042CE38 /* FollowersModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C987B56283FD07F0042CE38 /* FollowersModel.swift */; }; 4C9AA14A2A4587A6003F49FD /* NotificationStatusModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9AA1492A4587A6003F49FD /* NotificationStatusModel.swift */; }; @@ -350,7 +331,6 @@ 4CE879552996BAB900F758CC /* RelayPaidDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879542996BAB900F758CC /* RelayPaidDetail.swift */; }; 4CE879582996C45300F758CC /* ZapsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE879572996C45300F758CC /* ZapsView.swift */; }; 4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CE8795A2996C47A00F758CC /* ZapsModel.swift */; }; - 4CE9FBBA2A6B3C63007E485C /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9FBB82A6B3B26007E485C /* nostrdb.c */; settings = {COMPILER_FLAGS = "-w"; }; }; 4CEE2AED2805B22500AB5EEF /* NostrRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AEC2805B22500AB5EEF /* NostrRequest.swift */; }; 4CEE2AF1280B216B00AB5EEF /* EventDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */; }; 4CEE2AF3280B25C500AB5EEF /* ProfilePicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CEE2AF2280B25C500AB5EEF /* ProfilePicView.swift */; }; @@ -372,6 +352,34 @@ 4CF0ABF029857E9200D66079 /* Bech32Object.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABEF29857E9200D66079 /* Bech32Object.swift */; }; 4CF0ABF62985CD5500D66079 /* UserSearch.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF0ABF52985CD5500D66079 /* UserSearch.swift */; }; 4CF38C882A9442DC00BE01B6 /* UserStatusView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF38C872A9442DC00BE01B6 /* UserStatusView.swift */; }; + 4CF480382B631C0100F2B2C0 /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDE2B631C0100F2B2C0 /* nostrdb.c */; }; + 4CF480392B631C0100F2B2C0 /* block.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDF2B631C0100F2B2C0 /* block.c */; }; + 4CF4803A2B631C0100F2B2C0 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FE52B631C0100F2B2C0 /* nostr_bech32.c */; }; + 4CF4803B2B631C0100F2B2C0 /* configurator.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FEF2B631C0100F2B2C0 /* configurator.c */; }; + 4CF4803C2B631C0100F2B2C0 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF52B631C0100F2B2C0 /* sha256.c */; }; + 4CF4803D2B631C0100F2B2C0 /* content_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF62B631C0100F2B2C0 /* content_parser.c */; }; + 4CF4803E2B631C0100F2B2C0 /* .dir in Resources */ = {isa = PBXBuildFile; fileRef = 4CF47FF92B631C0100F2B2C0 /* .dir */; }; + 4CF4803F2B631C0100F2B2C0 /* ndb_profile.rs in Resources */ = {isa = PBXBuildFile; fileRef = 4CF47FFA2B631C0100F2B2C0 /* ndb_profile.rs */; }; + 4CF480402B631C0100F2B2C0 /* ndb_meta.rs in Resources */ = {isa = PBXBuildFile; fileRef = 4CF47FFB2B631C0100F2B2C0 /* ndb_meta.rs */; }; + 4CF480412B631C0100F2B2C0 /* NdbMeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FFD2B631C0100F2B2C0 /* NdbMeta.swift */; }; + 4CF480422B631C0100F2B2C0 /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FFE2B631C0100F2B2C0 /* NdbProfile.swift */; }; + 4CF480432B631C0100F2B2C0 /* .dir in Resources */ = {isa = PBXBuildFile; fileRef = 4CF480062B631C0100F2B2C0 /* .dir */; }; + 4CF480442B631C0100F2B2C0 /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480102B631C0100F2B2C0 /* bolt11.c */; }; + 4CF480452B631C0100F2B2C0 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480122B631C0100F2B2C0 /* list.c */; }; + 4CF480462B631C0100F2B2C0 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480182B631C0100F2B2C0 /* mem.c */; }; + 4CF480472B631C0100F2B2C0 /* hash_u5.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801A2B631C0100F2B2C0 /* hash_u5.c */; }; + 4CF480482B631C0100F2B2C0 /* talstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801C2B631C0100F2B2C0 /* talstr.c */; }; + 4CF480492B631C0100F2B2C0 /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801D2B631C0100F2B2C0 /* utf8.c */; }; + 4CF4804A2B631C0100F2B2C0 /* bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801E2B631C0100F2B2C0 /* bech32.c */; }; + 4CF4804B2B631C0100F2B2C0 /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801F2B631C0100F2B2C0 /* tal.c */; }; + 4CF4804C2B631C0100F2B2C0 /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480232B631C0100F2B2C0 /* take.c */; }; + 4CF4804D2B631C0100F2B2C0 /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480252B631C0100F2B2C0 /* amount.c */; }; + 4CF4804E2B631C0100F2B2C0 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480262B631C0100F2B2C0 /* error.c */; }; + 4CF4804F2B631C0100F2B2C0 /* bech32_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480282B631C0100F2B2C0 /* bech32_util.c */; }; + 4CF480502B631C0100F2B2C0 /* libnostrdb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CF4802A2B631C0100F2B2C0 /* libnostrdb.a */; }; + 4CF480512B631C0100F2B2C0 /* node_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480342B631C0100F2B2C0 /* node_id.c */; }; + 4CF480522B631C0100F2B2C0 /* invoice.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480372B631C0100F2B2C0 /* invoice.c */; }; + 4CF480552B631C4F00F2B2C0 /* wasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480532B631C4F00F2B2C0 /* wasm.c */; }; 4CFD502F2A2DA45800A229DB /* MediaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFD502E2A2DA45800A229DB /* MediaView.swift */; }; 4CFF8F5929C9FD1E008DB934 /* DamusPurpleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F5829C9FD1E008DB934 /* DamusPurpleView.swift */; }; 4CFF8F6329CC9AD7008DB934 /* ImageContextMenuModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F6229CC9AD7008DB934 /* ImageContextMenuModifier.swift */; }; @@ -581,28 +589,9 @@ D7CE1B1C2B0BE147002EDAD4 /* refmap.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792D12A9939BD00489948 /* refmap.c */; }; D7CE1B1D2B0BE14A002EDAD4 /* verifier.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4792D42A9939BD00489948 /* verifier.c */; }; D7CE1B1E2B0BE190002EDAD4 /* midl.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C4793032A993DB900489948 /* midl.c */; }; - D7CE1B1F2B0BE1B8002EDAD4 /* damus.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670A28FDE64700038D2A /* damus.c */; }; - D7CE1B202B0BE1C8002EDAD4 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C9146FF2A2A891E00DDEA40 /* error.c */; }; - D7CE1B212B0BE1CB002EDAD4 /* wasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CA9276E2A2A5D110098A105 /* wasm.c */; }; - D7CE1B222B0BE1EB002EDAD4 /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C06670D28FDEAA000038D2A /* utf8.c */; }; - D7CE1B232B0BE1EE002EDAD4 /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA63C28FF52D600C48A62 /* bolt11.c */; }; - D7CE1B242B0BE1F1002EDAD4 /* hash_u5.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64028FF553900C48A62 /* hash_u5.c */; }; - D7CE1B252B0BE1F4002EDAD4 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64328FF558100C48A62 /* sha256.c */; }; - D7CE1B262B0BE1F8002EDAD4 /* bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64828FF597700C48A62 /* bech32.c */; }; - D7CE1B272B0BE224002EDAD4 /* bech32_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64B28FF59AC00C48A62 /* bech32_util.c */; }; - D7CE1B282B0BE226002EDAD4 /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA64E28FF59F200C48A62 /* tal.c */; }; - D7CE1B292B0BE239002EDAD4 /* node_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA65F28FF5E7700C48A62 /* node_id.c */; }; - D7CE1B2A2B0BE23E002EDAD4 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66428FF5F6800C48A62 /* mem.c */; }; - D7CE1B2B2B0BE243002EDAD4 /* hex.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66728FF5F9900C48A62 /* hex.c */; }; - D7CE1B2C2B0BE24B002EDAD4 /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA66C28FF782800C48A62 /* amount.c */; }; - D7CE1B2D2B0BE250002EDAD4 /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67428FF7A5A00C48A62 /* take.c */; }; - D7CE1B2E2B0BE25C002EDAD4 /* talstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67628FF7A9800C48A62 /* talstr.c */; }; - D7CE1B2F2B0BE260002EDAD4 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C3EA67828FF7ABF00C48A62 /* list.c */; }; - D7CE1B302B0BE263002EDAD4 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */; }; D7CE1B312B0BE69D002EDAD4 /* Ndb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E242A9932C100489948 /* Ndb.swift */; }; D7CE1B322B0BE6C3002EDAD4 /* NdbTxn.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */; }; D7CE1B332B0BE6DE002EDAD4 /* Nostr.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFA527FF87A20006080F /* Nostr.swift */; }; - D7CE1B342B0BE6EE002EDAD4 /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C478E2C2A9935D300489948 /* NdbProfile.swift */; }; D7CE1B352B0BE6FA002EDAD4 /* ByteBuffer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9402A9AD44700DC3548 /* ByteBuffer.swift */; }; D7CE1B362B0BE702002EDAD4 /* FbConstants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B9372A9AD44700DC3548 /* FbConstants.swift */; }; D7CE1B372B0BE719002EDAD4 /* Verifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C32B93E2A9AD44700DC3548 /* Verifier.swift */; }; @@ -840,11 +829,6 @@ 4C011B602BD0B25C002F2F9B /* ReplyQuoteView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReplyQuoteView.swift; sourceTree = ""; }; 4C06670028FC7C5900038D2A /* RelayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayView.swift; sourceTree = ""; }; 4C06670528FCB08600038D2A /* ImageCarousel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageCarousel.swift; sourceTree = ""; }; - 4C06670828FDE64700038D2A /* damus-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "damus-Bridging-Header.h"; sourceTree = ""; }; - 4C06670928FDE64700038D2A /* damus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = damus.h; sourceTree = ""; }; - 4C06670A28FDE64700038D2A /* damus.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = damus.c; sourceTree = ""; }; - 4C06670C28FDEAA000038D2A /* utf8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = ""; }; - 4C06670D28FDEAA000038D2A /* utf8.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = utf8.c; sourceTree = ""; }; 4C0A3F8E280F640A000448DE /* ThreadModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadModel.swift; sourceTree = ""; }; 4C0A3F92280F66F5000448DE /* ReplyMap.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyMap.swift; sourceTree = ""; }; 4C0C03972A61E27B0098B3B8 /* primal.wasm */ = {isa = PBXFileReference; lastKnownFileType = file; name = primal.wasm; path = nostrscript/primal.wasm; sourceTree = SOURCE_ROOT; }; @@ -958,48 +942,6 @@ 4C3D52B5298DB4E6001C5831 /* ZapEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapEvent.swift; sourceTree = ""; }; 4C3D52B7298DB5C6001C5831 /* TextEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TextEvent.swift; sourceTree = ""; }; 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbTxn.swift; sourceTree = ""; }; - 4C3EA63B28FF52D600C48A62 /* bolt11.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bolt11.h; sourceTree = ""; }; - 4C3EA63C28FF52D600C48A62 /* bolt11.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bolt11.c; sourceTree = ""; }; - 4C3EA63E28FF54BD00C48A62 /* short_types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = short_types.h; sourceTree = ""; }; - 4C3EA63F28FF553900C48A62 /* hash_u5.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hash_u5.h; sourceTree = ""; }; - 4C3EA64028FF553900C48A62 /* hash_u5.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hash_u5.c; sourceTree = ""; }; - 4C3EA64228FF558100C48A62 /* sha256.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sha256.h; sourceTree = ""; }; - 4C3EA64328FF558100C48A62 /* sha256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sha256.c; sourceTree = ""; }; - 4C3EA64528FF56D300C48A62 /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; - 4C3EA64628FF570F00C48A62 /* node_id.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = node_id.h; sourceTree = ""; }; - 4C3EA64728FF597700C48A62 /* bech32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bech32.h; sourceTree = ""; }; - 4C3EA64828FF597700C48A62 /* bech32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bech32.c; sourceTree = ""; }; - 4C3EA64A28FF59AC00C48A62 /* bech32_util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bech32_util.h; sourceTree = ""; }; - 4C3EA64B28FF59AC00C48A62 /* bech32_util.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = bech32_util.c; sourceTree = ""; }; - 4C3EA64D28FF59F200C48A62 /* tal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tal.h; sourceTree = ""; }; - 4C3EA64E28FF59F200C48A62 /* tal.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tal.c; sourceTree = ""; }; - 4C3EA65028FF5A5500C48A62 /* list.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; - 4C3EA65328FF5A8600C48A62 /* str.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str.h; sourceTree = ""; }; - 4C3EA65428FF5AAE00C48A62 /* container_of.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = container_of.h; sourceTree = ""; }; - 4C3EA65528FF5AC300C48A62 /* check_type.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = check_type.h; sourceTree = ""; }; - 4C3EA65628FF5B0200C48A62 /* compiler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = compiler.h; sourceTree = ""; }; - 4C3EA65728FF5B1E00C48A62 /* likely.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = likely.h; sourceTree = ""; }; - 4C3EA65828FF5B3700C48A62 /* typesafe_cb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = typesafe_cb.h; sourceTree = ""; }; - 4C3EA65928FF5B5100C48A62 /* take.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = take.h; sourceTree = ""; }; - 4C3EA65A28FF5BC900C48A62 /* alignof.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = alignof.h; sourceTree = ""; }; - 4C3EA65B28FF5C7E00C48A62 /* str_debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str_debug.h; sourceTree = ""; }; - 4C3EA65C28FF5CAF00C48A62 /* endian.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = endian.h; sourceTree = ""; }; - 4C3EA65D28FF5CF300C48A62 /* talstr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = talstr.h; sourceTree = ""; }; - 4C3EA65E28FF5DA400C48A62 /* amount.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = amount.h; sourceTree = ""; }; - 4C3EA65F28FF5E7700C48A62 /* node_id.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = node_id.c; sourceTree = ""; }; - 4C3EA66128FF5EA800C48A62 /* array_size.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = array_size.h; sourceTree = ""; }; - 4C3EA66228FF5EBC00C48A62 /* build_assert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = build_assert.h; sourceTree = ""; }; - 4C3EA66328FF5F6800C48A62 /* mem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; }; - 4C3EA66428FF5F6800C48A62 /* mem.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mem.c; sourceTree = ""; }; - 4C3EA66628FF5F9900C48A62 /* hex.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hex.h; sourceTree = ""; }; - 4C3EA66728FF5F9900C48A62 /* hex.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hex.c; sourceTree = ""; }; - 4C3EA66C28FF782800C48A62 /* amount.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = amount.c; sourceTree = ""; }; - 4C3EA66E28FF787100C48A62 /* overflows.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = overflows.h; sourceTree = ""; }; - 4C3EA67228FF79F600C48A62 /* structeq.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = structeq.h; sourceTree = ""; }; - 4C3EA67328FF7A2600C48A62 /* cppmagic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cppmagic.h; sourceTree = ""; }; - 4C3EA67428FF7A5A00C48A62 /* take.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = take.c; sourceTree = ""; }; - 4C3EA67628FF7A9800C48A62 /* talstr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = talstr.c; sourceTree = ""; }; - 4C3EA67828FF7ABF00C48A62 /* list.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = ""; }; 4C3EA67A28FF7B3900C48A62 /* InvoiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvoiceTests.swift; sourceTree = ""; }; 4C3EA67C28FFBBA200C48A62 /* InvoicesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvoicesView.swift; sourceTree = ""; }; 4C3EA67E28FFC01D00C48A62 /* InvoiceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InvoiceView.swift; sourceTree = ""; }; @@ -1007,21 +949,6 @@ 4C45E5012BED4D000025A428 /* ThreadReply.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadReply.swift; sourceTree = ""; }; 4C463CBE2B960B96008A8C36 /* PurpleBackdrop.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PurpleBackdrop.swift; sourceTree = ""; }; 4C478E242A9932C100489948 /* Ndb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ndb.swift; sourceTree = ""; }; - 4C478E262A99353500489948 /* threadpool.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = threadpool.h; sourceTree = ""; }; - 4C478E272A99354E00489948 /* protected_queue.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = protected_queue.h; sourceTree = ""; }; - 4C478E282A99357400489948 /* memchr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = memchr.h; sourceTree = ""; }; - 4C478E292A99359900489948 /* util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; - 4C478E2C2A9935D300489948 /* NdbProfile.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbProfile.swift; sourceTree = ""; }; - 4C478E2E2A9935D300489948 /* profile_json_parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = profile_json_parser.h; sourceTree = ""; }; - 4C478E2F2A9935D300489948 /* profile_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = profile_reader.h; sourceTree = ""; }; - 4C478E302A9935D300489948 /* meta_json_parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = meta_json_parser.h; sourceTree = ""; }; - 4C478E312A9935D300489948 /* profile_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = profile_builder.h; sourceTree = ""; }; - 4C478E322A9935D300489948 /* meta_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = meta_builder.h; sourceTree = ""; }; - 4C478E332A9935D300489948 /* profile_verifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = profile_verifier.h; sourceTree = ""; }; - 4C478E352A9935D300489948 /* meta_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = meta_reader.h; sourceTree = ""; }; - 4C478E362A9935D300489948 /* flatbuffers_common_reader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_reader.h; sourceTree = ""; }; - 4C478E372A9935D300489948 /* meta_verifier.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = meta_verifier.h; sourceTree = ""; }; - 4C478E382A9935D300489948 /* flatbuffers_common_builder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_builder.h; sourceTree = ""; }; 4C47928E2A9939BD00489948 /* flatcc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc.h; sourceTree = ""; }; 4C47928F2A9939BD00489948 /* flatcc_version.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_version.h; sourceTree = ""; }; 4C4792902A9939BD00489948 /* flatcc_emitter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flatcc_emitter.h; sourceTree = ""; }; @@ -1142,7 +1069,6 @@ 4C75EFB628049D990006080F /* RelayPool.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayPool.swift; sourceTree = ""; }; 4C75EFB82804A2740006080F /* EventView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventView.swift; sourceTree = ""; }; 4C75EFBA2804A34C0006080F /* ProofOfWork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProofOfWork.swift; sourceTree = ""; }; - 4C78EFD62A7078C5007E8197 /* random.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = random.h; sourceTree = ""; }; 4C78EFD72A707C4D007E8197 /* secp256k1_schnorrsig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1_schnorrsig.h; sourceTree = ""; }; 4C78EFD82A707C4D007E8197 /* secp256k1_ecdh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1_ecdh.h; sourceTree = ""; }; 4C78EFD92A707C4D007E8197 /* secp256k1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1.h; sourceTree = ""; }; @@ -1169,11 +1095,6 @@ 4C8D00C729DF791C0036AF10 /* CompatibleAttribute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompatibleAttribute.swift; sourceTree = ""; }; 4C8D00C929DF80350036AF10 /* TruncatedText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TruncatedText.swift; sourceTree = ""; }; 4C8D00CB29DF92DF0036AF10 /* Hashtags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hashtags.swift; sourceTree = ""; }; - 4C8D00CD29E38B950036AF10 /* nostr_bech32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nostr_bech32.h; sourceTree = ""; }; - 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = nostr_bech32.c; sourceTree = ""; }; - 4C8D00D029E38E4C0036AF10 /* cursor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cursor.h; sourceTree = ""; }; - 4C8D00D129E397AD0036AF10 /* block.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = block.h; sourceTree = ""; }; - 4C8D00D229E3C19F0036AF10 /* str_block.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = str_block.h; sourceTree = ""; }; 4C8D00D329E3C5D40036AF10 /* NIP19Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP19Tests.swift; sourceTree = ""; }; 4C8D1A6B29F1DFC200ACDF75 /* FriendIcon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendIcon.swift; sourceTree = ""; }; 4C8D1A6E29F31E5000ACDF75 /* FriendsButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FriendsButton.swift; sourceTree = ""; }; @@ -1184,7 +1105,6 @@ 4C90BD17283A9EE5008EE7EF /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; }; 4C90BD19283AA67F008EE7EF /* Bech32.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32.swift; sourceTree = ""; }; 4C90BD1B283AC38E008EE7EF /* Bech32Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32Tests.swift; sourceTree = ""; }; - 4C9146FF2A2A891E00DDEA40 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error.c; sourceTree = ""; }; 4C94D6422BA5AEFE00C26EFF /* QuoteRepostsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuoteRepostsView.swift; sourceTree = ""; }; 4C987B56283FD07F0042CE38 /* FollowersModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FollowersModel.swift; sourceTree = ""; }; 4C9AA1492A4587A6003F49FD /* NotificationStatusModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationStatusModel.swift; sourceTree = ""; }; @@ -1214,13 +1134,6 @@ 4CA927642A290F1A0098A105 /* TimeDot.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimeDot.swift; sourceTree = ""; }; 4CA927662A290F8B0098A105 /* RelativeTime.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelativeTime.swift; sourceTree = ""; }; 4CA9276B2A2910D10098A105 /* ReplyPart.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyPart.swift; sourceTree = ""; }; - 4CA9276D2A2A5D110098A105 /* wasm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wasm.h; sourceTree = ""; }; - 4CA9276E2A2A5D110098A105 /* wasm.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = wasm.c; sourceTree = ""; }; - 4CA9276F2A2A5D470098A105 /* parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = ""; }; - 4CA927702A2A5D470098A105 /* debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; - 4CA927712A2A5D480098A105 /* error.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = ""; }; - 4CA927742A2A5E2F0098A105 /* varint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = varint.h; sourceTree = ""; }; - 4CA927752A2A5E2F0098A105 /* typedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedefs.h; sourceTree = ""; }; 4CAAD8AC298851D000060CEA /* AccountDeletion.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDeletion.swift; sourceTree = ""; }; 4CAAD8AF29888AD200060CEA /* RelayConfigView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayConfigView.swift; sourceTree = ""; }; 4CACA9D4280C31E100D9BBE8 /* ReplyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyView.swift; sourceTree = ""; }; @@ -1262,7 +1175,6 @@ 4CDA128B29EB19C40006FA5A /* LocalNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalNotification.swift; sourceTree = ""; }; 4CDD1ADF2A6B305F001CD4DF /* NdbTagElem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbTagElem.swift; sourceTree = ""; }; 4CDD1AE12A6B3074001CD4DF /* NdbTagsIterator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbTagsIterator.swift; sourceTree = ""; }; - 4CDD1AE72A6B3611001CD4DF /* jsmn.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jsmn.h; sourceTree = ""; }; 4CE0E2AE29A2E82100DB4CA2 /* EventHolder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventHolder.swift; sourceTree = ""; }; 4CE0E2B529A3ED5500DB4CA2 /* InnerTimelineView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InnerTimelineView.swift; sourceTree = ""; }; 4CE1398F29F0661A00AC6A0B /* RepostAction.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RepostAction.swift; sourceTree = ""; }; @@ -1291,8 +1203,6 @@ 4CE879542996BAB900F758CC /* RelayPaidDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayPaidDetail.swift; sourceTree = ""; }; 4CE879572996C45300F758CC /* ZapsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapsView.swift; sourceTree = ""; }; 4CE8795A2996C47A00F758CC /* ZapsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZapsModel.swift; sourceTree = ""; }; - 4CE9FBB82A6B3B26007E485C /* nostrdb.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = nostrdb.c; sourceTree = ""; }; - 4CE9FBB92A6B3B26007E485C /* nostrdb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nostrdb.h; sourceTree = ""; }; 4CEE2AE72804F57C00AB5EEF /* libsecp256k1.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libsecp256k1.a; sourceTree = ""; }; 4CEE2AEC2805B22500AB5EEF /* NostrRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NostrRequest.swift; sourceTree = ""; }; 4CEE2AF0280B216B00AB5EEF /* EventDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDetailView.swift; sourceTree = ""; }; @@ -1314,6 +1224,95 @@ 4CF0ABEF29857E9200D66079 /* Bech32Object.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bech32Object.swift; sourceTree = ""; }; 4CF0ABF52985CD5500D66079 /* UserSearch.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserSearch.swift; sourceTree = ""; }; 4CF38C872A9442DC00BE01B6 /* UserStatusView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserStatusView.swift; sourceTree = ""; }; + 4CF47FDA2B631BA500F2B2C0 /* damus-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "damus-Bridging-Header.h"; sourceTree = ""; }; + 4CF47FDD2B631C0100F2B2C0 /* lmdb_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lmdb_util.h; sourceTree = ""; }; + 4CF47FDE2B631C0100F2B2C0 /* nostrdb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nostrdb.c; sourceTree = ""; }; + 4CF47FDF2B631C0100F2B2C0 /* block.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = block.c; sourceTree = ""; }; + 4CF47FE02B631C0100F2B2C0 /* str_block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = str_block.h; sourceTree = ""; }; + 4CF47FE12B631C0100F2B2C0 /* compiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compiler.h; sourceTree = ""; }; + 4CF47FE22B631C0100F2B2C0 /* threadpool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = threadpool.h; sourceTree = ""; }; + 4CF47FE32B631C0100F2B2C0 /* typedefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typedefs.h; sourceTree = ""; }; + 4CF47FE42B631C0100F2B2C0 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; + 4CF47FE52B631C0100F2B2C0 /* nostr_bech32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = nostr_bech32.c; sourceTree = ""; }; + 4CF47FE62B631C0100F2B2C0 /* endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endian.h; sourceTree = ""; }; + 4CF47FE72B631C0100F2B2C0 /* jsmn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = jsmn.h; sourceTree = ""; }; + 4CF47FE82B631C0100F2B2C0 /* memchr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memchr.h; sourceTree = ""; }; + 4CF47FE92B631C0100F2B2C0 /* sha256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha256.h; sourceTree = ""; }; + 4CF47FEA2B631C0100F2B2C0 /* invoice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = invoice.h; sourceTree = ""; }; + 4CF47FEB2B631C0100F2B2C0 /* cursor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cursor.h; sourceTree = ""; }; + 4CF47FEC2B631C0100F2B2C0 /* nostrdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nostrdb.h; sourceTree = ""; }; + 4CF47FED2B631C0100F2B2C0 /* hex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex.h; sourceTree = ""; }; + 4CF47FEE2B631C0100F2B2C0 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = io.h; sourceTree = ""; }; + 4CF47FEF2B631C0100F2B2C0 /* configurator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = configurator.c; sourceTree = ""; }; + 4CF47FF02B631C0100F2B2C0 /* nostr_bech32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nostr_bech32.h; sourceTree = ""; }; + 4CF47FF12B631C0100F2B2C0 /* cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; + 4CF47FF22B631C0100F2B2C0 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; + 4CF47FF32B631C0100F2B2C0 /* print_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = print_util.h; sourceTree = ""; }; + 4CF47FF42B631C0100F2B2C0 /* block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block.h; sourceTree = ""; }; + 4CF47FF52B631C0100F2B2C0 /* sha256.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sha256.c; sourceTree = ""; }; + 4CF47FF62B631C0100F2B2C0 /* content_parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = content_parser.c; sourceTree = ""; }; + 4CF47FF92B631C0100F2B2C0 /* .dir */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .dir; sourceTree = ""; }; + 4CF47FFA2B631C0100F2B2C0 /* ndb_profile.rs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ndb_profile.rs; sourceTree = ""; }; + 4CF47FFB2B631C0100F2B2C0 /* ndb_meta.rs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ndb_meta.rs; sourceTree = ""; }; + 4CF47FFD2B631C0100F2B2C0 /* NdbMeta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NdbMeta.swift; sourceTree = ""; }; + 4CF47FFE2B631C0100F2B2C0 /* NdbProfile.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NdbProfile.swift; sourceTree = ""; }; + 4CF480002B631C0100F2B2C0 /* profile_json_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_json_parser.h; sourceTree = ""; }; + 4CF480012B631C0100F2B2C0 /* profile_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_reader.h; sourceTree = ""; }; + 4CF480022B631C0100F2B2C0 /* meta_json_parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_json_parser.h; sourceTree = ""; }; + 4CF480032B631C0100F2B2C0 /* profile_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_builder.h; sourceTree = ""; }; + 4CF480042B631C0100F2B2C0 /* meta_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_builder.h; sourceTree = ""; }; + 4CF480052B631C0100F2B2C0 /* profile_verifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_verifier.h; sourceTree = ""; }; + 4CF480062B631C0100F2B2C0 /* .dir */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .dir; sourceTree = ""; }; + 4CF480072B631C0100F2B2C0 /* meta_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_reader.h; sourceTree = ""; }; + 4CF480082B631C0100F2B2C0 /* flatbuffers_common_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_reader.h; sourceTree = ""; }; + 4CF480092B631C0100F2B2C0 /* meta_verifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_verifier.h; sourceTree = ""; }; + 4CF4800A2B631C0100F2B2C0 /* flatbuffers_common_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_builder.h; sourceTree = ""; }; + 4CF4800C2B631C0100F2B2C0 /* amount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = amount.h; sourceTree = ""; }; + 4CF4800D2B631C0100F2B2C0 /* cppmagic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cppmagic.h; sourceTree = ""; }; + 4CF4800E2B631C0100F2B2C0 /* error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = ""; }; + 4CF4800F2B631C0100F2B2C0 /* take.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = take.h; sourceTree = ""; }; + 4CF480102B631C0100F2B2C0 /* bolt11.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bolt11.c; sourceTree = ""; }; + 4CF480112B631C0100F2B2C0 /* structeq.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = structeq.h; sourceTree = ""; }; + 4CF480122B631C0100F2B2C0 /* list.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = list.c; sourceTree = ""; }; + 4CF480132B631C0100F2B2C0 /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; }; + 4CF480142B631C0100F2B2C0 /* bech32_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bech32_util.h; sourceTree = ""; }; + 4CF480152B631C0100F2B2C0 /* alignof.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alignof.h; sourceTree = ""; }; + 4CF480162B631C0100F2B2C0 /* typesafe_cb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = typesafe_cb.h; sourceTree = ""; }; + 4CF480172B631C0100F2B2C0 /* overflows.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = overflows.h; sourceTree = ""; }; + 4CF480182B631C0100F2B2C0 /* mem.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mem.c; sourceTree = ""; }; + 4CF480192B631C0100F2B2C0 /* container_of.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = container_of.h; sourceTree = ""; }; + 4CF4801A2B631C0100F2B2C0 /* hash_u5.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = hash_u5.c; sourceTree = ""; }; + 4CF4801B2B631C0100F2B2C0 /* node_id.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = node_id.h; sourceTree = ""; }; + 4CF4801C2B631C0100F2B2C0 /* talstr.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = talstr.c; sourceTree = ""; }; + 4CF4801D2B631C0100F2B2C0 /* utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utf8.c; sourceTree = ""; }; + 4CF4801E2B631C0100F2B2C0 /* bech32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bech32.c; sourceTree = ""; }; + 4CF4801F2B631C0100F2B2C0 /* tal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tal.c; sourceTree = ""; }; + 4CF480202B631C0100F2B2C0 /* list.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = list.h; sourceTree = ""; }; + 4CF480212B631C0100F2B2C0 /* str_debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = str_debug.h; sourceTree = ""; }; + 4CF480222B631C0100F2B2C0 /* bolt11.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bolt11.h; sourceTree = ""; }; + 4CF480232B631C0100F2B2C0 /* take.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = take.c; sourceTree = ""; }; + 4CF480242B631C0100F2B2C0 /* likely.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = likely.h; sourceTree = ""; }; + 4CF480252B631C0100F2B2C0 /* amount.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = amount.c; sourceTree = ""; }; + 4CF480262B631C0100F2B2C0 /* error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = error.c; sourceTree = ""; }; + 4CF480272B631C0100F2B2C0 /* array_size.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = array_size.h; sourceTree = ""; }; + 4CF480282B631C0100F2B2C0 /* bech32_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bech32_util.c; sourceTree = ""; }; + 4CF480292B631C0100F2B2C0 /* str.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = str.h; sourceTree = ""; }; + 4CF4802A2B631C0100F2B2C0 /* libnostrdb.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libnostrdb.a; sourceTree = ""; }; + 4CF4802B2B631C0100F2B2C0 /* hash_u5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hash_u5.h; sourceTree = ""; }; + 4CF4802C2B631C0100F2B2C0 /* mem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; }; + 4CF4802D2B631C0100F2B2C0 /* build_assert.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = build_assert.h; sourceTree = ""; }; + 4CF4802E2B631C0100F2B2C0 /* short_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = short_types.h; sourceTree = ""; }; + 4CF4802F2B631C0100F2B2C0 /* tal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tal.h; sourceTree = ""; }; + 4CF480302B631C0100F2B2C0 /* bech32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bech32.h; sourceTree = ""; }; + 4CF480312B631C0100F2B2C0 /* check_type.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = check_type.h; sourceTree = ""; }; + 4CF480322B631C0100F2B2C0 /* utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utf8.h; sourceTree = ""; }; + 4CF480332B631C0100F2B2C0 /* talstr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = talstr.h; sourceTree = ""; }; + 4CF480342B631C0100F2B2C0 /* node_id.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = node_id.c; sourceTree = ""; }; + 4CF480352B631C0100F2B2C0 /* protected_queue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = protected_queue.h; sourceTree = ""; }; + 4CF480362B631C0100F2B2C0 /* random.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random.h; sourceTree = ""; }; + 4CF480372B631C0100F2B2C0 /* invoice.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = invoice.c; sourceTree = ""; }; + 4CF480532B631C4F00F2B2C0 /* wasm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wasm.c; sourceTree = ""; }; + 4CF480542B631C4F00F2B2C0 /* wasm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wasm.h; sourceTree = ""; }; 4CFD502E2A2DA45800A229DB /* MediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaView.swift; sourceTree = ""; }; 4CFF8F5829C9FD1E008DB934 /* DamusPurpleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleView.swift; sourceTree = ""; }; 4CFF8F6229CC9AD7008DB934 /* ImageContextMenuModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageContextMenuModifier.swift; sourceTree = ""; }; @@ -1502,6 +1501,7 @@ 3A0A30BB2C21397A00F8C9BC /* EmojiPicker in Frameworks */, D78DB8592C1CE9CA00F0AB12 /* SwipeActions in Frameworks */, 4C649881286E0EE300EAE2B3 /* secp256k1 in Frameworks */, + 4CF480502B631C0100F2B2C0 /* libnostrdb.a in Frameworks */, 4C27C9322A64766F007DBC75 /* MarkdownUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1553,73 +1553,6 @@ path = Reposts; sourceTree = ""; }; - 4C06670728FDE62900038D2A /* damus-c */ = { - isa = PBXGroup; - children = ( - 4C9146FF2A2A891E00DDEA40 /* error.c */, - 4CA927752A2A5E2F0098A105 /* typedefs.h */, - 4CA927742A2A5E2F0098A105 /* varint.h */, - 4CA927702A2A5D470098A105 /* debug.h */, - 4CA927712A2A5D480098A105 /* error.h */, - 4CA9276F2A2A5D470098A105 /* parser.h */, - 4CA9276E2A2A5D110098A105 /* wasm.c */, - 4CA9276D2A2A5D110098A105 /* wasm.h */, - 4C06670928FDE64700038D2A /* damus.h */, - 4C06670A28FDE64700038D2A /* damus.c */, - 4C06670828FDE64700038D2A /* damus-Bridging-Header.h */, - 4C06670C28FDEAA000038D2A /* utf8.h */, - 4C06670D28FDEAA000038D2A /* utf8.c */, - 4C3EA63B28FF52D600C48A62 /* bolt11.h */, - 4C3EA63C28FF52D600C48A62 /* bolt11.c */, - 4C3EA63E28FF54BD00C48A62 /* short_types.h */, - 4C3EA63F28FF553900C48A62 /* hash_u5.h */, - 4C3EA64028FF553900C48A62 /* hash_u5.c */, - 4C3EA64228FF558100C48A62 /* sha256.h */, - 4C3EA64328FF558100C48A62 /* sha256.c */, - 4C3EA64528FF56D300C48A62 /* config.h */, - 4C3EA64628FF570F00C48A62 /* node_id.h */, - 4C3EA64728FF597700C48A62 /* bech32.h */, - 4C3EA64828FF597700C48A62 /* bech32.c */, - 4C3EA64A28FF59AC00C48A62 /* bech32_util.h */, - 4C3EA64B28FF59AC00C48A62 /* bech32_util.c */, - 4C3EA64D28FF59F200C48A62 /* tal.h */, - 4C3EA64E28FF59F200C48A62 /* tal.c */, - 4C3EA65028FF5A5500C48A62 /* list.h */, - 4C3EA65328FF5A8600C48A62 /* str.h */, - 4C3EA65428FF5AAE00C48A62 /* container_of.h */, - 4C3EA65528FF5AC300C48A62 /* check_type.h */, - 4C3EA65628FF5B0200C48A62 /* compiler.h */, - 4C3EA65728FF5B1E00C48A62 /* likely.h */, - 4C3EA65828FF5B3700C48A62 /* typesafe_cb.h */, - 4C3EA65928FF5B5100C48A62 /* take.h */, - 4C3EA65A28FF5BC900C48A62 /* alignof.h */, - 4C3EA65B28FF5C7E00C48A62 /* str_debug.h */, - 4C3EA65C28FF5CAF00C48A62 /* endian.h */, - 4C3EA65D28FF5CF300C48A62 /* talstr.h */, - 4C3EA65E28FF5DA400C48A62 /* amount.h */, - 4C3EA65F28FF5E7700C48A62 /* node_id.c */, - 4C3EA66128FF5EA800C48A62 /* array_size.h */, - 4C3EA66228FF5EBC00C48A62 /* build_assert.h */, - 4C3EA66328FF5F6800C48A62 /* mem.h */, - 4C3EA66428FF5F6800C48A62 /* mem.c */, - 4C3EA66628FF5F9900C48A62 /* hex.h */, - 4C3EA66728FF5F9900C48A62 /* hex.c */, - 4C3EA66C28FF782800C48A62 /* amount.c */, - 4C3EA66E28FF787100C48A62 /* overflows.h */, - 4C3EA67228FF79F600C48A62 /* structeq.h */, - 4C3EA67328FF7A2600C48A62 /* cppmagic.h */, - 4C3EA67428FF7A5A00C48A62 /* take.c */, - 4C3EA67628FF7A9800C48A62 /* talstr.c */, - 4C3EA67828FF7ABF00C48A62 /* list.c */, - 4C8D00CD29E38B950036AF10 /* nostr_bech32.h */, - 4C8D00CE29E38B950036AF10 /* nostr_bech32.c */, - 4C8D00D029E38E4C0036AF10 /* cursor.h */, - 4C8D00D129E397AD0036AF10 /* block.h */, - 4C8D00D229E3C19F0036AF10 /* str_block.h */, - ); - path = "damus-c"; - sourceTree = ""; - }; 4C0A3F8D280F63FF000448DE /* Models */ = { isa = PBXGroup; children = ( @@ -2236,8 +2169,8 @@ 4C9054862A6AEB4500811EEC /* nostrdb */ = { isa = PBXGroup; children = ( + 4CF47FDC2B631C0100F2B2C0 /* src */, 4C47928D2A9939BD00489948 /* flatcc */, - 4C478E2A2A9935D300489948 /* bindings */, 4CE9FBBB2A6B3D9C007E485C /* Test */, 4C9054882A6AED4700811EEC /* NdbTagIterator.swift */, 4C90548A2A6AEDEE00811EEC /* NdbNote.swift */, @@ -2246,18 +2179,10 @@ 4C478E242A9932C100489948 /* Ndb.swift */, 4CDD1AE12A6B3074001CD4DF /* NdbTagsIterator.swift */, 4C3DCC752A9FC2030091E592 /* NdbTxn.swift */, - 4CE9FBB82A6B3B26007E485C /* nostrdb.c */, 4C4793032A993DB900489948 /* midl.c */, 4C4793002A993B9A00489948 /* mdb.c */, 4C4793022A993D9300489948 /* midl.h */, 4C4792FF2A993B9A00489948 /* lmdb.h */, - 4CE9FBB92A6B3B26007E485C /* nostrdb.h */, - 4C78EFD62A7078C5007E8197 /* random.h */, - 4CDD1AE72A6B3611001CD4DF /* jsmn.h */, - 4C478E292A99359900489948 /* util.h */, - 4C478E282A99357400489948 /* memchr.h */, - 4C478E272A99354E00489948 /* protected_queue.h */, - 4C478E262A99353500489948 /* threadpool.h */, 4C78EFD82A707C4D007E8197 /* secp256k1_ecdh.h */, 4C78EFD72A707C4D007E8197 /* secp256k1_schnorrsig.h */, 4C78EFDA2A707C67007E8197 /* secp256k1_extrakeys.h */, @@ -2490,11 +2415,11 @@ isa = PBXGroup; children = ( D7FB14212BE5970000398331 /* PrivacyInfo.xcprivacy */, + 4CF47FD82B631BA500F2B2C0 /* damus-c */, 4C32B9362A9AD44700DC3548 /* flatbuffers */, 4C9054862A6AEB4500811EEC /* nostrdb */, 4C19AE4A2A5CEF7C00C90DB7 /* nostrscript */, 4C8AE1182A0320BE00B944E6 /* Purple.storekit */, - 4C06670728FDE62900038D2A /* damus-c */, 4CE6DEE527F7A08100C66700 /* damus */, 4CE6DEF627F7A08200C66700 /* damusTests */, 4CE6DF0027F7A08200C66700 /* damusUITests */, @@ -2689,6 +2614,149 @@ path = Posting; sourceTree = ""; }; + 4CF47FD82B631BA500F2B2C0 /* damus-c */ = { + isa = PBXGroup; + children = ( + 4CF480532B631C4F00F2B2C0 /* wasm.c */, + 4CF480542B631C4F00F2B2C0 /* wasm.h */, + 4CF47FDA2B631BA500F2B2C0 /* damus-Bridging-Header.h */, + ); + path = "damus-c"; + sourceTree = ""; + }; + 4CF47FDC2B631C0100F2B2C0 /* src */ = { + isa = PBXGroup; + children = ( + 4CF47FDD2B631C0100F2B2C0 /* lmdb_util.h */, + 4CF47FDE2B631C0100F2B2C0 /* nostrdb.c */, + 4CF47FDF2B631C0100F2B2C0 /* block.c */, + 4CF47FE02B631C0100F2B2C0 /* str_block.h */, + 4CF47FE12B631C0100F2B2C0 /* compiler.h */, + 4CF47FE22B631C0100F2B2C0 /* threadpool.h */, + 4CF47FE32B631C0100F2B2C0 /* typedefs.h */, + 4CF47FE42B631C0100F2B2C0 /* config.h */, + 4CF47FE52B631C0100F2B2C0 /* nostr_bech32.c */, + 4CF47FE62B631C0100F2B2C0 /* endian.h */, + 4CF47FE72B631C0100F2B2C0 /* jsmn.h */, + 4CF47FE82B631C0100F2B2C0 /* memchr.h */, + 4CF47FE92B631C0100F2B2C0 /* sha256.h */, + 4CF47FEA2B631C0100F2B2C0 /* invoice.h */, + 4CF47FEB2B631C0100F2B2C0 /* cursor.h */, + 4CF47FEC2B631C0100F2B2C0 /* nostrdb.h */, + 4CF47FED2B631C0100F2B2C0 /* hex.h */, + 4CF47FEE2B631C0100F2B2C0 /* io.h */, + 4CF47FEF2B631C0100F2B2C0 /* configurator.c */, + 4CF47FF02B631C0100F2B2C0 /* nostr_bech32.h */, + 4CF47FF12B631C0100F2B2C0 /* cpu.h */, + 4CF47FF22B631C0100F2B2C0 /* util.h */, + 4CF47FF32B631C0100F2B2C0 /* print_util.h */, + 4CF47FF42B631C0100F2B2C0 /* block.h */, + 4CF47FF52B631C0100F2B2C0 /* sha256.c */, + 4CF47FF62B631C0100F2B2C0 /* content_parser.c */, + 4CF47FF72B631C0100F2B2C0 /* bindings */, + 4CF4800B2B631C0100F2B2C0 /* bolt11 */, + 4CF480352B631C0100F2B2C0 /* protected_queue.h */, + 4CF480362B631C0100F2B2C0 /* random.h */, + 4CF480372B631C0100F2B2C0 /* invoice.c */, + ); + path = src; + sourceTree = ""; + }; + 4CF47FF72B631C0100F2B2C0 /* bindings */ = { + isa = PBXGroup; + children = ( + 4CF47FF82B631C0100F2B2C0 /* rust */, + 4CF47FFC2B631C0100F2B2C0 /* swift */, + 4CF47FFF2B631C0100F2B2C0 /* c */, + ); + path = bindings; + sourceTree = ""; + }; + 4CF47FF82B631C0100F2B2C0 /* rust */ = { + isa = PBXGroup; + children = ( + 4CF47FF92B631C0100F2B2C0 /* .dir */, + 4CF47FFA2B631C0100F2B2C0 /* ndb_profile.rs */, + 4CF47FFB2B631C0100F2B2C0 /* ndb_meta.rs */, + ); + path = rust; + sourceTree = ""; + }; + 4CF47FFC2B631C0100F2B2C0 /* swift */ = { + isa = PBXGroup; + children = ( + 4CF47FFD2B631C0100F2B2C0 /* NdbMeta.swift */, + 4CF47FFE2B631C0100F2B2C0 /* NdbProfile.swift */, + ); + path = swift; + sourceTree = ""; + }; + 4CF47FFF2B631C0100F2B2C0 /* c */ = { + isa = PBXGroup; + children = ( + 4CF480002B631C0100F2B2C0 /* profile_json_parser.h */, + 4CF480012B631C0100F2B2C0 /* profile_reader.h */, + 4CF480022B631C0100F2B2C0 /* meta_json_parser.h */, + 4CF480032B631C0100F2B2C0 /* profile_builder.h */, + 4CF480042B631C0100F2B2C0 /* meta_builder.h */, + 4CF480052B631C0100F2B2C0 /* profile_verifier.h */, + 4CF480062B631C0100F2B2C0 /* .dir */, + 4CF480072B631C0100F2B2C0 /* meta_reader.h */, + 4CF480082B631C0100F2B2C0 /* flatbuffers_common_reader.h */, + 4CF480092B631C0100F2B2C0 /* meta_verifier.h */, + 4CF4800A2B631C0100F2B2C0 /* flatbuffers_common_builder.h */, + ); + path = c; + sourceTree = ""; + }; + 4CF4800B2B631C0100F2B2C0 /* bolt11 */ = { + isa = PBXGroup; + children = ( + 4CF4800C2B631C0100F2B2C0 /* amount.h */, + 4CF4800D2B631C0100F2B2C0 /* cppmagic.h */, + 4CF4800E2B631C0100F2B2C0 /* error.h */, + 4CF4800F2B631C0100F2B2C0 /* take.h */, + 4CF480102B631C0100F2B2C0 /* bolt11.c */, + 4CF480112B631C0100F2B2C0 /* structeq.h */, + 4CF480122B631C0100F2B2C0 /* list.c */, + 4CF480132B631C0100F2B2C0 /* debug.h */, + 4CF480142B631C0100F2B2C0 /* bech32_util.h */, + 4CF480152B631C0100F2B2C0 /* alignof.h */, + 4CF480162B631C0100F2B2C0 /* typesafe_cb.h */, + 4CF480172B631C0100F2B2C0 /* overflows.h */, + 4CF480182B631C0100F2B2C0 /* mem.c */, + 4CF480192B631C0100F2B2C0 /* container_of.h */, + 4CF4801A2B631C0100F2B2C0 /* hash_u5.c */, + 4CF4801B2B631C0100F2B2C0 /* node_id.h */, + 4CF4801C2B631C0100F2B2C0 /* talstr.c */, + 4CF4801D2B631C0100F2B2C0 /* utf8.c */, + 4CF4801E2B631C0100F2B2C0 /* bech32.c */, + 4CF4801F2B631C0100F2B2C0 /* tal.c */, + 4CF480202B631C0100F2B2C0 /* list.h */, + 4CF480212B631C0100F2B2C0 /* str_debug.h */, + 4CF480222B631C0100F2B2C0 /* bolt11.h */, + 4CF480232B631C0100F2B2C0 /* take.c */, + 4CF480242B631C0100F2B2C0 /* likely.h */, + 4CF480252B631C0100F2B2C0 /* amount.c */, + 4CF480262B631C0100F2B2C0 /* error.c */, + 4CF480272B631C0100F2B2C0 /* array_size.h */, + 4CF480282B631C0100F2B2C0 /* bech32_util.c */, + 4CF480292B631C0100F2B2C0 /* str.h */, + 4CF4802A2B631C0100F2B2C0 /* libnostrdb.a */, + 4CF4802B2B631C0100F2B2C0 /* hash_u5.h */, + 4CF4802C2B631C0100F2B2C0 /* mem.h */, + 4CF4802D2B631C0100F2B2C0 /* build_assert.h */, + 4CF4802E2B631C0100F2B2C0 /* short_types.h */, + 4CF4802F2B631C0100F2B2C0 /* tal.h */, + 4CF480302B631C0100F2B2C0 /* bech32.h */, + 4CF480312B631C0100F2B2C0 /* check_type.h */, + 4CF480322B631C0100F2B2C0 /* utf8.h */, + 4CF480332B631C0100F2B2C0 /* talstr.h */, + 4CF480342B631C0100F2B2C0 /* node_id.c */, + ); + path = bolt11; + sourceTree = ""; + }; 4CFF8F5729C9FD07008DB934 /* Purple */ = { isa = PBXGroup; children = ( @@ -3058,13 +3126,17 @@ files = ( 4C1D4FB42A7967990024F453 /* build-git-hash.txt in Resources */, D7FB14222BE5970000398331 /* PrivacyInfo.xcprivacy in Resources */, + 4CF480432B631C0100F2B2C0 /* .dir in Resources */, 3ACB685F297633BC00C46468 /* Localizable.strings in Resources */, 4CE6DEEE27F7A08200C66700 /* Preview Assets.xcassets in Resources */, 3ACB685C297633BC00C46468 /* InfoPlist.strings in Resources */, 50DA11262A16A23F00236234 /* Launch.storyboard in Resources */, 4CE6DEEB27F7A08200C66700 /* Assets.xcassets in Resources */, 4C198DF129F88C6B004C165C /* License.txt in Resources */, + 4CF4803E2B631C0100F2B2C0 /* .dir in Resources */, 4C198DF029F88C6B004C165C /* Readme.md in Resources */, + 4CF4803F2B631C0100F2B2C0 /* ndb_profile.rs in Resources */, + 4CF480402B631C0100F2B2C0 /* ndb_meta.rs in Resources */, F71694EE2A6624F9001F4053 /* suggested_users.json in Resources */, 3A4325A82961E11400BFCD9D /* Localizable.stringsdict in Resources */, ); @@ -3125,7 +3197,6 @@ files = ( 4C3DCC762A9FE9EC0091E592 /* NdbTxn.swift in Sources */, 4CEF958D2A9CE650000F901B /* verifier.c in Sources */, - 4C32B9342A9AD01A00DC3548 /* NdbProfile.swift in Sources */, 4C32B9332A99845B00DC3548 /* Ndb.swift in Sources */, D7ADD3E22B538E3500F104C4 /* DamusPurpleVerifyNpubView.swift in Sources */, 4C4793082A993E8900489948 /* refmap.c in Sources */, @@ -3136,7 +3207,6 @@ 4C4793042A993DC000489948 /* midl.c in Sources */, 0E8A4BB72AE4359200065E81 /* NostrFilter+Hashable.swift in Sources */, 4C4793012A993CDA00489948 /* mdb.c in Sources */, - 4CE9FBBA2A6B3C63007E485C /* nostrdb.c in Sources */, ADFE73552AD4793100EC7326 /* QRScanNSECView.swift in Sources */, 4C3AC79D2833036D00E1F516 /* FollowingView.swift in Sources */, 5CF72FC229B9142F00124A13 /* ShareAction.swift in Sources */, @@ -3151,7 +3221,7 @@ D7CB5D512B1174D100AD4105 /* FriendFilter.swift in Sources */, D7CBD1D42B8D21DC00BFD889 /* DamusPurpleNotificationManagement.swift in Sources */, 4C32B9572A9AD44700DC3548 /* Root.swift in Sources */, - 4C3EA64428FF558100C48A62 /* sha256.c in Sources */, + 4CF4804B2B631C0100F2B2C0 /* tal.c in Sources */, 504323A72A34915F006AE6DC /* RelayModel.swift in Sources */, 4CF0ABF62985CD5500D66079 /* UserSearch.swift in Sources */, 4C32B9542A9AD44700DC3548 /* FlatBuffersUtils.swift in Sources */, @@ -3174,7 +3244,6 @@ 4CF0ABEE29844B5500D66079 /* AnyEncodable.swift in Sources */, B57B4C662B312C3700A232C0 /* NostrAuth.swift in Sources */, 4CB8838D296F710400DC99E7 /* Reposted.swift in Sources */, - 4C3EA67728FF7A9800C48A62 /* talstr.c in Sources */, 4CE6DEE927F7A08100C66700 /* ContentView.swift in Sources */, 4CEE2AF5280B29E600AB5EEF /* TimeAgo.swift in Sources */, 4CC14FF12A73FCDB007AEB17 /* Pubkey.swift in Sources */, @@ -3198,6 +3267,7 @@ 4C285C8A2838B985008A31F1 /* ProfilePictureSelector.swift in Sources */, 4CFD502F2A2DA45800A229DB /* MediaView.swift in Sources */, D7373BA62B688EA300F7783D /* DamusPurpleTranslationSetupView.swift in Sources */, + 4CF480482B631C0100F2B2C0 /* talstr.c in Sources */, 4C9F18E429ABDE6D008C55EC /* MaybeAnonPfpView.swift in Sources */, 4CA5588329F33F5B00DC6A45 /* StringCodable.swift in Sources */, 4C75EFB92804A2740006080F /* EventView.swift in Sources */, @@ -3208,9 +3278,12 @@ 4C687C272A6039500092C550 /* TestData.swift in Sources */, 50C3E08A2AA8E3F7006A4BC0 /* AVPlayer+Additions.swift in Sources */, 4C198DF229F88C6B004C165C /* BlurHashDecode.swift in Sources */, + 4CF480492B631C0100F2B2C0 /* utf8.c in Sources */, F75BA12F29A18EF500E10810 /* BookmarksView.swift in Sources */, 4CB883B6297730E400DC99E7 /* LNUrls.swift in Sources */, 4C7FF7D52823313F009601DB /* Mentions.swift in Sources */, + 4CF4803D2B631C0100F2B2C0 /* content_parser.c in Sources */, + BA4AB0AE2A63B9270070A32A /* AddEmojiView.swift in Sources */, 4C32B94D2A9AD44700DC3548 /* Offset.swift in Sources */, 4C633350283D40E500B1C9C3 /* HomeModel.swift in Sources */, 4C987B57283FD07F0042CE38 /* FollowersModel.swift in Sources */, @@ -3220,6 +3293,7 @@ 3AB72AB9298ECF30004BB58C /* Translator.swift in Sources */, 4C363A9028247A1D006E126D /* NostrLink.swift in Sources */, 4C3D52B6298DB4E6001C5831 /* ZapEvent.swift in Sources */, + 4CF4804D2B631C0100F2B2C0 /* amount.c in Sources */, 647D9A8D2968520300A295DE /* SideMenuView.swift in Sources */, F7F0BA272978E54D009531F3 /* ParticipantsView.swift in Sources */, 4CF0ABE32981BC7D00D66079 /* UserView.swift in Sources */, @@ -3258,6 +3332,7 @@ 4C32B9582A9AD44700DC3548 /* VeriferOptions.swift in Sources */, D74AAFC22B153395006CF0F4 /* HeadlessDamusState.swift in Sources */, 4CA2EFA0280E37AC0044ACD8 /* TimelineView.swift in Sources */, + 4CF480512B631C0100F2B2C0 /* node_id.c in Sources */, 4C30AC7629A5770900E2BD5A /* NotificationItemView.swift in Sources */, 4C86F7C42A76C44C00EC0817 /* ZappingNotify.swift in Sources */, 4C363A8428233689006E126D /* Parser.swift in Sources */, @@ -3274,7 +3349,6 @@ 4CB8838B296F6E1E00DC99E7 /* NIP05Badge.swift in Sources */, 4CA3FA1029F593D000FDB3C3 /* ZapTypePicker.swift in Sources */, 4C32B95D2A9AD44700DC3548 /* Documentation.docc in Sources */, - 4C3EA66828FF5F9900C48A62 /* hex.c in Sources */, E9E4ED0B295867B900DD7078 /* ThreadView.swift in Sources */, 4CD348EF29C3659D00497EB2 /* ImageUploadModel.swift in Sources */, 4C7D096E2A0AEA0400943473 /* ScannerCoordinator.swift in Sources */, @@ -3288,6 +3362,7 @@ 4C45E5022BED4D000025A428 /* ThreadReply.swift in Sources */, D74AAFD42B155ECB006CF0F4 /* Zaps+.swift in Sources */, 4C75EFB128049D510006080F /* NostrResponse.swift in Sources */, + 4CF480472B631C0100F2B2C0 /* hash_u5.c in Sources */, 4C7D09592A05BEAD00943473 /* KeyboardVisible.swift in Sources */, 4CEE2AF7280B2DEA00AB5EEF /* ProfileName.swift in Sources */, 4CC7AAEB297F0AEC00430951 /* BuilderEventView.swift in Sources */, @@ -3307,6 +3382,7 @@ D71AC4CC2BA8E3480076268E /* VisibilityTracker.swift in Sources */, 4CE8794829941DA700F758CC /* RelayFilters.swift in Sources */, 4CEE2B02280B39E800AB5EEF /* EventActionBar.swift in Sources */, + 4CF480522B631C0100F2B2C0 /* invoice.c in Sources */, 4C3BEFE0281DE1ED00B3DE84 /* DamusState.swift in Sources */, D72E12782BEED22500F4F781 /* Array.swift in Sources */, 4C198DF529F88D2E004C165C /* ImageMetadata.swift in Sources */, @@ -3314,6 +3390,7 @@ 4CF0ABE929844AF100D66079 /* AnyCodable.swift in Sources */, BA3759932ABCCEBA0018D73B /* CameraModel.swift in Sources */, D7100C5A2B76FD5100C59298 /* LogoView.swift in Sources */, + 4CF480442B631C0100F2B2C0 /* bolt11.c in Sources */, 4C0A3F8F280F640A000448DE /* ThreadModel.swift in Sources */, 4C3AC79F2833115300E1F516 /* FollowButtonView.swift in Sources */, D7CB5D3B2B112FBB00AD4105 /* NotificationFormatter.swift in Sources */, @@ -3325,17 +3402,21 @@ 4CA352AA2A76BF3A003BB08B /* LocalNotificationNotify.swift in Sources */, D7315A2A2ACDF3B70036E30A /* DamusCacheManager.swift in Sources */, D7373BA82B68974500F7783D /* DamusPurpleNewUserOnboardingView.swift in Sources */, + 4CF4804E2B631C0100F2B2C0 /* error.c in Sources */, 4C7D09682A0AE9B200943473 /* NWCScannerView.swift in Sources */, D7CB5D452B116FE800AD4105 /* Contacts+.swift in Sources */, 4CA352A42A76AFF3003BB08B /* UpdateStatsNotify.swift in Sources */, D798D21E2B0858BB00234419 /* MigratedTypes.swift in Sources */, + 4CF4803C2B631C0100F2B2C0 /* sha256.c in Sources */, 4C0A3F93280F66F5000448DE /* ReplyMap.swift in Sources */, 4C2B7BF22A71B6540049DEE7 /* Id.swift in Sources */, 7C95CAEE299DCEF1009DCB67 /* KFOptionSetter+.swift in Sources */, 4C7D09722A0AEF5E00943473 /* DamusGradient.swift in Sources */, 4C463CBF2B960B96008A8C36 /* PurpleBackdrop.swift in Sources */, BAB68BED29543FA3007BA466 /* SelectWalletView.swift in Sources */, + 4CF4804C2B631C0100F2B2C0 /* take.c in Sources */, 3169CAE6294E69C000EE4006 /* EmptyTimelineView.swift in Sources */, + 4CF4803A2B631C0100F2B2C0 /* nostr_bech32.c in Sources */, 4C32B9602A9AD44700DC3548 /* Struct.swift in Sources */, 4CC7AAF0297F11C700430951 /* SelectedEventView.swift in Sources */, 4CC7AAF8297F1CEE00430951 /* EventProfile.swift in Sources */, @@ -3345,12 +3426,10 @@ D7D2A3812BF815D000E4B42B /* PushNotificationClient.swift in Sources */, 4C1A9A2329DDDB8100516EAC /* IconLabel.swift in Sources */, 4CA352AC2A76C07F003BB08B /* NewUnmutesNotify.swift in Sources */, - 4C3EA64928FF597700C48A62 /* bech32.c in Sources */, D7870BC32AC47EBC0080BA88 /* EventLoaderView.swift in Sources */, 4CE879522996B68900F758CC /* RelayType.swift in Sources */, 4CE8795B2996C47A00F758CC /* ZapsModel.swift in Sources */, 4C3A1D3729637E0500558C0F /* PreviewCache.swift in Sources */, - 4C3EA67528FF7A5A00C48A62 /* take.c in Sources */, 4C3AC7A12835A81400E1F516 /* SetupView.swift in Sources */, 4C06670128FC7C5900038D2A /* RelayView.swift in Sources */, 4C285C8C28398BC7008A31F1 /* Keys.swift in Sources */, @@ -3375,7 +3454,6 @@ 4CFF8F6329CC9AD7008DB934 /* ImageContextMenuModifier.swift in Sources */, 4C54AA0A29A55429003E4487 /* EventGroup.swift in Sources */, 4C7D09622A098D0E00943473 /* WalletConnect.swift in Sources */, - 4C3EA67928FF7ABF00C48A62 /* list.c in Sources */, 4C64987E286D082C00EAE2B3 /* DirectMessagesModel.swift in Sources */, 4C12535E2A76CA870004F4B8 /* SwitchedTimelineNotify.swift in Sources */, D74F430A2B23F0BE00425B75 /* DamusPurple.swift in Sources */, @@ -3390,6 +3468,7 @@ F71694F82A6983AF001F4053 /* GrayGradient.swift in Sources */, 4C1D4FB12A7958E60024F453 /* VersionInfo.swift in Sources */, D7FF94002AC7AC5300FD969D /* RelayURL.swift in Sources */, + 4CF480412B631C0100F2B2C0 /* NdbMeta.swift in Sources */, 4C64305C2A945AFF00B0C0E9 /* MusicController.swift in Sources */, 5053ACA72A56DF3B00851AE3 /* DeveloperSettingsView.swift in Sources */, F79C7FAD29D5E9620000F946 /* EditPictureControl.swift in Sources */, @@ -3403,7 +3482,7 @@ 5CC8529D2BD741CD0039FFC5 /* HighlightEvent.swift in Sources */, 4C9146FD2A2A87C200DDEA40 /* wasm.c in Sources */, 4C75EFAF28049D350006080F /* NostrFilter.swift in Sources */, - 4C3EA64C28FF59AC00C48A62 /* bech32_util.c in Sources */, + 4CF480422B631C0100F2B2C0 /* NdbProfile.swift in Sources */, 4CA9276C2A2910D10098A105 /* ReplyPart.swift in Sources */, D7C6787E2B2D34CC00BCEAFB /* NIP98AuthenticatedRequest.swift in Sources */, 4CE1399029F0661A00AC6A0B /* RepostAction.swift in Sources */, @@ -3414,7 +3493,6 @@ 3AA24802297E3DC20090C62D /* RepostView.swift in Sources */, 5C6E1DAF2A194075008FC15A /* PinkGradient.swift in Sources */, 4CD7641B28A1641400B6928F /* EndBlock.swift in Sources */, - 4C3EA66528FF5F6800C48A62 /* mem.c in Sources */, 4C198DEF29F88C6B004C165C /* BlurHashEncode.swift in Sources */, 4CF0ABE52981EE0C00D66079 /* EULAView.swift in Sources */, 4CBCA930297DB57F00EC6B2F /* WebsiteLink.swift in Sources */, @@ -3428,9 +3506,10 @@ 4C19AE512A5CEF7C00C90DB7 /* NostrScript.swift in Sources */, 4C32B95E2A9AD44700DC3548 /* FlatBufferObject.swift in Sources */, D783A63F2AD4E53D00658DDA /* SuggestedHashtagsView.swift in Sources */, - 4C3EA64F28FF59F200C48A62 /* tal.c in Sources */, + 4CB88393296F798300DC99E7 /* ReactionsModel.swift in Sources */, 5C42E78C29DB76D90086AAC1 /* EmptyUserSearchView.swift in Sources */, 4CB88396296F7F8B00DC99E7 /* ReactionView.swift in Sources */, + 4CF480552B631C4F00F2B2C0 /* wasm.c in Sources */, 50A16FFD2AA7525700DFEC1F /* DamusVideoPlayerViewModel.swift in Sources */, 4CFF8F6B29CD0079008DB934 /* RepostedEvent.swift in Sources */, D78CD5982B8990300014D539 /* DamusAppNotificationView.swift in Sources */, @@ -3475,27 +3554,26 @@ 4CEE2AF3280B25C500AB5EEF /* ProfilePicView.swift in Sources */, 4CC7AAF6297F1A6A00430951 /* EventBody.swift in Sources */, D76556D62B1E6C08001B0CCC /* DamusPurpleWelcomeView.swift in Sources */, + 4CF480452B631C0100F2B2C0 /* list.c in Sources */, 3165648B295B70D500C64604 /* LinkView.swift in Sources */, - 4C8D00CF29E38B950036AF10 /* nostr_bech32.c in Sources */, D7CB5D5C2B1176B200AD4105 /* MediaUploader.swift in Sources */, 4C1253562A76C8C60004F4B8 /* BroadcastNotify.swift in Sources */, + 4CF480392B631C0100F2B2C0 /* block.c in Sources */, 4C3BEFD42819DE8F00B3DE84 /* NostrKind.swift in Sources */, B533694E2B66D791008A805E /* MutelistManager.swift in Sources */, 4C32B9532A9AD44700DC3548 /* Verifier.swift in Sources */, 5C14C29D2BBBA40B00079FD2 /* RelayAdminDetail.swift in Sources */, - 4C3EA66028FF5E7700C48A62 /* node_id.c in Sources */, 4C687C212A5F7ED00092C550 /* DamusBackground.swift in Sources */, 4CA352A02A76AE80003BB08B /* Notify.swift in Sources */, 4CF38C882A9442DC00BE01B6 /* UserStatusView.swift in Sources */, 4CE6DEE727F7A08100C66700 /* damusApp.swift in Sources */, + 4CF480462B631C0100F2B2C0 /* mem.c in Sources */, 4C1253582A76C9060004F4B8 /* PresentSheetNotify.swift in Sources */, 4C363A962827096D006E126D /* PostBlock.swift in Sources */, 4CA9275F2A2902B20098A105 /* LongformPreview.swift in Sources */, 4C5F9116283D855D0052CD1C /* EventsModel.swift in Sources */, 4C32B94F2A9AD44700DC3548 /* Int+extension.swift in Sources */, 4CEE2AED2805B22500AB5EEF /* NostrRequest.swift in Sources */, - 4C06670E28FDEAA000038D2A /* utf8.c in Sources */, - 4C3EA66D28FF782800C48A62 /* amount.c in Sources */, 4C32B9562A9AD44700DC3548 /* TableVerifier.swift in Sources */, 5CF2DCCE2AABE1A500984B8D /* DamusLightGradient.swift in Sources */, 4C5E54062A9671F800FF6E60 /* UserStatusSheet.swift in Sources */, @@ -3515,7 +3593,6 @@ 5CC852A62BE00F180039FFC5 /* HighlightEventRef.swift in Sources */, 4CE8794E2996B16A00F758CC /* RelayToggle.swift in Sources */, 4C3AC79B28306D7B00E1F516 /* Contacts.swift in Sources */, - 4C3EA63D28FF52D600C48A62 /* bolt11.c in Sources */, 4C9BB83129C0ED4F00FC4E37 /* DisplayName.swift in Sources */, 7CFF6317299FEFE5005D382A /* SelectableText.swift in Sources */, 50A16FFB2AA6C06600DFEC1F /* DamusAVPlayerView.swift in Sources */, @@ -3541,16 +3618,15 @@ E990020F2955F837003BBC5A /* EditMetadataView.swift in Sources */, 4CB8FC232A41ABA800763C51 /* AboutView.swift in Sources */, D74AAFCC2B155D07006CF0F4 /* MakeZapRequest.swift in Sources */, + 4CF480382B631C0100F2B2C0 /* nostrdb.c in Sources */, 5C513FBA297F72980072348F /* CustomPicker.swift in Sources */, 4C1253622A76D00B0004F4B8 /* PostNotify.swift in Sources */, 4CACA9D5280C31E100D9BBE8 /* ReplyView.swift in Sources */, F7908E92298B0F0700AB113A /* RelayDetailView.swift in Sources */, - 4C9147002A2A891E00DDEA40 /* error.c in Sources */, 4CE879552996BAB900F758CC /* RelayPaidDetail.swift in Sources */, 4C1253602A76CF890004F4B8 /* ScrollToTopNotify.swift in Sources */, 4CA3529E2A76AE67003BB08B /* FollowNotify.swift in Sources */, 4CF0ABD42980996B00D66079 /* Report.swift in Sources */, - 4C06670B28FDE64700038D2A /* damus.c in Sources */, 4C1253642A76D08F0004F4B8 /* ReportNotify.swift in Sources */, 4C1A9A2529DDDF2600516EAC /* ZapSettingsView.swift in Sources */, 4C2CDDF7299D4A5E00879FD5 /* Debouncer.swift in Sources */, @@ -3563,6 +3639,7 @@ 4CE879502996B2BD00F758CC /* RelayStatusView.swift in Sources */, 4CC7AAF4297F18B400430951 /* ReplyDescription.swift in Sources */, 4C75EFA427FA577B0006080F /* PostView.swift in Sources */, + 4CF4804A2B631C0100F2B2C0 /* bech32.c in Sources */, 4C30AC7229A5677A00E2BD5A /* NotificationsView.swift in Sources */, 4C1A9A2129DDD3E100516EAC /* KeySettingsView.swift in Sources */, D723C38E2AB8D83400065664 /* ContentFilters.swift in Sources */, @@ -3586,6 +3663,7 @@ 4C1A9A1F29DDD24B00516EAC /* AppearanceSettingsView.swift in Sources */, 3AA59D1D2999B0400061C48E /* DraftsModel.swift in Sources */, 3169CAED294FCCFC00EE4006 /* Constants.swift in Sources */, + 4CF4804F2B631C0100F2B2C0 /* bech32_util.c in Sources */, 4C9AA14A2A4587A6003F49FD /* NotificationStatusModel.swift in Sources */, D7100C5C2B77016700C59298 /* IAPProductStateView.swift in Sources */, 4CB9D4A72992D02B00A9A7E4 /* ProfileNameView.swift in Sources */, @@ -3671,7 +3749,6 @@ D7CE1B1D2B0BE14A002EDAD4 /* verifier.c in Sources */, D7CB5D4F2B11728000AD4105 /* NewEventsBits.swift in Sources */, D7CB5D412B116F0900AD4105 /* StringCodable.swift in Sources */, - D7CE1B1F2B0BE1B8002EDAD4 /* damus.c in Sources */, D7CE1B1B2B0BE144002EDAD4 /* emitter.c in Sources */, D7EDED342B12ACAE0018B19C /* DamusUserDefaults.swift in Sources */, D74AAFC72B155BD0006CF0F4 /* Zap.swift in Sources */, @@ -3689,13 +3766,11 @@ D7CB5D402B116E8A00AD4105 /* UserSettingsStore.swift in Sources */, D7CE1B1C2B0BE147002EDAD4 /* refmap.c in Sources */, D74AAFC92B155CA5006CF0F4 /* UpdateStatsNotify.swift in Sources */, - D7CE1B242B0BE1F1002EDAD4 /* hash_u5.c in Sources */, D79C4C172AFEB061003A41B4 /* NotificationService.swift in Sources */, D7CB5D522B1174D100AD4105 /* FriendFilter.swift in Sources */, D7CE1B362B0BE702002EDAD4 /* FbConstants.swift in Sources */, D74AAFD12B155DA4006CF0F4 /* RelayURL.swift in Sources */, D7EDED272B117FF10018B19C /* CompatibleAttribute.swift in Sources */, - D7CE1B222B0BE1EB002EDAD4 /* utf8.c in Sources */, D74AAFCD2B155D07006CF0F4 /* MakeZapRequest.swift in Sources */, D7CCFC072B05833200323D86 /* NdbNote.swift in Sources */, D7CE1B3F2B0BE719002EDAD4 /* Enum.swift in Sources */, @@ -3704,12 +3779,9 @@ D7EDED222B117DCA0018B19C /* SequenceUtils.swift in Sources */, D7CE1B422B0BE719002EDAD4 /* Offset.swift in Sources */, D7FB10A72B0C371A00FA8D42 /* Log.swift in Sources */, - D7CE1B232B0BE1EE002EDAD4 /* bolt11.c in Sources */, D7CE1B182B0BDFDD002EDAD4 /* mdb.c in Sources */, D7CCFC162B05894300323D86 /* Pubkey.swift in Sources */, - D7CE1B292B0BE239002EDAD4 /* node_id.c in Sources */, D7EDED2C2B128CFA0018B19C /* DamusColors.swift in Sources */, - D7CE1B2E2B0BE25C002EDAD4 /* talstr.c in Sources */, D74AAFC52B1538DF006CF0F4 /* NotificationExtensionState.swift in Sources */, D798D2292B08686C00234419 /* ContentParsing.swift in Sources */, D798D2242B0859C900234419 /* LocalizationUtil.swift in Sources */, @@ -3719,19 +3791,13 @@ D723411A2B6864F200E1E135 /* DamusPurpleEnvironment.swift in Sources */, D7EDED292B1182060018B19C /* AttachMediaUtility.swift in Sources */, D798D21A2B0856CC00234419 /* Mentions.swift in Sources */, - D7CE1B212B0BE1CB002EDAD4 /* wasm.c in Sources */, D7CE1B3B2B0BE719002EDAD4 /* Int+extension.swift in Sources */, D74AAFC62B155B8B006CF0F4 /* Zaps.swift in Sources */, - D7CCFC0B2B0585EA00323D86 /* nostrdb.c in Sources */, - D7CE1B252B0BE1F4002EDAD4 /* sha256.c in Sources */, - D7CE1B262B0BE1F8002EDAD4 /* bech32.c in Sources */, D7EDED232B117DFB0018B19C /* NoteContent.swift in Sources */, D798D21B2B0856F200234419 /* NdbTagsIterator.swift in Sources */, D7CE1B352B0BE6FA002EDAD4 /* ByteBuffer.swift in Sources */, - D7CE1B2F2B0BE260002EDAD4 /* list.c in Sources */, D7CB5D422B116F8900AD4105 /* Contacts.swift in Sources */, D7CB5D5D2B1176B200AD4105 /* MediaUploader.swift in Sources */, - D7CE1B342B0BE6EE002EDAD4 /* NdbProfile.swift in Sources */, D7DBD41F2B02F15E002A6197 /* NostrKind.swift in Sources */, D7CE1B3C2B0BE719002EDAD4 /* TableVerifier.swift in Sources */, D7EDED2F2B128E8A0018B19C /* CollectionExtension.swift in Sources */, @@ -3745,37 +3811,30 @@ D7CB5D542B1174F700AD4105 /* NIP05.swift in Sources */, D798D2232B0859B700234419 /* KeychainStorage.swift in Sources */, D74AAFC32B153395006CF0F4 /* HeadlessDamusState.swift in Sources */, - D7CE1B272B0BE224002EDAD4 /* bech32_util.c in Sources */, D7CCFC102B05880F00323D86 /* Id.swift in Sources */, D7CB5D532B1174E900AD4105 /* DeepLPlan.swift in Sources */, D7EDED282B1180940018B19C /* ImageUploadModel.swift in Sources */, - D7CE1B2A2B0BE23E002EDAD4 /* mem.c in Sources */, D7CB5D4C2B11721600AD4105 /* ZapType.swift in Sources */, D7EDED2B2B128CDB0018B19C /* Hashtags.swift in Sources */, D7CE1B332B0BE6DE002EDAD4 /* Nostr.swift in Sources */, D7CE1B3D2B0BE719002EDAD4 /* Verifiable.swift in Sources */, D7CE1B382B0BE719002EDAD4 /* VeriferOptions.swift in Sources */, D7CCFC152B05891000323D86 /* Referenced.swift in Sources */, - D7CE1B2B2B0BE243002EDAD4 /* hex.c in Sources */, D798D2222B08598A00234419 /* ReferencedId.swift in Sources */, D7CE1B492B0BE729002EDAD4 /* DisplayName.swift in Sources */, D7CE1B192B0BE132002EDAD4 /* builder.c in Sources */, D7EDED1F2B11797D0018B19C /* LongformEvent.swift in Sources */, - D7CE1B282B0BE226002EDAD4 /* tal.c in Sources */, D7CCFC122B05886D00323D86 /* IdType.swift in Sources */, D7CE1B312B0BE69D002EDAD4 /* Ndb.swift in Sources */, D7CE1B3A2B0BE719002EDAD4 /* Struct.swift in Sources */, D70A3B172B02DCE5008BD568 /* NotificationFormatter.swift in Sources */, D7CE1B462B0BE719002EDAD4 /* FlatBufferBuilder.swift in Sources */, D7CE1B3E2B0BE719002EDAD4 /* FlatbuffersErrors.swift in Sources */, - D7CE1B2C2B0BE24B002EDAD4 /* amount.c in Sources */, D7EDED152B11776B0018B19C /* LibreTranslateServer.swift in Sources */, - D7CE1B202B0BE1C8002EDAD4 /* error.c in Sources */, D7CB5D582B11763C00AD4105 /* NewMutesNotify.swift in Sources */, D798D22D2B086DC400234419 /* NostrEvent.swift in Sources */, D798D22E2B086E4800234419 /* NostrResponse.swift in Sources */, D7EDED162B1177840018B19C /* LNUrls.swift in Sources */, - D7CE1B302B0BE263002EDAD4 /* nostr_bech32.c in Sources */, D7CCFC132B05887C00323D86 /* ProofOfWork.swift in Sources */, D7CE1B392B0BE719002EDAD4 /* Table.swift in Sources */, D7CE1B452B0BE719002EDAD4 /* Root.swift in Sources */, @@ -4099,6 +4158,7 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", + "$(PROJECT_DIR)/nostrdb/src/bolt11", ); MARKETING_VERSION = 1.11; PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2; @@ -4150,6 +4210,7 @@ LIBRARY_SEARCH_PATHS = ( "$(inherited)", "$(PROJECT_DIR)", + "$(PROJECT_DIR)/nostrdb/src/bolt11", ); MARKETING_VERSION = 1.11; PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2; diff --git a/nostrdb/damus.c b/nostrdb/damus.c deleted file mode 100644 index 47eac06ef..000000000 --- a/nostrdb/damus.c +++ /dev/null @@ -1,393 +0,0 @@ -// -// damus.c -// damus -// -// Created by William Casarin on 2022-10-17. -// - -#include "damus.h" -#include "cursor.h" -#include "bolt11.h" -#include "bech32.h" -#include -#include - -static int parse_digit(struct cursor *cur, int *digit) { - int c; - if ((c = peek_char(cur, 0)) == -1) - return 0; - - c -= '0'; - - if (c >= 0 && c <= 9) { - *digit = c; - cur->p++; - return 1; - } - return 0; -} - - -static int parse_mention_index(struct cursor *cur, struct note_block *block) { - int d1, d2, d3, ind; - u8 *start = cur->p; - - if (!parse_str(cur, "#[")) - return 0; - - if (!parse_digit(cur, &d1)) { - cur->p = start; - return 0; - } - - ind = d1; - - if (parse_digit(cur, &d2)) - ind = (d1 * 10) + d2; - - if (parse_digit(cur, &d3)) - ind = (d1 * 100) + (d2 * 10) + d3; - - if (!parse_char(cur, ']')) { - cur->p = start; - return 0; - } - - block->type = BLOCK_MENTION_INDEX; - block->block.mention_index = ind; - - return 1; -} - -static int parse_hashtag(struct cursor *cur, struct note_block *block) { - int c; - u8 *start = cur->p; - - if (!parse_char(cur, '#')) - return 0; - - c = peek_char(cur, 0); - if (c == -1 || is_whitespace(c) || c == '#') { - cur->p = start; - return 0; - } - - consume_until_boundary(cur); - - block->type = BLOCK_HASHTAG; - block->block.str.start = (const char*)(start + 1); - block->block.str.end = (const char*)cur->p; - - return 1; -} - -static int add_block(struct note_blocks *blocks, struct note_block block) -{ - if (blocks->num_blocks + 1 >= MAX_BLOCKS) - return 0; - - blocks->blocks[blocks->num_blocks++] = block; - return 1; -} - -static int add_text_block(struct note_blocks *blocks, const u8 *start, const u8 *end) -{ - struct note_block b; - - if (start == end) - return 1; - - b.type = BLOCK_TEXT; - b.block.str.start = (const char*)start; - b.block.str.end = (const char*)end; - - return add_block(blocks, b); -} - -static int consume_url_fragment(struct cursor *cur) -{ - int c; - - if ((c = peek_char(cur, 0)) < 0) - return 1; - - if (c != '#' && c != '?') { - return 1; - } - - cur->p++; - - return consume_until_end_url(cur, 1); -} - -static int consume_url_path(struct cursor *cur) -{ - int c; - - if ((c = peek_char(cur, 0)) < 0) - return 1; - - if (c != '/') { - return 1; - } - - while (cur->p < cur->end) { - c = *cur->p; - - if (c == '?' || c == '#' || is_final_url_char(cur->p, cur->end)) { - return 1; - } - - cur->p++; - } - - return 1; -} - -static int consume_url_host(struct cursor *cur) -{ - char c; - int count = 0; - - while (cur->p < cur->end) { - c = *cur->p; - // TODO: handle IDNs - if ((is_alphanumeric(c) || c == '.' || c == '-') && !is_final_url_char(cur->p, cur->end)) - { - count++; - cur->p++; - continue; - } - - return count != 0; - } - - - // this means the end of the URL hostname is the end of the buffer and we finished - return count != 0; -} - -static int parse_url(struct cursor *cur, struct note_block *block) { - u8 *start = cur->p; - u8 *host; - int host_len; - struct cursor path_cur; - - if (!parse_str(cur, "http")) - return 0; - - if (parse_char(cur, 's') || parse_char(cur, 'S')) { - if (!parse_str(cur, "://")) { - cur->p = start; - return 0; - } - } else { - if (!parse_str(cur, "://")) { - cur->p = start; - return 0; - } - } - - // make sure to save the hostname. We will use this to detect damus.io links - host = cur->p; - - if (!consume_url_host(cur)) { - cur->p = start; - return 0; - } - - // get the length of the host string - host_len = (int)(cur->p - host); - - // save the current parse state so that we can continue from here when - // parsing the bech32 in the damus.io link if we have it - copy_cursor(cur, &path_cur); - - // skip leading / - cursor_skip(&path_cur, 1); - - if (!consume_url_path(cur)) { - cur->p = start; - return 0; - } - - if (!consume_url_fragment(cur)) { - cur->p = start; - return 0; - } - - // smart parens - if (start - 1 >= 0 && - start < cur->end && - *(start - 1) == '(' && - (cur->p - 1) < cur->end && - *(cur->p - 1) == ')') - { - cur->p--; - } - - // save the bech32 string pos in case we hit a damus.io link - block->block.str.start = (const char *)path_cur.p; - - // if we have a damus link, make it a mention - if (host_len == 8 - && !strncmp((const char *)host, "damus.io", 8) - && parse_nostr_bech32(&path_cur, &block->block.mention_bech32.bech32)) - { - block->block.str.end = (const char *)path_cur.p; - block->type = BLOCK_MENTION_BECH32; - return 1; - } - - block->type = BLOCK_URL; - block->block.str.start = (const char *)start; - block->block.str.end = (const char *)cur->p; - - return 1; -} - -static int parse_invoice(struct cursor *cur, struct note_block *block) { - u8 *start, *end; - char *fail; - struct bolt11 *bolt11; - // optional - parse_str(cur, "lightning:"); - - start = cur->p; - - if (!parse_str(cur, "lnbc")) - return 0; - - if (!consume_until_whitespace(cur, 1)) { - cur->p = start; - return 0; - } - - end = cur->p; - - char str[end - start + 1]; - str[end - start] = 0; - memcpy(str, start, end - start); - - if (!(bolt11 = bolt11_decode(NULL, str, &fail))) { - cur->p = start; - return 0; - } - - block->type = BLOCK_INVOICE; - - block->block.invoice.invstr.start = (const char*)start; - block->block.invoice.invstr.end = (const char*)end; - block->block.invoice.bolt11 = bolt11; - - cur->p = end; - - return 1; -} - - -static int parse_mention_bech32(struct cursor *cur, struct note_block *block) { - u8 *start = cur->p; - - parse_char(cur, '@'); - parse_str(cur, "nostr:"); - - block->block.str.start = (const char *)cur->p; - - if (!parse_nostr_bech32(cur, &block->block.mention_bech32.bech32)) { - cur->p = start; - return 0; - } - - block->block.str.end = (const char *)cur->p; - - block->type = BLOCK_MENTION_BECH32; - - return 1; -} - -static int add_text_then_block(struct cursor *cur, struct note_blocks *blocks, struct note_block block, u8 **start, const u8 *pre_mention) -{ - if (!add_text_block(blocks, *start, pre_mention)) - return 0; - - *start = (u8*)cur->p; - - if (!add_block(blocks, block)) - return 0; - - return 1; -} - -int damus_parse_content(struct note_blocks *blocks, const char *content) { - int cp, c; - struct cursor cur; - struct note_block block; - u8 *start, *pre_mention; - - blocks->words = 0; - blocks->num_blocks = 0; - make_cursor((u8*)content, (u8*)content + strlen(content), &cur); - - start = cur.p; - while (cur.p < cur.end && blocks->num_blocks < MAX_BLOCKS) { - cp = peek_char(&cur, -1); - c = peek_char(&cur, 0); - - // new word - if (is_whitespace(cp) && !is_whitespace(c)) { - blocks->words++; - } - - pre_mention = cur.p; - if (cp == -1 || is_left_boundary(cp) || c == '#') { - if (c == '#' && (parse_mention_index(&cur, &block) || parse_hashtag(&cur, &block))) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) - return 0; - continue; - } else if ((c == 'h' || c == 'H') && parse_url(&cur, &block)) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) - return 0; - continue; - } else if ((c == 'l' || c == 'L') && parse_invoice(&cur, &block)) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) - return 0; - continue; - } else if ((c == 'n' || c == '@') && parse_mention_bech32(&cur, &block)) { - if (!add_text_then_block(&cur, blocks, block, &start, pre_mention)) - return 0; - continue; - } - } - - cur.p++; - } - - if (cur.p - start > 0) { - if (!add_text_block(blocks, start, cur.p)) - return 0; - } - - return 1; -} - -void blocks_init(struct note_blocks *blocks) { - blocks->blocks = malloc(sizeof(struct note_block) * MAX_BLOCKS); - blocks->num_blocks = 0; -} - -void blocks_free(struct note_blocks *blocks) { - if (!blocks->blocks) { - return; - } - - for (int i = 0; i < blocks->num_blocks; ++i) { - if (blocks->blocks[i].type == BLOCK_MENTION_BECH32) { - free(blocks->blocks[i].block.mention_bech32.bech32.buffer); - blocks->blocks[i].block.mention_bech32.bech32.buffer = NULL; - } - } - - free(blocks->blocks); - blocks->num_blocks = 0; -} diff --git a/nostrdb/damus.h b/nostrdb/damus.h deleted file mode 100644 index 4453fa545..000000000 --- a/nostrdb/damus.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// damus.h -// damus -// -// Created by William Casarin on 2022-10-17. -// - -#ifndef damus_h -#define damus_h - -#include -#include "block.h" - -typedef unsigned char u8; - -int damus_parse_content(struct note_blocks *blocks, const char *content); - -#endif /* damus_h */ From 1a465ab5a01a6d7c05a3346f1ec959558c8ed969 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 25 Jan 2024 15:29:36 -0800 Subject: [PATCH 139/146] c: remove some unused files from project some binding dir stoppers, and configurator --- damus.xcodeproj/project.pbxproj | 10 - nostrdb/src/bindings/c/.dir | 0 nostrdb/src/bindings/rust/.dir | 0 nostrdb/src/configurator.c | 1110 ------------------------------- 4 files changed, 1120 deletions(-) delete mode 100644 nostrdb/src/bindings/c/.dir delete mode 100644 nostrdb/src/bindings/rust/.dir delete mode 100644 nostrdb/src/configurator.c diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj index 405b28559..6df8b357c 100644 --- a/damus.xcodeproj/project.pbxproj +++ b/damus.xcodeproj/project.pbxproj @@ -355,15 +355,12 @@ 4CF480382B631C0100F2B2C0 /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDE2B631C0100F2B2C0 /* nostrdb.c */; }; 4CF480392B631C0100F2B2C0 /* block.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDF2B631C0100F2B2C0 /* block.c */; }; 4CF4803A2B631C0100F2B2C0 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FE52B631C0100F2B2C0 /* nostr_bech32.c */; }; - 4CF4803B2B631C0100F2B2C0 /* configurator.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FEF2B631C0100F2B2C0 /* configurator.c */; }; 4CF4803C2B631C0100F2B2C0 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF52B631C0100F2B2C0 /* sha256.c */; }; 4CF4803D2B631C0100F2B2C0 /* content_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF62B631C0100F2B2C0 /* content_parser.c */; }; - 4CF4803E2B631C0100F2B2C0 /* .dir in Resources */ = {isa = PBXBuildFile; fileRef = 4CF47FF92B631C0100F2B2C0 /* .dir */; }; 4CF4803F2B631C0100F2B2C0 /* ndb_profile.rs in Resources */ = {isa = PBXBuildFile; fileRef = 4CF47FFA2B631C0100F2B2C0 /* ndb_profile.rs */; }; 4CF480402B631C0100F2B2C0 /* ndb_meta.rs in Resources */ = {isa = PBXBuildFile; fileRef = 4CF47FFB2B631C0100F2B2C0 /* ndb_meta.rs */; }; 4CF480412B631C0100F2B2C0 /* NdbMeta.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FFD2B631C0100F2B2C0 /* NdbMeta.swift */; }; 4CF480422B631C0100F2B2C0 /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FFE2B631C0100F2B2C0 /* NdbProfile.swift */; }; - 4CF480432B631C0100F2B2C0 /* .dir in Resources */ = {isa = PBXBuildFile; fileRef = 4CF480062B631C0100F2B2C0 /* .dir */; }; 4CF480442B631C0100F2B2C0 /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480102B631C0100F2B2C0 /* bolt11.c */; }; 4CF480452B631C0100F2B2C0 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480122B631C0100F2B2C0 /* list.c */; }; 4CF480462B631C0100F2B2C0 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480182B631C0100F2B2C0 /* mem.c */; }; @@ -1243,7 +1240,6 @@ 4CF47FEC2B631C0100F2B2C0 /* nostrdb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nostrdb.h; sourceTree = ""; }; 4CF47FED2B631C0100F2B2C0 /* hex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hex.h; sourceTree = ""; }; 4CF47FEE2B631C0100F2B2C0 /* io.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = io.h; sourceTree = ""; }; - 4CF47FEF2B631C0100F2B2C0 /* configurator.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = configurator.c; sourceTree = ""; }; 4CF47FF02B631C0100F2B2C0 /* nostr_bech32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nostr_bech32.h; sourceTree = ""; }; 4CF47FF12B631C0100F2B2C0 /* cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; 4CF47FF22B631C0100F2B2C0 /* util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = util.h; sourceTree = ""; }; @@ -1251,7 +1247,6 @@ 4CF47FF42B631C0100F2B2C0 /* block.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = block.h; sourceTree = ""; }; 4CF47FF52B631C0100F2B2C0 /* sha256.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sha256.c; sourceTree = ""; }; 4CF47FF62B631C0100F2B2C0 /* content_parser.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = content_parser.c; sourceTree = ""; }; - 4CF47FF92B631C0100F2B2C0 /* .dir */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .dir; sourceTree = ""; }; 4CF47FFA2B631C0100F2B2C0 /* ndb_profile.rs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ndb_profile.rs; sourceTree = ""; }; 4CF47FFB2B631C0100F2B2C0 /* ndb_meta.rs */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ndb_meta.rs; sourceTree = ""; }; 4CF47FFD2B631C0100F2B2C0 /* NdbMeta.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NdbMeta.swift; sourceTree = ""; }; @@ -1262,7 +1257,6 @@ 4CF480032B631C0100F2B2C0 /* profile_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_builder.h; sourceTree = ""; }; 4CF480042B631C0100F2B2C0 /* meta_builder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_builder.h; sourceTree = ""; }; 4CF480052B631C0100F2B2C0 /* profile_verifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = profile_verifier.h; sourceTree = ""; }; - 4CF480062B631C0100F2B2C0 /* .dir */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .dir; sourceTree = ""; }; 4CF480072B631C0100F2B2C0 /* meta_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_reader.h; sourceTree = ""; }; 4CF480082B631C0100F2B2C0 /* flatbuffers_common_reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flatbuffers_common_reader.h; sourceTree = ""; }; 4CF480092B631C0100F2B2C0 /* meta_verifier.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = meta_verifier.h; sourceTree = ""; }; @@ -2645,7 +2639,6 @@ 4CF47FEC2B631C0100F2B2C0 /* nostrdb.h */, 4CF47FED2B631C0100F2B2C0 /* hex.h */, 4CF47FEE2B631C0100F2B2C0 /* io.h */, - 4CF47FEF2B631C0100F2B2C0 /* configurator.c */, 4CF47FF02B631C0100F2B2C0 /* nostr_bech32.h */, 4CF47FF12B631C0100F2B2C0 /* cpu.h */, 4CF47FF22B631C0100F2B2C0 /* util.h */, @@ -2675,7 +2668,6 @@ 4CF47FF82B631C0100F2B2C0 /* rust */ = { isa = PBXGroup; children = ( - 4CF47FF92B631C0100F2B2C0 /* .dir */, 4CF47FFA2B631C0100F2B2C0 /* ndb_profile.rs */, 4CF47FFB2B631C0100F2B2C0 /* ndb_meta.rs */, ); @@ -2700,7 +2692,6 @@ 4CF480032B631C0100F2B2C0 /* profile_builder.h */, 4CF480042B631C0100F2B2C0 /* meta_builder.h */, 4CF480052B631C0100F2B2C0 /* profile_verifier.h */, - 4CF480062B631C0100F2B2C0 /* .dir */, 4CF480072B631C0100F2B2C0 /* meta_reader.h */, 4CF480082B631C0100F2B2C0 /* flatbuffers_common_reader.h */, 4CF480092B631C0100F2B2C0 /* meta_verifier.h */, @@ -3133,7 +3124,6 @@ 50DA11262A16A23F00236234 /* Launch.storyboard in Resources */, 4CE6DEEB27F7A08200C66700 /* Assets.xcassets in Resources */, 4C198DF129F88C6B004C165C /* License.txt in Resources */, - 4CF4803E2B631C0100F2B2C0 /* .dir in Resources */, 4C198DF029F88C6B004C165C /* Readme.md in Resources */, 4CF4803F2B631C0100F2B2C0 /* ndb_profile.rs in Resources */, 4CF480402B631C0100F2B2C0 /* ndb_meta.rs in Resources */, diff --git a/nostrdb/src/bindings/c/.dir b/nostrdb/src/bindings/c/.dir deleted file mode 100644 index e69de29bb..000000000 diff --git a/nostrdb/src/bindings/rust/.dir b/nostrdb/src/bindings/rust/.dir deleted file mode 100644 index e69de29bb..000000000 diff --git a/nostrdb/src/configurator.c b/nostrdb/src/configurator.c deleted file mode 100644 index 68d7fc6b3..000000000 --- a/nostrdb/src/configurator.c +++ /dev/null @@ -1,1110 +0,0 @@ -/* Simple tool to create config.h. - * Would be much easier with ccan modules, but deliberately standalone. - * - * Copyright 2011 Rusty Russell . MIT license. - * - * c12r_err, c12r_errx functions copied from ccan/err/err.c - * Copyright Rusty Russell . CC0 (Public domain) License. - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ -#define _POSIX_C_SOURCE 200809L /* For pclose, popen, strdup */ - -#define EXIT_BAD_USAGE 1 -#define EXIT_TROUBLE_RUNNING 2 -#define EXIT_BAD_TEST 3 -#define EXIT_BAD_INPUT 4 - -#include -#include -#include -#include -#include -#include -#include - -#ifdef _MSC_VER -#define popen _popen -#define pclose _pclose -#endif - -#ifdef _MSC_VER -#define DEFAULT_COMPILER "cl" -/* Note: Dash options avoid POSIX path conversion when used under msys bash - * and are therefore preferred to slash (e.g. -nologo over /nologo) - * Note: Disable Warning 4200 "nonstandard extension used : zero-sized array - * in struct/union" for flexible array members. - */ -#define DEFAULT_FLAGS "-nologo -Zi -W4 -wd4200 " \ - "-D_CRT_NONSTDC_NO_WARNINGS -D_CRT_SECURE_NO_WARNINGS" -#define DEFAULT_OUTPUT_EXE_FLAG "-Fe:" -#else -#define DEFAULT_COMPILER "cc" -#define DEFAULT_FLAGS "-g3 -ggdb -Wall -Wundef -Wmissing-prototypes -Wmissing-declarations -Wstrict-prototypes -Wold-style-definition" -#define DEFAULT_OUTPUT_EXE_FLAG "-o" -#endif - -#define OUTPUT_FILE "configurator.out" -#define INPUT_FILE "configuratortest.c" - -#ifdef _WIN32 -#define DIR_SEP "\\" -#else -#define DIR_SEP "/" -#endif - -static const char *progname = ""; -static int verbose; -static bool like_a_libtool = false; - -struct test { - const char *name; - const char *desc; - /* - * Template style flags (pick one): - * OUTSIDE_MAIN: - * - put a simple boilerplate main below it. - * DEFINES_FUNC: - * - defines a static function called func; adds ref to avoid warnings - * INSIDE_MAIN: - * - put this inside main(). - * DEFINES_EVERYTHING: - * - don't add any boilerplate at all. - * - * Execution flags: - * EXECUTE: - * - a runtime test; must compile, exit 0 means flag is set. - * MAY_NOT_COMPILE: - * - Only useful with EXECUTE: don't get upset if it doesn't compile. - * : - * - a compile test, if it compiles must run and exit 0. - */ - const char *style; - const char *depends; - const char *link; - const char *fragment; - const char *flags; - const char *overrides; /* On success, force this to '1' */ - bool done; - bool answer; -}; - -/* Terminated by a NULL name */ -static struct test *tests; - -static const struct test base_tests[] = { - { "HAVE_UNALIGNED_ACCESS", "unaligned access to int", - "DEFINES_EVERYTHING|EXECUTE", NULL, NULL, - "#include \n" - "int main(int argc, char *argv[]) {\n" - " (void)argc;\n" - " char pad[sizeof(int *) * 1];\n" - " memcpy(pad, argv[0], sizeof(pad));\n" - " int *x = (int *)pad, *y = (int *)(pad + 1);\n" - " return *x == *y;\n" - "}\n" }, - { "HAVE_TYPEOF", "__typeof__ support", - "INSIDE_MAIN", NULL, NULL, - "__typeof__(argc) i; i = argc; return i == argc ? 0 : 1;" }, - { "HAVE_BIG_ENDIAN", "big endian", - "INSIDE_MAIN|EXECUTE", NULL, NULL, - "union { int i; char c[sizeof(int)]; } u;\n" - "u.i = 0x01020304;\n" - "return u.c[0] == 0x01 && u.c[1] == 0x02 && u.c[2] == 0x03 && u.c[3] == 0x04 ? 0 : 1;" }, - { "HAVE_BYTESWAP_H", "", - "OUTSIDE_MAIN", NULL, NULL, - "#include \n" }, - { "HAVE_BSWAP_64", "bswap64 in byteswap.h", - "DEFINES_FUNC", "HAVE_BYTESWAP_H", NULL, - "#include \n" - "static int func(int x) { return bswap_64(x); }" }, - { "HAVE_LITTLE_ENDIAN", "little endian", - "INSIDE_MAIN|EXECUTE", NULL, NULL, - "union { int i; char c[sizeof(int)]; } u;\n" - "u.i = 0x01020304;\n" - "return u.c[0] == 0x04 && u.c[1] == 0x03 && u.c[2] == 0x02 && u.c[3] == 0x01 ? 0 : 1;" }, - /* - { "HAVE_32BIT_OFF_T", "off_t is 32 bits", - "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, - "#include \n" - "int main(void) {\n" - " return sizeof(off_t) == 4 ? 0 : 1;\n" - "}\n" }, - { "HAVE_ALIGNOF", "__alignof__ support", - "INSIDE_MAIN", NULL, NULL, - "return __alignof__(double) > 0 ? 0 : 1;" }, - { "HAVE_ASPRINTF", "asprintf() declaration", - "DEFINES_FUNC", NULL, NULL, - "#ifndef _GNU_SOURCE\n" - "#define _GNU_SOURCE\n" - "#endif\n" - "#include \n" - "static char *func(int x) {" - " char *p;\n" - " if (asprintf(&p, \"%u\", x) == -1) \n" - " p = NULL;\n" - " return p;\n" - "}" }, - { "HAVE_ATTRIBUTE_COLD", "__attribute__((cold)) support", - "DEFINES_FUNC", NULL, NULL, - "static int __attribute__((cold)) func(int x) { return x; }" }, - { "HAVE_ATTRIBUTE_CONST", "__attribute__((const)) support", - "DEFINES_FUNC", NULL, NULL, - "static int __attribute__((const)) func(int x) { return x; }" }, - { "HAVE_ATTRIBUTE_DEPRECATED", "__attribute__((deprecated)) support", - "DEFINES_FUNC", NULL, NULL, - "static int __attribute__((deprecated)) func(int x) { return x; }" }, - { "HAVE_ATTRIBUTE_NONNULL", "__attribute__((nonnull)) support", - "DEFINES_FUNC", NULL, NULL, - "static char *__attribute__((nonnull)) func(char *p) { return p; }" }, - { "HAVE_ATTRIBUTE_RETURNS_NONNULL", "__attribute__((returns_nonnull)) support", - "DEFINES_FUNC", NULL, NULL, - "static const char *__attribute__((returns_nonnull)) func(void) { return \"hi\"; }" }, - { "HAVE_ATTRIBUTE_SENTINEL", "__attribute__((sentinel)) support", - "DEFINES_FUNC", NULL, NULL, - "static int __attribute__((sentinel)) func(int i, ...) { return i; }" }, - { "HAVE_ATTRIBUTE_PURE", "__attribute__((pure)) support", - "DEFINES_FUNC", NULL, NULL, - "static int __attribute__((pure)) func(int x) { return x; }" }, - { "HAVE_ATTRIBUTE_MAY_ALIAS", "__attribute__((may_alias)) support", - "OUTSIDE_MAIN", NULL, NULL, - "typedef short __attribute__((__may_alias__)) short_a;" }, - { "HAVE_ATTRIBUTE_NORETURN", "__attribute__((noreturn)) support", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "static void __attribute__((noreturn)) func(int x) { exit(x); }" }, - { "HAVE_ATTRIBUTE_PRINTF", "__attribute__ format printf support", - "DEFINES_FUNC", NULL, NULL, - "static void __attribute__((format(__printf__, 1, 2))) func(const char *fmt, ...) { (void)fmt; }" }, - { "HAVE_ATTRIBUTE_UNUSED", "__attribute__((unused)) support", - "OUTSIDE_MAIN", NULL, NULL, - "static int __attribute__((unused)) func(int x) { return x; }" }, - { "HAVE_ATTRIBUTE_USED", "__attribute__((used)) support", - "OUTSIDE_MAIN", NULL, NULL, - "static int __attribute__((used)) func(int x) { return x; }" }, - { "HAVE_BACKTRACE", "backtrace() in ", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "static int func(int x) {" - " void *bt[10];\n" - " return backtrace(bt, 10) < x;\n" - "}" }, - { "HAVE_BUILTIN_CHOOSE_EXPR", "__builtin_choose_expr support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_choose_expr(1, 0, \"garbage\");" }, - { "HAVE_BUILTIN_CLZ", "__builtin_clz support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_clz(1) == (sizeof(int)*8 - 1) ? 0 : 1;" }, - { "HAVE_BUILTIN_CLZL", "__builtin_clzl support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_clzl(1) == (sizeof(long)*8 - 1) ? 0 : 1;" }, - { "HAVE_BUILTIN_CLZLL", "__builtin_clzll support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_clzll(1) == (sizeof(long long)*8 - 1) ? 0 : 1;" }, - { "HAVE_BUILTIN_CTZ", "__builtin_ctz support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_ctz(1 << (sizeof(int)*8 - 1)) == (sizeof(int)*8 - 1) ? 0 : 1;" }, - { "HAVE_BUILTIN_CTZL", "__builtin_ctzl support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_ctzl(1UL << (sizeof(long)*8 - 1)) == (sizeof(long)*8 - 1) ? 0 : 1;" }, - { "HAVE_BUILTIN_CTZLL", "__builtin_ctzll support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_ctzll(1ULL << (sizeof(long long)*8 - 1)) == (sizeof(long long)*8 - 1) ? 0 : 1;" }, - { "HAVE_BUILTIN_CONSTANT_P", "__builtin_constant_p support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_constant_p(1) ? 0 : 1;" }, - { "HAVE_BUILTIN_EXPECT", "__builtin_expect support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_expect(argc == 1, 1) ? 0 : 1;" }, - { "HAVE_BUILTIN_FFS", "__builtin_ffs support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_ffs(0) == 0 ? 0 : 1;" }, - { "HAVE_BUILTIN_FFSL", "__builtin_ffsl support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_ffsl(0L) == 0 ? 0 : 1;" }, - { "HAVE_BUILTIN_FFSLL", "__builtin_ffsll support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_ffsll(0LL) == 0 ? 0 : 1;" }, - { "HAVE_BUILTIN_POPCOUNT", "__builtin_popcount support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_popcount(255) == 8 ? 0 : 1;" }, - { "HAVE_BUILTIN_POPCOUNTL", "__builtin_popcountl support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_popcountl(255L) == 8 ? 0 : 1;" }, - { "HAVE_BUILTIN_POPCOUNTLL", "__builtin_popcountll support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_popcountll(255LL) == 8 ? 0 : 1;" }, - { "HAVE_BUILTIN_TYPES_COMPATIBLE_P", "__builtin_types_compatible_p support", - "INSIDE_MAIN", NULL, NULL, - "return __builtin_types_compatible_p(char *, int) ? 1 : 0;" }, - { "HAVE_ICCARM_INTRINSICS", "", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "int func(int v) {\n" - " return __CLZ(__RBIT(v));\n" - "}" }, - { "HAVE_CLOCK_GETTIME", "clock_gettime() declaration", - "DEFINES_FUNC", "HAVE_STRUCT_TIMESPEC", NULL, - "#include \n" - "static struct timespec func(void) {\n" - " struct timespec ts;\n" - " clock_gettime(CLOCK_REALTIME, &ts);\n" - " return ts;\n" - "}\n" }, - { "HAVE_CLOCK_GETTIME_IN_LIBRT", "clock_gettime() in librt", - "DEFINES_FUNC", - "HAVE_STRUCT_TIMESPEC !HAVE_CLOCK_GETTIME", - "-lrt", - "#include \n" - "static struct timespec func(void) {\n" - " struct timespec ts;\n" - " clock_gettime(CLOCK_REALTIME, &ts);\n" - " return ts;\n" - "}\n", - "HAVE_CLOCK_GETTIME" }, - { "HAVE_COMPOUND_LITERALS", "compound literal support", - "INSIDE_MAIN", NULL, NULL, - "int *foo = (int[]) { 1, 2, 3, 4 };\n" - "return foo[0] ? 0 : 1;" }, - { "HAVE_FCHDIR", "fchdir support", - "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, - "#include \n" - "#include \n" - "#include \n" - "#include \n" - "int main(void) {\n" - " int fd = open(\"..\", O_RDONLY);\n" - " return fchdir(fd) == 0 ? 0 : 1;\n" - "}\n" }, - { "HAVE_ERR_H", "", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "static void func(int arg) {\n" - " if (arg == 0)\n" - " err(1, \"err %u\", arg);\n" - " if (arg == 1)\n" - " errx(1, \"err %u\", arg);\n" - " if (arg == 3)\n" - " warn(\"warn %u\", arg);\n" - " if (arg == 4)\n" - " warnx(\"warn %u\", arg);\n" - "}\n" }, - { "HAVE_FILE_OFFSET_BITS", "_FILE_OFFSET_BITS to get 64-bit offsets", - "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", - "HAVE_32BIT_OFF_T", NULL, - "#define _FILE_OFFSET_BITS 64\n" - "#include \n" - "int main(void) {\n" - " return sizeof(off_t) == 8 ? 0 : 1;\n" - "}\n" }, - { "HAVE_FOR_LOOP_DECLARATION", "for loop declaration support", - "INSIDE_MAIN", NULL, NULL, - "int ret = 1;\n" - "for (int i = 0; i < argc; i++) { ret = 0; };\n" - "return ret;" }, - { "HAVE_FLEXIBLE_ARRAY_MEMBER", "flexible array member support", - "OUTSIDE_MAIN", NULL, NULL, - "struct foo { unsigned int x; int arr[]; };" }, - { "HAVE_GETPAGESIZE", "getpagesize() in ", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "static int func(void) { return getpagesize(); }" }, - { "HAVE_ISBLANK", "isblank() in ", - "DEFINES_FUNC", NULL, NULL, - "#ifndef _GNU_SOURCE\n" - "#define _GNU_SOURCE\n" - "#endif\n" - "#include \n" - "static int func(void) { return isblank(' '); }" }, - { "HAVE_MEMMEM", "memmem in ", - "DEFINES_FUNC", NULL, NULL, - "#ifndef _GNU_SOURCE\n" - "#define _GNU_SOURCE\n" - "#endif\n" - "#include \n" - "static void *func(void *h, size_t hl, void *n, size_t nl) {\n" - "return memmem(h, hl, n, nl);" - "}\n", }, - { "HAVE_MEMRCHR", "memrchr in ", - "DEFINES_FUNC", NULL, NULL, - "#ifndef _GNU_SOURCE\n" - "#define _GNU_SOURCE\n" - "#endif\n" - "#include \n" - "static void *func(void *s, int c, size_t n) {\n" - "return memrchr(s, c, n);" - "}\n", }, - { "HAVE_MMAP", "mmap() declaration", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "static void *func(int fd) {\n" - " return mmap(0, 65536, PROT_READ, MAP_SHARED, fd, 0);\n" - "}" }, - { "HAVE_PROC_SELF_MAPS", "/proc/self/maps exists", - "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, - "#include \n" - "#include \n" - "#include \n" - "int main(void) {\n" - " return open(\"/proc/self/maps\", O_RDONLY) != -1 ? 0 : 1;\n" - "}\n" }, - { "HAVE_QSORT_R_PRIVATE_LAST", "qsort_r cmp takes trailing arg", - "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, - "#ifndef _GNU_SOURCE\n" - "#define _GNU_SOURCE\n" - "#endif\n" - "#include \n" - "static int cmp(const void *lp, const void *rp, void *priv) {\n" - " *(unsigned int *)priv = 1;\n" - " return *(const int *)lp - *(const int *)rp; }\n" - "int main(void) {\n" - " int array[] = { 9, 2, 5 };\n" - " unsigned int called = 0;\n" - " qsort_r(array, 3, sizeof(int), cmp, &called);\n" - " return called && array[0] == 2 && array[1] == 5 && array[2] == 9 ? 0 : 1;\n" - "}\n" }, - { "HAVE_STRUCT_TIMESPEC", "struct timespec declaration", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "static void func(void) {\n" - " struct timespec ts;\n" - " ts.tv_sec = ts.tv_nsec = 1;\n" - "}\n" }, - { "HAVE_SECTION_START_STOP", "__attribute__((section)) and __start/__stop", - "DEFINES_FUNC", NULL, NULL, - "static void *__attribute__((__section__(\"mysec\"))) p = &p;\n" - "static int func(void) {\n" - " extern void *__start_mysec[], *__stop_mysec[];\n" - " return __stop_mysec - __start_mysec;\n" - "}\n" }, - { "HAVE_STACK_GROWS_UPWARDS", "stack grows upwards", - "DEFINES_EVERYTHING|EXECUTE", NULL, NULL, - "#include \n" - "static ptrdiff_t nest(const void *base, unsigned int i)\n" - "{\n" - " if (i == 0)\n" - " return (const char *)&i - (const char *)base;\n" - " return nest(base, i-1);\n" - "}\n" - "int main(int argc, char *argv[]) {\n" - " (void)argv;\n" - " return (nest(&argc, argc) > 0) ? 0 : 1;\n" - "}\n" }, - { "HAVE_STATEMENT_EXPR", "statement expression support", - "INSIDE_MAIN", NULL, NULL, - "return ({ int x = argc; x == argc ? 0 : 1; });" }, - { "HAVE_SYS_FILIO_H", "", - "OUTSIDE_MAIN", NULL, NULL, - "#include \n" }, - { "HAVE_SYS_TERMIOS_H", "", - "OUTSIDE_MAIN", NULL, NULL, - "#include \n" }, - { "HAVE_SYS_UNISTD_H", "", - "OUTSIDE_MAIN", NULL, NULL, - "#include \n" }, - { "HAVE_UTIME", "utime() declaration", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "#include \n" - "static int func(const char *filename) {\n" - " struct utimbuf times = { 0 };\n" - " return utime(filename, ×);\n" - "}" }, - { "HAVE_WARN_UNUSED_RESULT", "__attribute__((warn_unused_result))", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "#include \n" - "static __attribute__((warn_unused_result)) int func(int i) {\n" - " return i + 1;\n" - "}" }, - { "HAVE_OPENMP", "#pragma omp and -fopenmp support", - "INSIDE_MAIN|EXECUTE|MAY_NOT_COMPILE", NULL, NULL, - "int i;\n" - "#pragma omp parallel for\n" - "for(i = 0; i < 0; i++) {};\n" - "return 0;\n", - "-Werror -fopenmp" }, - { "HAVE_VALGRIND_MEMCHECK_H", "", - "OUTSIDE_MAIN", NULL, NULL, - "#include \n" }, - { "HAVE_UCONTEXT", "working \n" - "static int x = 0;\n" - "static char stack[2048];\n" - "static ucontext_t a, b;\n" - "static void fn(void) {\n" - " x |= 2;\n" - " setcontext(&b);\n" - " x |= 4;\n" - "}\n" - "int main(void) {\n" - " x |= 1;\n" - " getcontext(&a);\n" - " a.uc_stack.ss_sp = stack;\n" - " a.uc_stack.ss_size = sizeof(stack);\n" - " makecontext(&a, fn, 0);\n" - " swapcontext(&b, &a);\n" - " return (x == 3) ? 0 : 1;\n" - "}\n" - }, - { "HAVE_POINTER_SAFE_MAKECONTEXT", "passing pointers via makecontext()", - "DEFINES_EVERYTHING|EXECUTE|MAY_NOT_COMPILE", - "HAVE_UCONTEXT", NULL, - "#include \n" - "#include \n" - "static int worked = 0;\n" - "static char stack[1024];\n" - "static ucontext_t a, b;\n" - "static void fn(void *p, void *q) {\n" - " void *cp = &worked;\n" - " void *cq = (void *)(~((ptrdiff_t)cp));\n" - " if ((p == cp) && (q == cq))\n" - " worked = 1;\n" - " setcontext(&b);\n" - "}\n" - "int main(void) {\n" - " void *ap = &worked;\n" - " void *aq = (void *)(~((ptrdiff_t)ap));\n" - " getcontext(&a);\n" - " a.uc_stack.ss_sp = stack;\n" - " a.uc_stack.ss_size = sizeof(stack);\n" - " makecontext(&a, (void (*)(void))fn, 2, ap, aq);\n" - " swapcontext(&b, &a);\n" - " return worked ? 0 : 1;\n" - "}\n" - }, - { "HAVE_BUILTIN_CPU_SUPPORTS", "__builtin_cpu_supports()", - "DEFINES_FUNC", NULL, NULL, - "#include \n" - "static bool func(void) {\n" - " return __builtin_cpu_supports(\"mmx\");\n" - "}" - }, - { "HAVE_CLOSEFROM", "closefrom() offered by system", - "DEFINES_EVERYTHING", NULL, NULL, - "#include \n" - "#include \n" - "int main(void) {\n" - " closefrom(STDERR_FILENO + 1);\n" - " return 0;\n" - "}\n" - }, - { "HAVE_F_CLOSEM", "F_CLOSEM defined for fctnl.", - "DEFINES_EVERYTHING", NULL, NULL, - "#include \n" - "#include \n" - "int main(void) {\n" - " int res = fcntl(STDERR_FILENO + 1, F_CLOSEM, 0);\n" - " return res < 0;\n" - "}\n" - }, - { "HAVE_NR_CLOSE_RANGE", "close_range syscall available as __NR_close_range.", - "DEFINES_EVERYTHING", NULL, NULL, - "#include \n" - "#include \n" - "#include \n" - "int main(void) {\n" - " int res = syscall(__NR_close_range, STDERR_FILENO + 1, INT_MAX, 0);\n" - " return res < 0;\n" - "}\n" - }, - { "HAVE_F_MAXFD", "F_MAXFD defined for fcntl.", - "DEFINES_EVERYTHING", NULL, NULL, - "#include \n" - "#include \n" - "int main(void) {\n" - " int res = fcntl(0, F_MAXFD);\n" - " return res < 0;\n" - "}\n" - }, - */ -}; - -static void c12r_err(int eval, const char *fmt, ...) -{ - int err_errno = errno; - va_list ap; - - fprintf(stderr, "%s: ", progname); - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); - fprintf(stderr, ": %s\n", strerror(err_errno)); - exit(eval); -} - -static void c12r_errx(int eval, const char *fmt, ...) -{ - va_list ap; - - fprintf(stderr, "%s: ", progname); - va_start(ap, fmt); - vfprintf(stderr, fmt, ap); - va_end(ap); - fprintf(stderr, "\n"); - exit(eval); -} - -static void start_test(const char *what, const char *why) -{ - if (like_a_libtool) { - printf("%s%s... ", what, why); - fflush(stdout); - } -} - -static void end_test(bool result) -{ - if (like_a_libtool) - printf("%s\n", result ? "yes" : "no"); -} - -static size_t fcopy(FILE *fsrc, FILE *fdst) -{ - char buffer[BUFSIZ]; - size_t rsize, wsize; - size_t copied = 0; - - while ((rsize = fread(buffer, 1, BUFSIZ, fsrc)) > 0) { - wsize = fwrite(buffer, 1, rsize, fdst); - copied += wsize; - if (wsize != rsize) - break; - } - - return copied; -} - -static char *grab_stream(FILE *file) -{ - size_t max, ret, size = 0; - char *buffer; - - max = BUFSIZ; - buffer = malloc(max); - while ((ret = fread(buffer+size, 1, max - size, file)) == max - size) { - size += ret; - buffer = realloc(buffer, max *= 2); - } - size += ret; - if (ferror(file)) - c12r_err(EXIT_TROUBLE_RUNNING, "reading from command"); - buffer[size] = '\0'; - return buffer; -} - -static char *run(const char *cmd, int *exitstatus) -{ - static const char redir[] = " 2>&1"; - size_t cmdlen; - char *cmdredir; - FILE *cmdout; - char *ret; - - cmdlen = strlen(cmd); - cmdredir = malloc(cmdlen + sizeof(redir)); - memcpy(cmdredir, cmd, cmdlen); - memcpy(cmdredir + cmdlen, redir, sizeof(redir)); - - cmdout = popen(cmdredir, "r"); - if (!cmdout) - c12r_err(EXIT_TROUBLE_RUNNING, "popen \"%s\"", cmdredir); - - free(cmdredir); - - ret = grab_stream(cmdout); - *exitstatus = pclose(cmdout); - return ret; -} - -static char *connect_args(const char *argv[], const char *outflag, - const char *files) -{ - unsigned int i; - char *ret; - size_t len = strlen(outflag) + strlen(files) + 1; - - for (i = 1; argv[i]; i++) - len += 1 + strlen(argv[i]); - - ret = malloc(len); - len = 0; - for (i = 1; argv[i]; i++) { - strcpy(ret + len, argv[i]); - len += strlen(argv[i]); - if (argv[i+1] || *outflag) - ret[len++] = ' '; - } - strcpy(ret + len, outflag); - len += strlen(outflag); - strcpy(ret + len, files); - return ret; -} - -static struct test *find_test(const char *name) -{ - unsigned int i; - - for (i = 0; tests[i].name; i++) { - if (strcmp(tests[i].name, name) == 0) - return &tests[i]; - } - c12r_errx(EXIT_BAD_TEST, "Unknown test %s", name); - abort(); -} - -#define PRE_BOILERPLATE "/* Test program generated by configurator. */\n" -#define MAIN_START_BOILERPLATE \ - "int main(int argc, char *argv[]) {\n" \ - " (void)argc;\n" \ - " (void)argv;\n" -#define USE_FUNC_BOILERPLATE "(void)func;\n" -#define MAIN_BODY_BOILERPLATE "return 0;\n" -#define MAIN_END_BOILERPLATE "}\n" - -static bool run_test(const char *cmd, const char *wrapper, struct test *test) -{ - char *output, *newcmd; - FILE *outf; - int status; - - if (test->done) - return test->answer; - - if (test->depends) { - size_t len; - const char *deps = test->depends; - char *dep; - - /* Space-separated dependencies, could be ! for inverse. */ - while ((len = strcspn(deps, " ")) != 0) { - bool positive = true; - if (deps[len]) { - dep = strdup(deps); - dep[len] = '\0'; - } else { - dep = (char *)deps; - } - - if (dep[0] == '!') { - dep++; - positive = false; - } - if (run_test(cmd, wrapper, find_test(dep)) != positive) { - test->answer = false; - test->done = true; - return test->answer; - } - if (deps[len]) - free(dep); - - deps += len; - deps += strspn(deps, " "); - } - } - - outf = fopen(INPUT_FILE, verbose > 1 ? "w+" : "w"); - if (!outf) - c12r_err(EXIT_TROUBLE_RUNNING, "creating %s", INPUT_FILE); - - fprintf(outf, "%s", PRE_BOILERPLATE); - - if (strstr(test->style, "INSIDE_MAIN")) { - fprintf(outf, "%s", MAIN_START_BOILERPLATE); - fprintf(outf, "%s", test->fragment); - fprintf(outf, "%s", MAIN_END_BOILERPLATE); - } else if (strstr(test->style, "OUTSIDE_MAIN")) { - fprintf(outf, "%s", test->fragment); - fprintf(outf, "%s", MAIN_START_BOILERPLATE); - fprintf(outf, "%s", MAIN_BODY_BOILERPLATE); - fprintf(outf, "%s", MAIN_END_BOILERPLATE); - } else if (strstr(test->style, "DEFINES_FUNC")) { - fprintf(outf, "%s", test->fragment); - fprintf(outf, "%s", MAIN_START_BOILERPLATE); - fprintf(outf, "%s", USE_FUNC_BOILERPLATE); - fprintf(outf, "%s", MAIN_BODY_BOILERPLATE); - fprintf(outf, "%s", MAIN_END_BOILERPLATE); - } else if (strstr(test->style, "DEFINES_EVERYTHING")) { - fprintf(outf, "%s", test->fragment); - } else - c12r_errx(EXIT_BAD_TEST, "Unknown style for test %s: %s", - test->name, test->style); - - if (verbose > 1) { - fseek(outf, 0, SEEK_SET); - fcopy(outf, stdout); - } - - fclose(outf); - - newcmd = strdup(cmd); - - if (test->flags) { - newcmd = realloc(newcmd, strlen(newcmd) + strlen(" ") - + strlen(test->flags) + 1); - strcat(newcmd, " "); - strcat(newcmd, test->flags); - if (verbose > 1) - printf("Extra flags line: %s", newcmd); - } - - if (test->link) { - newcmd = realloc(newcmd, strlen(newcmd) + strlen(" ") - + strlen(test->link) + 1); - strcat(newcmd, " "); - strcat(newcmd, test->link); - if (verbose > 1) - printf("Extra link line: %s", newcmd); - } - - start_test("checking for ", test->desc); - output = run(newcmd, &status); - - free(newcmd); - - if (status != 0 || strstr(output, "warning")) { - if (verbose) - printf("Compile %s for %s, status %i: %s\n", - status ? "fail" : "warning", - test->name, status, output); - if (strstr(test->style, "EXECUTE") - && !strstr(test->style, "MAY_NOT_COMPILE")) - c12r_errx(EXIT_BAD_TEST, - "Test for %s did not compile:\n%s", - test->name, output); - test->answer = false; - free(output); - } else { - /* Compile succeeded. */ - free(output); - /* We run INSIDE_MAIN tests for sanity checking. */ - if (strstr(test->style, "EXECUTE") - || strstr(test->style, "INSIDE_MAIN")) { - char *cmd = malloc(strlen(wrapper) + strlen(" ." DIR_SEP OUTPUT_FILE) + 1); - - strcpy(cmd, wrapper); - strcat(cmd, " ." DIR_SEP OUTPUT_FILE); - output = run(cmd, &status); - free(cmd); - if (!strstr(test->style, "EXECUTE") && status != 0) - c12r_errx(EXIT_BAD_TEST, - "Test for %s failed with %i:\n%s", - test->name, status, output); - if (verbose && status) - printf("%s exited %i\n", test->name, status); - free(output); - } - test->answer = (status == 0); - } - test->done = true; - end_test(test->answer); - - if (test->answer && test->overrides) { - struct test *override = find_test(test->overrides); - override->done = true; - override->answer = true; - } - return test->answer; -} - -static char *any_field(char **fieldname) -{ - char buf[1000]; - for (;;) { - char *p, *eq; - - if (!fgets(buf, sizeof(buf), stdin)) - return NULL; - - p = buf; - /* Ignore whitespace, lines starting with # */ - while (*p == ' ' || *p == '\t') - p++; - if (*p == '#' || *p == '\n') - continue; - - eq = strchr(p, '='); - if (!eq) - c12r_errx(EXIT_BAD_INPUT, "no = in line: %s", p); - *eq = '\0'; - *fieldname = strdup(p); - p = eq + 1; - if (strlen(p) && p[strlen(p)-1] == '\n') - p[strlen(p)-1] = '\0'; - return strdup(p); - } -} - -static char *read_field(const char *name, bool compulsory) -{ - char *fieldname, *value; - - value = any_field(&fieldname); - if (!value) { - if (!compulsory) - return NULL; - c12r_errx(EXIT_BAD_INPUT, "Could not read field %s", name); - } - if (strcmp(fieldname, name) != 0) - c12r_errx(EXIT_BAD_INPUT, - "Expected field %s not %s", name, fieldname); - return value; -} - -/* Test descriptions from stdin: - * Lines starting with # or whitespace-only are ignored. - * - * First three non-ignored lines must be: - * var= - * desc= - * style=OUTSIDE_MAIN DEFINES_FUNC INSIDE_MAIN DEFINES_EVERYTHING EXECUTE MAY_NOT_COMPILE - * - * Followed by optional lines: - * depends= - * link= - * flags= - * overrides= - * - * Finally a code line, either: - * code= OR - * code= - * - * - * - * And looks like this next comment: */ -/*END*/ -static bool read_test(struct test *test) -{ - char *field, *value; - char buf[1000]; - - memset(test, 0, sizeof(*test)); - test->name = read_field("var", false); - if (!test->name) - return false; - test->desc = read_field("desc", true); - test->style = read_field("style", true); - /* Read any optional fields. */ - while ((value = any_field(&field)) != NULL) { - if (strcmp(field, "depends") == 0) - test->depends = value; - else if (strcmp(field, "link") == 0) - test->link = value; - else if (strcmp(field, "flags") == 0) - test->flags = value; - else if (strcmp(field, "overrides") == 0) - test->overrides = value; - else if (strcmp(field, "code") == 0) - break; - else - c12r_errx(EXIT_BAD_INPUT, "Unknown field %s in %s", - field, test->name); - } - if (!value) - c12r_errx(EXIT_BAD_INPUT, "Missing code in %s", test->name); - - if (strlen(value) == 0) { - /* Multiline program, read to END comment */ - while (fgets(buf, sizeof(buf), stdin) != 0) { - size_t n; - if (strncmp(buf, "/*END*/", 7) == 0) - break; - n = strlen(value); - value = realloc(value, n + strlen(buf) + 1); - strcpy(value + n, buf); - n += strlen(buf); - } - } - test->fragment = value; - return true; -} - -static void read_tests(size_t num_tests) -{ - while (read_test(tests + num_tests)) { - num_tests++; - tests = realloc(tests, (num_tests + 1) * sizeof(tests[0])); - tests[num_tests].name = NULL; - } -} - -int main(int argc, const char *argv[]) -{ - char *cmd; - unsigned int i; - const char *default_args[] - = { "", DEFAULT_COMPILER, DEFAULT_FLAGS, NULL }; - const char *outflag = DEFAULT_OUTPUT_EXE_FLAG; - const char *configurator_cc = NULL; - const char *wrapper = ""; - const char *orig_cc; - const char *varfile = NULL; - const char *headerfile = NULL; - bool extra_tests = false; - FILE *outf; - - if (argc > 0) - progname = argv[0]; - - while (argc > 1) { - if (strcmp(argv[1], "--help") == 0) { - printf("Usage: configurator [-v] [--var-file=] [-O] [--configurator-cc=] [--wrapper=] [--autotools-style] [--extra-tests] [ ...]\n" - " will have \" \" appended\n" - "Default: %s %s %s\n", - DEFAULT_COMPILER, DEFAULT_FLAGS, - DEFAULT_OUTPUT_EXE_FLAG); - exit(0); - } - if (strncmp(argv[1], "-O", 2) == 0) { - argc--; - argv++; - outflag = argv[1] + 2; - if (!*outflag) { - fprintf(stderr, - "%s: option requires an argument -- O\n", - argv[0]); - exit(EXIT_BAD_USAGE); - } - } else if (strcmp(argv[1], "-v") == 0) { - argc--; - argv++; - verbose++; - } else if (strcmp(argv[1], "-vv") == 0) { - argc--; - argv++; - verbose += 2; - } else if (strncmp(argv[1], "--configurator-cc=", 18) == 0) { - configurator_cc = argv[1] + 18; - argc--; - argv++; - } else if (strncmp(argv[1], "--wrapper=", 10) == 0) { - wrapper = argv[1] + 10; - argc--; - argv++; - } else if (strncmp(argv[1], "--var-file=", 11) == 0) { - varfile = argv[1] + 11; - argc--; - argv++; - } else if (strcmp(argv[1], "--autotools-style") == 0) { - like_a_libtool = true; - argc--; - argv++; - } else if (strncmp(argv[1], "--header-file=", 14) == 0) { - headerfile = argv[1] + 14; - argc--; - argv++; - } else if (strcmp(argv[1], "--extra-tests") == 0) { - extra_tests = true; - argc--; - argv++; - } else if (strcmp(argv[1], "--") == 0) { - break; - } else if (argv[1][0] == '-') { - c12r_errx(EXIT_BAD_USAGE, "Unknown option %s", argv[1]); - } else { - break; - } - } - - if (argc == 1) - argv = default_args; - - /* Copy with NULL entry at end */ - tests = calloc(sizeof(base_tests)/sizeof(base_tests[0]) + 1, - sizeof(base_tests[0])); - memcpy(tests, base_tests, sizeof(base_tests)); - - if (extra_tests) - read_tests(sizeof(base_tests)/sizeof(base_tests[0])); - - orig_cc = argv[1]; - if (configurator_cc) - argv[1] = configurator_cc; - - cmd = connect_args(argv, outflag, OUTPUT_FILE " " INPUT_FILE); - if (like_a_libtool) { - start_test("Making autoconf users comfortable", ""); - sleep(1); - end_test(1); - } - for (i = 0; tests[i].name; i++) - run_test(cmd, wrapper, &tests[i]); - free(cmd); - - remove(OUTPUT_FILE); - remove(INPUT_FILE); - - if (varfile) { - FILE *vars; - - if (strcmp(varfile, "-") == 0) - vars = stdout; - else { - start_test("Writing variables to ", varfile); - vars = fopen(varfile, "a"); - if (!vars) - c12r_err(EXIT_TROUBLE_RUNNING, - "Could not open %s", varfile); - } - for (i = 0; tests[i].name; i++) - fprintf(vars, "%s=%u\n", tests[i].name, tests[i].answer); - if (vars != stdout) { - if (fclose(vars) != 0) - c12r_err(EXIT_TROUBLE_RUNNING, - "Closing %s", varfile); - end_test(1); - } - } - - if (headerfile) { - start_test("Writing header to ", headerfile); - outf = fopen(headerfile, "w"); - if (!outf) - c12r_err(EXIT_TROUBLE_RUNNING, - "Could not open %s", headerfile); - } else - outf = stdout; - - fprintf(outf, "/* Generated by CCAN configurator */\n" - "#ifndef CCAN_CONFIG_H\n" - "#define CCAN_CONFIG_H\n"); - fprintf(outf, "#ifndef _GNU_SOURCE\n"); - fprintf(outf, "#define _GNU_SOURCE /* Always use GNU extensions. */\n"); - fprintf(outf, "#endif\n"); - fprintf(outf, "#define CCAN_COMPILER \"%s\"\n", orig_cc); - cmd = connect_args(argv + 1, "", ""); - fprintf(outf, "#define CCAN_CFLAGS \"%s\"\n", cmd); - free(cmd); - fprintf(outf, "#define CCAN_OUTPUT_EXE_CFLAG \"%s\"\n\n", outflag); - /* This one implies "#include Date: Mon, 26 Feb 2024 15:42:02 -0800 Subject: [PATCH 140/146] optimized id matching function doesn't need to create a copy of the id Signed-off-by: William Casarin --- damus/Util/InsertSort.swift | 2 +- nostrdb/NdbNote.swift | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/damus/Util/InsertSort.swift b/damus/Util/InsertSort.swift index 46aed63c7..869e5230a 100644 --- a/damus/Util/InsertSort.swift +++ b/damus/Util/InsertSort.swift @@ -59,7 +59,7 @@ func insert_uniq_sorted_event(events: inout [NostrEvent], new_ev: NostrEvent, cm for event in events { // don't insert duplicate events - if new_ev.id == event.id { + if new_ev.id_matches(other: event) { return false } diff --git a/nostrdb/NdbNote.swift b/nostrdb/NdbNote.swift index 9c0f7f8a3..130c83240 100644 --- a/nostrdb/NdbNote.swift +++ b/nostrdb/NdbNote.swift @@ -100,6 +100,14 @@ class NdbNote: Encodable, Equatable, Hashable { var id: NoteId { .init(Data(bytes: ndb_note_id(note), count: 32)) } + + var raw_note_id: UnsafeMutablePointer { + ndb_note_id(note.ptr) + } + + func id_matches(other: NdbNote) -> Bool { + memcmp(self.raw_note_id, other.raw_note_id, 32) == 0 + } var sig: Signature { .init(Data(bytes: ndb_note_sig(note), count: 64)) From 4ba8c8ef0693318fa800be88f5d17fe42f4a3f45 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 1 Feb 2024 17:26:57 -0800 Subject: [PATCH 141/146] Switch over to use use blocks from nostrdb This is still kind of broken until queries are switched over to nostrdb. Will do this next Signed-off-by: William Casarin --- .../NotificationFormatter.swift | 2 +- .../NotificationService.swift | 2 +- TODO | 1 + damus-c/wasm.c | 46 ++-- damus-c/wasm.h | 2 + damus.xcodeproj/project.pbxproj | 58 ++++- damus/Components/InvoiceView.swift | 2 +- damus/Components/InvoicesView.swift | 2 +- damus/Components/TranslateView.swift | 11 +- damus/ContentView.swift | 8 +- damus/Models/EventRef.swift | 140 ++++++++++ damus/Models/HomeModel.swift | 4 +- damus/Models/Mentions.swift | 105 ++++---- damus/Models/NoteContent.swift | 73 +++--- damus/Models/NotificationsManager.swift | 25 +- damus/Models/Post.swift | 39 ++- damus/Nostr/NostrEvent.swift | 35 ++- damus/Nostr/NostrResponse.swift | 2 +- damus/TestData.swift | 2 +- damus/Types/Block.swift | 102 +++----- damus/Util/Bech32Object.swift | 239 +++++++++--------- damus/Util/EventCache.swift | 6 +- damus/Util/LocalNotification.swift | 11 +- damus/Util/Zap.swift | 53 ++-- damus/Views/DMChatView.swift | 10 +- damus/Views/DMView.swift | 2 +- damus/Views/Events/EventShell.swift | 10 +- .../Views/Events/Longform/LongformView.swift | 2 +- damus/Views/Events/SelectedEventView.swift | 2 +- damus/Views/NoteContentView.swift | 63 ++++- damus/Views/Profile/AboutView.swift | 5 +- damus/Views/Profile/ProfileView.swift | 2 + nostrdb/Ndb.swift | 20 +- nostrdb/NdbBlock.swift | 98 +++++++ nostrdb/NdbBlocksIterator.swift | 59 +++++ nostrdb/NdbNote.swift | 104 ++++---- nostrdb/NdbTagElem.swift | 8 +- nostrdb/NdbTagIterator.swift | 12 +- nostrdb/NdbTagsIterator.swift | 15 +- nostrdb/NdbTxn.swift | 4 + .../bindings/c/flatbuffers_common_builder.h | 6 +- .../bindings/c/flatbuffers_common_reader.h | 6 +- nostrdb/src/bindings/c/meta_builder.h | 4 +- nostrdb/src/bindings/c/meta_reader.h | 6 +- nostrdb/src/bindings/c/profile_builder.h | 4 +- nostrdb/src/bindings/c/profile_json_parser.h | 6 +- nostrdb/src/bindings/c/profile_reader.h | 6 +- nostrdb/src/bindings/c/profile_verifier.h | 6 +- nostrdb/src/bindings/swift/NdbMeta.swift | 2 - nostrdb/src/bindings/swift/NdbProfile.swift | 2 - nostrdb/src/bolt11/bolt11.c | 3 +- nostrdb/src/nostr_bech32.c | 11 +- nostrdb/src/nostrdb.h | 1 - 53 files changed, 965 insertions(+), 484 deletions(-) create mode 100644 damus/Models/EventRef.swift create mode 100644 nostrdb/NdbBlock.swift create mode 100644 nostrdb/NdbBlocksIterator.swift diff --git a/DamusNotificationService/NotificationFormatter.swift b/DamusNotificationService/NotificationFormatter.swift index 615eaacc4..93818e669 100644 --- a/DamusNotificationService/NotificationFormatter.swift +++ b/DamusNotificationService/NotificationFormatter.swift @@ -96,7 +96,7 @@ struct NotificationFormatter { content.title = Self.zap_notification_title(zap) content.body = Self.zap_notification_body(profiles: state.profiles, zap: zap) content.sound = UNNotificationSound.default - content.userInfo = LossyLocalNotification(type: .zap, mention: .note(notify.event.id)).to_user_info() + content.userInfo = LossyLocalNotification(type: .zap, mention: .init(nip19: .note(notify.event.id))).to_user_info() return (content, "myZapNotification") default: // The sync method should have taken care of this. diff --git a/DamusNotificationService/NotificationService.swift b/DamusNotificationService/NotificationService.swift index 4c6601cb8..058f39ca3 100644 --- a/DamusNotificationService/NotificationService.swift +++ b/DamusNotificationService/NotificationService.swift @@ -61,7 +61,7 @@ class NotificationService: UNNotificationServiceExtension { return } - guard let notification_object = generate_local_notification_object(from: nostr_event, state: state) else { + guard let notification_object = generate_local_notification_object(ndb: state.ndb, from: nostr_event, state: state) else { // We could not process this notification. Probably an unsupported nostr event kind. Suppress. // contentHandler(UNNotificationContent()) // TODO: We cannot really suppress until we have the notification supression entitlement. Show the raw notification diff --git a/TODO b/TODO index e69de29bb..c3c43df4f 100644 --- a/TODO +++ b/TODO @@ -0,0 +1 @@ +1.5-24 profile loading was much better diff --git a/damus-c/wasm.c b/damus-c/wasm.c index 8a81d301c..0ab03f6ee 100644 --- a/damus-c/wasm.c +++ b/damus-c/wasm.c @@ -1179,7 +1179,7 @@ static INLINE int parse_i64(struct cursor *read, uint64_t *val) shift = 0; do { - if (!pull_byte(read, &byte)) + if (!cursor_pull_byte(read, &byte)) return 0; *val |= (byte & 0x7FULL) << shift; shift += 7; @@ -1199,7 +1199,7 @@ static INLINE int uleb128_read(struct cursor *read, unsigned int *val) *val = 0; for (;;) { - if (!pull_byte(read, &byte)) + if (!cursor_pull_byte(read, &byte)) return 0; *val |= (0x7F & byte) << shift; @@ -1222,7 +1222,7 @@ static INLINE int sleb128_read(struct cursor *read, signed int *val) shift = 0; do { - if (!pull_byte(read, &byte)) + if (!cursor_pull_byte(read, &byte)) return 0; *val |= ((byte & 0x7F) << shift); shift += 7; @@ -1241,21 +1241,21 @@ static INLINE int uleb128_read(struct cursor *read, unsigned int *val) unsigned char p[6] = {0}; *val = 0; - if (pull_byte(read, &p[0]) && (p[0] & 0x80) == 0) { + if (cursor_pull_byte(read, &p[0]) && (p[0] & 0x80) == 0) { *val = LEB128_1(unsigned int); if (p[0] == 0x7F) assert((int)*val == -1); return 1; - } else if (pull_byte(read, &p[1]) && (p[1] & 0x80) == 0) { + } else if (cursor_pull_byte(read, &p[1]) && (p[1] & 0x80) == 0) { *val = LEB128_2(unsigned int); return 2; - } else if (pull_byte(read, &p[2]) && (p[2] & 0x80) == 0) { + } else if (cursor_pull_byte(read, &p[2]) && (p[2] & 0x80) == 0) { *val = LEB128_3(unsigned int); return 3; - } else if (pull_byte(read, &p[3]) && (p[3] & 0x80) == 0) { + } else if (cursor_pull_byte(read, &p[3]) && (p[3] & 0x80) == 0) { *val = LEB128_4(unsigned int); return 4; - } else if (pull_byte(read, &p[4]) && (p[4] & 0x80) == 0) { + } else if (cursor_pull_byte(read, &p[4]) && (p[4] & 0x80) == 0) { if (!(p[4] & 0xF0)) { *val = LEB128_5(unsigned int); return 5; @@ -1296,7 +1296,7 @@ static int parse_section_tag(struct cursor *cur, enum section_tag *section) start = cur->p; - if (!pull_byte(cur, &byte)) { + if (!cursor_pull_byte(cur, &byte)) { return 0; } @@ -1315,7 +1315,7 @@ static int parse_valtype(struct wasm_parser *p, enum valtype *valtype) start = p->cur.p; - if (unlikely(!pull_byte(&p->cur, (unsigned char*)valtype))) { + if (unlikely(!cursor_pull_byte(&p->cur, (unsigned char*)valtype))) { return parse_err(p, "valtype tag oob"); } @@ -1416,7 +1416,7 @@ static int parse_export_desc(struct wasm_parser *p, enum exportdesc *desc) { unsigned char byte; - if (!pull_byte(&p->cur, &byte)) { + if (!cursor_pull_byte(&p->cur, &byte)) { parse_err(p, "export desc byte eof"); return 0; } @@ -1523,7 +1523,7 @@ static int parse_name_subsection(struct wasm_parser *p, struct namesec *sec, u32 u8 tag; u8 *start = p->cur.p; - if (!pull_byte(&p->cur, &tag)) + if (!cursor_pull_byte(&p->cur, &tag)) return parse_err(p, "name subsection tag oob?"); if (!is_valid_name_subsection(tag)) @@ -1676,7 +1676,7 @@ static int parse_reftype(struct wasm_parser *p, enum reftype *reftype) { u8 tag; - if (!pull_byte(&p->cur, &tag)) { + if (!cursor_pull_byte(&p->cur, &tag)) { parse_err(p, "reftype"); return 0; } @@ -1720,7 +1720,7 @@ static int parse_export_section(struct wasm_parser *p, static int parse_limits(struct wasm_parser *p, struct limits *limits) { unsigned char tag; - if (!pull_byte(&p->cur, &tag)) { + if (!cursor_pull_byte(&p->cur, &tag)) { return parse_err(p, "oob"); } @@ -1803,7 +1803,7 @@ static void print_code(u8 *code, int code_len) make_cursor(code, code + code_len, &c); for (;;) { - if (!pull_byte(&c, &tag)) { + if (!cursor_pull_byte(&c, &tag)) { break; } @@ -2169,7 +2169,7 @@ static int parse_const_expr(struct expr_parser *p, struct expr *expr) expr->code = p->code->p; while (1) { - if (unlikely(!pull_byte(p->code, &tag))) { + if (unlikely(!cursor_pull_byte(p->code, &tag))) { return note_error(p->errs, p->code, "oob"); } @@ -2332,7 +2332,7 @@ static int parse_instrs_until_at(struct expr_parser *p, u8 stop_instr, p->code->p - p->code->start, dbg_inst, instr_name(stop_instr)); for (;;) { - if (!pull_byte(p->code, &tag)) + if (!cursor_pull_byte(p->code, &tag)) return note_error(p->errs, p->code, "oob"); if ((tag != i_if && tag == stop_instr) || @@ -2413,7 +2413,7 @@ static int parse_element(struct wasm_parser *p, struct elem *elem) make_expr_parser(&p->errs, &p->cur, &expr_parser); - if (!pull_byte(&p->cur, &tag)) + if (!cursor_pull_byte(&p->cur, &tag)) return parse_err(p, "tag"); if (tag > 7) @@ -2545,7 +2545,7 @@ static int parse_wdata(struct wasm_parser *p, struct wdata *data) struct expr_parser parser; u8 tag; - if (!pull_byte(&p->cur, &tag)) { + if (!cursor_pull_byte(&p->cur, &tag)) { return parse_err(p, "tag"); } @@ -2700,7 +2700,7 @@ static int parse_importdesc(struct wasm_parser *p, struct importdesc *desc) { u8 tag; - if (!pull_byte(&p->cur, &tag)) { + if (!cursor_pull_byte(&p->cur, &tag)) { parse_err(p, "oom"); return 0; } @@ -4134,7 +4134,7 @@ static int parse_blocktype(struct cursor *cur, struct errors *errs, struct block { unsigned char byte; - if (unlikely(!pull_byte(cur, &byte))) { + if (unlikely(!cursor_pull_byte(cur, &byte))) { return note_error(errs, cur, "parse_blocktype: oob\n"); } @@ -4656,7 +4656,7 @@ static int parse_bulk_op(struct cursor *code, struct errors *errs, { u8 tag; - if (unlikely(!pull_byte(code, &tag))) + if (unlikely(!cursor_pull_byte(code, &tag))) return note_error(errs, code, "oob"); if (unlikely(tag < 10 || tag > 17)) @@ -6552,7 +6552,7 @@ static INLINE int interp_parse_instr(struct wasm_interp *interp, { u8 tag; - if (unlikely(!pull_byte(code, &tag))) { + if (unlikely(!cursor_pull_byte(code, &tag))) { return interp_error(interp, "no more instrs to pull"); } diff --git a/damus-c/wasm.h b/damus-c/wasm.h index 060ed4247..1660a793d 100644 --- a/damus-c/wasm.h +++ b/damus-c/wasm.h @@ -27,6 +27,8 @@ static const unsigned char WASM_MAGIC[] = {0,'a','s','m'}; #define interp_error(p, fmt, ...) note_error(&((p)->errors), interp_codeptr(p), fmt, ##__VA_ARGS__) #define parse_err(p, fmt, ...) note_error(&((p)->errs), &(p)->cur, fmt, ##__VA_ARGS__) +#include "short_types.h" + enum valtype { val_i32 = 0x7F, val_i64 = 0x7E, diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj index 6df8b357c..d09c2b367 100644 --- a/damus.xcodeproj/project.pbxproj +++ b/damus.xcodeproj/project.pbxproj @@ -285,6 +285,28 @@ 4CB883B6297730E400DC99E7 /* LNUrls.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB883B5297730E400DC99E7 /* LNUrls.swift */; }; 4CB8FC232A41ABA800763C51 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB8FC222A41ABA500763C51 /* AboutView.swift */; }; 4CB9D4A72992D02B00A9A7E4 /* ProfileNameView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CB9D4A62992D02B00A9A7E4 /* ProfileNameView.swift */; }; + 4CBB6F662B72B5DD000477A4 /* NdbBlocksIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480562B633F2600F2B2C0 /* NdbBlocksIterator.swift */; }; + 4CBB6F672B72B5E8000477A4 /* NdbBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480582B633F3800F2B2C0 /* NdbBlock.swift */; }; + 4CBB6F682B72B5F0000477A4 /* NdbProfile.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FFE2B631C0100F2B2C0 /* NdbProfile.swift */; }; + 4CBB6F692B72C783000477A4 /* NdbBlocksIterator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480562B633F2600F2B2C0 /* NdbBlocksIterator.swift */; }; + 4CBB6F6A2B730EF1000477A4 /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDE2B631C0100F2B2C0 /* nostrdb.c */; }; + 4CBB6F6B2B7310EC000477A4 /* tal.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801F2B631C0100F2B2C0 /* tal.c */; }; + 4CBB6F6C2B7310F8000477A4 /* sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF52B631C0100F2B2C0 /* sha256.c */; }; + 4CBB6F6D2B731102000477A4 /* take.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480232B631C0100F2B2C0 /* take.c */; }; + 4CBB6F6E2B731113000477A4 /* block.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FDF2B631C0100F2B2C0 /* block.c */; }; + 4CBB6F6F2B73116B000477A4 /* content_parser.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FF62B631C0100F2B2C0 /* content_parser.c */; }; + 4CBB6F702B731179000477A4 /* invoice.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480372B631C0100F2B2C0 /* invoice.c */; }; + 4CBB6F712B731184000477A4 /* bolt11.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480102B631C0100F2B2C0 /* bolt11.c */; }; + 4CBB6F722B7311AA000477A4 /* list.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480122B631C0100F2B2C0 /* list.c */; }; + 4CBB6F732B7311AA000477A4 /* mem.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480182B631C0100F2B2C0 /* mem.c */; }; + 4CBB6F742B7311AA000477A4 /* hash_u5.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801A2B631C0100F2B2C0 /* hash_u5.c */; }; + 4CBB6F752B7311AA000477A4 /* talstr.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801C2B631C0100F2B2C0 /* talstr.c */; }; + 4CBB6F762B7311AA000477A4 /* utf8.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801D2B631C0100F2B2C0 /* utf8.c */; }; + 4CBB6F772B7311AA000477A4 /* bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF4801E2B631C0100F2B2C0 /* bech32.c */; }; + 4CBB6F782B7311AA000477A4 /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480252B631C0100F2B2C0 /* amount.c */; }; + 4CBB6F792B7311AA000477A4 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480262B631C0100F2B2C0 /* error.c */; }; + 4CBB6F7A2B7311AA000477A4 /* bech32_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480282B631C0100F2B2C0 /* bech32_util.c */; }; + 4CBB6F7C2B7312A7000477A4 /* nostr_bech32.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF47FE52B631C0100F2B2C0 /* nostr_bech32.c */; }; 4CBCA930297DB57F00EC6B2F /* WebsiteLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CBCA92F297DB57F00EC6B2F /* WebsiteLink.swift */; }; 4CC14FEF2A73FCCB007AEB17 /* IdType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FEE2A73FCCB007AEB17 /* IdType.swift */; }; 4CC14FF12A73FCDB007AEB17 /* Pubkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF02A73FCDB007AEB17 /* Pubkey.swift */; }; @@ -373,10 +395,9 @@ 4CF4804D2B631C0100F2B2C0 /* amount.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480252B631C0100F2B2C0 /* amount.c */; }; 4CF4804E2B631C0100F2B2C0 /* error.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480262B631C0100F2B2C0 /* error.c */; }; 4CF4804F2B631C0100F2B2C0 /* bech32_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480282B631C0100F2B2C0 /* bech32_util.c */; }; - 4CF480502B631C0100F2B2C0 /* libnostrdb.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CF4802A2B631C0100F2B2C0 /* libnostrdb.a */; }; - 4CF480512B631C0100F2B2C0 /* node_id.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480342B631C0100F2B2C0 /* node_id.c */; }; 4CF480522B631C0100F2B2C0 /* invoice.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480372B631C0100F2B2C0 /* invoice.c */; }; 4CF480552B631C4F00F2B2C0 /* wasm.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480532B631C4F00F2B2C0 /* wasm.c */; }; + 4CF480592B633F3800F2B2C0 /* NdbBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF480582B633F3800F2B2C0 /* NdbBlock.swift */; }; 4CFD502F2A2DA45800A229DB /* MediaView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFD502E2A2DA45800A229DB /* MediaView.swift */; }; 4CFF8F5929C9FD1E008DB934 /* DamusPurpleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F5829C9FD1E008DB934 /* DamusPurpleView.swift */; }; 4CFF8F6329CC9AD7008DB934 /* ImageContextMenuModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CFF8F6229CC9AD7008DB934 /* ImageContextMenuModifier.swift */; }; @@ -844,6 +865,7 @@ 4C1253652A76D0FF0004F4B8 /* OnlyZapsNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnlyZapsNotify.swift; sourceTree = ""; }; 4C1253672A76D2470004F4B8 /* MuteNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MuteNotify.swift; sourceTree = ""; }; 4C1253692A76D3850004F4B8 /* RelaysChangedNotify.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelaysChangedNotify.swift; sourceTree = ""; }; + 4C15224A2B8D499F007CDC17 /* parser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = parser.h; sourceTree = ""; }; 4C15C7142A55DE7A00D0A0DB /* ReactionsSettingsView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReactionsSettingsView.swift; sourceTree = ""; }; 4C190F1F2A535FC200027FD5 /* CustomizeZapModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomizeZapModel.swift; sourceTree = ""; }; 4C190F242A547D2000027FD5 /* LoadScript.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadScript.swift; sourceTree = ""; }; @@ -1307,6 +1329,8 @@ 4CF480372B631C0100F2B2C0 /* invoice.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = invoice.c; sourceTree = ""; }; 4CF480532B631C4F00F2B2C0 /* wasm.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = wasm.c; sourceTree = ""; }; 4CF480542B631C4F00F2B2C0 /* wasm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = wasm.h; sourceTree = ""; }; + 4CF480562B633F2600F2B2C0 /* NdbBlocksIterator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbBlocksIterator.swift; sourceTree = ""; }; + 4CF480582B633F3800F2B2C0 /* NdbBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NdbBlock.swift; sourceTree = ""; }; 4CFD502E2A2DA45800A229DB /* MediaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaView.swift; sourceTree = ""; }; 4CFF8F5829C9FD1E008DB934 /* DamusPurpleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DamusPurpleView.swift; sourceTree = ""; }; 4CFF8F6229CC9AD7008DB934 /* ImageContextMenuModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageContextMenuModifier.swift; sourceTree = ""; }; @@ -1495,7 +1519,6 @@ 3A0A30BB2C21397A00F8C9BC /* EmojiPicker in Frameworks */, D78DB8592C1CE9CA00F0AB12 /* SwipeActions in Frameworks */, 4C649881286E0EE300EAE2B3 /* secp256k1 in Frameworks */, - 4CF480502B631C0100F2B2C0 /* libnostrdb.a in Frameworks */, 4C27C9322A64766F007DBC75 /* MarkdownUI in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2163,6 +2186,7 @@ 4C9054862A6AEB4500811EEC /* nostrdb */ = { isa = PBXGroup; children = ( + 4C15224A2B8D499F007CDC17 /* parser.h */, 4CF47FDC2B631C0100F2B2C0 /* src */, 4C47928D2A9939BD00489948 /* flatcc */, 4CE9FBBB2A6B3D9C007E485C /* Test */, @@ -2182,6 +2206,8 @@ 4C78EFDA2A707C67007E8197 /* secp256k1_extrakeys.h */, 4C78EFD92A707C4D007E8197 /* secp256k1.h */, D798D2272B085CDA00234419 /* NdbNote+.swift */, + 4CF480562B633F2600F2B2C0 /* NdbBlocksIterator.swift */, + 4CF480582B633F3800F2B2C0 /* NdbBlock.swift */, ); path = nostrdb; sourceTree = ""; @@ -3185,6 +3211,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 4CBB6F692B72C783000477A4 /* NdbBlocksIterator.swift in Sources */, 4C3DCC762A9FE9EC0091E592 /* NdbTxn.swift in Sources */, 4CEF958D2A9CE650000F901B /* verifier.c in Sources */, 4C32B9332A99845B00DC3548 /* Ndb.swift in Sources */, @@ -3322,7 +3349,6 @@ 4C32B9582A9AD44700DC3548 /* VeriferOptions.swift in Sources */, D74AAFC22B153395006CF0F4 /* HeadlessDamusState.swift in Sources */, 4CA2EFA0280E37AC0044ACD8 /* TimelineView.swift in Sources */, - 4CF480512B631C0100F2B2C0 /* node_id.c in Sources */, 4C30AC7629A5770900E2BD5A /* NotificationItemView.swift in Sources */, 4C86F7C42A76C44C00EC0817 /* ZappingNotify.swift in Sources */, 4C363A8428233689006E126D /* Parser.swift in Sources */, @@ -3364,6 +3390,7 @@ 50A16FFF2AA76A0900DFEC1F /* VideoController.swift in Sources */, F7908E97298B1FDF00AB113A /* NIPURLBuilder.swift in Sources */, 4C285C8228385570008A31F1 /* CarouselView.swift in Sources */, + 4CF480592B633F3800F2B2C0 /* NdbBlock.swift in Sources */, 3A3040F129A8FF97008A0F29 /* LocalizationUtil.swift in Sources */, F75BA12D29A1855400E10810 /* BookmarksManager.swift in Sources */, 4CC14FEF2A73FCCB007AEB17 /* IdType.swift in Sources */, @@ -3488,7 +3515,6 @@ 4CBCA930297DB57F00EC6B2F /* WebsiteLink.swift in Sources */, 4CAAD8B029888AD200060CEA /* RelayConfigView.swift in Sources */, 50088DA129E8271A008A1FDF /* WebSocket.swift in Sources */, - 4C3EA64128FF553900C48A62 /* hash_u5.c in Sources */, 5C7389B12B6EFA7100781E0A /* ProxyView.swift in Sources */, 4C1253542A76C7D60004F4B8 /* LogoutNotify.swift in Sources */, 5C513FCC2984ACA60072348F /* QRCodeView.swift in Sources */, @@ -3730,6 +3756,27 @@ buildActionMask = 2147483647; files = ( 4C8FA7242BED58A900798A6A /* ThreadReply.swift in Sources */, + 4CBB6F7C2B7312A7000477A4 /* nostr_bech32.c in Sources */, + 4CBB6F722B7311AA000477A4 /* list.c in Sources */, + 4CBB6F732B7311AA000477A4 /* mem.c in Sources */, + 4CBB6F742B7311AA000477A4 /* hash_u5.c in Sources */, + 4CBB6F752B7311AA000477A4 /* talstr.c in Sources */, + 4CBB6F762B7311AA000477A4 /* utf8.c in Sources */, + 4CBB6F772B7311AA000477A4 /* bech32.c in Sources */, + 4CBB6F782B7311AA000477A4 /* amount.c in Sources */, + 4CBB6F792B7311AA000477A4 /* error.c in Sources */, + 4CBB6F7A2B7311AA000477A4 /* bech32_util.c in Sources */, + 4CBB6F712B731184000477A4 /* bolt11.c in Sources */, + 4CBB6F702B731179000477A4 /* invoice.c in Sources */, + 4CBB6F6F2B73116B000477A4 /* content_parser.c in Sources */, + 4CBB6F6E2B731113000477A4 /* block.c in Sources */, + 4CBB6F6D2B731102000477A4 /* take.c in Sources */, + 4CBB6F6C2B7310F8000477A4 /* sha256.c in Sources */, + 4CBB6F6B2B7310EC000477A4 /* tal.c in Sources */, + 4CBB6F6A2B730EF1000477A4 /* nostrdb.c in Sources */, + 4CBB6F682B72B5F0000477A4 /* NdbProfile.swift in Sources */, + 4CBB6F672B72B5E8000477A4 /* NdbBlock.swift in Sources */, + 4CBB6F662B72B5DD000477A4 /* NdbBlocksIterator.swift in Sources */, D798D21F2B0858D600234419 /* MigratedTypes.swift in Sources */, D7CE1B472B0BE719002EDAD4 /* NativeObject.swift in Sources */, D7CB5D552B11758A00AD4105 /* UnmuteThreadNotify.swift in Sources */, @@ -3838,7 +3885,6 @@ D7EDED262B117FC80018B19C /* StringUtil.swift in Sources */, D7CE1B1E2B0BE190002EDAD4 /* midl.c in Sources */, D7CB5D3C2B1130C600AD4105 /* LocalNotification.swift in Sources */, - D7CE1B2D2B0BE250002EDAD4 /* take.c in Sources */, B59CAD4D2B688D1000677E8B /* MutelistManager.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/damus/Components/InvoiceView.swift b/damus/Components/InvoiceView.swift index cc99f7410..fa6ef3ab4 100644 --- a/damus/Components/InvoiceView.swift +++ b/damus/Components/InvoiceView.swift @@ -114,7 +114,7 @@ func open_with_wallet(wallet: Wallet.Model, invoice: String) throws { } -let test_invoice = Invoice(description: .description("this is a description"), amount: .specific(10000), string: "lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r", expiry: 604800, payment_hash: Data(), created_at: 1666139119) +let test_invoice = Invoice(description: .description("this is a description"), amount: .specific(10000), string: "lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r", expiry: 604800, created_at: 1666139119) struct InvoiceView_Previews: PreviewProvider { static var previews: some View { diff --git a/damus/Components/InvoicesView.swift b/damus/Components/InvoicesView.swift index 589e21edf..497013308 100644 --- a/damus/Components/InvoicesView.swift +++ b/damus/Components/InvoicesView.swift @@ -29,7 +29,7 @@ struct InvoicesView: View { struct InvoicesView_Previews: PreviewProvider { static var previews: some View { - InvoicesView(our_pubkey: test_note.pubkey, invoices: [Invoice.init(description: .description("description"), amount: .specific(10000), string: "invstr", expiry: 100000, payment_hash: Data(), created_at: 1000000)], settings: test_damus_state.settings) + InvoicesView(our_pubkey: test_note.pubkey, invoices: [Invoice.init(description: .description("description"), amount: .specific(10000), string: "invstr", expiry: 100000, created_at: 1000000)], settings: test_damus_state.settings) .frame(width: 300) } } diff --git a/damus/Components/TranslateView.swift b/damus/Components/TranslateView.swift index 2f34cdc31..fb6f450ad 100644 --- a/damus/Components/TranslateView.swift +++ b/damus/Components/TranslateView.swift @@ -142,11 +142,14 @@ func translate_note(profiles: Profiles, keypair: Keypair, event: NostrEvent, set } // Render translated note - let translated_blocks = parse_note_content(content: .content(translated_note, event.tags)) - let artifacts = render_blocks(blocks: translated_blocks, profiles: profiles) - + // TODO: fix translated blocks + //let translated_blocks = parse_note_content(content: .content(translated_note, event.tags)) + //let artifacts = render_blocks(blocks: translated_blocks, profiles: profiles) + + return .not_needed + // and cache it - return .translated(Translated(artifacts: artifacts, language: note_lang)) + //return .translated(Translated(artifacts: artifacts, language: note_lang)) } func current_language() -> String { diff --git a/damus/ContentView.swift b/damus/ContentView.swift index 0bad6ba98..e767500f3 100644 --- a/damus/ContentView.swift +++ b/damus/ContentView.swift @@ -476,8 +476,8 @@ struct ContentView: View { .onReceive(handle_notify(.local_notification)) { local in guard let damus_state else { return } - switch local.mention { - case .pubkey(let pubkey): + switch local.mention.nip19 { + case .npub(let pubkey): open_profile(pubkey: pubkey) case .note(let noteId): @@ -490,6 +490,10 @@ struct ContentView: View { break case .naddr(let naddr): break + case .nsec(_): + break + case .nscript(_): + break } diff --git a/damus/Models/EventRef.swift b/damus/Models/EventRef.swift new file mode 100644 index 000000000..9f8cb7c58 --- /dev/null +++ b/damus/Models/EventRef.swift @@ -0,0 +1,140 @@ +// +// EventRef.swift +// damus +// +// Created by William Casarin on 2022-05-08. +// + +import Foundation + +enum EventRef: Equatable { + case mention(Mention) + case thread_id(NoteRef) + case reply(NoteRef) + case reply_to_root(NoteRef) + + var is_mention: NoteRef? { + if case .mention(let m) = self { return m.ref } + return nil + } + + var is_direct_reply: NoteRef? { + switch self { + case .mention: + return nil + case .thread_id: + return nil + case .reply(let refid): + return refid + case .reply_to_root(let refid): + return refid + } + } + + var is_thread_id: NoteRef? { + switch self { + case .mention: + return nil + case .thread_id(let referencedId): + return referencedId + case .reply: + return nil + case .reply_to_root(let referencedId): + return referencedId + } + } + + var is_reply: NoteRef? { + switch self { + case .mention: + return nil + case .thread_id: + return nil + case .reply(let refid): + return refid + case .reply_to_root(let refid): + return refid + } + } +} + +func build_mention_indices(_ blocks: BlocksSequence, type: MentionType) -> Set { + return blocks.reduce(into: []) { acc, block in + switch block { + case .mention: + return + case .mention_index(let idx): + return + case .text: + return + case .hashtag: + return + case .url: + return + case .invoice: + return + } + } +} + +func interp_event_refs_without_mentions(_ refs: [NoteRef]) -> [EventRef] { + if refs.count == 0 { + return [] + } + + if refs.count == 1 { + return [.reply_to_root(refs[0])] + } + + var evrefs: [EventRef] = [] + var first: Bool = true + for ref in refs { + if first { + evrefs.append(.thread_id(ref)) + first = false + } else { + evrefs.append(.reply(ref)) + } + } + return evrefs +} + +func interp_event_refs_with_mentions(tags: Tags) -> [EventRef] { + var mentions: [EventRef] = [] + var ev_refs: [NoteRef] = [] + var i: Int = 0 + + for tag in tags { + if let ref = NoteRef.from_tag(tag: tag) { + ev_refs.append(ref) + } + i += 1 + } + + var replies = interp_event_refs_without_mentions(ev_refs) + replies.append(contentsOf: mentions) + return replies +} + +func interpret_event_refs(blocks: BlocksSequence, tags: Tags) -> [EventRef] { + if tags.count == 0 { + return [] + } + + /// build a set of indices for each event mention + //let mention_indices = build_mention_indices(blocks, type: .e) + + /// simpler case with no mentions + //if mention_indices.count == 0 { + //return interp_event_refs_without_mentions_ndb(References(tags: tags)) + //} + + return interp_event_refs_with_mentions(tags: tags) +} + + +func event_is_reply(_ refs: [EventRef]) -> Bool { + return refs.contains { evref in + return evref.is_reply != nil + } +} diff --git a/damus/Models/HomeModel.swift b/damus/Models/HomeModel.swift index aa3757074..daa625031 100644 --- a/damus/Models/HomeModel.swift +++ b/damus/Models/HomeModel.swift @@ -734,7 +734,7 @@ class HomeModel: ContactsDelegate { notification_status.new_events = notifs guard should_display_notification(state: damus_state, event: ev, mode: .local), - let notification_object = generate_local_notification_object(from: ev, state: damus_state) + let notification_object = generate_local_notification_object(ndb: self.damus_state.ndb, from: ev, state: damus_state) else { return } @@ -1181,7 +1181,7 @@ func create_in_app_profile_zap_notification(profiles: Profiles, zap: Zap, locale content.title = NotificationFormatter.zap_notification_title(zap) content.body = NotificationFormatter.zap_notification_body(profiles: profiles, zap: zap, locale: locale) content.sound = UNNotificationSound.default - content.userInfo = LossyLocalNotification(type: .profile_zap, mention: .pubkey(profile_id)).to_user_info() + content.userInfo = LossyLocalNotification(type: .profile_zap, mention: .init(nip19: .npub(profile_id))).to_user_info() let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false) diff --git a/damus/Models/Mentions.swift b/damus/Models/Mentions.swift index 0c229fcf2..882b7d563 100644 --- a/damus/Models/Mentions.swift +++ b/damus/Models/Mentions.swift @@ -18,22 +18,38 @@ enum MentionType: AsciiCharacter, TagKey { } } -enum MentionRef: TagKeys, TagConvertible, Equatable, Hashable { - case pubkey(Pubkey) - case note(NoteId) - case nevent(NEvent) - case nprofile(NProfile) - case nrelay(String) - case naddr(NAddr) +extension UnsafePointer { + func as_data(size: Int) -> Data { + return Data(bytes: self, count: size) + } +} + +struct MentionRef: TagKeys, TagConvertible, Equatable, Hashable { + let nip19: Bech32Object + + static func note(_ note_id: NoteId) -> MentionRef { + return self.init(nip19: .note(note_id)) + } + + init?(block: ndb_mention_bech32_block) { + guard let bech32_obj = Bech32Object.init(block: block) else { + return nil + } + self.nip19 = bech32_obj + } + + init(nip19: Bech32Object) { + self.nip19 = nip19 + } var key: MentionType { - switch self { - case .pubkey: return .p - case .note: return .e - case .nevent: return .e - case .nprofile: return .p + switch self.nip19 { + case .note, .nevent: return .e + case .nprofile, .npub: return .p case .nrelay: return .r case .naddr: return .a + case .nscript: return .a + case .nsec: return .p } } @@ -41,33 +57,39 @@ enum MentionRef: TagKeys, TagConvertible, Equatable, Hashable { return Bech32Object.encode(toBech32Object()) } - static func from_bech32(str: String) -> MentionRef? { - switch Bech32Object.parse(str) { - case .note(let noteid): return .note(noteid) - case .npub(let pubkey): return .pubkey(pubkey) - default: return nil + init?(bech32_str: String) { + guard let obj = Bech32Object.parse(bech32_str) else { + return nil } + + self.nip19 = obj } var pubkey: Pubkey? { - switch self { - case .pubkey(let pubkey): return pubkey + switch self.nip19 { + case .npub(let pubkey): return pubkey case .note: return nil case .nevent(let nevent): return nevent.author case .nprofile(let nprofile): return nprofile.author case .nrelay: return nil case .naddr: return nil + case .nsec(let prv): return privkey_to_pubkey(privkey: prv) + case .nscript(_): return nil } } var tag: [String] { - switch self { - case .pubkey(let pubkey): return ["p", pubkey.hex()] + switch self.nip19 { + case .npub(let pubkey): return ["p", pubkey.hex()] case .note(let noteId): return ["e", noteId.hex()] case .nevent(let nevent): return ["e", nevent.noteid.hex()] case .nprofile(let nprofile): return ["p", nprofile.author.hex()] case .nrelay(let url): return ["r", url] case .naddr(let naddr): return ["a", naddr.kind.description + ":" + naddr.author.hex() + ":" + naddr.identifier.string()] + case .nsec(_): + return [] + case .nscript(_): + return [] } } @@ -87,10 +109,10 @@ enum MentionRef: TagKeys, TagConvertible, Equatable, Hashable { switch mention_type { case .p: guard let data = element.id() else { return nil } - return .pubkey(Pubkey(data)) + return .init(nip19: .npub(Pubkey(data))) case .e: guard let data = element.id() else { return nil } - return .note(NoteId(data)) + return .init(nip19: .note(NoteId(data))) case .a: let str = element.string() let data = str.split(separator: ":") @@ -99,26 +121,13 @@ enum MentionRef: TagKeys, TagConvertible, Equatable, Hashable { guard let pubkey = Pubkey(hex: String(data[1])) else { return nil } guard let kind = UInt32(data[0]) else { return nil } - return .naddr(NAddr(identifier: String(data[2]), author: pubkey, relays: [], kind: kind)) - case .r: return .nrelay(element.string()) + return .init(nip19: .naddr(NAddr(identifier: String(data[2]), author: pubkey, relays: [], kind: kind))) + case .r: return .init(nip19: .nrelay(element.string())) } } func toBech32Object() -> Bech32Object { - switch self { - case .pubkey(let pk): - return .npub(pk) - case .note(let noteid): - return .note(noteid) - case .naddr(let naddr): - return .naddr(naddr) - case .nevent(let nevent): - return .nevent(nevent) - case .nprofile(let nprofile): - return .nprofile(nprofile) - case .nrelay(let url): - return .nrelay(url) - } + self.nip19 } } @@ -156,7 +165,6 @@ struct LightningInvoice { let amount: T let string: String let expiry: UInt64 - let payment_hash: Data let created_at: UInt64 var description_string: String { @@ -169,8 +177,8 @@ struct LightningInvoice { } } -func maybe_pointee(_ p: UnsafeMutablePointer!) -> T? { - guard p != nil else { +func maybe_pointee(_ p: UnsafeMutablePointer?) -> T? { + guard let p else { return nil } return p.pointee @@ -231,7 +239,7 @@ func format_msats(_ msat: Int64, locale: Locale = Locale.current) -> String { return String(format: format, locale: locale, sats.decimalValue as NSDecimalNumber, formattedSats) } -func convert_invoice_description(b11: bolt11) -> InvoiceDescription? { +func convert_invoice_description(b11: ndb_invoice) -> InvoiceDescription? { if let desc = b11.description { return .description(String(cString: desc)) } @@ -269,7 +277,7 @@ func make_post_tags(post_blocks: [Block], tags: [[String]]) -> PostTags { for post_block in post_blocks { switch post_block { case .mention(let mention): - switch(mention.ref) { + switch(mention.ref.nip19) { case .note, .nevent: continue default: @@ -292,10 +300,13 @@ func make_post_tags(post_blocks: [Block], tags: [[String]]) -> PostTags { } func post_to_event(post: NostrPost, keypair: FullKeypair) -> NostrEvent? { - let post_blocks = parse_post_blocks(content: post.content) - let post_tags = make_post_tags(post_blocks: post_blocks, tags: post.tags) + let tags = post.references.map({ r in r.tag }) + post.tags + guard let post_blocks = parse_post_blocks(content: post.content)?.blocks else { + return nil + } + let post_tags = make_post_tags(post_blocks: post_blocks, tags: tags) let content = post_tags.blocks - .map(\.asString) + .map({ b in b.asString }) .joined(separator: "") return NostrEvent(content: content, keypair: keypair.to_keypair(), kind: post.kind.rawValue, tags: post_tags.tags) } diff --git a/damus/Models/NoteContent.swift b/damus/Models/NoteContent.swift index 81adde7a6..7c6fb5e02 100644 --- a/damus/Models/NoteContent.swift +++ b/damus/Models/NoteContent.swift @@ -66,25 +66,28 @@ func note_artifact_is_separated(kind: NostrKind?) -> Bool { return kind != .longform } -func render_note_content(ev: NostrEvent, profiles: Profiles, keypair: Keypair) -> NoteArtifacts { - let blocks = ev.blocks(keypair) +func render_note_content(ndb: Ndb, ev: NostrEvent, profiles: Profiles, keypair: Keypair) -> NoteArtifacts { + guard let blocks = ev.blocks(ndb: ndb) else { + return .separated(.just_content(ev.get_content(keypair))) + } if ev.known_kind == .longform { return .longform(LongformContent(ev.content)) } - return .separated(render_blocks(blocks: blocks, profiles: profiles)) + return .separated(render_blocks(blocks: blocks.unsafeUnownedValue, profiles: profiles, note: ev)) } -func render_blocks(blocks bs: Blocks, profiles: Profiles) -> NoteArtifactsSeparated { +func render_blocks(blocks: NdbBlocks, profiles: Profiles, note: NdbNote) -> NoteArtifactsSeparated { var invoices: [Invoice] = [] var urls: [UrlType] = [] - let blocks = bs.blocks - - let one_note_ref = blocks + + let ndb_blocks = blocks.iter(note: note).collect() + let one_note_ref = ndb_blocks .filter({ if case .mention(let mention) = $0, - case .note = mention.ref { + let typ = mention.bech32_type, + typ.is_notelike { return true } else { @@ -94,57 +97,63 @@ func render_blocks(blocks bs: Blocks, profiles: Profiles) -> NoteArtifactsSepara .count == 1 var ind: Int = -1 - let txt: CompatibleText = blocks.reduce(CompatibleText()) { str, block in + let txt: CompatibleText = ndb_blocks.reduce(into: CompatibleText()) { str, block in ind = ind + 1 switch block { case .mention(let m): - if case .note = m.ref, one_note_ref { - return str + if let typ = m.bech32_type, typ.is_notelike, one_note_ref { + return } - return str + mention_str(m, profiles: profiles) + guard let mention = MentionRef(block: m) else { return } + str = str + mention_str(.any(mention), profiles: profiles) case .text(let txt): - return str + CompatibleText(stringLiteral: reduce_text_block(blocks: blocks, ind: ind, txt: txt, one_note_ref: one_note_ref)) - - case .relay(let relay): - return str + CompatibleText(stringLiteral: relay) - + str = str + CompatibleText(stringLiteral: reduce_text_block(blocks: ndb_blocks, ind: ind, txt: txt.as_str(), one_note_ref: one_note_ref)) case .hashtag(let htag): - return str + hashtag_str(htag) + str = str + hashtag_str(htag.as_str()) case .invoice(let invoice): - invoices.append(invoice) - return str + guard let inv = invoice.as_invoice() else { return } + invoices.append(inv) case .url(let url): + guard let url = URL(string: url.as_str()) else { return } let url_type = classify_url(url) switch url_type { case .media: urls.append(url_type) - return str case .link(let url): urls.append(url_type) - return str + url_str(url) + str = str + url_str(url) } + case .mention_index: + return } } - return NoteArtifactsSeparated(content: txt, words: bs.words, urls: urls, invoices: invoices) + return NoteArtifactsSeparated(content: txt, words: blocks.words, urls: urls, invoices: invoices) } -func reduce_text_block(blocks: [Block], ind: Int, txt: String, one_note_ref: Bool) -> String { +func reduce_text_block(blocks: [NdbBlock], ind: Int, txt: String, one_note_ref: Bool) -> String { var trimmed = txt if let prev = blocks[safe: ind-1], case .url(let u) = prev, - classify_url(u).is_media != nil { + let url = URL(string: u.as_str()), + classify_url(url).is_media != nil + { trimmed = " " + trim_prefix(trimmed) } if let next = blocks[safe: ind+1] { - if case .url(let u) = next, classify_url(u).is_media != nil { + if case .url(let u) = next, + let url = URL(string: u.as_str()), + classify_url(url).is_media != nil + { trimmed = trim_suffix(trimmed) } else if case .mention(let m) = next, - case .note = m.ref, - one_note_ref { + let typ = m.bech32_type, + typ.is_notelike, + one_note_ref + { trimmed = trim_suffix(trimmed) } } @@ -192,13 +201,17 @@ func mention_str(_ m: Mention, profiles: Profiles) -> CompatibleText let bech32String = Bech32Object.encode(m.ref.toBech32Object()) let display_str: String = { - switch m.ref { - case .pubkey(let pk): return getDisplayName(pk: pk, profiles: profiles) + switch m.ref.nip19 { + case .npub(let pk): return getDisplayName(pk: pk, profiles: profiles) case .note: return abbrev_pubkey(bech32String) case .nevent: return abbrev_pubkey(bech32String) case .nprofile(let nprofile): return getDisplayName(pk: nprofile.author, profiles: profiles) case .nrelay(let url): return url case .naddr: return abbrev_pubkey(bech32String) + case .nsec(let prv): + guard let npub = privkey_to_pubkey(privkey: prv)?.npub else { return "nsec..." } + return abbrev_pubkey(npub) + case .nscript(_): return bech32String } }() diff --git a/damus/Models/NotificationsManager.swift b/damus/Models/NotificationsManager.swift index c32ae7533..1bcbcde80 100644 --- a/damus/Models/NotificationsManager.swift +++ b/damus/Models/NotificationsManager.swift @@ -18,7 +18,7 @@ func process_local_notification(state: HeadlessDamusState, event ev: NostrEvent) return } - guard let local_notification = generate_local_notification_object(from: ev, state: state) else { + guard let local_notification = generate_local_notification_object(ndb: state.ndb, from: ev, state: state) else { return } @@ -54,25 +54,28 @@ func should_display_notification(state: HeadlessDamusState, event ev: NostrEvent return true } -func generate_local_notification_object(from ev: NostrEvent, state: HeadlessDamusState) -> LocalNotification? { +func generate_local_notification_object(ndb: Ndb, from ev: NostrEvent, state: HeadlessDamusState) -> LocalNotification? { guard let type = ev.known_kind else { return nil } - if type == .text, state.settings.mention_notification { - let blocks = ev.blocks(state.keypair).blocks - for case .mention(let mention) in blocks { - guard case .pubkey(let pk) = mention.ref, pk == state.keypair.pubkey else { + if type == .text, + state.settings.mention_notification, + let blocks = ev.blocks(ndb: ndb)?.unsafeUnownedValue + { + for case .mention(let mention) in blocks.iter(note: ev) { + guard case .npub = mention.bech32_type, + (memcmp(state.keypair.pubkey.id.bytes, mention.bech32.npub.pubkey, 32) == 0) else { continue } - let content_preview = render_notification_content_preview(ev: ev, profiles: state.profiles, keypair: state.keypair) + let content_preview = render_notification_content_preview(ndb: ndb, ev: ev, profiles: state.profiles, keypair: state.keypair) return LocalNotification(type: .mention, event: ev, target: ev, content: content_preview) } } else if type == .boost, state.settings.repost_notification, let inner_ev = ev.get_inner_event() { - let content_preview = render_notification_content_preview(ev: inner_ev, profiles: state.profiles, keypair: state.keypair) + let content_preview = render_notification_content_preview(ndb: ndb, ev: inner_ev, profiles: state.profiles, keypair: state.keypair) return LocalNotification(type: .repost, event: ev, target: inner_ev, content: content_preview) } else if type == .like, state.settings.like_notification, @@ -80,7 +83,7 @@ func generate_local_notification_object(from ev: NostrEvent, state: HeadlessDamu let txn = state.ndb.lookup_note(evid, txn_name: "local_notification_like"), let liked_event = txn.unsafeUnownedValue?.to_owned() { - let content_preview = render_notification_content_preview(ev: liked_event, profiles: state.profiles, keypair: state.keypair) + let content_preview = render_notification_content_preview(ndb: ndb, ev: liked_event, profiles: state.profiles, keypair: state.keypair) return LocalNotification(type: .like, event: ev, target: liked_event, content: content_preview) } else if type == .dm, @@ -114,10 +117,10 @@ func create_local_notification(profiles: Profiles, notify: LocalNotification) { } } -func render_notification_content_preview(ev: NostrEvent, profiles: Profiles, keypair: Keypair) -> String { +func render_notification_content_preview(ndb: Ndb, ev: NostrEvent, profiles: Profiles, keypair: Keypair) -> String { let prefix_len = 300 - let artifacts = render_note_content(ev: ev, profiles: profiles, keypair: keypair) + let artifacts = render_note_content(ndb: ndb, ev: ev, profiles: profiles, keypair: keypair) // special case for longform events if ev.known_kind == .longform { diff --git a/damus/Models/Post.swift b/damus/Models/Post.swift index 9a3f2a69c..c26d453d2 100644 --- a/damus/Models/Post.swift +++ b/damus/Models/Post.swift @@ -21,7 +21,42 @@ struct NostrPost { /// Return a list of tags -func parse_post_blocks(content: String) -> [Block] { - return parse_note_content(content: .content(content, nil)).blocks +func parse_post_blocks(content: String) -> Blocks? { + let buf_size = 16000 + var buffer = Data(capacity: buf_size) + var blocks_ptr = ndb_blocks_ptr() + var ok = false + + return content.withCString { c_content -> Blocks? in + buffer.withUnsafeMutableBytes { buf in + let res = ndb_parse_content(buf, Int32(buf_size), c_content, Int32(content.utf8.count), &blocks_ptr.ptr) + ok = res != 0 + } + + guard ok else { return nil } + + let words = ndb_blocks_word_count(blocks_ptr.ptr) + let bs = collect_blocks(ptr: blocks_ptr, content: c_content) + return Blocks(words: Int(words), blocks: bs) + } } + +fileprivate func collect_blocks(ptr: ndb_blocks_ptr, content: UnsafePointer) -> [Block] { + var i = ndb_block_iterator() + var blocks: [Block] = [] + var block_ptr = ndb_block_ptr() + + ndb_blocks_iterate_start(content, ptr.ptr, &i); + block_ptr.ptr = ndb_blocks_iterate_next(&i) + while (block_ptr.ptr != nil) { + // tags are only used for indexed mentions which aren't used in + // posts anymore, so to simplify the API let's set this to nil + if let block = Block(block: block_ptr, tags: nil) { + blocks.append(block); + } + block_ptr.ptr = ndb_blocks_iterate_next(&i) + } + + return blocks +} diff --git a/damus/Nostr/NostrEvent.swift b/damus/Nostr/NostrEvent.swift index bf3f7efd2..dc0db54c7 100644 --- a/damus/Nostr/NostrEvent.swift +++ b/damus/Nostr/NostrEvent.swift @@ -743,13 +743,18 @@ func validate_event(ev: NostrEvent) -> ValidationResult { return ok ? .ok : .bad_sig } -func first_eref_mention(ev: NostrEvent, keypair: Keypair) -> Mention? { - let blocks = ev.blocks(keypair).blocks.filter { block in +func first_eref_mention(ndb: Ndb, ev: NostrEvent, keypair: Keypair) -> Mention? { + guard let blocks_txn = ev.blocks(ndb: ndb) else { + return nil + } + + let ndb_blocks = blocks_txn.unsafeUnownedValue + let blocks = ndb_blocks.iter(note: ev).filter { block in guard case .mention(let mention) = block else { return false } - switch mention.ref { + switch mention.bech32_type { case .note, .nevent: return true default: @@ -760,11 +765,13 @@ func first_eref_mention(ev: NostrEvent, keypair: Keypair) -> Mention? { /// MARK: - Preview if let firstBlock = blocks.first, case .mention(let mention) = firstBlock { - switch mention.ref { - case .note(let note_id): - return .note(note_id) - case .nevent(let nevent): - return .note(nevent.noteid) + switch mention.bech32_type { + case .note: + let data = mention.bech32.note.event_id.as_data(size: 32) + return .note(NoteId(data)) + case .nevent: + let data = mention.bech32.nevent.event_id.as_data(size: 32) + return .note(NoteId(data)) default: return nil } @@ -772,9 +779,15 @@ func first_eref_mention(ev: NostrEvent, keypair: Keypair) -> Mention? { return nil } -func separate_invoices(ev: NostrEvent, keypair: Keypair) -> [Invoice]? { - let invoiceBlocks: [Invoice] = ev.blocks(keypair).blocks.reduce(into: []) { invoices, block in - guard case .invoice(let invoice) = block else { +func separate_invoices(ndb: Ndb, ev: NostrEvent) -> [Invoice]? { + guard let blocks_txn = ev.blocks(ndb: ndb) else { + return nil + } + let ndb_blocks = blocks_txn.unsafeUnownedValue + let invoiceBlocks: [Invoice] = ndb_blocks.iter(note: ev).reduce(into: []) { invoices, block in + guard case .invoice(let invoice) = block, + let invoice = invoice.as_invoice() + else { return } invoices.append(invoice) diff --git a/damus/Nostr/NostrResponse.swift b/damus/Nostr/NostrResponse.swift index 48c2bc37b..27f52af56 100644 --- a/damus/Nostr/NostrResponse.swift +++ b/damus/Nostr/NostrResponse.swift @@ -89,7 +89,7 @@ enum NostrResponse { free(data) return nil } - let new_note = note_data.assumingMemoryBound(to: ndb_note.self) + let new_note = ndb_note_ptr(ptr: OpaquePointer(note_data)) let note = NdbNote(note: new_note, size: Int(len), owned: true, key: nil) guard let subid = sized_cstr(cstr: tce.subid, len: tce.subid_len) else { diff --git a/damus/TestData.swift b/damus/TestData.swift index 8dcc54107..fadafdeb8 100644 --- a/damus/TestData.swift +++ b/damus/TestData.swift @@ -54,7 +54,7 @@ let test_repost_2 = NostrEvent(content: test_encoded_post, keypair: test_keypair let test_reposts = [test_repost_1, test_repost_2] let test_event_group = EventGroup(events: test_reposts) -let test_zap_invoice = ZapInvoice(description: .description("description"), amount: 10000, string: "lnbc1", expiry: 1000000, payment_hash: Data(), created_at: 1000000) +let test_zap_invoice = ZapInvoice(description: .description("description"), amount: 10000, string: "lnbc1", expiry: 1000000, created_at: 1000000) let test_zap_request_ev = NostrEvent(content: "hi", keypair: test_keypair, kind: 9734)! let test_zap_request = ZapRequest(ev: test_zap_request_ev) let test_zap = Zap(event: test_note, invoice: test_zap_invoice, zapper: test_note.pubkey, target: .profile(test_pubkey), raw_request: test_zap_request, is_anon: false, private_request: nil) diff --git a/damus/Types/Block.swift b/damus/Types/Block.swift index a5cb99369..f58c9e440 100644 --- a/damus/Types/Block.swift +++ b/damus/Types/Block.swift @@ -2,22 +2,11 @@ // Block.swift // damus // -// Created by Kyle Roucis on 2023-08-21. -// import Foundation -fileprivate extension String { - /// Failable initializer to build a Swift.String from a C-backed `str_block_t`. - init?(_ s: str_block_t) { - let len = s.end - s.start - let bytes = Data(bytes: s.start, count: len) - self.init(bytes: bytes, encoding: .utf8) - } -} - -/// Represents a block of data stored by the NOSTR protocol. This can be +/// Represents a block of data stored in nostrdb. This can be /// simple text, a hashtag, a url, a relay reference, a mention ref and /// potentially more in the future. enum Block: Equatable { @@ -51,61 +40,56 @@ struct Blocks: Equatable { let blocks: [Block] } +extension ndb_str_block { + func as_str() -> String { + let buf = UnsafeBufferPointer(start: self.str, count: Int(self.len)) + let uint8Buf = buf.map { UInt8(bitPattern: $0) } + return String(decoding: uint8Buf, as: UTF8.self) + } +} + +extension ndb_block_ptr { + func as_str() -> String { + guard let str_block = ndb_block_str(self.ptr) else { + return "" + } + return str_block.pointee.as_str() + } + + var block: ndb_block.__Unnamed_union_block { + self.ptr.pointee.block + } +} + extension Block { /// Failable initializer for the C-backed type `block_t`. This initializer will inspect /// the underlying block type and build the appropriate enum value as needed. - init?(_ block: block_t, tags: TagsSequence? = nil) { - switch block.type { + init?(block: ndb_block_ptr, tags: TagsSequence?) { + switch ndb_get_block_type(block.ptr) { case BLOCK_HASHTAG: - guard let str = String(block.block.str) else { - return nil - } - self = .hashtag(str) + self = .hashtag(block.as_str()) case BLOCK_TEXT: - guard let str = String(block.block.str) else { - return nil - } - self = .text(str) + self = .text(block.as_str()) case BLOCK_MENTION_INDEX: guard let b = Block(index: Int(block.block.mention_index), tags: tags) else { return nil } self = b case BLOCK_URL: - guard let b = Block(block.block.str) else { - return nil - } - self = b + guard let url = URL(string: block.as_str()) else { return nil } + self = .url(url) case BLOCK_INVOICE: - guard let b = Block(invoice: block.block.invoice) else { - return nil - } + guard let b = Block(invoice: block.block.invoice) else { return nil } self = b case BLOCK_MENTION_BECH32: - guard let b = Block(bech32: block.block.mention_bech32) else { - return nil - } + guard let b = Block(bech32: block.block.mention_bech32) else { return nil } self = b default: return nil } } } -fileprivate extension Block { - /// Failable initializer for the C-backed type `str_block_t`. - init?(_ b: str_block_t) { - guard let str = String(b) else { - return nil - } - if let url = URL(string: str) { - self = .url(url) - } - else { - self = .text(str) - } - } -} fileprivate extension Block { /// Failable initializer for a block index and a tag sequence. init?(index: Int, tags: TagsSequence? = nil) { @@ -127,34 +111,19 @@ fileprivate extension Block { } } } + fileprivate extension Block { /// Failable initializer for the C-backed type `invoice_block_t`. - init?(invoice: invoice_block_t) { - guard let invstr = String(invoice.invstr) else { - return nil - } - - guard var b11 = maybe_pointee(invoice.bolt11) else { - return nil - } - - guard let description = convert_invoice_description(b11: b11) else { - return nil - } - - let amount: Amount = maybe_pointee(b11.msat).map { .specific(Int64($0.millisatoshis)) } ?? .any - let payment_hash = Data(bytes: &b11.payment_hash, count: 32) - let created_at = b11.timestamp - - tal_free(invoice.bolt11) - self = .invoice(Invoice(description: description, amount: amount, string: invstr, expiry: b11.expiry, payment_hash: payment_hash, created_at: created_at)) + init?(invoice: ndb_invoice_block) { + guard let invoice = invoice.as_invoice() else { return nil } + self = .invoice(invoice) } } fileprivate extension Block { /// Failable initializer for the C-backed type `mention_bech32_block_t`. This initializer will inspect the /// bech32 type code and build the appropriate enum type. - init?(bech32 b: mention_bech32_block_t) { + init?(bech32 b: ndb_mention_bech32_block) { guard let decoded = decodeCBech32(b.bech32) else { return nil } @@ -164,6 +133,7 @@ fileprivate extension Block { self = .mention(.any(ref)) } } + extension Block { var asString: String { switch self { diff --git a/damus/Util/Bech32Object.swift b/damus/Util/Bech32Object.swift index 4f5e7a16e..7f9745abd 100644 --- a/damus/Util/Bech32Object.swift +++ b/damus/Util/Bech32Object.swift @@ -10,38 +10,18 @@ import Foundation fileprivate extension String { /// Failable initializer to build a Swift.String from a C-backed `str_block_t`. init?(_ s: str_block_t) { - let len = s.end - s.start - let bytes = Data(bytes: s.start, count: len) + let bytes = Data(bytes: s.str, count: Int(s.len)) self.init(bytes: bytes, encoding: .utf8) } } struct NEvent : Equatable, Hashable { let noteid: NoteId - let relays: [String] + let relays: [RelayURL] let author: Pubkey? let kind: UInt32? - init(noteid: NoteId, relays: [String]) { - self.noteid = noteid - self.relays = relays - self.author = nil - self.kind = nil - } - - init(noteid: NoteId, relays: [String], author: Pubkey?) { - self.noteid = noteid - self.relays = relays - self.author = author - self.kind = nil - } - init(noteid: NoteId, relays: [String], kind: UInt32?) { - self.noteid = noteid - self.relays = relays - self.author = nil - self.kind = kind - } - init(noteid: NoteId, relays: [String], author: Pubkey?, kind: UInt32?) { + init(noteid: NoteId, relays: [RelayURL], author: Pubkey? = nil, kind: UInt32? = nil) { self.noteid = noteid self.relays = relays self.author = author @@ -51,17 +31,64 @@ struct NEvent : Equatable, Hashable { struct NProfile : Equatable, Hashable { let author: Pubkey - let relays: [String] + let relays: [RelayURL] } struct NAddr : Equatable, Hashable { let identifier: String let author: Pubkey - let relays: [String] + let relays: [RelayURL] let kind: UInt32 } -enum Bech32Object : Equatable { +extension ndb_relays { + func as_urls() -> [RelayURL] { + var urls = [RelayURL]() + + // + // This is so incredibly dumb but it's just what the Swift <-> C bridge + // does and I don't have a better way that doesn't involve complicated + // and slow stuff like reflection + // + let (r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,r21,r22,r23) = self.relays + + for i in 0.. Bech32Object? { if str.starts(with: "nscript"), let decoded = try? bech32_decode(str) { return .nscript(decoded.data.bytes) } var b: nostr_bech32_t = nostr_bech32() + var bytes = Data(capacity: str.utf8.count) - let bytes = Array(str.utf8) - - bytes.withUnsafeBufferPointer { buffer in - guard let baseAddress = buffer.baseAddress else { return } - - var cursorInstance = cursor() - cursorInstance.start = UnsafeMutablePointer(mutating: baseAddress) - cursorInstance.p = UnsafeMutablePointer(mutating: baseAddress) - cursorInstance.end = cursorInstance.start.advanced(by: buffer.count) - - parse_nostr_bech32(&cursorInstance, &b) + let ok = str.withCString { cstr in + let ok = bytes.withUnsafeMutableBytes { buffer -> Int32 in + guard let addr = buffer.baseAddress?.assumingMemoryBound(to: UInt8.self) else { + return 0 + } + return parse_nostr_bech32(addr, Int32(buffer.count), cstr, str.utf8.count, &b) + } + + return ok != 0 } - + + guard ok else { return nil } + return decodeCBech32(b) } @@ -113,25 +182,7 @@ enum Bech32Object : Equatable { } func toMentionRef() -> MentionRef? { - switch self { - case .nsec(let privkey): - guard let pubkey = privkey_to_pubkey(privkey: privkey) else { return nil } - return .pubkey(pubkey) - case .npub(let pubkey): - return .pubkey(pubkey) - case .note(let noteid): - return .note(noteid) - case .nscript(_): - return nil - case .nevent(let nevent): - return .nevent(nevent) - case .nprofile(let nprofile): - return .nprofile(nprofile) - case .nrelay(let relayURL): - return .nrelay(relayURL) - case .naddr(let naddr): - return .naddr(naddr) - } + MentionRef(nip19: self) } } @@ -139,75 +190,37 @@ enum Bech32Object : Equatable { func decodeCBech32(_ b: nostr_bech32_t) -> Bech32Object? { switch b.type { case NOSTR_BECH32_NOTE: - let note = b.data.note; - let note_id = NoteId(Data(bytes: note.event_id, count: 32)) + let note_id = NoteId(Data(bytes: b.note.event_id, count: 32)) return .note(note_id) case NOSTR_BECH32_NEVENT: - let nevent = b.data.nevent; - let note_id = NoteId(Data(bytes: nevent.event_id, count: 32)) - let pubkey = nevent.pubkey != nil ? Pubkey(Data(bytes: nevent.pubkey, count: 32)) : nil - let kind: UInt32? = nevent.has_kind ? nevent.kind : nil - let relays = getRelayStrings(from: nevent.relays) + let note_id = NoteId(Data(bytes: b.nevent.event_id, count: 32)) + let pubkey = b.nevent.pubkey != nil ? Pubkey(Data(bytes: b.nevent.pubkey, count: 32)) : nil + let kind: UInt32? = b.nevent.has_kind == 0 ? nil : b.nevent.kind + let relays = b.nevent.relays.as_urls() return .nevent(NEvent(noteid: note_id, relays: relays, author: pubkey, kind: kind)) case NOSTR_BECH32_NPUB: - let npub = b.data.npub - let pubkey = Pubkey(Data(bytes: npub.pubkey, count: 32)) + let pubkey = Pubkey(Data(bytes: b.npub.pubkey, count: 32)) return .npub(pubkey) case NOSTR_BECH32_NSEC: - let nsec = b.data.nsec - let privkey = Privkey(Data(bytes: nsec.nsec, count: 32)) + let privkey = Privkey(Data(bytes: b.nsec.nsec, count: 32)) guard let pubkey = privkey_to_pubkey(privkey: privkey) else { return nil } return .npub(pubkey) case NOSTR_BECH32_NPROFILE: - let nprofile = b.data.nprofile - let pubkey = Pubkey(Data(bytes: nprofile.pubkey, count: 32)) - return .nprofile(NProfile(author: pubkey, relays: getRelayStrings(from: nprofile.relays))) + let pubkey = Pubkey(Data(bytes: b.nprofile.pubkey, count: 32)) + return .nprofile(NProfile(author: pubkey, relays: b.nprofile.relays.as_urls())) case NOSTR_BECH32_NRELAY: - let nrelay = b.data.nrelay - let str_relay: str_block = nrelay.relay - guard let relay_str = String(str_relay) else { - return nil - } - return .nrelay(relay_str) + return .nrelay(b.nrelay.relay.as_str()) case NOSTR_BECH32_NADDR: - let naddr = b.data.naddr - guard let identifier = String(naddr.identifier) else { - return nil - } - let pubkey = Pubkey(Data(bytes: naddr.pubkey, count: 32)) - let kind = naddr.kind - - return .naddr(NAddr(identifier: identifier, author: pubkey, relays: getRelayStrings(from: naddr.relays), kind: kind)) + let pubkey = Pubkey(Data(bytes: b.naddr.pubkey, count: 32)) + let kind = b.naddr.kind + let identifier = b.naddr.identifier.as_str() + + return .naddr(NAddr(identifier: identifier, author: pubkey, relays: b.naddr.relays.as_urls(), kind: kind)) default: return nil } } -private func getRelayStrings(from relays: relays) -> [String] { - var result = [String]() - let numRelays = Int(relays.num_relays) - - func processRelay(_ relay: str_block) { - if let string = String(relay) { - result.append(string) - } - } - - // Since relays is a C tuple, the indexes can't be iterated through so they need to be manually processed - if numRelays > 0 { processRelay(relays.relays.0) } - if numRelays > 1 { processRelay(relays.relays.1) } - if numRelays > 2 { processRelay(relays.relays.2) } - if numRelays > 3 { processRelay(relays.relays.3) } - if numRelays > 4 { processRelay(relays.relays.4) } - if numRelays > 5 { processRelay(relays.relays.5) } - if numRelays > 6 { processRelay(relays.relays.6) } - if numRelays > 7 { processRelay(relays.relays.7) } - if numRelays > 8 { processRelay(relays.relays.8) } - if numRelays > 9 { processRelay(relays.relays.9) } - - return result -} - private enum TLVType: UInt8 { case SPECIAL case RELAY @@ -221,9 +234,9 @@ private func writeBytesList(bytesList: inout [UInt8], tlvType: TLVType, data: [U bytesList.append(contentsOf: data.bytes) } -private func writeBytesRelays(bytesList: inout [UInt8], relays: [String]) { - for relay in relays where !relay.isEmpty { - guard let relayData = relay.data(using: .utf8) else { +private func writeBytesRelays(bytesList: inout [UInt8], relays: [RelayURL]) { + for relay in relays { + guard let relayData = relay.url.absoluteString.data(using: .utf8) else { continue // skip relay if can't read data } writeBytesList(bytesList: &bytesList, tlvType: .RELAY, data: relayData.bytes) diff --git a/damus/Util/EventCache.swift b/damus/Util/EventCache.swift index dcc629164..29842f976 100644 --- a/damus/Util/EventCache.swift +++ b/damus/Util/EventCache.swift @@ -373,7 +373,7 @@ func preload_event(plan: PreloadPlan, state: DamusState) async { //print("Preloading event \(plan.event.content)") if artifacts == nil && plan.load_artifacts { - let arts = render_note_content(ev: plan.event, profiles: profiles, keypair: our_keypair) + let arts = render_note_content(ndb: state.ndb, ev: plan.event, profiles: profiles, keypair: our_keypair) artifacts = arts // we need these asap @@ -394,7 +394,7 @@ func preload_event(plan: PreloadPlan, state: DamusState) async { } if plan.load_preview, note_artifact_is_separated(kind: plan.event.known_kind) { - let arts = artifacts ?? render_note_content(ev: plan.event, profiles: profiles, keypair: our_keypair) + let arts = artifacts ?? render_note_content(ndb: state.ndb, ev: plan.event, profiles: profiles, keypair: our_keypair) // only separated artifacts have previews if case .separated(let sep) = arts { @@ -409,7 +409,7 @@ func preload_event(plan: PreloadPlan, state: DamusState) async { } } - let note_language = plan.data.translations_model.note_language ?? plan.event.note_language(our_keypair) ?? current_language() + let note_language = plan.data.translations_model.note_language ?? plan.event.note_language(ndb: state.ndb, our_keypair) ?? current_language() var translations: TranslateStatus? = nil // We have to recheck should_translate here now that we have note_language diff --git a/damus/Util/LocalNotification.swift b/damus/Util/LocalNotification.swift index 19da4490e..1ef09f854 100644 --- a/damus/Util/LocalNotification.swift +++ b/damus/Util/LocalNotification.swift @@ -25,7 +25,7 @@ struct LossyLocalNotification { return self.from(json_encoded_ndb_note: encoded_ndb_note) } guard let id = user_info["id"] as? String, - let target_id = MentionRef.from_bech32(str: id) else { + let target_id = MentionRef(bech32_str: id) else { return nil } let typestr = user_info["type"] as! String @@ -42,8 +42,11 @@ struct LossyLocalNotification { } static func from(ndb_note: NdbNote) -> LossyLocalNotification? { - guard let known_kind = ndb_note.known_kind, let type = LocalNotificationType.from(nostr_kind: known_kind) else { return nil } - let target: MentionRef = .note(ndb_note.id) + guard let known_kind = ndb_note.known_kind, + let type = LocalNotificationType.from(nostr_kind: known_kind) else { + return nil + } + let target: MentionRef = .init(nip19: .note(ndb_note.id)) return LossyLocalNotification(type: type, mention: target) } } @@ -55,7 +58,7 @@ struct LocalNotification { let content: String func to_lossy() -> LossyLocalNotification { - return LossyLocalNotification(type: self.type, mention: .note(self.target.id)) + return LossyLocalNotification(type: self.type, mention: .init(nip19: .note(self.target.id))) } } diff --git a/damus/Util/Zap.swift b/damus/Util/Zap.swift index 31a1a64f3..bcbe37a97 100644 --- a/damus/Util/Zap.swift +++ b/damus/Util/Zap.swift @@ -408,7 +408,7 @@ func invoice_to_zap_invoice(_ invoice: Invoice) -> ZapInvoice? { return nil } - return ZapInvoice(description: invoice.description, amount: amt, string: invoice.string, expiry: invoice.expiry, payment_hash: invoice.payment_hash, created_at: invoice.created_at) + return ZapInvoice(description: invoice.description, amount: amt, string: invoice.string, expiry: invoice.expiry, created_at: invoice.created_at) } func determine_zap_target(_ ev: NostrEvent) -> ZapTarget? { @@ -422,35 +422,44 @@ func determine_zap_target(_ ev: NostrEvent) -> ZapTarget? { return .profile(ptag) } - + +extension UnsafePointer { + func as_str() -> String { + String(cString: self) + } +} + func decode_bolt11(_ s: String) -> Invoice? { - var bs = note_blocks() - bs.num_blocks = 0 - blocks_init(&bs) - let bytes = s.utf8CString + var bolt11_ptr: UnsafeMutablePointer? + let _ = bytes.withUnsafeBufferPointer { p in - damus_parse_content(&bs, p.baseAddress) + bolt11_ptr = bolt11_decode(nil, p.baseAddress, nil) } - - guard bs.num_blocks == 1 else { - blocks_free(&bs) + + guard let bolt11 = maybe_pointee(bolt11_ptr) else { return nil } - - let block = bs.blocks[0] - - guard let converted = Block(block) else { - blocks_free(&bs) - return nil + + var amount: Amount = .any + var desc: InvoiceDescription = .description("") + if let amt = maybe_pointee(bolt11.msat) { + amount = .specific(Int64(amt.millisatoshis)) } - - guard case .invoice(let invoice) = converted else { - blocks_free(&bs) - return nil + let expiry = bolt11.expiry + let created_at = bolt11.timestamp + + if var deschash = maybe_pointee(bolt11.description_hash) { + let data = Data(bytes: &deschash.u, count: 32) + desc = .description_hash(data) + } else { + desc = .description(bolt11.description.as_str()) } - - blocks_free(&bs) + + let invoice = Invoice(description: desc, amount: amount, string: s, expiry: expiry, created_at: created_at) + + tal_free(bolt11_ptr) + return invoice } diff --git a/damus/Views/DMChatView.swift b/damus/Views/DMChatView.swift index fcf173626..f779b8f41 100644 --- a/damus/Views/DMChatView.swift +++ b/damus/Views/DMChatView.swift @@ -123,10 +123,12 @@ struct DMChatView: View, KeyboardReadable { func send_message() { let tags = [["p", pubkey.hex()]] - let post_blocks = parse_post_blocks(content: dms.draft) - let content = post_blocks - .map(\.asString) - .joined(separator: "") + let post_blocks = parse_post_blocks(content: dms.draft)?.blocks + guard let content = post_blocks?.map({ pb in pb.asString }).joined(separator: "") else { + // TODO: handle these errors somehow? + print("error creating dm") + return + } guard let dm = create_dm(content, to_pk: pubkey, tags: tags, keypair: damus_state.keypair) else { print("error creating dm") diff --git a/damus/Views/DMView.swift b/damus/Views/DMView.swift index 4951a32bc..28e9b61f2 100644 --- a/damus/Views/DMView.swift +++ b/damus/Views/DMView.swift @@ -17,7 +17,7 @@ struct DMView: View { var Mention: some View { Group { - if let mention = first_eref_mention(ev: event, keypair: damus_state.keypair) { + if let mention = first_eref_mention(ndb: damus_state.ndb, ev: event, keypair: damus_state.keypair) { BuilderEventView(damus: damus_state, event_id: mention.ref) } else { EmptyView() diff --git a/damus/Views/Events/EventShell.swift b/damus/Views/Events/EventShell.swift index 6994cd13b..76a880b85 100644 --- a/damus/Views/Events/EventShell.swift +++ b/damus/Views/Events/EventShell.swift @@ -35,12 +35,12 @@ struct EventShell: View { !options.contains(.no_action_bar) } - func get_mention() -> Mention? { + func get_mention(ndb: Ndb) -> Mention? { if self.options.contains(.nested) || self.options.contains(.no_mentions) { return nil } - return first_eref_mention(ev: event, keypair: state.keypair) + return first_eref_mention(ndb: ndb, ev: event, keypair: state.keypair) } var ActionBar: some View { @@ -73,7 +73,7 @@ struct EventShell: View { content - if let mention = get_mention() { + if let mention = get_mention(ndb: state.ndb) { MentionView(damus_state: state, mention: mention) } @@ -103,7 +103,9 @@ struct EventShell: View { content - if !options.contains(.no_mentions), let mention = get_mention() { + if !options.contains(.no_mentions), + let mention = get_mention(ndb: state.ndb) + { MentionView(damus_state: state, mention: mention) .padding(.horizontal) } diff --git a/damus/Views/Events/Longform/LongformView.swift b/damus/Views/Events/Longform/LongformView.swift index 0b7e72031..a83f7a5ef 100644 --- a/damus/Views/Events/Longform/LongformView.swift +++ b/damus/Views/Events/Longform/LongformView.swift @@ -48,7 +48,7 @@ let test_longform_event = LongformEvent.parse(from: NostrEvent( struct LongformView_Previews: PreviewProvider { static var previews: some View { let st = test_damus_state - let artifacts = render_note_content(ev: test_longform_event.event, profiles: st.profiles, keypair: Keypair(pubkey: .empty, privkey: nil)) + let artifacts = render_note_content(ndb: st.ndb, ev: test_longform_event.event, profiles: st.profiles, keypair: Keypair(pubkey: .empty, privkey: nil)) let model = NoteArtifactsModel(state: .loaded(artifacts)) ScrollView { diff --git a/damus/Views/Events/SelectedEventView.swift b/damus/Views/Events/SelectedEventView.swift index f1baaa469..b107f1034 100644 --- a/damus/Views/Events/SelectedEventView.swift +++ b/damus/Views/Events/SelectedEventView.swift @@ -82,7 +82,7 @@ struct SelectedEventView: View { var Mention: some View { Group { - if let mention = first_eref_mention(ev: event, keypair: damus.keypair) { + if let mention = first_eref_mention(ndb: damus.ndb, ev: event, keypair: damus.keypair) { MentionView(damus_state: damus, mention: mention) .padding(.horizontal) } diff --git a/damus/Views/NoteContentView.swift b/damus/Views/NoteContentView.swift index b81cd3fbc..819cc2495 100644 --- a/damus/Views/NoteContentView.swift +++ b/damus/Views/NoteContentView.swift @@ -22,6 +22,22 @@ struct Blur: UIViewRepresentable { } } +extension bech32_nprofile { + func matches_pubkey(pk: Pubkey) -> Bool { + pk.id.withUnsafeBytes { bytes in + memcmp(self.pubkey, bytes, 32) == 0 + } + } +} + +extension bech32_npub { + func matches_pubkey(pk: Pubkey) -> Bool { + pk.id.withUnsafeBytes { bytes in + memcmp(self.pubkey, bytes, 32) == 0 + } + } +} + struct NoteContentView: View { let damus_state: DamusState @@ -260,7 +276,7 @@ struct NoteContentView: View { } await preload_event(plan: plan, state: damus_state) } else if force_artifacts { - let arts = render_note_content(ev: event, profiles: damus_state.profiles, keypair: damus_state.keypair) + let arts = render_note_content(ndb: damus_state.ndb, ev: event, profiles: damus_state.profiles, keypair: damus_state.keypair) self.artifacts_model.state = .loaded(arts) } } @@ -308,19 +324,36 @@ struct NoteContentView: View { var body: some View { ArtifactContent .onReceive(handle_notify(.profile_updated)) { profile in - let blocks = event.blocks(damus_state.keypair) - for block in blocks.blocks { + guard let blocks_txn = event.blocks(ndb: damus_state.ndb) else { + return + } + let blocks = blocks_txn.unsafeUnownedValue + for block in blocks.iter(note: event) { switch block { case .mention(let m): - if case .pubkey(let pk) = m.ref, pk == profile.pubkey { - load(force_artifacts: true) - return + guard let typ = m.bech32_type else { + continue + } + switch typ { + case .nprofile: + if m.bech32.nprofile.matches_pubkey(pk: profile.pubkey) { + load(force_artifacts: true) + } + case .npub: + if m.bech32.npub.matches_pubkey(pk: profile.pubkey) { + load(force_artifacts: true) + } + case .nevent: continue + case .nrelay: continue + case .nsec: continue + case .note: continue + case .naddr: continue } - case .relay: return case .text: return case .hashtag: return case .url: return case .invoice: return + case .mention_index(_): return } } } @@ -418,13 +451,19 @@ struct NoteContentView_Previews: PreviewProvider { } } -func separate_images(ev: NostrEvent, keypair: Keypair) -> [MediaUrl]? { - let urlBlocks: [URL] = ev.blocks(keypair).blocks.reduce(into: []) { urls, block in - guard case .url(let url) = block else { +func separate_images(ndb: Ndb, ev: NostrEvent, keypair: Keypair) -> [MediaUrl]? { + guard let blocks_txn = ev.blocks(ndb: ndb) else { + return nil + } + let blocks = blocks_txn.unsafeUnownedValue + let urlBlocks: [URL] = blocks.iter(note: ev).reduce(into: []) { urls, block in + guard case .url(let url) = block, + let parsed_url = URL(string: url.as_str()) else { return } - if classify_url(url).is_img != nil { - urls.append(url) + + if classify_url(parsed_url).is_img != nil { + urls.append(parsed_url) } } let mediaUrls = urlBlocks.map { MediaUrl.image($0) } diff --git a/damus/Views/Profile/AboutView.swift b/damus/Views/Profile/AboutView.swift index d479c5bf4..ac3fc90cf 100644 --- a/damus/Views/Profile/AboutView.swift +++ b/damus/Views/Profile/AboutView.swift @@ -47,8 +47,9 @@ struct AboutView: View { } } .onAppear { - let blocks = parse_note_content(content: .content(about, nil)) - about_string = render_blocks(blocks: blocks, profiles: state.profiles).content.attributed + // TODO: Fix about content + //let blocks = ndb_parse_content(content: .content(about, nil)) + //about_string = render_blocks(blocks: blocks, profiles: state.profiles).content.attributed } } diff --git a/damus/Views/Profile/ProfileView.swift b/damus/Views/Profile/ProfileView.swift index a17df5f04..aca67b7aa 100644 --- a/damus/Views/Profile/ProfileView.swift +++ b/damus/Views/Profile/ProfileView.swift @@ -385,10 +385,12 @@ struct ProfileView: View { } .buttonStyle(PlainButtonStyle()) } else { + /* NavigationLink(value: Route.UserRelays(relays: Array(relays.keys).sorted())) { relay_text } .buttonStyle(PlainButtonStyle()) + */ } } } diff --git a/nostrdb/Ndb.swift b/nostrdb/Ndb.swift index fa8287756..d8539184f 100644 --- a/nostrdb/Ndb.swift +++ b/nostrdb/Ndb.swift @@ -204,13 +204,28 @@ class Ndb { self.ndb = db return true } + + func lookup_blocks_by_key_with_txn(_ key: NoteKey, txn: NdbTxn) -> NdbBlocks? { + guard let blocks = ndb_get_blocks_by_key(self.ndb.ndb, &txn.txn, key) else { + return nil + } + + return NdbBlocks(ptr: blocks) + } + + func lookup_blocks_by_key(_ key: NoteKey) -> NdbTxn? { + NdbTxn(ndb: self) { txn in + lookup_blocks_by_key_with_txn(key, txn: txn) + } + } func lookup_note_by_key_with_txn(_ key: NoteKey, txn: NdbTxn) -> NdbNote? { var size: Int = 0 guard let note_p = ndb_get_note_by_key(&txn.txn, key, &size) else { return nil } - return NdbNote(note: note_p, size: size, owned: false, key: key) + let ptr = ndb_note_ptr(ptr: note_p) + return NdbNote(note: ptr, size: size, owned: false, key: key) } func text_search(query: String, limit: Int = 32, order: NdbSearchOrder = .newest_first) -> [NoteKey] { @@ -294,7 +309,8 @@ class Ndb { let note_p = ndb_get_note_by_id(&txn.txn, baseAddress, &size, &key) else { return nil } - return NdbNote(note: note_p, size: size, owned: false, key: key) + let ptr = ndb_note_ptr(ptr: note_p) + return NdbNote(note: ptr, size: size, owned: false, key: key) } } diff --git a/nostrdb/NdbBlock.swift b/nostrdb/NdbBlock.swift new file mode 100644 index 000000000..33205e185 --- /dev/null +++ b/nostrdb/NdbBlock.swift @@ -0,0 +1,98 @@ +// +// NdbBlock.swift +// damus +// +// Created by William Casarin on 2024-01-25. +// + +import Foundation + +enum NdbBlockType: UInt32 { + case hashtag = 1 + case text = 2 + case mention_index = 3 + case mention_bech32 = 4 + case url = 5 + case invoice = 6 +} + +extension ndb_mention_bech32_block { + var bech32_type: NdbBech32Type? { + NdbBech32Type(rawValue: self.bech32.type.rawValue) + } +} + +enum NdbBech32Type: UInt32 { + case note = 1 + case npub = 2 + case nprofile = 3 + case nevent = 4 + case nrelay = 5 + case naddr = 6 + case nsec = 7 + + var is_notelike: Bool { + return self == .note || self == .nevent + } +} + +extension ndb_invoice_block { + func as_invoice() -> Invoice? { + let b11 = self.invoice + let invstr = self.invstr.as_str() + + guard let description = convert_invoice_description(b11: b11) else { + return nil + } + + let amount: Amount = b11.amount == 0 ? .any : .specific(Int64(b11.amount)) + + return Invoice(description: description, amount: amount, string: invstr, expiry: b11.expiry, created_at: b11.timestamp) + } +} + +enum NdbBlock { + case text(ndb_str_block) + case mention(ndb_mention_bech32_block) + case hashtag(ndb_str_block) + case url(ndb_str_block) + case invoice(ndb_invoice_block) + case mention_index(UInt32) + + init?(_ ptr: ndb_block_ptr) { + guard let type = NdbBlockType(rawValue: ndb_get_block_type(ptr.ptr).rawValue) else { + return nil + } + switch type { + case .hashtag: self = .hashtag(ptr.block.str) + case .text: self = .text(ptr.block.str) + case .invoice: self = .invoice(ptr.block.invoice) + case .url: self = .url(ptr.block.str) + case .mention_bech32: self = .mention(ptr.block.mention_bech32) + case .mention_index: self = .mention_index(ptr.block.mention_index) + } + } +} + + +struct NdbBlocks { + private let blocks_ptr: ndb_blocks_ptr + + init(ptr: OpaquePointer?) { + self.blocks_ptr = ndb_blocks_ptr(ptr: ptr) + } + + var words: Int { + Int(ndb_blocks_word_count(blocks_ptr.ptr)) + } + + func iter(note: NdbNote) -> BlocksSequence { + BlocksSequence(note: note, blocks: self) + } + + func as_ptr() -> OpaquePointer? { + return self.blocks_ptr.ptr + } +} + + diff --git a/nostrdb/NdbBlocksIterator.swift b/nostrdb/NdbBlocksIterator.swift new file mode 100644 index 000000000..df11017d1 --- /dev/null +++ b/nostrdb/NdbBlocksIterator.swift @@ -0,0 +1,59 @@ +// +// NdbBlockIterator.swift +// damus +// +// Created by William Casarin on 2024-01-25. +// + +import Foundation + + +struct BlocksIterator: IteratorProtocol { + typealias Element = NdbBlock + + var done: Bool + var iter: ndb_block_iterator + var note: NdbNote + + mutating func next() -> NdbBlock? { + guard iter.blocks != nil, + let ptr = ndb_blocks_iterate_next(&iter) else { + done = true + return nil + } + + let block_ptr = ndb_block_ptr(ptr: ptr) + return NdbBlock(block_ptr) + } + + init(note: NdbNote, blocks: NdbBlocks) { + let content = ndb_note_content(note.note.ptr) + self.iter = ndb_block_iterator(content: content, blocks: nil, block: ndb_block(), p: nil) + ndb_blocks_iterate_start(content, blocks.as_ptr(), &self.iter) + self.done = false + self.note = note + } +} + +struct BlocksSequence: Sequence { + let blocks: NdbBlocks + let note: NdbNote + + init(note: NdbNote, blocks: NdbBlocks) { + self.blocks = blocks + self.note = note + } + + func makeIterator() -> BlocksIterator { + return .init(note: note, blocks: blocks) + } + + func collect() -> [NdbBlock] { + var xs = [NdbBlock]() + for x in self { + xs.append(x) + } + return xs + } +} + diff --git a/nostrdb/NdbNote.swift b/nostrdb/NdbNote.swift index 130c83240..816c656c3 100644 --- a/nostrdb/NdbNote.swift +++ b/nostrdb/NdbNote.swift @@ -44,7 +44,7 @@ class NdbNote: Encodable, Equatable, Hashable { let owned: Bool let count: Int let key: NoteKey? - let note: UnsafeMutablePointer + let note: ndb_note_ptr // cached stuff (TODO: remove these) var decrypted_content: String? = nil @@ -55,7 +55,7 @@ class NdbNote: Encodable, Equatable, Hashable { } } - init(note: UnsafeMutablePointer, size: Int, owned: Bool, key: NoteKey?) { + init(note: ndb_note_ptr, size: Int, owned: Bool, key: NoteKey?) { self.note = note self.owned = owned self.count = size @@ -78,9 +78,9 @@ class NdbNote: Encodable, Equatable, Hashable { } let buf = malloc(self.count)! - memcpy(buf, &self.note.pointee, self.count) - let new_note = buf.assumingMemoryBound(to: ndb_note.self) + memcpy(buf, UnsafeRawPointer(self.note.ptr), self.count) + let new_note = ndb_note_ptr(ptr: OpaquePointer(buf)) return NdbNote(note: new_note, size: self.count, owned: true, key: self.key) } @@ -89,16 +89,16 @@ class NdbNote: Encodable, Equatable, Hashable { } var content_raw: UnsafePointer { - ndb_note_content(note) + ndb_note_content(note.ptr) } var content_len: UInt32 { - ndb_note_content_length(note) + ndb_note_content_length(note.ptr) } /// NDBTODO: make this into data var id: NoteId { - .init(Data(bytes: ndb_note_id(note), count: 32)) + .init(Data(bytes: ndb_note_id(note.ptr), count: 32)) } var raw_note_id: UnsafeMutablePointer { @@ -110,20 +110,20 @@ class NdbNote: Encodable, Equatable, Hashable { } var sig: Signature { - .init(Data(bytes: ndb_note_sig(note), count: 64)) + .init(Data(bytes: ndb_note_sig(note.ptr), count: 64)) } /// NDBTODO: make this into data var pubkey: Pubkey { - .init(Data(bytes: ndb_note_pubkey(note), count: 32)) + .init(Data(bytes: ndb_note_pubkey(note.ptr), count: 32)) } var created_at: UInt32 { - ndb_note_created_at(note) + ndb_note_created_at(note.ptr) } var kind: UInt32 { - ndb_note_kind(note) + ndb_note_kind(note.ptr) } var tags: TagsSequence { @@ -138,7 +138,7 @@ class NdbNote: Encodable, Equatable, Hashable { print("\(NdbNote.notes_created) ndb_notes, \(NdbNote.total_ndb_size) bytes") #endif - free(note) + free(UnsafeMutableRawPointer(note.ptr)) } } @@ -178,7 +178,7 @@ class NdbNote: Encodable, Equatable, Hashable { let buflen = MAX_NOTE_SIZE let buf = malloc(buflen) - ndb_builder_init(&builder, buf, Int32(buflen)) + ndb_builder_init(&builder, buf, buflen) var pk_raw = keypair.pubkey.bytes @@ -206,8 +206,7 @@ class NdbNote: Encodable, Equatable, Hashable { return nil } - var n = UnsafeMutablePointer?(nil) - + var n = ndb_note_ptr() var the_kp: ndb_keypair? = nil @@ -224,9 +223,9 @@ class NdbNote: Encodable, Equatable, Hashable { var len: Int32 = 0 if var the_kp { - len = ndb_builder_finalize(&builder, &n, &the_kp) + len = ndb_builder_finalize(&builder, &n.ptr, &the_kp) } else { - len = ndb_builder_finalize(&builder, &n, nil) + len = ndb_builder_finalize(&builder, &n.ptr, nil) } if len <= 0 { @@ -245,7 +244,7 @@ class NdbNote: Encodable, Equatable, Hashable { return nil } - self.note = r.assumingMemoryBound(to: ndb_note.self) + self.note = ndb_note_ptr(ptr: OpaquePointer(r)) self.key = nil } @@ -261,9 +260,9 @@ class NdbNote: Encodable, Equatable, Hashable { //guard var json_cstr = json.cString(using: .utf8) else { return nil } //json_cs - var note: UnsafeMutablePointer? - - let len = ndb_note_from_json(json, Int32(json_len), ¬e, data, Int32(bufsize)) + var note = ndb_note_ptr() + + let len = ndb_note_from_json(json, Int32(json_len), ¬e.ptr, data, Int32(bufsize)) if len == 0 { free(data) @@ -271,10 +270,9 @@ class NdbNote: Encodable, Equatable, Hashable { } // Create new Data with just the valid bytes - guard let note_data = realloc(data, Int(len)) else { return nil } - let new_note = note_data.assumingMemoryBound(to: ndb_note.self) - - return NdbNote(note: new_note, size: Int(len), owned: true, key: nil) + guard let new_note = realloc(data, Int(len)) else { return nil } + let new_note_ptr = ndb_note_ptr(ptr: OpaquePointer(new_note)) + return NdbNote(note: new_note_ptr, size: Int(len), owned: true, key: nil) } func get_inner_event() -> NdbNote? { @@ -307,10 +305,6 @@ extension NdbNote { return !too_big } - func get_blocks(keypair: Keypair) -> Blocks { - return parse_note_content(content: .init(note: self, keypair: keypair)) - } - // TODO: References iterator public var referenced_ids: References { References(tags: self.tags) @@ -347,7 +341,7 @@ extension NdbNote { public var references: References { References(tags: self.tags) } - + func thread_reply() -> ThreadReply? { if self.known_kind != .highlight { return ThreadReply(tags: self.tags) @@ -359,6 +353,21 @@ extension NdbNote { return ThreadReply(tags: self.tags)?.reply.note_id } + func blocks(ndb: Ndb) -> NdbTxn? { + let blocks_txn = NdbTxn(ndb: ndb) { txn in + guard let key = ndb.lookup_note_key_with_txn(self.id, txn: txn) else { + return nil + } + return ndb.lookup_blocks_by_key_with_txn(key, txn: txn) + } + + guard let blocks_txn else { + return nil + } + + return blocks_txn.collect() + } + func get_content(_ keypair: Keypair) -> String { if known_kind == .dm { return decrypted(keypair: keypair) ?? "*failed to decrypt content*" @@ -375,10 +384,6 @@ extension NdbNote { return content } - func blocks(_ keypair: Keypair) -> Blocks { - return get_blocks(keypair: keypair) - } - // NDBTODO: switch this to operating on bytes not strings func decrypted(keypair: Keypair) -> String? { if let decrypted_content { @@ -419,34 +424,22 @@ extension NdbNote { return self.referenced_ids.last } - // NDBTODO: id -> data - /* - public func references(id: String, key: AsciiCharacter) -> Bool { - var matcher: (Reference) -> Bool = { ref in ref.ref_id.matches_str(id) } - if id.count == 64, let decoded = hex_decode(id) { - matcher = { ref in ref.ref_id.matches_id(decoded) } - } - for ref in References(tags: self.tags) { - if ref.key == key && matcher(ref) { - return true - } - } - - return false - } - */ - func is_reply() -> Bool { return thread_reply() != nil } - func note_language(_ keypair: Keypair) -> String? { + func note_language(ndb: Ndb, _ keypair: Keypair) -> String? { assert(!Thread.isMainThread, "This function must not be run on the main thread.") // Rely on Apple's NLLanguageRecognizer to tell us which language it thinks the note is in // and filter on only the text portions of the content as URLs and hashtags confuse the language recognizer. - let originalBlocks = self.blocks(keypair).blocks - let originalOnlyText = originalBlocks.compactMap { + /* + guard let blocks_txn = self.blocks(ndb: ndb) else { + return nil + } + let blocks = blocks_txn.unsafeUnownedValue + + let originalOnlyText = blocks.blocks(note: self).compactMap { if case .text(let txt) = $0 { // Replacing right single quotation marks (’) with "typewriter or ASCII apostrophes" (') // as a workaround to get Apple's language recognizer to predict language the correctly. @@ -473,6 +466,9 @@ extension NdbNote { } } .joined(separator: " ") + */ + + let originalOnlyText = self.get_content(keypair) // If there is no text, there's nothing to use to detect language. guard !originalOnlyText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty else { diff --git a/nostrdb/NdbTagElem.swift b/nostrdb/NdbTagElem.swift index cf9e83e57..78d5135cc 100644 --- a/nostrdb/NdbTagElem.swift +++ b/nostrdb/NdbTagElem.swift @@ -25,7 +25,7 @@ struct NdbStrIter: IteratorProtocol { } init(tag: NdbTagElem) { - self.str = ndb_tag_str(tag.note.note, tag.tag, tag.index) + self.str = ndb_tag_str(tag.note.note.ptr, tag.tag.ptr, tag.index) self.ind = 0 self.tag = tag } @@ -33,7 +33,7 @@ struct NdbStrIter: IteratorProtocol { struct NdbTagElem: Sequence, Hashable, Equatable { let note: NdbNote - let tag: UnsafeMutablePointer + let tag: ndb_tag_ptr let index: Int32 let str: ndb_str @@ -59,11 +59,11 @@ struct NdbTagElem: Sequence, Hashable, Equatable { return memcmp(lhs.str.str, rhs.str.str, r) == 0 } - init(note: NdbNote, tag: UnsafeMutablePointer, index: Int32) { + init(note: NdbNote, tag: ndb_tag_ptr, index: Int32) { self.note = note self.tag = tag self.index = index - self.str = ndb_tag_str(note.note, tag, index) + self.str = ndb_tag_str(note.note.ptr, tag.ptr, index) } var is_id: Bool { diff --git a/nostrdb/NdbTagIterator.swift b/nostrdb/NdbTagIterator.swift index 930cc6d84..9374765dd 100644 --- a/nostrdb/NdbTagIterator.swift +++ b/nostrdb/NdbTagIterator.swift @@ -9,10 +9,10 @@ import Foundation struct TagSequence: Sequence { let note: NdbNote - let tag: UnsafeMutablePointer + let tag: ndb_tag_ptr var count: UInt16 { - tag.pointee.count + ndb_tag_count(tag.ptr) } func strings() -> [String] { @@ -34,7 +34,7 @@ struct TagIterator: IteratorProtocol { typealias Element = NdbTagElem mutating func next() -> NdbTagElem? { - guard index < tag.pointee.count else { return nil } + guard index < ndb_tag_count(tag.ptr) else { return nil } let el = NdbTagElem(note: note, tag: tag, index: index) index += 1 @@ -44,13 +44,13 @@ struct TagIterator: IteratorProtocol { var index: Int32 let note: NdbNote - var tag: UnsafeMutablePointer + var tag: ndb_tag_ptr var count: UInt16 { - tag.pointee.count + ndb_tag_count(tag.ptr) } - init(note: NdbNote, tag: UnsafeMutablePointer) { + init(note: NdbNote, tag: ndb_tag_ptr) { self.note = note self.tag = tag self.index = 0 diff --git a/nostrdb/NdbTagsIterator.swift b/nostrdb/NdbTagsIterator.swift index 1fdfb4a83..f8dfadb7f 100644 --- a/nostrdb/NdbTagsIterator.swift +++ b/nostrdb/NdbTagsIterator.swift @@ -20,16 +20,13 @@ struct TagsIterator: IteratorProtocol { return nil } - return TagSequence(note: note, tag: self.iter.tag) - } - - var count: UInt16 { - return note.note.pointee.tags.count + let tag_ptr = ndb_tag_ptr(ptr: self.iter.tag) + return TagSequence(note: note, tag: tag_ptr) } init(note: NdbNote) { self.iter = ndb_iterator() - ndb_tags_iterate_start(note.note, &self.iter) + ndb_tags_iterate_start(note.note.ptr, &self.iter) self.done = false self.note = note } @@ -39,7 +36,8 @@ struct TagsSequence: Encodable, Sequence { let note: NdbNote var count: UInt16 { - note.note.pointee.tags.count + let tags_ptr = ndb_note_tags(note.note.ptr) + return ndb_tags_count(tags_ptr) } func strings() -> [[String]] { @@ -70,7 +68,8 @@ struct TagsSequence: Encodable, Sequence { } precondition(false, "sequence subscript oob") // it seems like the compiler needs this or it gets bitchy - return .init(note: .init(note: .allocate(capacity: 1), size: 0, owned: true, key: nil), tag: .allocate(capacity: 1)) + let nil_ptr = OpaquePointer(bitPattern: 0) + return .init(note: .init(note: .init(ptr: nil_ptr), size: 0, owned: true, key: nil), tag: .init(ptr: nil_ptr)) } func makeIterator() -> TagsIterator { diff --git a/nostrdb/NdbTxn.swift b/nostrdb/NdbTxn.swift index 5482d91f4..eac24ef48 100644 --- a/nostrdb/NdbTxn.swift +++ b/nostrdb/NdbTxn.swift @@ -21,6 +21,10 @@ class NdbTxn { var generation: Int var name: String + static func pure(ndb: Ndb, val: T) -> NdbTxn { + .init(ndb: ndb, txn: ndb_txn(), val: val, generation: ndb.generation, inherited: true, name: "pure_txn") + } + init?(ndb: Ndb, with: (NdbTxn) -> T = { _ in () }, name: String? = nil) { guard !ndb.is_closed else { return nil } self.name = name ?? "txn" diff --git a/nostrdb/src/bindings/c/flatbuffers_common_builder.h b/nostrdb/src/bindings/c/flatbuffers_common_builder.h index a4be1ce6e..6266b9894 100644 --- a/nostrdb/src/bindings/c/flatbuffers_common_builder.h +++ b/nostrdb/src/bindings/c/flatbuffers_common_builder.h @@ -5,9 +5,9 @@ /* Common FlatBuffers build functionality for C. */ -#include "flatcc/flatcc_prologue.h" +#include "flatcc_prologue.h" #ifndef FLATBUILDER_H -#include "flatcc/flatcc_builder.h" +#include "flatcc_builder.h" #endif typedef flatcc_builder_t flatbuffers_builder_t; typedef flatcc_builder_ref_t flatbuffers_ref_t; @@ -681,5 +681,5 @@ __flatbuffers_build_scalar(flatbuffers_, flatbuffers_double, double) __flatbuffers_build_string(flatbuffers_) __flatbuffers_build_buffer(flatbuffers_) -#include "flatcc/flatcc_epilogue.h" +#include "flatcc_epilogue.h" #endif /* FLATBUFFERS_COMMON_BUILDER_H */ diff --git a/nostrdb/src/bindings/c/flatbuffers_common_reader.h b/nostrdb/src/bindings/c/flatbuffers_common_reader.h index c57530868..49e479e29 100644 --- a/nostrdb/src/bindings/c/flatbuffers_common_reader.h +++ b/nostrdb/src/bindings/c/flatbuffers_common_reader.h @@ -5,8 +5,8 @@ /* Common FlatBuffers read functionality for C. */ -#include "flatcc/flatcc_prologue.h" -#include "flatcc/flatcc_flatbuffers.h" +#include "flatcc_prologue.h" +#include "flatcc_flatbuffers.h" #define __flatbuffers_read_scalar_at_byteoffset(N, p, o) N ## _read_from_pe((uint8_t *)(p) + (o)) @@ -574,5 +574,5 @@ static inline N ## _ ## K ## t N ## _as_typed_root(const void *buffer__tmp)\ #define __flatbuffers_struct_as_root(N) __flatbuffers_buffer_as_root(N, struct_) #define __flatbuffers_table_as_root(N) __flatbuffers_buffer_as_root(N, table_) -#include "flatcc/flatcc_epilogue.h" +#include "flatcc_epilogue.h" #endif /* FLATBUFFERS_COMMON_H */ diff --git a/nostrdb/src/bindings/c/meta_builder.h b/nostrdb/src/bindings/c/meta_builder.h index 5efa8bb65..ad850bd53 100644 --- a/nostrdb/src/bindings/c/meta_builder.h +++ b/nostrdb/src/bindings/c/meta_builder.h @@ -9,7 +9,7 @@ #ifndef FLATBUFFERS_COMMON_BUILDER_H #include "flatbuffers_common_builder.h" #endif -#include "flatcc/flatcc_prologue.h" +#include "flatcc_prologue.h" #ifndef flatbuffers_identifier #define flatbuffers_identifier 0 #endif @@ -65,5 +65,5 @@ static NdbEventMeta_ref_t NdbEventMeta_clone(flatbuffers_builder_t *B, NdbEventM __flatbuffers_memoize_end(B, t, NdbEventMeta_end(B)); } -#include "flatcc/flatcc_epilogue.h" +#include "flatcc_epilogue.h" #endif /* META_BUILDER_H */ diff --git a/nostrdb/src/bindings/c/meta_reader.h b/nostrdb/src/bindings/c/meta_reader.h index 98f49aaf7..90f2223ee 100644 --- a/nostrdb/src/bindings/c/meta_reader.h +++ b/nostrdb/src/bindings/c/meta_reader.h @@ -6,11 +6,11 @@ #ifndef FLATBUFFERS_COMMON_READER_H #include "flatbuffers_common_reader.h" #endif -#include "flatcc/flatcc_flatbuffers.h" +#include "flatcc_flatbuffers.h" #ifndef __alignas_is_defined #include #endif -#include "flatcc/flatcc_prologue.h" +#include "flatcc_prologue.h" #ifndef flatbuffers_identifier #define flatbuffers_identifier 0 #endif @@ -54,5 +54,5 @@ __flatbuffers_define_scalar_field(4, NdbEventMeta, zaps, flatbuffers_int32, int3 __flatbuffers_define_scalar_field(5, NdbEventMeta, zap_total, flatbuffers_int64, int64_t, INT64_C(0)) -#include "flatcc/flatcc_epilogue.h" +#include "flatcc_epilogue.h" #endif /* META_READER_H */ diff --git a/nostrdb/src/bindings/c/profile_builder.h b/nostrdb/src/bindings/c/profile_builder.h index 4c57b5111..97341d552 100644 --- a/nostrdb/src/bindings/c/profile_builder.h +++ b/nostrdb/src/bindings/c/profile_builder.h @@ -9,7 +9,7 @@ #ifndef FLATBUFFERS_COMMON_BUILDER_H #include "flatbuffers_common_builder.h" #endif -#include "flatcc/flatcc_prologue.h" +#include "flatcc_prologue.h" #ifndef flatbuffers_identifier #define flatbuffers_identifier 0 #endif @@ -127,5 +127,5 @@ static NdbProfileRecord_ref_t NdbProfileRecord_clone(flatbuffers_builder_t *B, N __flatbuffers_memoize_end(B, t, NdbProfileRecord_end(B)); } -#include "flatcc/flatcc_epilogue.h" +#include "flatcc_epilogue.h" #endif /* PROFILE_BUILDER_H */ diff --git a/nostrdb/src/bindings/c/profile_json_parser.h b/nostrdb/src/bindings/c/profile_json_parser.h index 30c0d2b9a..5c33a7442 100644 --- a/nostrdb/src/bindings/c/profile_json_parser.h +++ b/nostrdb/src/bindings/c/profile_json_parser.h @@ -3,8 +3,8 @@ /* Generated by flatcc 0.6.1 FlatBuffers schema compiler for C by dvide.com */ -#include "flatcc/flatcc_json_parser.h" -#include "flatcc/flatcc_prologue.h" +#include "flatcc_json_parser.h" +#include "flatcc_prologue.h" /* * Parses the default root table or struct of the schema and constructs a FlatBuffer. @@ -408,5 +408,5 @@ static int profile_parse_json(flatcc_builder_t *B, flatcc_json_parser_t *ctx, return 0; } -#include "flatcc/flatcc_epilogue.h" +#include "flatcc_epilogue.h" #endif /* PROFILE_JSON_PARSER_H */ diff --git a/nostrdb/src/bindings/c/profile_reader.h b/nostrdb/src/bindings/c/profile_reader.h index 136611dda..069ec2cbc 100644 --- a/nostrdb/src/bindings/c/profile_reader.h +++ b/nostrdb/src/bindings/c/profile_reader.h @@ -6,11 +6,11 @@ #ifndef FLATBUFFERS_COMMON_READER_H #include "flatbuffers_common_reader.h" #endif -#include "flatcc/flatcc_flatbuffers.h" +#include "flatcc_flatbuffers.h" #ifndef __alignas_is_defined #include #endif -#include "flatcc/flatcc_prologue.h" +#include "flatcc_prologue.h" #ifndef flatbuffers_identifier #define flatbuffers_identifier 0 #endif @@ -89,5 +89,5 @@ __flatbuffers_define_scalar_field(2, NdbProfileRecord, note_key, flatbuffers_uin __flatbuffers_define_string_field(3, NdbProfileRecord, lnurl, 0) -#include "flatcc/flatcc_epilogue.h" +#include "flatcc_epilogue.h" #endif /* PROFILE_READER_H */ diff --git a/nostrdb/src/bindings/c/profile_verifier.h b/nostrdb/src/bindings/c/profile_verifier.h index afae85e04..9595ab7aa 100644 --- a/nostrdb/src/bindings/c/profile_verifier.h +++ b/nostrdb/src/bindings/c/profile_verifier.h @@ -6,8 +6,8 @@ #ifndef PROFILE_READER_H #include "profile_reader.h" #endif -#include "flatcc/flatcc_verifier.h" -#include "flatcc/flatcc_prologue.h" +#include "flatcc_verifier.h" +#include "flatcc_prologue.h" static int NdbProfile_verify_table(flatcc_table_verifier_descriptor_t *td); static int NdbProfileRecord_verify_table(flatcc_table_verifier_descriptor_t *td); @@ -80,5 +80,5 @@ static inline int NdbProfileRecord_verify_as_root_with_type_hash(const void *buf return flatcc_verify_table_as_typed_root(buf, bufsiz, thash, &NdbProfileRecord_verify_table); } -#include "flatcc/flatcc_epilogue.h" +#include "flatcc_epilogue.h" #endif /* PROFILE_VERIFIER_H */ diff --git a/nostrdb/src/bindings/swift/NdbMeta.swift b/nostrdb/src/bindings/swift/NdbMeta.swift index f452ee6d3..1d81494af 100644 --- a/nostrdb/src/bindings/swift/NdbMeta.swift +++ b/nostrdb/src/bindings/swift/NdbMeta.swift @@ -2,8 +2,6 @@ // swiftlint:disable all // swiftformat:disable all -import FlatBuffers - public struct NdbEventMeta: FlatBufferObject, Verifiable { static func validateVersion() { FlatBuffersVersion_23_5_26() } diff --git a/nostrdb/src/bindings/swift/NdbProfile.swift b/nostrdb/src/bindings/swift/NdbProfile.swift index eaecf8a61..62e66347b 100644 --- a/nostrdb/src/bindings/swift/NdbProfile.swift +++ b/nostrdb/src/bindings/swift/NdbProfile.swift @@ -2,8 +2,6 @@ // swiftlint:disable all // swiftformat:disable all -import FlatBuffers - public struct NdbProfile: FlatBufferObject, Verifiable { static func validateVersion() { FlatBuffersVersion_23_5_26() } diff --git a/nostrdb/src/bolt11/bolt11.c b/nostrdb/src/bolt11/bolt11.c index efeb8bb53..d79eb66ed 100644 --- a/nostrdb/src/bolt11/bolt11.c +++ b/nostrdb/src/bolt11/bolt11.c @@ -133,7 +133,8 @@ static struct bolt11 *decode_fail(struct bolt11 *b11, char **fail, va_list ap; va_start(ap, fmt); - *fail = tal_vfmt(tal_parent(b11), fmt, ap); + if (fail) + *fail = tal_vfmt(tal_parent(b11), fmt, ap); va_end(ap); return tal_free(b11); } diff --git a/nostrdb/src/nostr_bech32.c b/nostrdb/src/nostr_bech32.c index f9f8c334b..b837f040c 100644 --- a/nostrdb/src/nostr_bech32.c +++ b/nostrdb/src/nostr_bech32.c @@ -11,6 +11,7 @@ #include "str_block.h" #include "nostrdb.h" #include "bolt11/bech32.h" +#include "endian.h" #define MAX_TLVS 32 @@ -129,7 +130,7 @@ static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *n case TLV_KIND: if (tlv.len != 4) return 0; - nevent->kind = decode_tlv-U32(tlv.value); + nevent->kind = decode_tlv_u32(tlv.value); nevent->has_kind = 1; break; case TLV_AUTHOR: @@ -148,12 +149,12 @@ static int parse_nostr_bech32_nevent(struct cursor *cur, struct bech32_nevent *n static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *naddr) { struct nostr_tlv tlv; - int i; + int i, has_kind; + has_kind = 0; naddr->identifier.str = NULL; naddr->identifier.len = 0; naddr->pubkey = NULL; - naddr->has_kind = 0; naddr->relays.num_relays = 0; for (i = 0; i < MAX_TLVS; i++) { @@ -172,7 +173,7 @@ static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *nad case TLV_KIND: if (tlv.len != 4) return 0; naddr->kind = decode_tlv_u32(tlv.value); - naddr->has_kind = 1; + has_kind = 1; break; case TLV_RELAY: add_relay(&naddr->relays, &tlv); @@ -180,7 +181,7 @@ static int parse_nostr_bech32_naddr(struct cursor *cur, struct bech32_naddr *nad } } - return naddr->identifier.str != NULL; + return naddr->identifier.str != NULL && has_kind; } static int parse_nostr_bech32_nprofile(struct cursor *cur, struct bech32_nprofile *nprofile) { diff --git a/nostrdb/src/nostrdb.h b/nostrdb/src/nostrdb.h index 4dca10f83..884029f61 100644 --- a/nostrdb/src/nostrdb.h +++ b/nostrdb/src/nostrdb.h @@ -367,7 +367,6 @@ struct bech32_naddr { struct ndb_str_block identifier; const unsigned char *pubkey; uint32_t kind; - int has_kind; }; struct bech32_nrelay { From e08cedf50c207c62cddf321f37860335f31a7f86 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Apr 2024 20:47:25 +0100 Subject: [PATCH 142/146] Fix relay compile issue Signed-off-by: William Casarin --- damus/Models/ProfileModel.swift | 4 ++-- damus/Views/ActionBar/ShareAction.swift | 2 +- damus/Views/Events/EventMenu.swift | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/damus/Models/ProfileModel.swift b/damus/Models/ProfileModel.swift index 90376383e..b52227bd3 100644 --- a/damus/Models/ProfileModel.swift +++ b/damus/Models/ProfileModel.swift @@ -160,8 +160,8 @@ class ProfileModel: ObservableObject, Equatable { damus.pool.unsubscribe(sub_id: findRelay_subid) } - func getCappedRelayStrings() -> [String] { - return relays?.keys.prefix(MAX_SHARE_RELAYS).map { $0.absoluteString } ?? [] + func getCappedRelays() -> [RelayURL] { + return relays?.keys.prefix(MAX_SHARE_RELAYS).map { $0 } ?? [] } } diff --git a/damus/Views/ActionBar/ShareAction.swift b/damus/Views/ActionBar/ShareAction.swift index 49605de3f..7aa485c3d 100644 --- a/damus/Views/ActionBar/ShareAction.swift +++ b/damus/Views/ActionBar/ShareAction.swift @@ -40,7 +40,7 @@ struct ShareAction: View { ShareActionButton(img: "link", text: NSLocalizedString("Copy Link", comment: "Button to copy link to note")) { dismiss() - UIPasteboard.general.string = "https://damus.io/" + Bech32Object.encode(.nevent(NEvent(noteid: event.id, relays: userProfile.getCappedRelayStrings()))) + UIPasteboard.general.string = "https://damus.io/" + Bech32Object.encode(.nevent(NEvent(noteid: event.id, relays: userProfile.getCappedRelays()))) } let bookmarkImg = isBookmarked ? "bookmark.fill" : "bookmark" diff --git a/damus/Views/Events/EventMenu.swift b/damus/Views/Events/EventMenu.swift index 679427073..04fecbe8c 100644 --- a/damus/Views/Events/EventMenu.swift +++ b/damus/Views/Events/EventMenu.swift @@ -73,7 +73,7 @@ struct MenuItems: View { } Button { - UIPasteboard.general.string = Bech32Object.encode(.nprofile(NProfile(author: target_pubkey, relays: profileModel.getCappedRelayStrings()))) + UIPasteboard.general.string = Bech32Object.encode(.nprofile(NProfile(author: target_pubkey, relays: profileModel.getCappedRelays()))) } label: { Label(NSLocalizedString("Copy user public key", comment: "Context menu option for copying the ID of the user who created the note."), image: "user") } From dca04978883b5dce30160a09f30548f984101a4f Mon Sep 17 00:00:00 2001 From: William Casarin Date: Thu, 4 Apr 2024 14:14:15 -0700 Subject: [PATCH 143/146] ndb: add subscription callback initializers Signed-off-by: William Casarin --- nostrdb/Ndb.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nostrdb/Ndb.swift b/nostrdb/Ndb.swift index d8539184f..6ab6f44cc 100644 --- a/nostrdb/Ndb.swift +++ b/nostrdb/Ndb.swift @@ -110,7 +110,7 @@ class Ndb { let ok = path.withCString { testdir in var ok = false while !ok && mapsize > 1024 * 1024 * 700 { - var cfg = ndb_config(flags: 0, ingester_threads: ingest_threads, mapsize: mapsize, filter_context: nil, ingest_filter: nil) + var cfg = ndb_config(flags: 0, ingester_threads: ingest_threads, mapsize: mapsize, filter_context: nil, ingest_filter: nil, sub_cb_ctx: nil, sub_cb: nil) ok = ndb_init(&ndb_p, testdir, &cfg) != 0 if !ok { mapsize /= 2 From 436b8a7c8c45de1605a1e653c412ed5f4428e2f9 Mon Sep 17 00:00:00 2001 From: William Casarin Date: Fri, 5 Apr 2024 11:13:04 -0700 Subject: [PATCH 144/146] test: fix broken tests Signed-off-by: William Casarin --- damus/Models/EventRef.swift | 18 ++- damus/Models/Mentions.swift | 4 + damus/Models/Post.swift | 10 ++ damus/Views/DMChatView.swift | 6 +- damusTests/Bech32ObjectTests.swift | 30 ++--- damusTests/HashtagTests.swift | 105 +++++++++--------- damusTests/InvoiceTests.swift | 12 +- .../Models/DamusParseContentTests.swift | 2 +- damusTests/NIP19Tests.swift | 8 +- damusTests/NoteContentViewTests.swift | 10 +- damusTests/ReplyTests.swift | 67 +++++++---- damusTests/UrlTests.swift | 18 +-- damusTests/damusTests.swift | 14 +-- 13 files changed, 177 insertions(+), 127 deletions(-) diff --git a/damus/Models/EventRef.swift b/damus/Models/EventRef.swift index 9f8cb7c58..1d6d6a2f4 100644 --- a/damus/Models/EventRef.swift +++ b/damus/Models/EventRef.swift @@ -116,7 +116,23 @@ func interp_event_refs_with_mentions(tags: Tags) -> [EventRef] { return replies } -func interpret_event_refs(blocks: BlocksSequence, tags: Tags) -> [EventRef] { +func interpret_event_refs(tags: Tags) -> [EventRef] { + if tags.count == 0 { + return [] + } + + /// build a set of indices for each event mention + //let mention_indices = build_mention_indices(blocks, type: .e) + + /// simpler case with no mentions + //if mention_indices.count == 0 { + //return interp_event_refs_without_mentions_ndb(References(tags: tags)) + //} + + return interp_event_refs_with_mentions(tags: tags) +} + +func ndb_interpret_event_refs(tags: Tags) -> [EventRef] { if tags.count == 0 { return [] } diff --git a/damus/Models/Mentions.swift b/damus/Models/Mentions.swift index 882b7d563..e59e066b3 100644 --- a/damus/Models/Mentions.swift +++ b/damus/Models/Mentions.swift @@ -27,6 +27,10 @@ extension UnsafePointer { struct MentionRef: TagKeys, TagConvertible, Equatable, Hashable { let nip19: Bech32Object + static func pubkey(_ pubkey: Pubkey) -> MentionRef { + self.init(nip19: .npub(pubkey)) + } + static func note(_ note_id: NoteId) -> MentionRef { return self.init(nip19: .note(note_id)) } diff --git a/damus/Models/Post.swift b/damus/Models/Post.swift index c26d453d2..193902ee9 100644 --- a/damus/Models/Post.swift +++ b/damus/Models/Post.swift @@ -19,6 +19,16 @@ struct NostrPost { } } +/// This should only be used in tests, we don't use this anymore directly +func parse_note_content(content: NoteContent) -> Blocks? +{ + switch content { + case .note(let note): + return parse_post_blocks(content: note.content) + case .content(let content, _): + return parse_post_blocks(content: content) + } +} /// Return a list of tags func parse_post_blocks(content: String) -> Blocks? { diff --git a/damus/Views/DMChatView.swift b/damus/Views/DMChatView.swift index f779b8f41..52c05b815 100644 --- a/damus/Views/DMChatView.swift +++ b/damus/Views/DMChatView.swift @@ -123,12 +123,10 @@ struct DMChatView: View, KeyboardReadable { func send_message() { let tags = [["p", pubkey.hex()]] - let post_blocks = parse_post_blocks(content: dms.draft)?.blocks - guard let content = post_blocks?.map({ pb in pb.asString }).joined(separator: "") else { - // TODO: handle these errors somehow? - print("error creating dm") + guard let post_blocks = parse_post_blocks(content: dms.draft)?.blocks else { return } + let content = post_blocks.map({ pb in pb.asString }).joined(separator: "") guard let dm = create_dm(content, to_pk: pubkey, tags: tags, keypair: damus_state.keypair) else { print("error creating dm") diff --git a/damusTests/Bech32ObjectTests.swift b/damusTests/Bech32ObjectTests.swift index 6683544cb..460026a23 100644 --- a/damusTests/Bech32ObjectTests.swift +++ b/damusTests/Bech32ObjectTests.swift @@ -16,7 +16,7 @@ class Bech32ObjectTests: XCTestCase { func testTLVParsing_NeventHasRelaysNoAuthorNoKind_ValidContent() throws { let content = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5nxnepm" let expectedNoteIDHex = "b9f5441e45ca39179320e0031cfb18e34078673dcc3d3e3a3b3a981760aa5696" - let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"] + let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init) guard let noteid = hex_decode_noteid(expectedNoteIDHex) else { XCTFail("Parsing note ID failed") return @@ -34,7 +34,7 @@ class Bech32ObjectTests: XCTestCase { func testTLVParsing_NeventHasRelaysNoAuthorHasKind_ValidContent() throws { let content = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5qvzqqqqqqyjyqz7d" let expectedNoteIDHex = "b9f5441e45ca39179320e0031cfb18e34078673dcc3d3e3a3b3a981760aa5696" - let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"] + let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init) guard let noteid = hex_decode_noteid(expectedNoteIDHex) else { XCTFail("Parsing note ID failed") return @@ -53,7 +53,7 @@ class Bech32ObjectTests: XCTestCase { let content = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5qgsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8grqsqqqqqpw4032x" let expectedNoteIDHex = "b9f5441e45ca39179320e0031cfb18e34078673dcc3d3e3a3b3a981760aa5696" - let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"] + let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init) guard let noteid = hex_decode_noteid(expectedNoteIDHex) else { XCTFail("Parsing note ID failed") return @@ -78,8 +78,8 @@ class Bech32ObjectTests: XCTestCase { XCTFail() return } - let relays = ["wss://r.x.com", "wss://djbas.sadkb.com"] - + let relays = ["wss://r.x.com", "wss://djbas.sadkb.com"].compactMap(RelayURL.init) + let expectedObject = Bech32Object.nprofile(NProfile(author: Pubkey(author.data), relays: relays)) guard let actualObject = Bech32Object.parse(content) else { XCTFail("Invalid Object") @@ -106,7 +106,7 @@ class Bech32ObjectTests: XCTestCase { XCTFail("Can't decode npub") return } - let relays = ["wss://relay.nostr.band"] + let relays = ["wss://relay.nostr.band"].compactMap(RelayURL.init) let identifier = "1700730909108" let kind: UInt32 = 30023 @@ -122,8 +122,8 @@ class Bech32ObjectTests: XCTestCase { return } - let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"] - + let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init) + let expectedEncoding = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5nxnepm" let actualEncoding = Bech32Object.encode(.nevent(NEvent(noteid: noteid, relays: relays))) @@ -140,8 +140,8 @@ class Bech32ObjectTests: XCTestCase { let relays = [ "wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net" - ] - + ].compactMap(RelayURL.init) + let expectedEncoding = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5qvzqqqqqqyjyqz7d" let actualEncoding = Bech32Object.encode(.nevent(NEvent(noteid: noteid, relays: relays, kind: 1))) @@ -159,8 +159,8 @@ class Bech32ObjectTests: XCTestCase { return } - let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"] - + let relays = ["wss://nostr-relay.untethr.me", "wss://nostr-pub.wellorder.net"].compactMap(RelayURL.init) + let expectedEncoding = "nevent1qqstna2yrezu5wghjvswqqculvvwxsrcvu7uc0f78gan4xqhvz49d9spr3mhxue69uhkummnw3ez6un9d3shjtn4de6x2argwghx6egpr4mhxue69uhkummnw3ez6ur4vgh8wetvd3hhyer9wghxuet5qgsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8grqsqqqqqpw4032x" let actualEncoding = Bech32Object.encode(.nevent(NEvent(noteid: noteid, relays: relays, author: Pubkey(author.data), kind: 1))) @@ -177,8 +177,8 @@ class Bech32ObjectTests: XCTestCase { let relays = [ "wss://r.x.com", "wss://djbas.sadkb.com" - ] - + ].compactMap(RelayURL.init) + let expectedEncoding = "nprofile1qqsrhuxx8l9ex335q7he0f09aej04zpazpl0ne2cgukyawd24mayt8gpp4mhxue69uhhytnc9e3k7mgpz4mhxue69uhkg6nzv9ejuumpv34kytnrdaksjlyr9p" let actualEncoding = Bech32Object.encode(.nprofile(NProfile(author: Pubkey(author.data), relays: relays))) @@ -202,7 +202,7 @@ class Bech32ObjectTests: XCTestCase { return } - let relays = ["wss://relay.nostr.band"] + let relays = ["wss://relay.nostr.band"].compactMap(RelayURL.init) let identifier = "1700730909108" let kind: UInt32 = 30023 diff --git a/damusTests/HashtagTests.swift b/damusTests/HashtagTests.swift index ce8576146..222e321ca 100644 --- a/damusTests/HashtagTests.swift +++ b/damusTests/HashtagTests.swift @@ -9,12 +9,13 @@ import XCTest @testable import damus + final class HashtagTests: XCTestCase { // Basic hashtag tests func testParseHashtag() { - let parsed = parse_note_content(content: .content("some hashtag #bitcoin derp",nil)).blocks + let parsed = parse_note_content(content: .content("some hashtag #bitcoin derp",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -24,7 +25,7 @@ final class HashtagTests: XCTestCase { } func testParseHashtagEnd() { - let parsed = parse_note_content(content: .content("some hashtag #bitcoin",nil)).blocks + let parsed = parse_note_content(content: .content("some hashtag #bitcoin",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 2) @@ -40,7 +41,7 @@ final class HashtagTests: XCTestCase { // Underscores are allowed in hashtags func testHashtagWithUnderscore() { - let parsed = parse_note_content(content: .content("the #under_score is allowed in hashtags",nil)).blocks + let parsed = parse_note_content(content: .content("the #under_score is allowed in hashtags",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -52,7 +53,7 @@ final class HashtagTests: XCTestCase { // Test ASCII punctuation (not allowed in hashtags) func testHashtagWithComma() { - let parsed = parse_note_content(content: .content("the #comma, is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #comma, is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -62,7 +63,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithPeriod() { - let parsed = parse_note_content(content: .content("the #period. is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #period. is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -72,7 +73,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithQuestionMark() { - let parsed = parse_note_content(content: .content("the #question?mark is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #question?mark is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -82,7 +83,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithGraveAccent() { - let parsed = parse_note_content(content: .content("the #grave`accent is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #grave`accent is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -92,7 +93,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithTilde() { - let parsed = parse_note_content(content: .content("the #tilde~ is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #tilde~ is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -102,7 +103,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithExclamationPoint() { - let parsed = parse_note_content(content: .content("the #exclamation!point is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #exclamation!point is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -112,7 +113,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithAtSign() { - let parsed = parse_note_content(content: .content("the #at@sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #at@sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -122,7 +123,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithDollarSign() { - let parsed = parse_note_content(content: .content("the #dollar$sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #dollar$sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -132,7 +133,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithPercentSign() { - let parsed = parse_note_content(content: .content("the #percent%sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #percent%sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -142,7 +143,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithCaret() { - let parsed = parse_note_content(content: .content("the #caret^ is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #caret^ is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -152,7 +153,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithAmpersand() { - let parsed = parse_note_content(content: .content("the #ampersand& is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #ampersand& is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -162,7 +163,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithAsterisk() { - let parsed = parse_note_content(content: .content("the #asterisk* is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #asterisk* is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -172,7 +173,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithLeftParenthesis() { - let parsed = parse_note_content(content: .content("the #left(parenthesis is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #left(parenthesis is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -182,7 +183,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithRightParenthesis() { - let parsed = parse_note_content(content: .content("the #right)parenthesis is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #right)parenthesis is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -192,7 +193,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithDash() { - let parsed = parse_note_content(content: .content("the #dash- is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #dash- is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -202,7 +203,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithPlusSign() { - let parsed = parse_note_content(content: .content("the #plus+sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #plus+sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -212,7 +213,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithEqualsSign() { - let parsed = parse_note_content(content: .content("the #equals=sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #equals=sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -222,7 +223,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithLeftBracket() { - let parsed = parse_note_content(content: .content("the #left[bracket is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #left[bracket is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -232,7 +233,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithRightBracket() { - let parsed = parse_note_content(content: .content("the #right]bracket is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #right]bracket is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -242,7 +243,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithLeftBrace() { - let parsed = parse_note_content(content: .content("the #left{brace is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #left{brace is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -252,7 +253,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithRightBrace() { - let parsed = parse_note_content(content: .content("the #right}brace is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #right}brace is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -262,7 +263,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithBackslash() { - let parsed = parse_note_content(content: .content("the #back\\slash is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #back\\slash is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -272,7 +273,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithVerticalLine() { - let parsed = parse_note_content(content: .content("the #vertical|line is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #vertical|line is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -282,7 +283,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithSemicolon() { - let parsed = parse_note_content(content: .content("the #semicolon; is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #semicolon; is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -292,7 +293,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithColon() { - let parsed = parse_note_content(content: .content("the #colon: is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #colon: is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -302,7 +303,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithApostrophe() { - let parsed = parse_note_content(content: .content("the #apostrophe' is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #apostrophe' is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -312,7 +313,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithQuotationMark() { - let parsed = parse_note_content(content: .content("the #quotation\"mark is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #quotation\"mark is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -322,7 +323,7 @@ final class HashtagTests: XCTestCase { } func testHashtagWithLessThanSign() { - let parsed = parse_note_content(content: .content("the #lessthansign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #greaterthan>sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -349,7 +350,7 @@ final class HashtagTests: XCTestCase { // Test pound sign (£) (U+00A3) func testHashtagWithPoundSign() { - let parsed = parse_note_content(content: .content("the #pound£sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #pound£sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -360,7 +361,7 @@ final class HashtagTests: XCTestCase { // Test yen sign (¥) (U+00A5) func testHashtagWithYenSign() { - let parsed = parse_note_content(content: .content("the #yen¥sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #yen¥sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -371,7 +372,7 @@ final class HashtagTests: XCTestCase { // Test section sign (§) (U+00A7) func testHashtagWithSectionSign() { - let parsed = parse_note_content(content: .content("the #section§sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #section§sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -382,7 +383,7 @@ final class HashtagTests: XCTestCase { // Test plus-minus sign (±) (U+00B1) func testHashtagWithPlusMinusSign() { - let parsed = parse_note_content(content: .content("the #plusminus±sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #plusminus±sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -393,7 +394,7 @@ final class HashtagTests: XCTestCase { // Test inverted question mark (¿) (U+00BF) func testHashtagWithInvertedQuestionMark() { - let parsed = parse_note_content(content: .content("the #invertedquestion¿mark is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #invertedquestion¿mark is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -406,7 +407,7 @@ final class HashtagTests: XCTestCase { // Test Latin small letter u with diaeresis (ü) (U+00FC) (allowed in hashtags) func testHashtagWithAccents() { - let parsed = parse_note_content(content: .content("hello from #türkiye",nil)).blocks + let parsed = parse_note_content(content: .content("hello from #türkiye",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 2) @@ -418,7 +419,7 @@ final class HashtagTests: XCTestCase { // Test en dash (–) (U+2013) func testHashtagWithEnDash() { - let parsed = parse_note_content(content: .content("the #en–dash is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #en–dash is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -429,7 +430,7 @@ final class HashtagTests: XCTestCase { // Test em dash (—) (U+2014) func testHashtagWithEmDash() { - let parsed = parse_note_content(content: .content("the #em—dash is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #em—dash is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -440,7 +441,7 @@ final class HashtagTests: XCTestCase { // Test horizontal bar (―) (U+2015) func testHashtagWithHorizontalBar() { - let parsed = parse_note_content(content: .content("the #horizontal―bar is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #horizontal―bar is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -451,7 +452,7 @@ final class HashtagTests: XCTestCase { // Test horizontal ellipsis (…) (U+2026) func testHashtagWithHorizontalEllipsis() { - let parsed = parse_note_content(content: .content("the #horizontal…ellipsis is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #horizontal…ellipsis is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -464,7 +465,7 @@ final class HashtagTests: XCTestCase { // Test euro sign (€) (U+20AC) func testHashtagWithEuroSign() { - let parsed = parse_note_content(content: .content("the #euro€sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #euro€sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -475,7 +476,7 @@ final class HashtagTests: XCTestCase { // Test Bitcoin sign (₿) (U+20BF) func testHashtagWithBitcoinSign() { - let parsed = parse_note_content(content: .content("the #bitcoin₿sign is not allowed",nil)).blocks + let parsed = parse_note_content(content: .content("the #bitcoin₿sign is not allowed",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -489,8 +490,8 @@ final class HashtagTests: XCTestCase { // Emojis such as ☕️ (U+2615) are allowed in hashtags func testHashtagWithEmoji() { let content = "some hashtag #bitcoin☕️ cool" - let parsed = parse_note_content(content: .content(content, nil)).blocks - let post_blocks = parse_post_blocks(content: content) + let parsed = parse_note_content(content: .content(content, nil))!.blocks + let post_blocks = parse_post_blocks(content: content)!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -509,8 +510,8 @@ final class HashtagTests: XCTestCase { // Japanese: wave dash (〜) (U+301C) (allowed in hashtags) func testPowHashtag() { let content = "pow! #ぽわ〜" - let parsed = parse_note_content(content: .content(content,nil)).blocks - let post_blocks = parse_post_blocks(content: content) + let parsed = parse_note_content(content: .content(content,nil))!.blocks + let post_blocks = parse_post_blocks(content: content)!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 2) @@ -525,7 +526,7 @@ final class HashtagTests: XCTestCase { // Hangul: Hangul Syllable Si (시) (U+C2DC) and // Hangul Syllable Heom (험) (U+D5D8) (allowed in hashtags) func testHashtagWithNonLatinCharacters() { - let parsed = parse_note_content(content: .content("this is a #시험 hope it works",nil)).blocks + let parsed = parse_note_content(content: .content("this is a #시험 hope it works",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -536,8 +537,8 @@ final class HashtagTests: XCTestCase { // Japanese: fullwidth tilde (~) (U+FF5E) (allowed in hashtags) func testHashtagWithFullwidthTilde() { - let parsed = parse_note_content(content: .content("pow! the fullwidth tilde #ぽわ~ is allowed in hashtags",nil)).blocks - + let parsed = parse_note_content(content: .content("pow! the fullwidth tilde #ぽわ~ is allowed in hashtags",nil))!.blocks + XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) XCTAssertEqual(parsed[0].asText, "pow! the fullwidth tilde ") @@ -547,7 +548,7 @@ final class HashtagTests: XCTestCase { // Japanese: bai (倍) (U+500D) (allowed in hashtags) func testHashtagWithBaiKanji() { - let parsed = parse_note_content(content: .content("pow! #10倍界王拳 is allowed in hashtags",nil)).blocks + let parsed = parse_note_content(content: .content("pow! #10倍界王拳 is allowed in hashtags",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) diff --git a/damusTests/InvoiceTests.swift b/damusTests/InvoiceTests.swift index a65a47ad8..9a4222840 100644 --- a/damusTests/InvoiceTests.swift +++ b/damusTests/InvoiceTests.swift @@ -33,7 +33,7 @@ final class InvoiceTests: XCTestCase { func testParseAnyAmountInvoice() throws { let invstr = "LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN4M4XU59XMJCXKR7YDV29DDP6LVQUT46ZW6CU3KE9GQDQ9V9H8JXQ8P3MYLZJCQPJRZJQF60PZDVNGGQWQDNERZSQN35L8CVQ3QG2Z5NSZYD0D3Q0JW2TL6VUZA7FYQQWKGQQYQQQQLGQQQQXJQQ9Q9QXPQYSGQ39EM4QJMQFKZGJXZVGL7QJMYNSWA8PGDTAGXXRG5Z92M7VLCGKQK2L2THDF8LM0AUKAURH7FVAWDLRNMVF38W4EYJDNVN9V4Z9CRS5CQCV465C" - let parsed = parse_note_content(content: .content(invstr,nil)).blocks + let parsed = parse_note_content(content: .content(invstr,nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 1) @@ -52,7 +52,7 @@ final class InvoiceTests: XCTestCase { let invstr = """ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN4M4XU59XMJCXKR7YDV29DDP6LVQUT46ZW6CU3KE9GQDQ9V9H8JXQ8P3MYLZJCQPJRZJQF60PZDVNGGQWQDNERZSQN35L8CVQ3QG2Z5NSZYD0D3Q0JW2TL6VUZA7FYQQWKGQQYQQQQLGQQQQXJQQ9Q9QXPQYSGQ39EM4QJMQFKZGJXZVGL7QJMYNSWA8PGDTAGXXRG5Z92M7VLCGKQK2L2THDF8LM0AUKAURH7FVAWDLRNMVF38W4EYJDNVN9V4Z9CRS5CQCV465C hi there """ - let parsed = parse_note_content(content: .content(invstr,nil)).blocks + let parsed = parse_note_content(content: .content(invstr,nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 2) @@ -69,7 +69,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN func testParseInvoiceUpper() throws { let invstr = "LNBC100N1P357SL0SP5T9N56WDZTUN39LGDQLR30XQWKSG3K69Q4Q2RKR52APLUJW0ESN0QPP5MRQGLJK62Z20Q4NVGR6LZCYN6FHYLZCCWDVU4K77APG3ZMRKUJJQDPZW35XJUEQD9EJQCFQV3JHXCMJD9C8G6T0DCXQYJW5QCQPJRZJQT56H4GVP5YX36U2UZQA6QWCSK3E2DUUNFXPPZJ9VHYPC3WFE2WSWZ607UQQ3XQQQSQQQQQQQQQQQLQQYG9QYYSGQAGX5H20AEULJ3GDWX3KXS8U9F4MCAKDKWUAKASAMM9562FFYR9EN8YG20LG0YGNR9ZPWP68524KMDA0T5XP2WYTEX35PU8HAPYJAJXQPSQL29R" - let parsed = parse_note_content(content: .content(invstr,nil)).blocks + let parsed = parse_note_content(content: .content(invstr,nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 1) @@ -86,7 +86,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN func testParseInvoiceWithPrefix() throws { let invstr = "lightning:lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r" - let parsed = parse_note_content(content: .content(invstr,nil)).blocks + let parsed = parse_note_content(content: .content(invstr,nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 1) @@ -95,7 +95,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN func testParseInvoiceWithPrefixCapitalized() throws { let invstr = "LIGHTNING:LNBC100N1P357SL0SP5T9N56WDZTUN39LGDQLR30XQWKSG3K69Q4Q2RKR52APLUJW0ESN0QPP5MRQGLJK62Z20Q4NVGR6LZCYN6FHYLZCCWDVU4K77APG3ZMRKUJJQDPZW35XJUEQD9EJQCFQV3JHXCMJD9C8G6T0DCXQYJW5QCQPJRZJQT56H4GVP5YX36U2UZQA6QWCSK3E2DUUNFXPPZJ9VHYPC3WFE2WSWZ607UQQ3XQQQSQQQQQQQQQQQLQQYG9QYYSGQAGX5H20AEULJ3GDWX3KXS8U9F4MCAKDKWUAKASAMM9562FFYR9EN8YG20LG0YGNR9ZPWP68524KMDA0T5XP2WYTEX35PU8HAPYJAJXQPSQL29R" - let parsed = parse_note_content(content: .content(invstr,nil)).blocks + let parsed = parse_note_content(content: .content(invstr,nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 1) @@ -104,7 +104,7 @@ LNBC1P3MR5UJSP5G7SA48YD4JWTTPCHWMY4QYN4UWZQCJQ8NMWKD6QE3HCRVYTDLH9SPP57YM9TSA9NN func testParseInvoice() throws { let invstr = "lnbc100n1p357sl0sp5t9n56wdztun39lgdqlr30xqwksg3k69q4q2rkr52aplujw0esn0qpp5mrqgljk62z20q4nvgr6lzcyn6fhylzccwdvu4k77apg3zmrkujjqdpzw35xjueqd9ejqcfqv3jhxcmjd9c8g6t0dcxqyjw5qcqpjrzjqt56h4gvp5yx36u2uzqa6qwcsk3e2duunfxppzj9vhypc3wfe2wswz607uqq3xqqqsqqqqqqqqqqqlqqyg9qyysgqagx5h20aeulj3gdwx3kxs8u9f4mcakdkwuakasamm9562ffyr9en8yg20lg0ygnr9zpwp68524kmda0t5xp2wytex35pu8hapyjajxqpsql29r" - let parsed = parse_note_content(content: .content(invstr,nil)).blocks + let parsed = parse_note_content(content: .content(invstr,nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 1) diff --git a/damusTests/Models/DamusParseContentTests.swift b/damusTests/Models/DamusParseContentTests.swift index c1b03d38f..f6ce7743e 100644 --- a/damusTests/Models/DamusParseContentTests.swift +++ b/damusTests/Models/DamusParseContentTests.swift @@ -24,7 +24,7 @@ class ContentParserTests: XCTestCase { let url = "https://media.tenor.com/5MibLt95scAAAAAC/%ED%98%BC%ED%8C%8C%EB%A7%9D-%ED%94%BC%EC%9E%90.gif" let content = "gm 🤙\(url)" - let blocks = parse_note_content(content: .content(content,nil)).blocks + let blocks = parse_note_content(content: .content(content,nil))!.blocks XCTAssertEqual(blocks.count, 2) XCTAssertEqual(blocks[0], .text("gm 🤙")) XCTAssertEqual(blocks[1], .url(URL(string: url)!)) diff --git a/damusTests/NIP19Tests.swift b/damusTests/NIP19Tests.swift index 3f10745a0..95db6b556 100644 --- a/damusTests/NIP19Tests.swift +++ b/damusTests/NIP19Tests.swift @@ -29,22 +29,22 @@ final class NIP19Tests: XCTestCase { */ func test_parse_npub() throws { - let res = parse_note_content(content: .content("nostr:npub10elfcs4fr0l0r8af98jlmgdh9c8tcxjvz9qkw038js35mp4dma8qzvjptg ",nil)).blocks + let res = parse_note_content(content: .content("nostr:npub10elfcs4fr0l0r8af98jlmgdh9c8tcxjvz9qkw038js35mp4dma8qzvjptg ",nil))!.blocks XCTAssertEqual(res.count, 2) let expected_ref = Pubkey(hex: "7e7e9c42a91bfef19fa929e5fda1b72e0ebc1a4c1141673e2794234d86addf4e")! - let expected_mention: Mention = Mention(index: nil, ref: .pubkey(expected_ref)) + let expected_mention: Mention = .any(.init(bech32_str: "npub10elfcs4fr0l0r8af98jlmgdh9c8tcxjvz9qkw038js35mp4dma8qzvjptg")!) XCTAssertEqual(res[0], .mention(expected_mention)) } func test_parse_note() throws { - let res = parse_note_content(content: .content(" nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep",nil)).blocks + let res = parse_note_content(content: .content(" nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep",nil))!.blocks XCTAssertEqual(res.count, 2) let note_id = NoteId(hex:"8543e7d0bafb28f33c495f2198454bd62c7369c86d72d77704cad2674e0a92c9")! XCTAssertEqual(res[1], .mention(.any(.note(note_id)))) } func test_mention_with_adjacent() throws { - let res = parse_note_content(content: .content(" nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep?",nil)).blocks + let res = parse_note_content(content: .content(" nostr:note1s4p70596lv50x0zftuses32t6ck8x6wgd4edwacyetfxwns2jtysux7vep?",nil))!.blocks XCTAssertEqual(res.count, 3) let note_id = NoteId(hex: "8543e7d0bafb28f33c495f2198454bd62c7369c86d72d77704cad2674e0a92c9")! XCTAssertEqual(res[0], .text(" ")) diff --git a/damusTests/NoteContentViewTests.swift b/damusTests/NoteContentViewTests.swift index 6700e923b..e7f88aaab 100644 --- a/damusTests/NoteContentViewTests.swift +++ b/damusTests/NoteContentViewTests.swift @@ -10,6 +10,7 @@ import SwiftUI @testable import damus class NoteContentViewTests: XCTestCase { + /* func testRenderBlocksWithNonLatinHashtags() { let content = "Damusはかっこいいです #cool #かっこいい" let note = NostrEvent(content: content, keypair: test_keypair, tags: [["t", "かっこいい"]])! @@ -17,7 +18,7 @@ class NoteContentViewTests: XCTestCase { let testState = test_damus_state - let text: NoteArtifactsSeparated = render_blocks(blocks: parsed, profiles: testState.profiles) + let text: NoteArtifactsSeparated = render_blocks(blocks: parsed, profiles: testState.profiles, note: note) let attributedText: AttributedString = text.content.attributed let runs: AttributedString.Runs = attributedText.runs @@ -26,14 +27,15 @@ class NoteContentViewTests: XCTestCase { XCTAssertEqual(runArray[1].link?.absoluteString, "damus:t:cool", "Latin-character hashtag is missing. Runs description :\(runArray.description)") XCTAssertEqual(runArray[3].link?.absoluteString.removingPercentEncoding!, "damus:t:かっこいい", "Non-latin-character hashtag is missing. Runs description :\(runArray.description)") } - + */ + /// Based on https://github.com/damus-io/damus/issues/1468 /// Tests whether a note content view correctly parses an image block when url in JSON content contains optional escaped slashes func testParseImageBlockInContentWithEscapedSlashes() { let testJSONWithEscapedSlashes = "{\"tags\":[],\"pubkey\":\"f8e6c64342f1e052480630e27e1016dce35fc3a614e60434fef4aa2503328ca9\",\"content\":\"https:\\/\\/cdn.nostr.build\\/i\\/5c1d3296f66c2630131bf123106486aeaf051ed8466031c0e0532d70b33cddb2.jpg\",\"created_at\":1691864981,\"kind\":1,\"sig\":\"fc0033aa3d4df50b692a5b346fa816fdded698de2045e36e0642a021391468c44ca69c2471adc7e92088131872d4aaa1e90ea6e1ad97f3cc748f4aed96dfae18\",\"id\":\"e8f6eca3b161abba034dac9a02bb6930ecde9fd2fb5d6c5f22a05526e11382cb\"}" let testNote = NostrEvent.owned_from_json(json: testJSONWithEscapedSlashes)! - let parsed = parse_note_content(content: .init(note: testNote, keypair: test_keypair)) - + let parsed = parse_note_content(content: .init(note: testNote, keypair: test_keypair))! + XCTAssertTrue((parsed.blocks[0].asURL != nil), "NoteContentView does not correctly parse an image block when url in JSON content contains optional escaped slashes.") } diff --git a/damusTests/ReplyTests.swift b/damusTests/ReplyTests.swift index fda143eb4..90cfee812 100644 --- a/damusTests/ReplyTests.swift +++ b/damusTests/ReplyTests.swift @@ -20,16 +20,16 @@ class ReplyTests: XCTestCase { func testAtAtEnd() { let content = "what @" - let blocks = parse_post_blocks(content: content) - + let blocks = parse_post_blocks(content: content)!.blocks + XCTAssertEqual(blocks.count, 1) XCTAssertEqual(blocks[0].asText, "what @") } func testHashtagsInQuote() { let content = "This is my \"#awesome post\"" - let blocks = parse_post_blocks(content: content) - + let blocks = parse_post_blocks(content: content)!.blocks + XCTAssertEqual(blocks.count, 3) XCTAssertEqual(blocks[0].asText, "This is my \"") XCTAssertEqual(blocks[1].asHashtag, "awesome") @@ -38,25 +38,45 @@ class ReplyTests: XCTestCase { func testHashtagAtStartWorks() { let content = "#hashtag" - let blocks = parse_post_blocks(content: content) + let blocks = parse_post_blocks(content: content)!.blocks XCTAssertEqual(blocks.count, 1) XCTAssertEqual(blocks[0].asHashtag, "hashtag") } func testGroupOfHashtags() { let content = "#hashtag#what#nope" - let blocks = parse_post_blocks(content: content) + let blocks = parse_post_blocks(content: content)!.blocks XCTAssertEqual(blocks.count, 3) XCTAssertEqual(blocks[0].asHashtag, "hashtag") XCTAssertEqual(blocks[1].asHashtag, "what") XCTAssertEqual(blocks[2].asHashtag, "nope") } +<<<<<<< HEAD +======= + func testRootReplyWithMention() throws { + let content = "this is #[1] a mention" + let thread_id = NoteId(hex: "c75e5cbafbefd5de2275f831c2a2386ea05ec5e5a78a5ccf60d467582db48945")! + let mentioned_id = NoteId(hex: "5a534797e8cd3b9f4c1cf63e20e48bd0e8bd7f8c4d6353fbd576df000f6f54d3")! + let tags = [thread_id.tag, mentioned_id.tag] + let ev = NostrEvent(content: content, keypair: test_keypair, tags: tags)! + let event_refs = interpret_event_refs(tags: ev.tags) + + XCTAssertEqual(event_refs.count, 2) + XCTAssertNotNil(event_refs[0].is_reply) + XCTAssertNotNil(event_refs[0].is_thread_id) + XCTAssertNotNil(event_refs[0].is_reply) + XCTAssertNotNil(event_refs[0].is_direct_reply) + XCTAssertEqual(event_refs[0].is_reply, .some(NoteRef(note_id: thread_id))) + XCTAssertEqual(event_refs[0].is_thread_id, .some(NoteRef(note_id: thread_id))) + XCTAssertNotNil(event_refs[1].is_mention) + XCTAssertEqual(event_refs[1].is_mention, .some(NoteRef(note_id: mentioned_id))) + } + func testEmptyMention() throws { let content = "this is some & content" let ev = NostrEvent(content: content, keypair: test_keypair, tags: [])! - let blocks = parse_note_content(content: .init(note: ev, keypair: test_keypair)).blocks - let post_blocks = parse_post_blocks(content: content) + let post_blocks = parse_post_blocks(content: content)!.blocks let post_tags = make_post_tags(post_blocks: post_blocks, tags: []) let tr = interpret_event_refs(tags: ev.tags) @@ -81,7 +101,7 @@ class ReplyTests: XCTestCase { let expected_render = "nostr:\(pk.npub)\nnostr:\(pk.npub)" XCTAssertEqual(post_note.content, expected_render) - let blocks = parse_note_content(content: .content(post_note.content,nil)).blocks + let blocks = parse_note_content(content: .content(post_note.content,nil))!.blocks let rendered = blocks.map { $0.asString }.joined(separator: "") XCTAssertEqual(rendered, expected_render) @@ -209,15 +229,15 @@ class ReplyTests: XCTestCase { } func testEmptyPostReference() throws { - let parsed = parse_post_blocks(content: "") + let parsed = parse_post_blocks(content: "")!.blocks XCTAssertEqual(parsed.count, 0) } func testBech32MentionAtStart() throws { let pk = Pubkey(hex: "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245")! let content = "@\(pk.npub) hello there" - let blocks = parse_post_blocks(content: content) - + let blocks = parse_post_blocks(content: content)!.blocks + XCTAssertEqual(blocks.count, 2) XCTAssertEqual(blocks[0].asMention, .any(.pubkey(pk))) XCTAssertEqual(blocks[1].asText, " hello there") @@ -227,7 +247,7 @@ class ReplyTests: XCTestCase { func testBech32MentionAtEnd() throws { let pk = Pubkey(hex: "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245")! let content = "this is a @\(pk.npub)" - let blocks = parse_post_blocks(content: content) + let blocks = parse_post_blocks(content: content)!.blocks XCTAssertEqual(blocks.count, 2) XCTAssertEqual(blocks[1].asMention, .any(.pubkey(pk))) @@ -238,8 +258,8 @@ class ReplyTests: XCTestCase { let evid = NoteId(hex: "71ba3e5ddaf48103be294aa370e470fb60b6c8bca3fb01706eecd00054c2f588")! let pk = Pubkey(hex: "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245")! let content = "this is a @\(pk.npub) mention" - let blocks = parse_post_blocks(content: content) - let post = NostrPost(content: content, tags: [["e", evid.hex()]]) + let blocks = parse_post_blocks(content: content)!.blocks + let post = NostrPost(content: content, references: [.event(evid)]) let ev = post_to_event(post: post, keypair: test_keypair_full)! XCTAssertEqual(ev.tags.count, 2) @@ -253,8 +273,8 @@ class ReplyTests: XCTestCase { let pk = Pubkey(hex: "ccf95d668650178defca5ac503693b6668eb77895f610178ff8ed9fe5cf9482e")! let nsec = "nsec1jmzdz7d0ldqctdxwm5fzue277ttng2pk28n2u8wntc2r4a0w96ssnyukg7" let content = "this is a @\(nsec) mention" - let blocks = parse_post_blocks(content: content) - let post = NostrPost(content: content, tags: [["e", evid.hex()]]) + let blocks = parse_post_blocks(content: content)!.blocks + let post = NostrPost(content: content, references: [.event(evid)]) let ev = post_to_event(post: post, keypair: test_keypair_full)! XCTAssertEqual(ev.tags.count, 2) @@ -284,7 +304,7 @@ class ReplyTests: XCTestCase { func testInvalidPostReference() throws { let pk = "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e24" let content = "this is a @\(pk) mention" - let parsed = parse_post_blocks(content: content) + let parsed = parse_post_blocks(content: content)!.blocks XCTAssertEqual(parsed.count, 1) guard case .text(let txt) = parsed[0] else { XCTAssert(false) @@ -295,7 +315,7 @@ class ReplyTests: XCTestCase { func testInvalidPostReferenceEmptyAt() throws { let content = "this is a @ mention" - let parsed = parse_post_blocks(content: content) + let parsed = parse_post_blocks(content: content)!.blocks XCTAssertEqual(parsed.count, 1) guard case .text(let txt) = parsed[0] else { XCTAssert(false) @@ -307,8 +327,8 @@ class ReplyTests: XCTestCase { func testInvalidUriReference() throws { let id = "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de" let content = "this is a nostr:z:\(id) event mention" - let parsed = parse_post_blocks(content: content) - + let parsed = parse_post_blocks(content: content)!.blocks + XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 1) @@ -322,7 +342,7 @@ class ReplyTests: XCTestCase { func testParsePostUriPubkeyReference() throws { let id = Pubkey(hex: "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de")! - let parsed = parse_post_blocks(content: "this is a nostr:\(id.npub) event mention") + let parsed = parse_post_blocks(content: "this is a nostr:\(id.npub) event mention")!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -345,7 +365,7 @@ class ReplyTests: XCTestCase { func testParsePostUriReference() throws { let id = NoteId(hex: "6fec2ee6cfff779fe8560976b3d9df782b74577f0caefa7a77c0ed4c3749b5de")! - let parsed = parse_post_blocks(content: "this is a nostr:\(id.bech32) event mention") + let parsed = parse_post_blocks(content: "this is a nostr:\(id.bech32) event mention")!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -365,5 +385,4 @@ class ReplyTests: XCTestCase { } XCTAssertEqual(t2, " event mention") } - } diff --git a/damusTests/UrlTests.swift b/damusTests/UrlTests.swift index e50d00f07..aa873b06f 100644 --- a/damusTests/UrlTests.swift +++ b/damusTests/UrlTests.swift @@ -42,7 +42,7 @@ final class UrlTests: XCTestCase { let testString = "https://en.m.wikipedia.org/wiki/Delicious_(website)" - let parsed = parse_note_content(content: .content(testString, nil)).blocks + let parsed = parse_note_content(content: .content(testString, nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed[0].asURL, testURL) @@ -53,8 +53,8 @@ final class UrlTests: XCTestCase { XCTAssertNotNil(testURL) let testString = "( https://en.m.wikipedia.org/wiki/Delicious_(website)" - let parsed = parse_note_content(content: .content(testString, nil)).blocks - + let parsed = parse_note_content(content: .content(testString, nil))!.blocks + XCTAssertNotNil(parsed) XCTAssertEqual(parsed[1].asURL, testURL) } @@ -64,7 +64,7 @@ final class UrlTests: XCTestCase { XCTAssertNotNil(testURL) let testString = "(https://jb55.com)" - let parsed = parse_note_content(content: .content(testString, nil)).blocks + let parsed = parse_note_content(content: .content(testString, nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed[1].asURL, testURL) @@ -75,7 +75,7 @@ final class UrlTests: XCTestCase { XCTAssertNotNil(testURL) let testString = "(https://nostr-con.com/simplex)" - let parsed = parse_note_content(content: .content(testString, nil)).blocks + let parsed = parse_note_content(content: .content(testString, nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed[1].asURL, testURL) @@ -87,7 +87,7 @@ final class UrlTests: XCTestCase { XCTAssertNotNil(testURL) let content = "my \(link) link" - let blocks = parse_post_blocks(content: content) + let blocks = parse_post_blocks(content: content)!.blocks XCTAssertEqual(blocks.count, 3) XCTAssertEqual(blocks[0].asText, "my ") @@ -99,7 +99,7 @@ final class UrlTests: XCTestCase { let testURL = URL(string: "HTTPS://jb55.COM") XCTAssertNotNil(testURL) - let parsed = parse_note_content(content: .content("a HTTPS://jb55.COM b", nil)).blocks + let parsed = parse_note_content(content: .content("a HTTPS://jb55.COM b", nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -111,7 +111,7 @@ final class UrlTests: XCTestCase { XCTAssertNotNil(testURL) let content = "this is my link: https://jb55.com/index.html#buybitcoin this is not a hashtag!" - let blocks = parse_post_blocks(content: content) + let blocks = parse_post_blocks(content: content)!.blocks XCTAssertEqual(blocks.count, 3) XCTAssertEqual(blocks[0].asText, "this is my link: ") @@ -206,7 +206,7 @@ final class UrlTests: XCTestCase { } func testParseURL(inputURLString: String, expectedURLs: String...) { - let parsedURL: [Block] = parse_note_content(content: .content(inputURLString, nil)).blocks.filter { + let parsedURL: [Block] = parse_note_content(content: .content(inputURLString, nil))!.blocks.filter { $0.isURL } diff --git a/damusTests/damusTests.swift b/damusTests/damusTests.swift index 55b1374d7..edff8736c 100644 --- a/damusTests/damusTests.swift +++ b/damusTests/damusTests.swift @@ -67,7 +67,7 @@ class damusTests: XCTestCase { [my website](https://jb55.com) """ - let parsed = parse_note_content(content: .content(md, nil)).blocks + let parsed = parse_note_content(content: .content(md, nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -122,7 +122,7 @@ class damusTests: XCTestCase { } func testParseUrl() { - let parsed = parse_note_content(content: .content("a https://jb55.com b", nil)).blocks + let parsed = parse_note_content(content: .content("a https://jb55.com b", nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 3) @@ -134,7 +134,7 @@ class damusTests: XCTestCase { } func testParseUrlEnd() { - let parsed = parse_note_content(content: .content("a https://jb55.com", nil)).blocks + let parsed = parse_note_content(content: .content("a https://jb55.com", nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 2) @@ -148,7 +148,7 @@ class damusTests: XCTestCase { } func testParseUrlStart() { - let parsed = parse_note_content(content: .content("https://jb55.com br",nil)).blocks + let parsed = parse_note_content(content: .content("https://jb55.com br",nil))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 2) @@ -163,7 +163,7 @@ class damusTests: XCTestCase { func testNoParseUrlWithOnlyWhitespace() { let testString = "https:// " - let parsed = parse_note_content(content: .content(testString,nil)).blocks + let parsed = parse_note_content(content: .content(testString,nil))!.blocks XCTAssertNotNil(parsed) XCTAssertFalse(parsed[0].isURL) @@ -172,7 +172,7 @@ class damusTests: XCTestCase { func testNoParseUrlTrailingCharacters() { let testString = "https://foo.bar, " - let parsed = parse_note_content(content: .content(testString,nil)).blocks + let parsed = parse_note_content(content: .content(testString,nil))!.blocks let testURL = URL(string: "https://foo.bar") XCTAssertNotNil(testURL) @@ -208,7 +208,7 @@ class damusTests: XCTestCase { func testParseMentionOnlyText() { let tags = [["e", "event_id"]] let ev = NostrEvent(content: "there is no mention here", keypair: test_keypair, tags: tags)! - let parsed = parse_note_content(content: .init(note: ev, keypair: test_keypair)).blocks + let parsed = parse_note_content(content: .init(note: ev, keypair: test_keypair))!.blocks XCTAssertNotNil(parsed) XCTAssertEqual(parsed.count, 1) From 824d0f576162e0fcf8a93100b51cad2ab74d77bf Mon Sep 17 00:00:00 2001 From: William Casarin Date: Wed, 17 Apr 2024 12:11:40 -0700 Subject: [PATCH 145/146] add assert to catch potential bug Signed-off-by: William Casarin --- nostrdb/src/block.c | 1 + 1 file changed, 1 insertion(+) diff --git a/nostrdb/src/block.c b/nostrdb/src/block.c index 65f25e3eb..6c2f22f5b 100644 --- a/nostrdb/src/block.c +++ b/nostrdb/src/block.c @@ -185,6 +185,7 @@ struct nostr_bech32 *ndb_bech32_block(struct ndb_block *block) { // total size including padding size_t ndb_blocks_total_size(struct ndb_blocks *blocks) { + assert(blocks->total_size < 1000000); return blocks->total_size; } From f8931a6af2d1cca6b2f836dd11c734f3fd41fecb Mon Sep 17 00:00:00 2001 From: William Casarin Date: Sat, 13 Apr 2024 17:28:04 -0700 Subject: [PATCH 146/146] wip local relay model Signed-off-by: William Casarin --- damus.xcodeproj/project.pbxproj | 58 ++++++++------------------------- damus/ContentParsing.swift | 46 +++++++++++++++++--------- damus/ContentView.swift | 25 +++++++++----- damus/TestData.swift | 3 +- damus/Types/Block.swift | 6 ++-- damus/Util/Router.swift | 2 +- damus/Views/SaveKeysView.swift | 10 ++++-- damusTests/ReplyTests.swift | 25 ++------------ nostrdb/Ndb.swift | 54 +++++++++++++++++++++--------- nostrdb/QueryResult.swift | 14 ++++++++ nostrdb/src/nostrdb.c | 2 +- 11 files changed, 131 insertions(+), 114 deletions(-) create mode 100644 nostrdb/QueryResult.swift diff --git a/damus.xcodeproj/project.pbxproj b/damus.xcodeproj/project.pbxproj index d09c2b367..373ee312e 100644 --- a/damus.xcodeproj/project.pbxproj +++ b/damus.xcodeproj/project.pbxproj @@ -205,6 +205,8 @@ 4C75EFB728049D990006080F /* RelayPool.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB628049D990006080F /* RelayPool.swift */; }; 4C75EFB92804A2740006080F /* EventView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFB82804A2740006080F /* EventView.swift */; }; 4C75EFBB2804A34C0006080F /* ProofOfWork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C75EFBA2804A34C0006080F /* ProofOfWork.swift */; }; + 4C79A6DC2BC07FC6007B2D87 /* QueryResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C79A6DB2BC07FC6007B2D87 /* QueryResult.swift */; }; + 4C79A6DD2BC07FC6007B2D87 /* QueryResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C79A6DB2BC07FC6007B2D87 /* QueryResult.swift */; }; 4C7D09592A05BEAD00943473 /* KeyboardVisible.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D09582A05BEAD00943473 /* KeyboardVisible.swift */; }; 4C7D095F2A098C5D00943473 /* ConnectWalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D095C2A098C5D00943473 /* ConnectWalletView.swift */; }; 4C7D09602A098C5D00943473 /* WalletView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C7D095D2A098C5D00943473 /* WalletView.swift */; }; @@ -590,7 +592,6 @@ D7CBD1D62B8D509800BFD889 /* DamusPurpleImpendingExpirationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7CBD1D52B8D509800BFD889 /* DamusPurpleImpendingExpirationTests.swift */; }; D7CCFC072B05833200323D86 /* NdbNote.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C90548A2A6AEDEE00811EEC /* NdbNote.swift */; }; D7CCFC082B05834500323D86 /* NoteId.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CC14FF42A740BB7007AEB17 /* NoteId.swift */; }; - D7CCFC0B2B0585EA00323D86 /* nostrdb.c in Sources */ = {isa = PBXBuildFile; fileRef = 4CE9FBB82A6B3B26007E485C /* nostrdb.c */; settings = {COMPILER_FLAGS = "-w"; }; }; D7CCFC0F2B0587F600323D86 /* Keys.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C285C8B28398BC6008A31F1 /* Keys.swift */; }; D7CCFC102B05880F00323D86 /* Id.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C2B7BF12A71B6540049DEE7 /* Id.swift */; }; D7CCFC112B05884E00323D86 /* AsciiCharacter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C5D5C9C2A6B2CB40024563C /* AsciiCharacter.swift */; }; @@ -1092,6 +1093,7 @@ 4C78EFD82A707C4D007E8197 /* secp256k1_ecdh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1_ecdh.h; sourceTree = ""; }; 4C78EFD92A707C4D007E8197 /* secp256k1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1.h; sourceTree = ""; }; 4C78EFDA2A707C67007E8197 /* secp256k1_extrakeys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = secp256k1_extrakeys.h; sourceTree = ""; }; + 4C79A6DB2BC07FC6007B2D87 /* QueryResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueryResult.swift; sourceTree = ""; }; 4C7D09582A05BEAD00943473 /* KeyboardVisible.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardVisible.swift; sourceTree = ""; }; 4C7D095C2A098C5D00943473 /* ConnectWalletView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ConnectWalletView.swift; sourceTree = ""; }; 4C7D095D2A098C5D00943473 /* WalletView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletView.swift; sourceTree = ""; }; @@ -1157,6 +1159,7 @@ 4CAAD8AF29888AD200060CEA /* RelayConfigView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RelayConfigView.swift; sourceTree = ""; }; 4CACA9D4280C31E100D9BBE8 /* ReplyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReplyView.swift; sourceTree = ""; }; 4CACA9DB280C38C000D9BBE8 /* Profiles.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Profiles.swift; sourceTree = ""; }; + 4CB412802C80753E008DE044 /* Untitled.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Untitled.swift; sourceTree = ""; }; 4CB55EF4295E679D007FD187 /* UserRelaysView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserRelaysView.swift; sourceTree = ""; }; 4CB8838529656C8B00DC99E7 /* NIP05.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NIP05.swift; sourceTree = ""; }; 4CB88388296AF99A00DC99E7 /* EventDetailBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EventDetailBar.swift; sourceTree = ""; }; @@ -1769,40 +1772,6 @@ path = NIP10; sourceTree = ""; }; - 4C478E2A2A9935D300489948 /* bindings */ = { - isa = PBXGroup; - children = ( - 4C478E2B2A9935D300489948 /* swift */, - 4C478E2D2A9935D300489948 /* c */, - ); - path = bindings; - sourceTree = ""; - }; - 4C478E2B2A9935D300489948 /* swift */ = { - isa = PBXGroup; - children = ( - 4C478E2C2A9935D300489948 /* NdbProfile.swift */, - ); - path = swift; - sourceTree = ""; - }; - 4C478E2D2A9935D300489948 /* c */ = { - isa = PBXGroup; - children = ( - 4C478E2E2A9935D300489948 /* profile_json_parser.h */, - 4C478E2F2A9935D300489948 /* profile_reader.h */, - 4C478E302A9935D300489948 /* meta_json_parser.h */, - 4C478E312A9935D300489948 /* profile_builder.h */, - 4C478E322A9935D300489948 /* meta_builder.h */, - 4C478E332A9935D300489948 /* profile_verifier.h */, - 4C478E352A9935D300489948 /* meta_reader.h */, - 4C478E362A9935D300489948 /* flatbuffers_common_reader.h */, - 4C478E372A9935D300489948 /* meta_verifier.h */, - 4C478E382A9935D300489948 /* flatbuffers_common_builder.h */, - ); - path = c; - sourceTree = ""; - }; 4C47928D2A9939BD00489948 /* flatcc */ = { isa = PBXGroup; children = ( @@ -2186,6 +2155,7 @@ 4C9054862A6AEB4500811EEC /* nostrdb */ = { isa = PBXGroup; children = ( + 4CB412802C80753E008DE044 /* Untitled.swift */, 4C15224A2B8D499F007CDC17 /* parser.h */, 4CF47FDC2B631C0100F2B2C0 /* src */, 4C47928D2A9939BD00489948 /* flatcc */, @@ -2208,6 +2178,7 @@ D798D2272B085CDA00234419 /* NdbNote+.swift */, 4CF480562B633F2600F2B2C0 /* NdbBlocksIterator.swift */, 4CF480582B633F3800F2B2C0 /* NdbBlock.swift */, + 4C79A6DB2BC07FC6007B2D87 /* QueryResult.swift */, ); path = nostrdb; sourceTree = ""; @@ -3143,7 +3114,6 @@ files = ( 4C1D4FB42A7967990024F453 /* build-git-hash.txt in Resources */, D7FB14222BE5970000398331 /* PrivacyInfo.xcprivacy in Resources */, - 4CF480432B631C0100F2B2C0 /* .dir in Resources */, 3ACB685F297633BC00C46468 /* Localizable.strings in Resources */, 4CE6DEEE27F7A08200C66700 /* Preview Assets.xcassets in Resources */, 3ACB685C297633BC00C46468 /* InfoPlist.strings in Resources */, @@ -3300,7 +3270,6 @@ 4CB883B6297730E400DC99E7 /* LNUrls.swift in Sources */, 4C7FF7D52823313F009601DB /* Mentions.swift in Sources */, 4CF4803D2B631C0100F2B2C0 /* content_parser.c in Sources */, - BA4AB0AE2A63B9270070A32A /* AddEmojiView.swift in Sources */, 4C32B94D2A9AD44700DC3548 /* Offset.swift in Sources */, 4C633350283D40E500B1C9C3 /* HomeModel.swift in Sources */, 4C987B57283FD07F0042CE38 /* FollowersModel.swift in Sources */, @@ -3482,6 +3451,7 @@ 4C363A8828236948006E126D /* BlocksView.swift in Sources */, 4C06670628FCB08600038D2A /* ImageCarousel.swift in Sources */, 3A23838E2A297DD200E5AA2E /* ZapButtonModel.swift in Sources */, + 4C79A6DC2BC07FC6007B2D87 /* QueryResult.swift in Sources */, F71694F82A6983AF001F4053 /* GrayGradient.swift in Sources */, 4C1D4FB12A7958E60024F453 /* VersionInfo.swift in Sources */, D7FF94002AC7AC5300FD969D /* RelayURL.swift in Sources */, @@ -3497,7 +3467,6 @@ 5CC8529F2BD744F60039FFC5 /* HighlightView.swift in Sources */, BA37598D2ABCCE500018D73B /* PhotoCaptureProcessor.swift in Sources */, 5CC8529D2BD741CD0039FFC5 /* HighlightEvent.swift in Sources */, - 4C9146FD2A2A87C200DDEA40 /* wasm.c in Sources */, 4C75EFAF28049D350006080F /* NostrFilter.swift in Sources */, 4CF480422B631C0100F2B2C0 /* NdbProfile.swift in Sources */, 4CA9276C2A2910D10098A105 /* ReplyPart.swift in Sources */, @@ -3522,7 +3491,6 @@ 4C19AE512A5CEF7C00C90DB7 /* NostrScript.swift in Sources */, 4C32B95E2A9AD44700DC3548 /* FlatBufferObject.swift in Sources */, D783A63F2AD4E53D00658DDA /* SuggestedHashtagsView.swift in Sources */, - 4CB88393296F798300DC99E7 /* ReactionsModel.swift in Sources */, 5C42E78C29DB76D90086AAC1 /* EmptyUserSearchView.swift in Sources */, 4CB88396296F7F8B00DC99E7 /* ReactionView.swift in Sources */, 4CF480552B631C4F00F2B2C0 /* wasm.c in Sources */, @@ -3860,6 +3828,7 @@ D798D2222B08598A00234419 /* ReferencedId.swift in Sources */, D7CE1B492B0BE729002EDAD4 /* DisplayName.swift in Sources */, D7CE1B192B0BE132002EDAD4 /* builder.c in Sources */, + 4C79A6DD2BC07FC6007B2D87 /* QueryResult.swift in Sources */, D7EDED1F2B11797D0018B19C /* LongformEvent.swift in Sources */, D7CCFC122B05886D00323D86 /* IdType.swift in Sources */, D7CE1B312B0BE69D002EDAD4 /* Ndb.swift in Sources */, @@ -4085,6 +4054,11 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 16.0; + "LIBRARY_SEARCH_PATHS[arch=*]" = ( + "$(PROJECT_DIR)/nostrdb/ccan", + "$(PROJECT_DIR)/nostrdb/src/bolt11", + "$(PROJECT_DIR)", + ); MACOSX_DEPLOYMENT_TARGET = 12.3; MARKETING_VERSION = 1.9; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; @@ -4191,11 +4165,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)", - "$(PROJECT_DIR)/nostrdb/src/bolt11", - ); + LIBRARY_SEARCH_PATHS = "$(inherited)"; MARKETING_VERSION = 1.11; PRODUCT_BUNDLE_IDENTIFIER = com.jb55.damus2; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/damus/ContentParsing.swift b/damus/ContentParsing.swift index cb080a1d1..bc669547e 100644 --- a/damus/ContentParsing.swift +++ b/damus/ContentParsing.swift @@ -20,14 +20,15 @@ enum NoteContent { } } -func parsed_blocks_finish(bs: inout note_blocks, tags: TagsSequence?) -> Blocks { +// TODO: just make a blocks iterator over the compact data instead of using Blocks +func parsed_blocks_finish(bs: inout ndb_blocks, tags: TagsSequence?) -> Blocks { var out: [Block] = [] var i = 0 while (i < bs.num_blocks) { let block = bs.blocks[i] - if let converted = Block(block, tags: tags) { + if let converted = Block(block: block, tags: tags) { out.append(converted) } @@ -35,30 +36,45 @@ func parsed_blocks_finish(bs: inout note_blocks, tags: TagsSequence?) -> Blocks } let words = Int(bs.words) - blocks_free(&bs) return Blocks(words: words, blocks: out) } -func parse_note_content(content: NoteContent) -> Blocks { - var bs = note_blocks() - bs.num_blocks = 0; - - blocks_init(&bs) + +func parse_note_content(content: NoteContent) -> Blocks? { + // Step 1: Prepare the data you need to pass to the C function. + var buffer = [UInt8](repeating: 0, count: 1024*1024) // Example buffer, replace size with what you need + let buf_size = Int32(buffer.count) + var ptr: OpaquePointer? = nil // Pointer for the result switch content { - case .content(let s, let tags): - return s.withCString { cptr in - damus_parse_content(&bs, cptr) - return parsed_blocks_finish(bs: &bs, tags: tags) + case .note(let nostrEvent): + let len = Int32(nostrEvent.content_len) + let r = ndb_parse_content(&buffer, buf_size, nostrEvent.content_raw, len, &ptr) + + if r != 0 { + let nil_tags: TagsSequence? = nil + let size = ndb_blocks_total_size(ptr) + let resized = buffer[0:size] + return Blocks.init(buffer: buffer[0:], blocks: <#T##NdbBlocks#>) + } + + case .content(let s, let tagsSequence): + let content_len = Int32(s.utf8.count) + let res = s.withCString { cptr in + ndb_parse_content(&buffer, buf_size, cptr, content_len, &blocks) + } + + if res != 0 { + return parsed_blocks_finish(bs: blocks, tags: tagsSequence) + } else { + return nil } - case .note(let note): - damus_parse_content(&bs, note.content_raw) - return parsed_blocks_finish(bs: &bs, tags: note.tags) } } + func interpret_event_refs(tags: TagsSequence) -> ThreadReply? { // migration is long over, lets just do this to fix tests return interpret_event_refs_ndb(tags: tags) diff --git a/damus/ContentView.swift b/damus/ContentView.swift index e767500f3..5cfc5f56c 100644 --- a/damus/ContentView.swift +++ b/damus/ContentView.swift @@ -246,10 +246,13 @@ struct ContentView: View { .ignoresSafeArea(.keyboard) .edgesIgnoringSafeArea(hide_bar ? [.bottom] : []) .onAppear() { + guard let damus_state else { + return + } self.connect() try? AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback, mode: .default, options: .mixWithOthers) setup_notifications() - if !hasSeenOnboardingSuggestions || damus_state!.settings.always_show_onboarding_suggestions { + if !hasSeenOnboardingSuggestions || damus_state.settings.always_show_onboarding_suggestions { active_sheet = .onboardingSuggestions hasSeenOnboardingSuggestions = true } @@ -323,8 +326,11 @@ struct ContentView: View { self.hide_bar = !show } .onReceive(timer) { n in - self.damus_state?.postbox.try_flushing_events() - self.damus_state!.profiles.profile_data(self.damus_state!.pubkey).status.try_expire() + guard let damus_state else { + return + } + damus_state.postbox.try_flushing_events() + damus_state.profiles.profile_data(self.damus_state!.pubkey).status.try_expire() } .onReceive(handle_notify(.report)) { target in self.active_sheet = .report(target) @@ -606,22 +612,25 @@ struct ContentView: View { self.selected_timeline = timeline } + func on_local_sub(subid: UInt64) { + } + func connect() { // nostrdb - var mndb = Ndb() - if mndb == nil { + var ndb: Ndb? = Ndb() + if ndb?.open() == nil { // try recovery print("DB ISSUE! RECOVERING") - mndb = Ndb.safemode() + ndb = Ndb.safemode() // out of space or something?? maybe we need a in-memory fallback - if mndb == nil { + if ndb == nil { logout(nil) return } } - guard let ndb = mndb else { return } + guard let ndb else { return } let pool = RelayPool(ndb: ndb, keypair: keypair) let model_cache = RelayModelCache() diff --git a/damus/TestData.swift b/damus/TestData.swift index fadafdeb8..52c54b61f 100644 --- a/damus/TestData.swift +++ b/damus/TestData.swift @@ -79,7 +79,8 @@ var test_damus_state: DamusState = ({ } print("opening \(tempDir!)") - let ndb = Ndb(path: tempDir)! + let ndb = Ndb(path: tempDir) + let _ = ndb.open()! let our_pubkey = test_pubkey let pool = RelayPool(ndb: ndb) let settings = UserSettingsStore() diff --git a/damus/Types/Block.swift b/damus/Types/Block.swift index f58c9e440..e0fff38e1 100644 --- a/damus/Types/Block.swift +++ b/damus/Types/Block.swift @@ -35,9 +35,9 @@ enum Block: Equatable { case relay(String) } -struct Blocks: Equatable { - let words: Int - let blocks: [Block] +struct Blocks { + let buffer: [UInt8] + let blocks: NdbBlocks } extension ndb_str_block { diff --git a/damus/Util/Router.swift b/damus/Util/Router.swift index 681138f94..a164fff66 100644 --- a/damus/Util/Router.swift +++ b/damus/Util/Router.swift @@ -112,7 +112,7 @@ enum Route: Hashable { case .CreateAccount: CreateAccountView(nav: navigationCoordinator) case .SaveKeys(let account): - SaveKeysView(account: account) + SaveKeysView(account: account, pool: damusState.pool) case .Wallet(let walletModel): WalletView(damus_state: damusState, model: walletModel) case .WalletScanner(let walletScanResult): diff --git a/damus/Views/SaveKeysView.swift b/damus/Views/SaveKeysView.swift index 9f5f5be12..501aa79aa 100644 --- a/damus/Views/SaveKeysView.swift +++ b/damus/Views/SaveKeysView.swift @@ -11,6 +11,9 @@ import Security struct SaveKeysView: View { let account: CreateAccountModel let pool: RelayPool = RelayPool(ndb: Ndb()!) + + @State var pub_copied: Bool = false + @State var priv_copied: Bool = false @State var loading: Bool = false @State var error: String? = nil @@ -21,7 +24,8 @@ struct SaveKeysView: View { let first_contact_event: NdbNote? - init(account: CreateAccountModel) { + init(account: CreateAccountModel, pool: RelayPool) { + self.pool = pool self.account = account self.first_contact_event = make_first_contact_event(keypair: account.keypair) } @@ -203,8 +207,8 @@ struct SaveKeysView: View { struct SaveKeysView_Previews: PreviewProvider { static var previews: some View { - let model = CreateAccountModel(display_name: "William", name: "jb55", about: "I'm me") - SaveKeysView(account: model) + let model = CreateAccountModel(display_name: "William", nick: "jb55", about: "I'm me") + SaveKeysView(account: model, pool: RelayPool(ndb: test_damus_state.ndb)) } } diff --git a/damusTests/ReplyTests.swift b/damusTests/ReplyTests.swift index 90cfee812..43b8ed00e 100644 --- a/damusTests/ReplyTests.swift +++ b/damusTests/ReplyTests.swift @@ -51,28 +51,8 @@ class ReplyTests: XCTestCase { XCTAssertEqual(blocks[1].asHashtag, "what") XCTAssertEqual(blocks[2].asHashtag, "nope") } - -<<<<<<< HEAD -======= - func testRootReplyWithMention() throws { - let content = "this is #[1] a mention" - let thread_id = NoteId(hex: "c75e5cbafbefd5de2275f831c2a2386ea05ec5e5a78a5ccf60d467582db48945")! - let mentioned_id = NoteId(hex: "5a534797e8cd3b9f4c1cf63e20e48bd0e8bd7f8c4d6353fbd576df000f6f54d3")! - let tags = [thread_id.tag, mentioned_id.tag] - let ev = NostrEvent(content: content, keypair: test_keypair, tags: tags)! - let event_refs = interpret_event_refs(tags: ev.tags) - - XCTAssertEqual(event_refs.count, 2) - XCTAssertNotNil(event_refs[0].is_reply) - XCTAssertNotNil(event_refs[0].is_thread_id) - XCTAssertNotNil(event_refs[0].is_reply) - XCTAssertNotNil(event_refs[0].is_direct_reply) - XCTAssertEqual(event_refs[0].is_reply, .some(NoteRef(note_id: thread_id))) - XCTAssertEqual(event_refs[0].is_thread_id, .some(NoteRef(note_id: thread_id))) - XCTAssertNotNil(event_refs[1].is_mention) - XCTAssertEqual(event_refs[1].is_mention, .some(NoteRef(note_id: mentioned_id))) - } - + + /* func testEmptyMention() throws { let content = "this is some & content" let ev = NostrEvent(content: content, keypair: test_keypair, tags: [])! @@ -85,6 +65,7 @@ class ReplyTests: XCTestCase { XCTAssertEqual(post_tags.tags.count, 0) XCTAssertEqual(post_blocks.count, 1) } + */ func testNewlineMentions() throws { let bech32_pk = "npub1xtscya34g58tk0z605fvr788k263gsu6cy9x0mhnm87echrgufzsevkk5s" diff --git a/nostrdb/Ndb.swift b/nostrdb/Ndb.swift index 6ab6f44cc..0e82b863f 100644 --- a/nostrdb/Ndb.swift +++ b/nostrdb/Ndb.swift @@ -27,17 +27,24 @@ enum DatabaseError: Error { } } + +func subscription_cb(ctx: UnsafeMutableRawPointer?, subid: UInt64) -> Void { + guard let ctx else { return } + let ndb = Unmanaged.fromOpaque(ctx).takeUnretainedValue() + ndb.sub_cb?(subid) +} + class Ndb { var ndb: ndb_t let path: String? let owns_db: Bool var generation: Int + let sub_cb: ((UInt64) -> ())? private var closed: Bool var is_closed: Bool { self.closed || self.ndb.ndb == nil } - static func safemode() -> Ndb? { guard let path = db_path ?? old_db_path else { return nil } @@ -49,7 +56,8 @@ class Ndb { } } - guard let ndb = Ndb(path: path) else { + let ndb = Ndb(path: path) + guard let _ = ndb.open() else { return nil } @@ -79,14 +87,14 @@ class Ndb { print("txn: NOSTRDB EMPTY") return Ndb(ndb: ndb_t(ndb: nil)) } - - static func open(path: String? = nil, owns_db_file: Bool = true) -> ndb_t? { + + func open() -> ndb_t? { var ndb_p: OpaquePointer? = nil let ingest_threads: Int32 = 4 var mapsize: Int = 1024 * 1024 * 1024 * 32 - if path == nil && owns_db_file { + if path == nil && owns_db { // `nil` path indicates the default path will be used. // The default path changed over time, so migrate the database to the new location if needed do { @@ -99,7 +107,7 @@ class Ndb { } guard let db_path = Self.db_path, - owns_db_file || Self.db_files_exist(path: db_path) else { + owns_db || Self.db_files_exist(path: db_path) else { return nil // If the caller claims to not own the DB file, and the DB files do not exist, then we should not initialize Ndb } @@ -109,8 +117,9 @@ class Ndb { let ok = path.withCString { testdir in var ok = false + let ctx = Unmanaged.passUnretained(self).toOpaque() while !ok && mapsize > 1024 * 1024 * 700 { - var cfg = ndb_config(flags: 0, ingester_threads: ingest_threads, mapsize: mapsize, filter_context: nil, ingest_filter: nil, sub_cb_ctx: nil, sub_cb: nil) + var cfg = ndb_config(flags: 0, ingester_threads: ingest_threads, mapsize: mapsize, filter_context: nil, ingest_filter: nil, sub_cb_ctx: ctx, sub_cb: subscription_cb) ok = ndb_init(&ndb_p, testdir, &cfg) != 0 if !ok { mapsize /= 2 @@ -123,19 +132,17 @@ class Ndb { return nil } - return ndb_t(ndb: ndb_p) + self.ndb = ndb_t(ndb: ndb_p) + return self.ndb } - init?(path: String? = nil, owns_db_file: Bool = true) { - guard let db = Self.open(path: path, owns_db_file: owns_db_file) else { - return nil - } - + init(path: String? = nil, owns_db_file: Bool = true, sub_cb: ((UInt64) -> ())? = nil) { self.generation = 0 self.path = path self.owns_db = owns_db_file - self.ndb = db self.closed = false + self.sub_cb = sub_cb + self.ndb = ndb_t() } private static func migrate_db_location_if_needed() throws { @@ -181,6 +188,7 @@ class Ndb { self.path = nil self.owns_db = true self.closed = false + self.sub_cb = nil } func close() { @@ -193,8 +201,8 @@ class Ndb { } func reopen() -> Bool { - guard self.is_closed, - let db = Self.open(path: self.path, owns_db_file: self.owns_db) else { + let ctx = Unmanaged.passUnretained(self).toOpaque() + guard self.is_closed, let db = self.open() else { return false } @@ -205,6 +213,20 @@ class Ndb { return true } + func poll_for_notes(subid: Int64, capacity: Int) -> [NoteKey] { + var buf = Array.init(repeating: 0, count: capacity) + + let r = buf.withUnsafeMutableBufferPointer { bytes in + return ndb_poll_for_notes(self.ndb.ndb, UInt64(subid), bytes.baseAddress, Int32(capacity)) + } + + guard r != 0 else { + return [] + } + + return Array(buf.prefix(Int(r))) + } + func lookup_blocks_by_key_with_txn(_ key: NoteKey, txn: NdbTxn) -> NdbBlocks? { guard let blocks = ndb_get_blocks_by_key(self.ndb.ndb, &txn.txn, key) else { return nil diff --git a/nostrdb/QueryResult.swift b/nostrdb/QueryResult.swift new file mode 100644 index 000000000..146d85ef5 --- /dev/null +++ b/nostrdb/QueryResult.swift @@ -0,0 +1,14 @@ +// +// QueryResult.swift +// damus +// +// Created by William Casarin on 2024-04-05. +// + +import Foundation + +// A timeline note holds the key and +struct TimelineNote { + let note_key: NoteKey + let created_at: UInt64 +} diff --git a/nostrdb/src/nostrdb.c b/nostrdb/src/nostrdb.c index c569be119..175623e7e 100644 --- a/nostrdb/src/nostrdb.c +++ b/nostrdb/src/nostrdb.c @@ -6478,7 +6478,7 @@ uint64_t ndb_subscribe(struct ndb *ndb, struct ndb_filter *filters, int num_filt ndb_filter_group_init(&sub->group); if (!ndb_filter_group_add_filters(&sub->group, filters, num_filters)) return 0; - + // 500k ought to be enough for anyone buflen = sizeof(uint64_t) * 65536; buf = malloc(buflen);