Compare commits
10 Commits
4b82502946
...
23c2a3e1c6
Author | SHA1 | Date | |
---|---|---|---|
23c2a3e1c6 | |||
a64e792964 | |||
5e362d5330 | |||
cc526cb6ba | |||
7e49888bec | |||
e64ebabced | |||
1e34951a77 | |||
baf64520d6 | |||
3499626127 | |||
b7f9084694 |
299
ConflictSet.cpp
299
ConflictSet.cpp
@@ -195,7 +195,6 @@ struct Node {
|
||||
/* end section that's copied to the next node */
|
||||
|
||||
uint8_t *partialKey();
|
||||
size_t size() const;
|
||||
|
||||
Type getType() const { return type; }
|
||||
int32_t getCapacity() const { return partialKeyCapacity; }
|
||||
@@ -771,23 +770,6 @@ uint8_t *Node::partialKey() {
|
||||
}
|
||||
}
|
||||
|
||||
size_t Node::size() const {
|
||||
switch (type) {
|
||||
case Type_Node0:
|
||||
return ((Node0 *)this)->size();
|
||||
case Type_Node3:
|
||||
return ((Node3 *)this)->size();
|
||||
case Type_Node16:
|
||||
return ((Node16 *)this)->size();
|
||||
case Type_Node48:
|
||||
return ((Node48 *)this)->size();
|
||||
case Type_Node256:
|
||||
return ((Node256 *)this)->size();
|
||||
default: // GCOVR_EXCL_LINE
|
||||
__builtin_unreachable(); // GCOVR_EXCL_LINE
|
||||
}
|
||||
}
|
||||
|
||||
// A type that's plumbed along the check call tree. Lifetime ends after each
|
||||
// check call.
|
||||
struct ReadContext {
|
||||
@@ -1715,55 +1697,55 @@ void maybeDownsize(Node *self, WriteContext *tls, ConflictSet::Impl *impl,
|
||||
}
|
||||
}
|
||||
|
||||
void destroyTree(Node *root, WriteContext::Accum *accum) {
|
||||
void eraseTree(Node *root, WriteContext *tls) {
|
||||
Arena arena;
|
||||
auto toFree = vector<Node *>(arena);
|
||||
toFree.push_back(root);
|
||||
|
||||
#if SHOW_MEMORY
|
||||
for (auto *iter = root; iter != nullptr; iter = nextPhysical(iter)) {
|
||||
removeNode(iter);
|
||||
removeKey(iter);
|
||||
}
|
||||
#endif
|
||||
|
||||
while (toFree.size() > 0) {
|
||||
auto *n = toFree.back();
|
||||
toFree.pop_back();
|
||||
accum->entries_erased += n->entryPresent;
|
||||
++accum->nodes_released;
|
||||
tls->accum.entries_erased += n->entryPresent;
|
||||
++tls->accum.nodes_released;
|
||||
|
||||
removeNode(n);
|
||||
removeKey(n);
|
||||
|
||||
switch (n->getType()) {
|
||||
case Type_Node0: {
|
||||
auto *n0 = static_cast<Node0 *>(n);
|
||||
tls->release(n0);
|
||||
} break;
|
||||
case Type_Node3: {
|
||||
auto *n3 = static_cast<Node3 *>(n);
|
||||
toFree.append(std::span<Node *>(n3->children, n3->numChildren));
|
||||
tls->release(n3);
|
||||
} break;
|
||||
case Type_Node16: {
|
||||
auto *n16 = static_cast<Node16 *>(n);
|
||||
toFree.append(std::span<Node *>(n16->children, n16->numChildren));
|
||||
tls->release(n16);
|
||||
} break;
|
||||
case Type_Node48: {
|
||||
auto *n48 = static_cast<Node48 *>(n);
|
||||
toFree.append(std::span<Node *>(n48->children, n48->numChildren));
|
||||
tls->release(n48);
|
||||
} break;
|
||||
case Type_Node256: {
|
||||
auto *n256 = static_cast<Node256 *>(n);
|
||||
auto *out = toFree.unsafePrepareAppend(n256->numChildren).data();
|
||||
n256->bitSet.forEachSet([&](int i) { *out++ = n256->children[i]; });
|
||||
assert(out == toFree.end());
|
||||
tls->release(n256);
|
||||
} break;
|
||||
default: // GCOVR_EXCL_LINE
|
||||
__builtin_unreachable(); // GCOVR_EXCL_LINE
|
||||
}
|
||||
removeNode(n);
|
||||
safe_free(n, n->size());
|
||||
}
|
||||
}
|
||||
|
||||
void eraseBetween(Node3 *&n, int begin, int end, WriteContext *tls,
|
||||
ConflictSet::Impl *impl) {
|
||||
void eraseBetween(Node **inTree, Node3 *n, int begin, int end,
|
||||
WriteContext *tls) {
|
||||
const unsigned shiftUpperBound = end - begin;
|
||||
const unsigned shiftAmount = begin;
|
||||
auto inBounds = [&](unsigned c) { return c - shiftAmount < shiftUpperBound; };
|
||||
@@ -1772,7 +1754,7 @@ void eraseBetween(Node3 *&n, int begin, int end, WriteContext *tls,
|
||||
InternalVersionT *maxVOut = n->childMaxVersion;
|
||||
for (int i = 0; i < n->numChildren; ++i) {
|
||||
if (inBounds(n->index[i])) {
|
||||
destroyTree(n->children[i], &tls->accum);
|
||||
eraseTree(n->children[i], tls);
|
||||
} else {
|
||||
*nodeOut++ = n->children[i];
|
||||
*indexOut++ = n->index[i];
|
||||
@@ -1784,144 +1766,165 @@ void eraseBetween(Node3 *&n, int begin, int end, WriteContext *tls,
|
||||
if (n->numChildren == 0) {
|
||||
auto *newNode = tls->allocate<Node0>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
*inTree = newNode;
|
||||
}
|
||||
}
|
||||
|
||||
void eraseBetween(Node16 *&n, int begin, int end, WriteContext *tls,
|
||||
ConflictSet::Impl *impl) {
|
||||
void eraseBetween(Node **inTree, Node16 *n, int begin, int end,
|
||||
WriteContext *tls) {
|
||||
if (end - begin == 256) {
|
||||
for (int i = 0; i < n->numChildren; ++i) {
|
||||
eraseTree(n->children[i], tls);
|
||||
}
|
||||
n->numChildren = 0;
|
||||
auto *newNode = tls->allocate<Node0>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
tls->release(n);
|
||||
*inTree = newNode;
|
||||
return;
|
||||
}
|
||||
assert(end - begin < 256);
|
||||
|
||||
#ifdef HAS_ARM_NEON
|
||||
uint8x16_t indices;
|
||||
memcpy(&indices, n->index, 16);
|
||||
// 0xff for each in bounds
|
||||
auto results =
|
||||
vcltq_u8(vsubq_u8(indices, vdupq_n_u8(begin)), vdupq_n_u8(end - begin));
|
||||
// 0xf for each 0xff
|
||||
uint64_t mask = vget_lane_u64(
|
||||
vreinterpret_u64_u8(vshrn_n_u16(vreinterpretq_u16_u8(results), 4)), 0);
|
||||
#elif defined(HAS_AVX)
|
||||
__m128i indices;
|
||||
memcpy(&indices, n->index, 16);
|
||||
indices = _mm_sub_epi8(indices, _mm_set1_epi8(begin));
|
||||
uint32_t mask = ~_mm_movemask_epi8(_mm_cmpeq_epi8(
|
||||
indices, _mm_max_epu8(indices, _mm_set1_epi8(end - begin))));
|
||||
#else
|
||||
const unsigned shiftUpperBound = end - begin;
|
||||
const unsigned shiftAmount = begin;
|
||||
auto inBounds = [&](unsigned c) { return c - shiftAmount < shiftUpperBound; };
|
||||
Node **nodeOut = n->children;
|
||||
uint8_t *indexOut = n->index;
|
||||
InternalVersionT *maxVOut = n->childMaxVersion;
|
||||
for (int i = 0; i < n->numChildren; ++i) {
|
||||
if (inBounds(n->index[i])) {
|
||||
destroyTree(n->children[i], &tls->accum);
|
||||
} else {
|
||||
*nodeOut++ = n->children[i];
|
||||
*indexOut++ = n->index[i];
|
||||
*maxVOut++ = n->childMaxVersion[i];
|
||||
}
|
||||
uint32_t mask = 0;
|
||||
for (int i = 0; i < 16; ++i) {
|
||||
mask |= inBounds(is[i]) << i;
|
||||
}
|
||||
n->numChildren = nodeOut - n->children;
|
||||
#endif
|
||||
mask &= (decltype(mask)(1) << n->numChildren) - 1;
|
||||
|
||||
if (n->numChildren == 0) {
|
||||
auto *newNode = tls->allocate<Node0>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
} else if (n->numChildren <= Node3::kMaxNodes) {
|
||||
if (!mask) {
|
||||
return;
|
||||
}
|
||||
|
||||
int first = std::countr_zero(mask);
|
||||
int count = std::popcount(mask);
|
||||
n->numChildren -= count;
|
||||
for (int i = first; i < first + count; ++i) {
|
||||
eraseTree(n->children[i], tls);
|
||||
}
|
||||
for (int i = first; i < n->numChildren; ++i) {
|
||||
n->children[i] = n->children[i + count];
|
||||
n->childMaxVersion[i] = n->childMaxVersion[i + count];
|
||||
n->index[i] = n->index[i + count];
|
||||
}
|
||||
|
||||
if (n->numChildren > Node3::kMaxNodes) {
|
||||
// nop
|
||||
} else if (n->numChildren > 0) {
|
||||
auto *newNode = tls->allocate<Node3>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
*inTree = newNode;
|
||||
} else {
|
||||
auto *newNode = tls->allocate<Node0>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
tls->release(n);
|
||||
*inTree = newNode;
|
||||
}
|
||||
}
|
||||
|
||||
void eraseBetween(Node48 *&n, int begin, int end, WriteContext *tls,
|
||||
ConflictSet::Impl *impl) {
|
||||
const unsigned shiftUpperBound = end - begin;
|
||||
const unsigned shiftAmount = begin;
|
||||
auto inBounds = [&](unsigned c) { return c - shiftAmount < shiftUpperBound; };
|
||||
Node **nodeOut = n->children;
|
||||
uint8_t *indexOut = n->reverseIndex;
|
||||
InternalVersionT *maxVOut = n->childMaxVersion;
|
||||
for (auto &v : n->maxOfMax) {
|
||||
v = tls->zero;
|
||||
}
|
||||
n->bitSet = {};
|
||||
memset(n->index, -1, sizeof(n->index));
|
||||
n->nextFree = 0;
|
||||
for (int i = 0; i < n->numChildren; ++i) {
|
||||
if (inBounds(n->reverseIndex[i])) {
|
||||
destroyTree(n->children[i], &tls->accum);
|
||||
} else {
|
||||
*nodeOut++ = n->children[i];
|
||||
*indexOut++ = n->reverseIndex[i];
|
||||
*maxVOut++ = n->childMaxVersion[i];
|
||||
n->maxOfMax[i >> Node48::kMaxOfMaxShift] = std::max(
|
||||
n->maxOfMax[i >> Node48::kMaxOfMaxShift], n->childMaxVersion[i]);
|
||||
n->bitSet.set(n->reverseIndex[i]);
|
||||
n->index[n->reverseIndex[i]] = n->nextFree++;
|
||||
void eraseBetween(Node **inTree, Node48 *n, int begin, int end,
|
||||
WriteContext *tls) {
|
||||
for (int i = n->bitSet.firstSetGeq(begin); i >= 0 && i < end;
|
||||
i = n->bitSet.firstSetGeq(i)) {
|
||||
n->bitSet.reset(i);
|
||||
int8_t toRemoveChildrenIndex = std::exchange(n->index[i], -1);
|
||||
int8_t lastChildrenIndex = --n->nextFree;
|
||||
assert(toRemoveChildrenIndex >= 0);
|
||||
assert(lastChildrenIndex >= 0);
|
||||
eraseTree(n->children[toRemoveChildrenIndex], tls);
|
||||
if (toRemoveChildrenIndex != lastChildrenIndex) {
|
||||
n->children[toRemoveChildrenIndex] = n->children[lastChildrenIndex];
|
||||
n->childMaxVersion[toRemoveChildrenIndex] =
|
||||
n->childMaxVersion[lastChildrenIndex];
|
||||
n->maxOfMax[toRemoveChildrenIndex >> Node48::kMaxOfMaxShift] =
|
||||
std::max(n->maxOfMax[toRemoveChildrenIndex >> Node48::kMaxOfMaxShift],
|
||||
n->childMaxVersion[toRemoveChildrenIndex]);
|
||||
auto parentIndex = n->children[toRemoveChildrenIndex]->parentsIndex;
|
||||
n->index[parentIndex] = toRemoveChildrenIndex;
|
||||
n->reverseIndex[toRemoveChildrenIndex] = parentIndex;
|
||||
}
|
||||
n->childMaxVersion[lastChildrenIndex] = tls->zero;
|
||||
--n->numChildren;
|
||||
}
|
||||
n->numChildren = n->nextFree;
|
||||
|
||||
if (n->numChildren == 0) {
|
||||
auto *newNode = tls->allocate<Node0>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
} else if (n->numChildren <= Node3::kMaxNodes) {
|
||||
auto *newNode = tls->allocate<Node3>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
} else if (n->numChildren <= Node16::kMaxNodes) {
|
||||
if (n->numChildren > Node16::kMaxNodes) {
|
||||
// nop
|
||||
} else if (n->numChildren > Node3::kMaxNodes) {
|
||||
auto *newNode = tls->allocate<Node16>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
*inTree = newNode;
|
||||
} else if (n->numChildren > 0) {
|
||||
auto *newNode = tls->allocate<Node3>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
tls->release(n);
|
||||
*inTree = newNode;
|
||||
} else {
|
||||
auto *newNode = tls->allocate<Node0>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
tls->release(n);
|
||||
*inTree = newNode;
|
||||
}
|
||||
}
|
||||
|
||||
void eraseBetween(Node256 *&n, int begin, int end, WriteContext *tls,
|
||||
ConflictSet::Impl *impl) {
|
||||
const unsigned shiftUpperBound = end - begin;
|
||||
const unsigned shiftAmount = begin;
|
||||
auto inBounds = [&](unsigned c) { return c - shiftAmount < shiftUpperBound; };
|
||||
n->numChildren = 0;
|
||||
BitSet newBitSet;
|
||||
n->bitSet.forEachSet([&](int i) {
|
||||
if (inBounds(i)) {
|
||||
destroyTree(std::exchange(n->children[i], nullptr), &tls->accum);
|
||||
} else {
|
||||
++n->numChildren;
|
||||
newBitSet.set(i);
|
||||
}
|
||||
});
|
||||
n->bitSet = newBitSet;
|
||||
// Don't need to update childMaxVersion or maxOfMax because of monotonicity
|
||||
if (n->numChildren == 0) {
|
||||
auto *newNode = tls->allocate<Node0>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
} else if (n->numChildren <= Node3::kMaxNodes) {
|
||||
auto *newNode = tls->allocate<Node3>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
} else if (n->numChildren <= Node16::kMaxNodes) {
|
||||
auto *newNode = tls->allocate<Node16>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
} else if (n->numChildren <= Node48::kMaxNodes) {
|
||||
void eraseBetween(Node **inTree, Node256 *n, int begin, int end,
|
||||
WriteContext *tls) {
|
||||
for (int i = n->bitSet.firstSetGeq(begin); i >= 0 && i < end;
|
||||
i = n->bitSet.firstSetGeq(i)) {
|
||||
assert(n->children[i] != nullptr);
|
||||
eraseTree(std::exchange(n->children[i], nullptr), tls);
|
||||
n->bitSet.reset(i);
|
||||
--n->numChildren;
|
||||
}
|
||||
if (n->numChildren > Node48::kMaxNodes) {
|
||||
// nop
|
||||
} else if (n->numChildren > Node16::kMaxNodes) {
|
||||
auto *newNode = tls->allocate<Node48>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
getInTree(n, impl) = newNode;
|
||||
tls->release(n);
|
||||
(Node *&)n = newNode;
|
||||
*inTree = newNode;
|
||||
} else if (n->numChildren > Node3::kMaxNodes) {
|
||||
auto *newNode = tls->allocate<Node16>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
tls->release(n);
|
||||
*inTree = newNode;
|
||||
} else if (n->numChildren > 0) {
|
||||
auto *newNode = tls->allocate<Node3>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
tls->release(n);
|
||||
*inTree = newNode;
|
||||
} else {
|
||||
auto *newNode = tls->allocate<Node0>(n->partialKeyLen);
|
||||
newNode->copyChildrenAndKeyFrom(*n);
|
||||
tls->release(n);
|
||||
*inTree = newNode;
|
||||
}
|
||||
}
|
||||
|
||||
// Erase all nodes with a search path starting with n + [child],
|
||||
// where child in [begin, end).
|
||||
void eraseBetween(Node *&n, int begin, int end, WriteContext *tls,
|
||||
ConflictSet::Impl *impl) {
|
||||
void eraseBetween(Node *&n, int begin, int end, WriteContext *tls) {
|
||||
#if DEBUG_VERBOSE && !defined(NDEBUG)
|
||||
fprintf(stderr, "eraseBetween: %s + [%d,%d)\n",
|
||||
getSearchPathPrintable(n).c_str(), begin, end);
|
||||
@@ -1930,16 +1933,16 @@ void eraseBetween(Node *&n, int begin, int end, WriteContext *tls,
|
||||
case Type_Node0:
|
||||
break;
|
||||
case Type_Node3:
|
||||
eraseBetween((Node3 *&)n, begin, end, tls, impl);
|
||||
eraseBetween(&n, (Node3 *)n, begin, end, tls);
|
||||
break;
|
||||
case Type_Node16:
|
||||
eraseBetween((Node16 *&)n, begin, end, tls, impl);
|
||||
eraseBetween(&n, (Node16 *)n, begin, end, tls);
|
||||
break;
|
||||
case Type_Node48:
|
||||
eraseBetween((Node48 *&)n, begin, end, tls, impl);
|
||||
eraseBetween(&n, (Node48 *)n, begin, end, tls);
|
||||
break;
|
||||
case Type_Node256:
|
||||
eraseBetween((Node256 *&)n, begin, end, tls, impl);
|
||||
eraseBetween(&n, (Node256 *)n, begin, end, tls);
|
||||
break;
|
||||
default: // GCOVR_EXCL_LINE
|
||||
__builtin_unreachable(); // GCOVR_EXCL_LINE
|
||||
@@ -3228,7 +3231,7 @@ void addPrefixWrite(Node *&root, std::span<const uint8_t> begin,
|
||||
}
|
||||
endNode->entry.rangeVersion = writeVersion;
|
||||
|
||||
eraseBetween(beginNode, 0, 256, tls, impl);
|
||||
eraseBetween(getInTree(beginNode, impl), 0, 256, tls);
|
||||
|
||||
// Inserting end trashed endNode's maxVersion. Fix that
|
||||
fixupMaxVersion(endNode, impl, tls);
|
||||
@@ -3296,6 +3299,10 @@ void addWriteRange(Node *&root, std::span<const uint8_t> begin,
|
||||
}
|
||||
endNode->entry.rangeVersion = writeVersion;
|
||||
|
||||
if (!beginIsPrefix) {
|
||||
eraseBetween(*useAsRoot, begin[0] + 1, end[0], tls);
|
||||
}
|
||||
|
||||
for (beginNode = nextLogical(beginNode); beginNode != endNode;
|
||||
beginNode = erase(beginNode, tls, impl, /*logical*/ true, endNode)) {
|
||||
}
|
||||
@@ -3412,7 +3419,7 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
||||
if (oldestExtantVersion < writeVersion - kMaxCorrectVersionWindow)
|
||||
[[unlikely]] {
|
||||
if (writeVersion > newestVersionFullPrecision + kNominalVersionWindow) {
|
||||
destroyTree(root, &tls.accum);
|
||||
eraseTree(root, &tls);
|
||||
init(writeVersion - kNominalVersionWindow);
|
||||
}
|
||||
|
||||
@@ -3581,7 +3588,7 @@ struct __attribute__((visibility("hidden"))) ConflictSet::Impl {
|
||||
initMetrics();
|
||||
}
|
||||
~Impl() {
|
||||
destroyTree(root, &tls.accum);
|
||||
eraseTree(root, &tls);
|
||||
safe_free(metrics, metricsCount * sizeof(metrics[0]));
|
||||
}
|
||||
|
||||
|
BIN
corpus/0369048a3408822fdfb7e4250a850e263481544b
Normal file
BIN
corpus/0369048a3408822fdfb7e4250a850e263481544b
Normal file
Binary file not shown.
BIN
corpus/0510903db2331a8ac8de00768131b184d5871e64
Normal file
BIN
corpus/0510903db2331a8ac8de00768131b184d5871e64
Normal file
Binary file not shown.
BIN
corpus/084e4406b0be350bb06ea41a4fa08ee4edf2b3c5
Normal file
BIN
corpus/084e4406b0be350bb06ea41a4fa08ee4edf2b3c5
Normal file
Binary file not shown.
BIN
corpus/0d94e23cb04bdaa083df8c0eb9a37d56c1d72b08
Normal file
BIN
corpus/0d94e23cb04bdaa083df8c0eb9a37d56c1d72b08
Normal file
Binary file not shown.
BIN
corpus/0e03a31dd94cd404f9559ee3041937418a5d6e73
Normal file
BIN
corpus/0e03a31dd94cd404f9559ee3041937418a5d6e73
Normal file
Binary file not shown.
BIN
corpus/0e4d2f5bc16bb65322c976e1c40d8aa8ee83bef0
Normal file
BIN
corpus/0e4d2f5bc16bb65322c976e1c40d8aa8ee83bef0
Normal file
Binary file not shown.
BIN
corpus/0e5ef615ee3864cffe276899f998ef9de68d792d
Normal file
BIN
corpus/0e5ef615ee3864cffe276899f998ef9de68d792d
Normal file
Binary file not shown.
BIN
corpus/1276c544ff45483d27ba32242fff1f4db3cfda3f
Normal file
BIN
corpus/1276c544ff45483d27ba32242fff1f4db3cfda3f
Normal file
Binary file not shown.
BIN
corpus/182793674308ba671193c5cdd9750e03a2889235
Normal file
BIN
corpus/182793674308ba671193c5cdd9750e03a2889235
Normal file
Binary file not shown.
BIN
corpus/1be0db1f3b34f05c856bb1f87337c1c5ad2c1051
Normal file
BIN
corpus/1be0db1f3b34f05c856bb1f87337c1c5ad2c1051
Normal file
Binary file not shown.
BIN
corpus/1eb1dd4a29b56aae35a607593cf5c7a1b56868f3
Normal file
BIN
corpus/1eb1dd4a29b56aae35a607593cf5c7a1b56868f3
Normal file
Binary file not shown.
BIN
corpus/29f42e23253dbbff5fce83cc09004704c6c18c1c
Normal file
BIN
corpus/29f42e23253dbbff5fce83cc09004704c6c18c1c
Normal file
Binary file not shown.
BIN
corpus/2db7bb596dfbaff4c7f68584f47ca49c6550b171
Normal file
BIN
corpus/2db7bb596dfbaff4c7f68584f47ca49c6550b171
Normal file
Binary file not shown.
BIN
corpus/2e1c8f40585dd31e6d1b0db564fc7a4c4983d7e3
Normal file
BIN
corpus/2e1c8f40585dd31e6d1b0db564fc7a4c4983d7e3
Normal file
Binary file not shown.
BIN
corpus/2e5f150272808fe332c6861fb1b3cad26827091a
Normal file
BIN
corpus/2e5f150272808fe332c6861fb1b3cad26827091a
Normal file
Binary file not shown.
BIN
corpus/2f01ecff62d1174bd3d29311a6c7ed830234feb1
Normal file
BIN
corpus/2f01ecff62d1174bd3d29311a6c7ed830234feb1
Normal file
Binary file not shown.
BIN
corpus/2f55cc9c0979af56b253b41b572477170d233450
Normal file
BIN
corpus/2f55cc9c0979af56b253b41b572477170d233450
Normal file
Binary file not shown.
BIN
corpus/3020790285b3a34ef756d982502594517e6cc535
Normal file
BIN
corpus/3020790285b3a34ef756d982502594517e6cc535
Normal file
Binary file not shown.
BIN
corpus/324b414c0c0fe8aa042b6b3d38a8687a7d98bf3f
Normal file
BIN
corpus/324b414c0c0fe8aa042b6b3d38a8687a7d98bf3f
Normal file
Binary file not shown.
BIN
corpus/3380368f7a3b74bb98e8077e2e98d8f25a5f687a
Normal file
BIN
corpus/3380368f7a3b74bb98e8077e2e98d8f25a5f687a
Normal file
Binary file not shown.
BIN
corpus/377e85079bc11aa87600024852e9933b428fdbfa
Normal file
BIN
corpus/377e85079bc11aa87600024852e9933b428fdbfa
Normal file
Binary file not shown.
BIN
corpus/3aed9ae1320b244d4fccc5da70a788dc5a86c501
Normal file
BIN
corpus/3aed9ae1320b244d4fccc5da70a788dc5a86c501
Normal file
Binary file not shown.
BIN
corpus/3d945fa5dedbbf67585f16917fbc6a49995ad658
Normal file
BIN
corpus/3d945fa5dedbbf67585f16917fbc6a49995ad658
Normal file
Binary file not shown.
BIN
corpus/3f35e2bcd8857d807dd5c8e4a04f2dad19103efa
Normal file
BIN
corpus/3f35e2bcd8857d807dd5c8e4a04f2dad19103efa
Normal file
Binary file not shown.
BIN
corpus/43b87330229d21961a7df933b2be9da65d71bcb1
Normal file
BIN
corpus/43b87330229d21961a7df933b2be9da65d71bcb1
Normal file
Binary file not shown.
BIN
corpus/45ec4091345676324b4bf22da4902e2ad688ea5c
Normal file
BIN
corpus/45ec4091345676324b4bf22da4902e2ad688ea5c
Normal file
Binary file not shown.
BIN
corpus/471d91e159052a7f3b84c92b5b9c8aa23e7eb11b
Normal file
BIN
corpus/471d91e159052a7f3b84c92b5b9c8aa23e7eb11b
Normal file
Binary file not shown.
BIN
corpus/4a5483ae597c5dd4fc5399e443bc3a37d74262d9
Normal file
BIN
corpus/4a5483ae597c5dd4fc5399e443bc3a37d74262d9
Normal file
Binary file not shown.
BIN
corpus/4afa69032fccc9656084fb3270741f2b54151ff7
Normal file
BIN
corpus/4afa69032fccc9656084fb3270741f2b54151ff7
Normal file
Binary file not shown.
BIN
corpus/4b63e6921e4eb916e1fbb54216fda91592a143b4
Normal file
BIN
corpus/4b63e6921e4eb916e1fbb54216fda91592a143b4
Normal file
Binary file not shown.
BIN
corpus/4bbac79eee1faff1411c3c647564f44b79ea4ac5
Normal file
BIN
corpus/4bbac79eee1faff1411c3c647564f44b79ea4ac5
Normal file
Binary file not shown.
BIN
corpus/4cf352b417f9dd32264537a55d47e0426ff160f7
Normal file
BIN
corpus/4cf352b417f9dd32264537a55d47e0426ff160f7
Normal file
Binary file not shown.
BIN
corpus/4d001fdceb7f2f8d1f3f3bf364cd80cbafdbc3d0
Normal file
BIN
corpus/4d001fdceb7f2f8d1f3f3bf364cd80cbafdbc3d0
Normal file
Binary file not shown.
BIN
corpus/4d1c5b691dbf5890d6a928472ffa7c81761915ac
Normal file
BIN
corpus/4d1c5b691dbf5890d6a928472ffa7c81761915ac
Normal file
Binary file not shown.
BIN
corpus/54329c178f480fd5f6f022bb0d068ed1aeac0f4d
Normal file
BIN
corpus/54329c178f480fd5f6f022bb0d068ed1aeac0f4d
Normal file
Binary file not shown.
BIN
corpus/5565a49b50e3adfe26f4b8bdabb8125c6218eff8
Normal file
BIN
corpus/5565a49b50e3adfe26f4b8bdabb8125c6218eff8
Normal file
Binary file not shown.
BIN
corpus/57d44ba3f5975972af796d66724bfe06b32d1703
Normal file
BIN
corpus/57d44ba3f5975972af796d66724bfe06b32d1703
Normal file
Binary file not shown.
BIN
corpus/588e6d64afa6f2254eb5a4a783a5c9f422e7ab07
Normal file
BIN
corpus/588e6d64afa6f2254eb5a4a783a5c9f422e7ab07
Normal file
Binary file not shown.
BIN
corpus/5895d13e12f33e42e12242cefb847b6597de1125
Normal file
BIN
corpus/5895d13e12f33e42e12242cefb847b6597de1125
Normal file
Binary file not shown.
BIN
corpus/5929ccae6c6afd3c651ec714db33edbbe048aa24
Normal file
BIN
corpus/5929ccae6c6afd3c651ec714db33edbbe048aa24
Normal file
Binary file not shown.
BIN
corpus/5b72d1275fe41a0f4268db7118f7cbbd8dec5664
Normal file
BIN
corpus/5b72d1275fe41a0f4268db7118f7cbbd8dec5664
Normal file
Binary file not shown.
BIN
corpus/5d977fcf911a1af2fc35f1acd2917d04610fda27
Normal file
BIN
corpus/5d977fcf911a1af2fc35f1acd2917d04610fda27
Normal file
Binary file not shown.
BIN
corpus/5e6440b4f696be2724b24ce322332fde0526c47e
Normal file
BIN
corpus/5e6440b4f696be2724b24ce322332fde0526c47e
Normal file
Binary file not shown.
BIN
corpus/5f5396dfa0c2c980e1639ca5ed5acdb62426814a
Normal file
BIN
corpus/5f5396dfa0c2c980e1639ca5ed5acdb62426814a
Normal file
Binary file not shown.
BIN
corpus/6464d68e415e85657bdaf32a7c382a07fcc2ab08
Normal file
BIN
corpus/6464d68e415e85657bdaf32a7c382a07fcc2ab08
Normal file
Binary file not shown.
BIN
corpus/6641e52e0598415dcb942fd8341acba46bb3c80a
Normal file
BIN
corpus/6641e52e0598415dcb942fd8341acba46bb3c80a
Normal file
Binary file not shown.
BIN
corpus/69db4d9277b327e1d7e474f85c205ef00309bf72
Normal file
BIN
corpus/69db4d9277b327e1d7e474f85c205ef00309bf72
Normal file
Binary file not shown.
BIN
corpus/6c6d33ece7ff6d93b98410a1cecf0b62e3ecc24d
Normal file
BIN
corpus/6c6d33ece7ff6d93b98410a1cecf0b62e3ecc24d
Normal file
Binary file not shown.
BIN
corpus/77797d03e3a0538b0837a88a3e800a62c72f0829
Normal file
BIN
corpus/77797d03e3a0538b0837a88a3e800a62c72f0829
Normal file
Binary file not shown.
BIN
corpus/77d5f793a71dd423d66f5f8c16258d8a55bb355a
Normal file
BIN
corpus/77d5f793a71dd423d66f5f8c16258d8a55bb355a
Normal file
Binary file not shown.
BIN
corpus/79132e64b834dc3e72d6502e7f4ffa1d8230876f
Normal file
BIN
corpus/79132e64b834dc3e72d6502e7f4ffa1d8230876f
Normal file
Binary file not shown.
BIN
corpus/7ca93e389e709f042644f02ff75fad7183558fa6
Normal file
BIN
corpus/7ca93e389e709f042644f02ff75fad7183558fa6
Normal file
Binary file not shown.
BIN
corpus/7d60449476ee4b8316ee62c9ce78a7d8ef4ccd58
Normal file
BIN
corpus/7d60449476ee4b8316ee62c9ce78a7d8ef4ccd58
Normal file
Binary file not shown.
BIN
corpus/7f1db19e8d40fb5816703d9febe4019d815e9993
Normal file
BIN
corpus/7f1db19e8d40fb5816703d9febe4019d815e9993
Normal file
Binary file not shown.
BIN
corpus/809f69002e4f4d13ca8493a0a1bddf1b7bddc6dd
Normal file
BIN
corpus/809f69002e4f4d13ca8493a0a1bddf1b7bddc6dd
Normal file
Binary file not shown.
BIN
corpus/817af305c9bdd4df50086974fe220d89294fdf7a
Normal file
BIN
corpus/817af305c9bdd4df50086974fe220d89294fdf7a
Normal file
Binary file not shown.
BIN
corpus/85d8c1c151e94398e90c525a0a56e83a66e55b95
Normal file
BIN
corpus/85d8c1c151e94398e90c525a0a56e83a66e55b95
Normal file
Binary file not shown.
BIN
corpus/916d002d6d0b2a0ecd08321e234de66ef5928b3f
Normal file
BIN
corpus/916d002d6d0b2a0ecd08321e234de66ef5928b3f
Normal file
Binary file not shown.
BIN
corpus/920a776693d4437eeca2a1b02433a86265f74845
Normal file
BIN
corpus/920a776693d4437eeca2a1b02433a86265f74845
Normal file
Binary file not shown.
BIN
corpus/95a5e9d18312d747e275e7f0db61d6e1a2cce898
Normal file
BIN
corpus/95a5e9d18312d747e275e7f0db61d6e1a2cce898
Normal file
Binary file not shown.
BIN
corpus/9742cd44047659c81e78c79490fe09b2a496b923
Normal file
BIN
corpus/9742cd44047659c81e78c79490fe09b2a496b923
Normal file
Binary file not shown.
BIN
corpus/9b49466a14883c625e16aaaf75e565e5f42833b4
Normal file
BIN
corpus/9b49466a14883c625e16aaaf75e565e5f42833b4
Normal file
Binary file not shown.
BIN
corpus/a0cd874b610c27ed3529bb5f660774631f9849e6
Normal file
BIN
corpus/a0cd874b610c27ed3529bb5f660774631f9849e6
Normal file
Binary file not shown.
BIN
corpus/a110eeeb2e79180efbe5b07da4ba2e4521d7f915
Normal file
BIN
corpus/a110eeeb2e79180efbe5b07da4ba2e4521d7f915
Normal file
Binary file not shown.
BIN
corpus/a50a416acf318dac2375be712dea420cb23bc376
Normal file
BIN
corpus/a50a416acf318dac2375be712dea420cb23bc376
Normal file
Binary file not shown.
BIN
corpus/a703d765db8649e30377adf3e78e182a35c1cf78
Normal file
BIN
corpus/a703d765db8649e30377adf3e78e182a35c1cf78
Normal file
Binary file not shown.
BIN
corpus/a95ccb66e6f469945b1559660c53b46e7235a574
Normal file
BIN
corpus/a95ccb66e6f469945b1559660c53b46e7235a574
Normal file
Binary file not shown.
BIN
corpus/ac35ff26ee93e360fbd4f26d6b1a31527d43620e
Normal file
BIN
corpus/ac35ff26ee93e360fbd4f26d6b1a31527d43620e
Normal file
Binary file not shown.
BIN
corpus/aeb103867dc7772b00cf37990eb09d898d403b32
Normal file
BIN
corpus/aeb103867dc7772b00cf37990eb09d898d403b32
Normal file
Binary file not shown.
BIN
corpus/aed169a52bd2834ac3abddbb007ae558558c7e9c
Normal file
BIN
corpus/aed169a52bd2834ac3abddbb007ae558558c7e9c
Normal file
Binary file not shown.
BIN
corpus/af97a6a600a5e8cdd7e33c4b4596f2da9d0d844a
Normal file
BIN
corpus/af97a6a600a5e8cdd7e33c4b4596f2da9d0d844a
Normal file
Binary file not shown.
BIN
corpus/b0e5ed60242108fb207dfd9d25584d1c6f40df44
Normal file
BIN
corpus/b0e5ed60242108fb207dfd9d25584d1c6f40df44
Normal file
Binary file not shown.
BIN
corpus/b2b25393bd74481e3b3b507b605a0d86107597fe
Normal file
BIN
corpus/b2b25393bd74481e3b3b507b605a0d86107597fe
Normal file
Binary file not shown.
BIN
corpus/b2d5bc842c10ad3fa72ec2103fefc1b073b190d4
Normal file
BIN
corpus/b2d5bc842c10ad3fa72ec2103fefc1b073b190d4
Normal file
Binary file not shown.
BIN
corpus/b4e1be3c17d7fccbcb2e8879f0a0d4bac7778f04
Normal file
BIN
corpus/b4e1be3c17d7fccbcb2e8879f0a0d4bac7778f04
Normal file
Binary file not shown.
BIN
corpus/b501b2783066886194b394391f8c474ea7e1ac9b
Normal file
BIN
corpus/b501b2783066886194b394391f8c474ea7e1ac9b
Normal file
Binary file not shown.
BIN
corpus/b712bd6c58e9c8920bfc8a6297e121a58f292706
Normal file
BIN
corpus/b712bd6c58e9c8920bfc8a6297e121a58f292706
Normal file
Binary file not shown.
BIN
corpus/baa0f8266bdd0efa4b9f9d794fa3fa9366d57d6c
Normal file
BIN
corpus/baa0f8266bdd0efa4b9f9d794fa3fa9366d57d6c
Normal file
Binary file not shown.
BIN
corpus/bed7705b382dc4f509aea02f4a73992513f0fa8d
Normal file
BIN
corpus/bed7705b382dc4f509aea02f4a73992513f0fa8d
Normal file
Binary file not shown.
BIN
corpus/c148a481542d358c9c1d4e54a690816d3dfe9f14
Normal file
BIN
corpus/c148a481542d358c9c1d4e54a690816d3dfe9f14
Normal file
Binary file not shown.
BIN
corpus/c18694ea06d49312ee5c2370be33a1443d027d78
Normal file
BIN
corpus/c18694ea06d49312ee5c2370be33a1443d027d78
Normal file
Binary file not shown.
BIN
corpus/c3acb7647c8417416807ac54af2f2083d5d8d384
Normal file
BIN
corpus/c3acb7647c8417416807ac54af2f2083d5d8d384
Normal file
Binary file not shown.
BIN
corpus/c5cb42a3a1ca6fca873effaa163e42ff5b75185e
Normal file
BIN
corpus/c5cb42a3a1ca6fca873effaa163e42ff5b75185e
Normal file
Binary file not shown.
BIN
corpus/c97bb0abb3d55fc768046c1fc8041019790c064a
Normal file
BIN
corpus/c97bb0abb3d55fc768046c1fc8041019790c064a
Normal file
Binary file not shown.
BIN
corpus/cd7a6dca8dd5fc7a080960bdf7e7c7fbab3c5458
Normal file
BIN
corpus/cd7a6dca8dd5fc7a080960bdf7e7c7fbab3c5458
Normal file
Binary file not shown.
BIN
corpus/cf9d1dd1b1fcfff90d2fcd30242a1539db75b6c8
Normal file
BIN
corpus/cf9d1dd1b1fcfff90d2fcd30242a1539db75b6c8
Normal file
Binary file not shown.
BIN
corpus/cfd7c50f672cffb7b13af28310727ee541d7f910
Normal file
BIN
corpus/cfd7c50f672cffb7b13af28310727ee541d7f910
Normal file
Binary file not shown.
BIN
corpus/d137171641bd63501cf8d086a1004d537911703a
Normal file
BIN
corpus/d137171641bd63501cf8d086a1004d537911703a
Normal file
Binary file not shown.
BIN
corpus/d4f67483c21702b530ad19e63db2fe2d520bfb0e
Normal file
BIN
corpus/d4f67483c21702b530ad19e63db2fe2d520bfb0e
Normal file
Binary file not shown.
BIN
corpus/d7b59a32c18c19deed7e3f56e17031ec26c42fb5
Normal file
BIN
corpus/d7b59a32c18c19deed7e3f56e17031ec26c42fb5
Normal file
Binary file not shown.
BIN
corpus/e023eda531fcf929462ef24fb6d248da945247ef
Normal file
BIN
corpus/e023eda531fcf929462ef24fb6d248da945247ef
Normal file
Binary file not shown.
BIN
corpus/e50057c4af3346e0e74540fd3ba6e4a906cf1516
Normal file
BIN
corpus/e50057c4af3346e0e74540fd3ba6e4a906cf1516
Normal file
Binary file not shown.
BIN
corpus/e6865da0d5b19b022a88d7310a96a8935fb064f2
Normal file
BIN
corpus/e6865da0d5b19b022a88d7310a96a8935fb064f2
Normal file
Binary file not shown.
BIN
corpus/e7a3d43e488d707e54e3532b8b0a56c244a860c3
Normal file
BIN
corpus/e7a3d43e488d707e54e3532b8b0a56c244a860c3
Normal file
Binary file not shown.
BIN
corpus/e862ce3ac7cb55e4baf1bc7b5df0b4a9d8a808f4
Normal file
BIN
corpus/e862ce3ac7cb55e4baf1bc7b5df0b4a9d8a808f4
Normal file
Binary file not shown.
BIN
corpus/ecaa4cdb9e628f184738f382161696fce1e4ccc3
Normal file
BIN
corpus/ecaa4cdb9e628f184738f382161696fce1e4ccc3
Normal file
Binary file not shown.
BIN
corpus/ecfc8d542878b5c268425b9479589d067862b020
Normal file
BIN
corpus/ecfc8d542878b5c268425b9479589d067862b020
Normal file
Binary file not shown.
BIN
corpus/f0e5eaae74f086989104b144d1c9c93b98d3ec6f
Normal file
BIN
corpus/f0e5eaae74f086989104b144d1c9c93b98d3ec6f
Normal file
Binary file not shown.
BIN
corpus/f7390cfda6e89ad7441869918d543e007d952d04
Normal file
BIN
corpus/f7390cfda6e89ad7441869918d543e007d952d04
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user