-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
prov/rxm: rxm_mc introduction #7
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 3 of 4 files at r1, all commit messages.
Reviewable status: 3 of 4 files reviewed, 9 unresolved discussions (waiting on @grom72)
-- commits
line 5 at r1:
... details of multicast address of collective operations.
Code quote:
rxm_mc added to hide implementation details of collective operations
multicast address
prov/rxm/src/rxm_ep.c
line 1059 at r1 (raw file):
struct rxm_mc *rxm_mc; struct util_coll_mc *coll_mc; ofi_ep_lock_acquire(&rxm_ep->util_ep);
You can unify the alignment here and use one tab instead of spaces in this line.
Code quote:
ofi_ep_lock_acquire(&rxm_ep->util_ep);
prov/rxm/src/rxm_ep.c
line 1061 at r1 (raw file):
ofi_ep_lock_acquire(&rxm_ep->util_ep); (*req) = rxm_get_coll_buf(rxm_ep); ofi_ep_lock_release(&rxm_ep->util_ep);
You can unify the alignment here and use one tab instead of spaces in this line.
Code quote:
ofi_ep_lock_release(&rxm_ep->util_ep);
prov/rxm/src/rxm_ep.c
line 1070 at r1 (raw file):
(*req)->app_context = context; rxm_mc = (struct rxm_mc*) ((uintptr_t) *coll_addr) ;
redundant space
Code quote:
) ;
prov/rxm/src/rxm_ep.c
line 1078 at r1 (raw file):
coll_mc = container_of(rxm_mc->util_coll_mc_fid, struct util_coll_mc, mc_fid); *coll_addr = fi_mc_addr(&coll_mc->mc_fid);
3 redundant tabs at the end of line.
Code quote:
; ·
prov/rxm/src/rxm_ep.c
line 1081 at r1 (raw file):
(*coll_ep) = rxm_ep->util_coll_ep; } else {
} else {
Code quote:
}
else {
prov/rxm/src/rxm_ep.c
line 1081 at r1 (raw file):
(*coll_ep) = rxm_ep->util_coll_ep; } else {
Isn't this still needed here?
} else if (rxm_ep->offload_coll_mask & BIT(coll_op)) {
Can be set
(*coll_ep) = rxm_ep->offload_coll_ep;
without the above condition being true?
Code quote:
else {
prov/rxm/src/rxm_ep.c
line 1087 at r1 (raw file):
coll_mc = container_of(rxm_mc->offload_coll_mc_fid, struct util_coll_mc, mc_fid); *coll_addr = fi_mc_addr(&coll_mc->mc_fid);
1 redundant tab at the end of line.
Code quote:
);·
prov/rxm/src/rxm_ep.c
line 1222 at r1 (raw file):
ssize_t ret;
redundant empty line added
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 4 files at r1.
Reviewable status: all files reviewed, 18 unresolved discussions (waiting on @grom72)
prov/rxm/src/rxm_eq.c
line 73 at r1 (raw file):
const struct fi_eq_entry *in_entry = buf; struct rxm_mc *mc; if (event != FI_JOIN_COMPLETE) {
Missing one empty line in between.
Code quote:
struct rxm_mc *mc;
if (event != FI_JOIN_COMPLETE) {
prov/rxm/src/rxm_eq.c
line 75 at r1 (raw file):
if (event != FI_JOIN_COMPLETE) { return ofi_eq_write(eq_fid, event, buf, len, flags); }
1 redundant tab at the end of line.
Code quote:
}·
prov/rxm/src/rxm_eq.c
line 82 at r1 (raw file):
if (mc->util_coll_join_completed == -1) { mc->util_coll_join_completed = 1; fi_close (&mc->mc_fid.fid);
1 redundant space in between
Code quote:
fi_close (&mc
prov/rxm/src/rxm_eq.c
line 91 at r1 (raw file):
mc->offload_coll_join_completed = 1; } if (mc->util_coll_join_completed == 1 &&
Missing one empty line in between.
Code quote:
}
if (mc->util_coll_join_completed == 1 &&
prov/rxm/src/rxm_eq.c
line 91 at r1 (raw file):
mc->offload_coll_join_completed = 1; } if (mc->util_coll_join_completed == 1 &&
1 redundant space at the end of line.
Code quote:
&&·
prov/rxm/src/rxm_eq.c
line 92 at r1 (raw file):
} if (mc->util_coll_join_completed == 1 && (mc->offload_coll_join_completed == 1 ||
1 redundant space at the end of line.
Code quote:
||·
prov/rxm/src/rxm_eq.c
line 92 at r1 (raw file):
} if (mc->util_coll_join_completed == 1 && (mc->offload_coll_join_completed == 1 ||
4 spaces instead of the 2nd tab
Code quote:
(mc->offload_coll_join_completed == 1 ||
!mc->offload_coll_mc_fid)) {
prov/rxm/src/rxm_eq.c
line 99 at r1 (raw file):
return ofi_eq_write(eq_fid, event, &entry, len, flags); } return len;
Missing one empty line in between.
Code quote:
}
return len;
prov/rxm/src/rxm_eq.c
line 101 at r1 (raw file):
return len; }; static struct fi_ops_eq rxm_eq_ops = {
Missing one empty line in between.
Code quote:
};
static struct fi_ops_eq rxm_eq_ops = {
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 19 unresolved discussions (waiting on @grom72)
prov/rxm/src/rxm_eq.c
line 87 at r1 (raw file):
mc->util_coll_join_completed = 1; } } if (in_entry->fid == &mc->offload_coll_mc_fid->fid) {
??? new line or else if
?
Code quote:
} if (in
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 4 files at r1, 2 of 3 files at r2, all commit messages.
Reviewable status: 4 of 5 files reviewed, 19 unresolved discussions (waiting on @ldorau)
Previously, ldorau (Lukasz Dorau) wrote…
... details of multicast address of collective operations.
Done.
prov/rxm/src/rxm_ep.c
line 1059 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
You can unify the alignment here and use one tab instead of spaces in this line.
Done.
prov/rxm/src/rxm_ep.c
line 1061 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
You can unify the alignment here and use one tab instead of spaces in this line.
Done.
prov/rxm/src/rxm_ep.c
line 1070 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
redundant space
Done.
prov/rxm/src/rxm_ep.c
line 1078 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
3 redundant tabs at the end of line.
Done.
prov/rxm/src/rxm_ep.c
line 1081 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
Isn't this still needed here?
} else if (rxm_ep->offload_coll_mask & BIT(coll_op)) {Can be set
(*coll_ep) = rxm_ep->offload_coll_ep;without the above condition being true?
It is covered above by !(rxm_ep->offload_coll_mask & BIT(coll_op))
prov/rxm/src/rxm_ep.c
line 1081 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
} else {
Done.
prov/rxm/src/rxm_ep.c
line 1087 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
1 redundant tab at the end of line.
Done.
Code quote:
rxm_ep_broadcast
prov/rxm/src/rxm_ep.c
line 1222 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
redundant empty line added
Done.
prov/rxm/src/rxm_eq.c
line 73 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
Missing one empty line in between.
Done.
prov/rxm/src/rxm_eq.c
line 75 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
1 redundant tab at the end of line.
Done.
prov/rxm/src/rxm_eq.c
line 82 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
1 redundant space in between
Done.
prov/rxm/src/rxm_eq.c
line 87 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
??? new line or
else if
?
Done.
prov/rxm/src/rxm_eq.c
line 91 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
Missing one empty line in between.
Done.
prov/rxm/src/rxm_eq.c
line 91 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
1 redundant space at the end of line.
Done.
prov/rxm/src/rxm_eq.c
line 92 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
1 redundant space at the end of line.
Done.
prov/rxm/src/rxm_eq.c
line 92 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
4 spaces instead of the 2nd tab
Done.
prov/rxm/src/rxm_eq.c
line 99 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
Missing one empty line in between.
Done.
prov/rxm/src/rxm_eq.c
line 101 at r1 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
Missing one empty line in between.
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 3 files at r2.
Reviewable status: all files reviewed, 19 unresolved discussions (waiting on @ldorau)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 3 of 3 files at r2, all commit messages.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on @grom72)
prov/rxm/src/rxm_eq.c
line 92 at r2 (raw file):
mc->offload_coll_join_completed = 1; } else { assert(0); /* we do not expect any other fid*/
fid */
- add a space at the end
Code quote:
fid*/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 4 files at r3.
Reviewable status: 2 of 5 files reviewed, 1 unresolved discussion (waiting on @ldorau)
prov/rxm/src/rxm_eq.c
line 92 at r2 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
fid */
- add a space at the end
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 4 files at r1, 3 of 4 files at r3, all commit messages.
Reviewable status: all files reviewed, 1 unresolved discussion (waiting on @ldorau)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 4 files at r3.
Reviewable status:complete! all files reviewed, all discussions resolved (waiting on @grom72)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 4 files at r3, all commit messages.
Reviewable status: all files reviewed, 7 unresolved discussions (waiting on @grom72)
-- commits
line 18 at r3:
prov
Code quote:
ptov
-- commits
line 21 at r3:
completion
Code quote:
compeltion
-- commits
line 22 at r3:
the same number of references ?
Code quote:
the same references
-- commits
line 28 at r3:
with the FI_PEER flag
Code quote:
with FI_PEER flag
-- commits
line 28 at r3:
restoreS
Code quote:
restore
-- commits
line 28 at r3:
uses it ... ?
Code quote:
uses
-- commits
line 29 at r3:
reporting the join ...
Code quote:
reporting join
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 8 unresolved discussions (waiting on @grom72)
-- commits
line 18 at r3:
??? I do not understand the title ...
Code quote:
pass submit
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 2 of 4 files at r3.
Reviewable status: all files reviewed, 10 unresolved discussions (waiting on @grom72)
prov/coll/src/coll_coll.c
line 932 at r3 (raw file):
return -FI_ENOSYS; if ((flags & FI_PEER)) {
(flags & FI_PEER)
Code quote:
((flags & FI_PEER))
prov/coll/src/coll_coll.c
line 954 at r3 (raw file):
return -FI_ENOMEM; if ((flags & FI_PEER))
.
Code quote:
((flags & FI_PEER))
cf5b84d
to
eba75ba
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed (commit messages unreviewed), 10 unresolved discussions (waiting on @ldorau)
Previously, ldorau (Lukasz Dorau) wrote…
prov
Done.
Previously, ldorau (Lukasz Dorau) wrote…
??? I do not understand the title ...
Done.
Previously, ldorau (Lukasz Dorau) wrote…
completion
Done.
Previously, ldorau (Lukasz Dorau) wrote…
the same number of references ?
Done.
Previously, ldorau (Lukasz Dorau) wrote…
with the FI_PEER flag
Done.
Previously, ldorau (Lukasz Dorau) wrote…
restoreS
Done.
Previously, ldorau (Lukasz Dorau) wrote…
uses it ... ?
Done.
Previously, ldorau (Lukasz Dorau) wrote…
reporting the join ...
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed all commit messages.
Reviewable status: all files reviewed, 3 unresolved discussions (waiting on @grom72)
-- commits
line 18 at r4:
provides
Code quote:
provids
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 1 files at r5, all commit messages.
Reviewable status: all files reviewed, 3 unresolved discussions (waiting on @ldorau)
Previously, ldorau (Lukasz Dorau) wrote…
provides
Done.
prov/coll/src/coll_coll.c
line 932 at r3 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
(flags & FI_PEER)
Done.
prov/coll/src/coll_coll.c
line 954 at r3 (raw file):
Previously, ldorau (Lukasz Dorau) wrote…
.
Done.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed 1 of 1 files at r5, all commit messages.
Reviewable status:complete! all files reviewed, all discussions resolved (waiting on @grom72)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @grom72)
prov/rxm/src/rxm_ep.c
line 468 at r5 (raw file):
&rxm_mc->offload_coll_mc_fid, &peer_context); if (ret) { /*mark util_coll_mc to be removed as soon as
/* mark
- add one space
Code quote:
/*mark
prov/rxm/src/rxm_eq.c
line 102 at r5 (raw file):
if (mc->util_coll_join_completed == 1 && (mc->offload_coll_join_completed == 1 || !mc->offload_coll_mc_fid)) {
Code quote:
!mc->offload_coll_mc_fid)) {
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @grom72)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @ldorau)
prov/rxm/src/rxm_eq.c
line 102 at r5 (raw file):
It is intentionally added to mark the bracket that opens the part of the condition
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @grom72)
prov/rxm/src/rxm_eq.c
line 102 at r5 (raw file):
Previously, grom72 (Tomasz Gromadzki) wrote…
It is intentionally added to mark the bracket that opens the part of the condition
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @ldorau)
prov/rxm/src/rxm_eq.c
line 102 at r5 (raw file):
What do you think about this version:
if (mc->util_coll_join_completed == 1
&& (mc->offload_coll_join_completed == 1
|| !mc->offload_coll_mc_fid)) {
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewable status: all files reviewed, 2 unresolved discussions (waiting on @grom72)
prov/rxm/src/rxm_eq.c
line 102 at r5 (raw file):
Previously, grom72 (Tomasz Gromadzki) wrote…
What do you think about this version:
if (mc->util_coll_join_completed == 1 && (mc->offload_coll_join_completed == 1 || !mc->offload_coll_mc_fid)) {
It looks good. It can be. (I am afraid our cstyle wouldn't accept it ;-))
pro/efa: rename rxr_cq to efa_rdm_cq
FI_SOURCE adds overhead so if it is not needed by the application, we should not return it. Rxm already removes it, but this patch moves the omission to the util code so other providers taking the util path will have the same optimization. Signed-off-by: Alexia Ingerson <[email protected]>
Clarifies usage for incoming peer srx changes Signed-off-by: Alexia Ingerson <[email protected]>
Because both client and server utilize all Neuron cores, they cannot request -D neuron on the same node. Thus skip those tests. Signed-off-by: Wenduo Wang <[email protected]>
RDM endpoint now uses rxr_ep->base_ep.av Signed-off-by: Sai Sunku <[email protected]>
This commit removes the rdm_ep member of rxr_ep. The RDM endpoint no longer uses the DGRAM endpoint as a lower endpoint Signed-off-by: Sai Sunku <[email protected]>
SHMEM summary is missing an '_' character in the log file and a token reset line Adding this back will properly display SHMEM as summarized by the summarizer. Signed-off-by: Zach Dworkin <[email protected]>
Add back DSA testing since Node is back online Signed-off-by: Zach Dworkin <[email protected]>
Declare missing hmem ops function pointers for Neuron Signed-off-by: Wenduo Wang <[email protected]>
Add missing function pointers for Neuron hmem ops Signed-off-by: Wenduo Wang <[email protected]>
include,src/hmem: Define missing neuron hmem ops function pointers
fabtests/pytest/common.py: skip neuron to neuron tests on single node
prov/efa: Remove rxr_ep->rdm_ep
The function efa_base_ep_construct() did not handle the case when fi_dupinfo() failed to allocate info object. The handling of calloc() failure is not right either. This patch addressed both issues. Signed-off-by: Wei Zhang <[email protected]>
prov/efa: fix the error handling of efa_base_ep_construct()
rxr_pkt_trigger_handshake() initializes a tx_entry to send a RTW packet. It did not initialize the ep field of the tx_entry, this patch fixed the issue. Signed-off-by: Wei Zhang <[email protected]>
Replace redundant synapseai hmem ops with ofi hmem functions Signed-off-by: Wenduo Wang <[email protected]>
Cosmetic changes Signed-off-by: Wenduo Wang <[email protected]>
…rigger_handshake prov/efa: set tx_entry->ep in rxr_pkt_trigger_handshake()
prov/efa: fix comments in rxr_op_entry.c
Signed-off-by: Peinan Zhang <[email protected]>
Running fabtests with ASAN has revealed 2 memory leaks with RDM. When a new endpoint (active or passive) is created, the fi_info object is duplicated and can be deleted by the caller. Signed-off-by: Sylvain Didelot <[email protected]>
rxm_mc added to hide implementation details of multicast address of collective operations. Signed-off-by: Tomasz Gromadzki <[email protected]>
Collective provider (i.e. SHARP) requires to execute collective operation on the supporting collective provider while running join() operation. Such operation is executed on peer_ep with peer_mc as address of the operation. Signed-off-by: Tomasz Gromadzki <[email protected]>
util_coll:fi_join() called with the FI_PEER flag restores peer_mc_context.mc_fid and uses it as the actual context of fi_join() operation. This includes also reporting the join operation completion with mc_fid as event's context. Signed-off-by: Tomasz Gromadzki <[email protected]>
mc_ref counts all mc created for rxm_ep. rxm_ep cannot be closed until all mc's are closed properly. Signed-off-by: Tomasz Gromadzki <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Reviewed all commit messages.
Reviewable status: 14 of 129 files reviewed, all discussions resolved (waiting on @grom72)
If a posted receive matches with a saved receive, we may need to increment the rx counter. Set the rx counter increment callback to match that of the posted receive. This fixes an assert in xnet_cntr_inc() accessing a NULL cntr_inc function pointer. Program received signal SIGABRT, Aborted. 0x0000155552d4d37f in raise () from /lib64/libc.so.6 #0 0x0000155552d4d37f in raise () from /lib64/libc.so.6 #1 0x0000155552d37db5 in abort () from /lib64/libc.so.6 #2 0x0000155552d37c89 in __assert_fail_base.cold.0 () from /lib64/libc.so.6 #3 0x0000155552d45a76 in __assert_fail () from /lib64/libc.so.6 #4 0x00001555522967f9 in xnet_cntr_inc (ep=0x6e4c70, xfer_entry=0x6f7a30) at prov/tcp/src/xnet_cq.c:347 #5 0x0000155552296836 in xnet_report_cntr_success (ep=0x6e4c70, cq=0x6ca930, xfer_entry=0x6f7a30) at prov/tcp/src/xnet_cq.c:354 #6 0x000015555229970d in xnet_complete_saved (saved_entry=0x6f7a30) at prov/tcp/src/xnet_progress.c:153 #7 0x0000155552299961 in xnet_recv_saved (saved_entry=0x6f7a30, rx_entry=0x6f7840) at prov/tcp/src/xnet_progress.c:188 #8 0x00001555522946f8 in xnet_srx_tag (srx=0x6dd1c0, recv_entry=0x6f7840) at prov/tcp/src/xnet_srx.c:445 #9 0x0000155552294bb1 in xnet_srx_trecv (ep_fid=0x6dd1c0, buf=0x6990c4, len=4, desc=0x0, src_addr=0, tag=21474836494, ignore=3458764513820540928, context=0x7ffffffeb180) at prov/tcp/src/xnet_srx.c:558 ofiwg#10 0x000015555228f60e in fi_trecv (ep=0x6dd1c0, buf=0x6990c4, len=4, desc=0x0, src_addr=0, tag=21474836494, ignore=3458764513820540928, context=0x7ffffffeb180) at ./include/rdma/fi_tagged.h:91 ofiwg#11 0x00001555522900a7 in xnet_rdm_trecv (ep_fid=0x6d9fe0, buf=0x6990c4, len=4, desc=0x0, src_addr=0, tag=21474836494, ignore=3458764513820540928, context=0x7ffffffeb180) at prov/tcp/src/xnet_rdm.c:212 Signed-off-by: Sean Hefty <[email protected]>
rxm_mc added to hide implementation details of collective operations' multicast address
Signed-off-by: Tomasz Gromadzki [email protected]
This change is![Reviewable](https://camo.githubusercontent.com/1541c4039185914e83657d3683ec25920c672c6c5c7ab4240ee7bff601adec0b/68747470733a2f2f72657669657761626c652e696f2f7265766965775f627574746f6e2e737667)