Re: [ITK-users] Reading DICOM series and visualize the volume with VTK

Jon Haitz Legarreta GorroƱo <[email protected]> Fri, 15 Mar 2019 13:52:11 -0400
Newsgroups gmane.comp.lib.vtk.user
Message-ID <CAPUXxNGMMH9mxoR1ETAe1i62XRKCw+vjHTmwRLJccuctoUtdtg@mail.gmail.com>
SW4gZmFjdCwgVlRLIGFsc28gdHJhbnNpdGlvbmVkIHRvIGRpc2NvdXJzZSBhIGZldyB3ZWVrcyBh
Z286Cmh0dHBzOi8vZGlzY291cnNlLnZ0ay5vcmcKClNvIGZvciBhIGJldHRlciBleHBlcmllbmNl
IGFuZCB0byBpbmNyZWFzZSB5b3VyIGNoYW5jZXMgb2YgZ2V0dGluZyBhbgphbnN3ZXIsIHlvdSdk
IGJldHRlciBwb3N0IHlvdXIgcXVlc3Rpb24gYXQgZGlzY291cnNlIHJhdGhlciB0aGFuIHRvCnRo
ZSBtYWlsaW5nIGxpc3RzLgoKSFRILApKT04gSEFJVFoKCgpPbiBGcmksIE1hciAxNSwgMjAxOSBh
dCAxMjo1OCBQTSBExb5lbmFuIFp1a2nEhyA8ZHplbmFuekBnbWFpbC5jb20+IHdyb3RlOgo+Cj4g
SGkgTWFyY28sCj4KPiB0aGF0IGlzIG1vcmUgb2YgYSBWVEsgcXVlc3Rpb24gdGhhbiBJVEsgb25l
LCBiZXN0IGRpcmVjdGVkIGF0IHZ0a3VzZXJzQHZ0ay5vcmcuIEFsc28sIElUSyBoYXMgbWlncmF0
ZWQgdG8gYSBuZXcgZm9ydW0uIFBsZWFzZSBwb3N0IGZ1cnRoZXIgSVRLLXJlbGF0ZWQgcXVlc3Rp
b25zIHRoZXJlIGluc3RlYWQgb2YgdGhpcyBtYWlsaW5nIGxpc3QuCj4KPiBSZWdhcmRzLAo+IETF
vmVuYW4KPgo+IE9uIEZyaSwgTWFyIDE1LCAyMDE5IGF0IDEyOjU0IFBNIE1hcmNvIEZlc3R1Z2F0
byA8bWFyY28uZmVzdHVnYXRvQG91dGxvb2suaXQ+IHdyb3RlOgo+Pgo+PiBIaSBEemVuYW4gYW5k
IHRoYW5rIHUgZm9yIHlvdXIgYW5zd2VyIEkndmUgdHJpZWQgdG8gZG8gYXMgdSBzdWdnZXN0ZWQs
IGJ1dCBpIHJlY2VpdmUgYW4gZXJyb3IgdGVsbGluZyBtZSB0aGF0IG15IG1hcHBlciBkb2VzbnQg
YWNjZXB0ICcnc2NhbGFyIGNlbGxzJycuLi5tYXliZSB0aGlzIGNvbm5lY3RvciBkb2VzbnQgd29y
ayB3aXRoIG15IG1hcHBlcj8gaSd2ZSB0cmllZCB0byBzaW1wbHkgYWRkIHRoZSAnY29ubmVjdG9y
JyB0byBteSBwaXBlbGluZToKPj4KPj4gcmVhZGVyIC0+IGNvbm5lY3RvciAtPiBtYXBwZXIgLT4g
dm9sdW1lIC0+IHJlbmRlcmVyIC0+IHdpbmRvdwo+Pgo+PiBIZXJlJ3MgbXkgY29kZSBpZiB1IHdh
bnQgdG8gY2hlY2sgaXQgKGl0IHN0aWxsIG5lZWRzIGEgYml0IG9mIGNsZWFuaW5nKS4uLmkgd291
bGQgYXBwcmVjaWF0ZSBpdCBhIGxvdCEhIEkgbmVlZCB0aGlzIHRvIHdvcmsgZm9yIG15IHByb2pl
Y3QgOicoCj4+Cj4+ICAvLyBWVEsgaW5jbHVkZXMKPj4gI2luY2x1ZGUgInZ0a0RJQ09NSW1hZ2VS
ZWFkZXIuaCIKPj4gI2luY2x1ZGUgInZ0a0ltYWdlRGF0YS5oIgo+PiAjaW5jbHVkZSAidnRrUmVu
ZGVyZXIuaCIKPj4gI2luY2x1ZGUgInZ0a1JlbmRlcldpbmRvdy5oIgo+PiAjaW5jbHVkZSAidnRr
UmVuZGVyV2luZG93SW50ZXJhY3Rvci5oIgo+PiAjaW5jbHVkZSAidnRrVm9sdW1lLmgiCj4+ICNp
bmNsdWRlIDx2dGtJbnRlcmFjdG9yU3R5bGVUcmFja2JhbGxDYW1lcmEuaD4KPj4gI2luY2x1ZGUg
PHZ0a1ZvbHVtZVByb3BlcnR5Lmg+Cj4+ICNpbmNsdWRlIDx2dGtTbWFydFBvaW50ZXIuaD4KPj4g
I2luY2x1ZGUgPHZ0a1BpZWNld2lzZUZ1bmN0aW9uLmg+Cj4+ICNpbmNsdWRlIDx2dGtWb2x1bWVS
YXlDYXN0Q29tcG9zaXRlRnVuY3Rpb24uaD4KPj4gI2luY2x1ZGUgPHZ0a0ZpeGVkUG9pbnRWb2x1
bWVSYXlDYXN0TWFwcGVyLmg+Cj4+ICNpbmNsdWRlIDxpdGtJbWFnZS5oPgo+PiAjaW5jbHVkZSA8
aXRrSW1hZ2VGaWxlUmVhZGVyLmg+Cj4+ICNpbmNsdWRlIDxpdGtJbWFnZVRvVlRLSW1hZ2VGaWx0
ZXIuaD4KPj4gI2luY2x1ZGUgInZ0a1ZlcnNpb24uaCIKPj4gI2luY2x1ZGUgInZ0a0ltYWdlVmll
d2VyLmgiCj4+ICNpbmNsdWRlICJ2dGtJbWFnZU1hcHBlcjNELmgiCj4+ICNpbmNsdWRlICJ2dGtS
ZW5kZXJXaW5kb3dJbnRlcmFjdG9yLmgiCj4+ICNpbmNsdWRlICJ2dGtTbWFydFBvaW50ZXIuaCIK
Pj4gI2luY2x1ZGUgInZ0a0ltYWdlQWN0b3IuaCIKPj4gI2luY2x1ZGUgInZ0a0ludGVyYWN0b3JT
dHlsZUltYWdlLmgiCj4+ICNpbmNsdWRlICJ2dGtSZW5kZXJlci5oIgo+PiAjaW5jbHVkZSAiaXRr
SW1hZ2UuaCIKPj4gI2luY2x1ZGUgIml0a0dEQ01JbWFnZUlPLmgiCj4+ICNpbmNsdWRlICJpdGtH
RENNU2VyaWVzRmlsZU5hbWVzLmgiCj4+ICNpbmNsdWRlICJpdGtJbWFnZVNlcmllc1JlYWRlci5o
Igo+PiAjaW5jbHVkZSAiaXRrSW1hZ2VGaWxlV3JpdGVyLmgiCj4+Cj4+ICBpbnQgbWFpbihpbnQg
YXJnYywgY2hhciAqYXJndltdKQo+PiB7Cj4+ICAgICAvLyBWZXJpZnkgdGhlIG51bWJlciBvZiBw
YXJhbWV0ZXJzIGluIHRoZSBjb21tYW5kIGxpbmUKPj4gICAgIGlmKCBhcmdjIDwgMikKPj4gICAg
IHsKPj4gICAgIHN0ZDo6Y2VyciA8PCAiVXNhZ2U6ICIgPDwgc3RkOjplbmRsOwo+PiAgICAgc3Rk
OjpjZXJyIDw8IGFyZ3ZbMF0gPDwgIiBESUNPTWltYWdlc0RpcmVjdG9yeSAiIDw8IHN0ZDo6ZW5k
bDsKPj4gICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Cj4+ICAgICB9Cj4+ICAvLyBTb2Z0d2FyZSBH
dWlkZSA6IEJlZ2luQ29kZVNuaXBwZXQKPj4gICB0eXBlZGVmIHNpZ25lZCBzaG9ydCAgICBQaXhl
bFR5cGU7Cj4+ICAgY29uc3QgdW5zaWduZWQgaW50ICAgICAgRGltZW5zaW9uID0gMzsKPj4gICB0
eXBlZGVmIGl0azo6SW1hZ2U8IFBpeGVsVHlwZSwgRGltZW5zaW9uID4gSW1hZ2VUeXBlOwo+PiAg
IHR5cGVkZWYgaXRrOjpJbWFnZVRvVlRLSW1hZ2VGaWx0ZXI8SW1hZ2VUeXBlPiBDb25uZWN0b3JU
eXBlOwo+Pgo+PiAgIENvbm5lY3RvclR5cGU6OlBvaW50ZXIgY29ubmVjdG9yID0gQ29ubmVjdG9y
VHlwZTo6TmV3KCk7Cj4+Cj4+IC8vIFdlIHVzZSB0aGUgaW1hZ2UgdHlwZSBmb3IgaW5zdGFudGlh
dGluZyB0aGUgdHlwZSBvZiB0aGUgc2VyaWVzIHJlYWRlciBhbmQKPj4gLy8gZm9yIGNvbnN0cnVj
dGluZyBvbmUgb2JqZWN0IG9mIGl0cyB0eXBlLgo+Pgo+PiAgIHR5cGVkZWYgaXRrOjpJbWFnZVNl
cmllc1JlYWRlcjwgSW1hZ2VUeXBlID4gICAgICAgIFJlYWRlclR5cGU7Cj4+ICAgUmVhZGVyVHlw
ZTo6UG9pbnRlciByZWFkZXIgPSBSZWFkZXJUeXBlOjpOZXcoKTsKPj4KPj4gLy8gQSBHRENNSW1h
Z2VJTyBvYmplY3QgaXMgY3JlYXRlZCBhbmQgY29ubmVjdGVkIHRvIHRoZSByZWFkZXIuIFRoaXMg
b2JqZWN0IGlzCj4+IC8vIHRoZSBvbmUgdGhhdCBpcyBhd2FyZSBvZiB0aGUgaW50ZXJuYWwgaW50
cmljYWNpZXMgb2YgdGhlIERJQ09NIGZvcm1hdC4KPj4gLy8KPj4KPj4gICB0eXBlZGVmIGl0azo6
R0RDTUltYWdlSU8gICAgICAgSW1hZ2VJT1R5cGU7Cj4+ICAgSW1hZ2VJT1R5cGU6OlBvaW50ZXIg
ZGljb21JTyA9IEltYWdlSU9UeXBlOjpOZXcoKTsKPj4KPj4gICByZWFkZXItPlNldEltYWdlSU8o
IGRpY29tSU8gKTsKPj4KPj4gICB1c2luZyBOYW1lc0dlbmVyYXRvclR5cGUgPSBpdGs6OkdEQ01T
ZXJpZXNGaWxlTmFtZXM7Cj4+ICAgTmFtZXNHZW5lcmF0b3JUeXBlOjpQb2ludGVyIG5hbWVHZW5l
cmF0b3IgPSBOYW1lc0dlbmVyYXRvclR5cGU6Ok5ldygpOwo+Pgo+PiAgIG5hbWVHZW5lcmF0b3It
PlNldFVzZVNlcmllc0RldGFpbHMoIHRydWUgKTsKPj4gICBuYW1lR2VuZXJhdG9yLT5TZXREaXJl
Y3RvcnkoIGFyZ3ZbMV0gKTsKPj4KPj4gICB0cnkKPj4gICAgIHsKPj4gICAgIHN0ZDo6Y291dCA8
PCBzdGQ6OmVuZGwgPDwgIlRoZSBkaXJlY3Rvcnk6ICIgPDwgc3RkOjplbmRsOwo+PiAgICAgc3Rk
Ojpjb3V0IDw8IHN0ZDo6ZW5kbCA8PCBhcmd2WzFdIDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7
Cj4+ICAgICBzdGQ6OmNvdXQgPDwgIkNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgRElDT00gU2VyaWVz
OiAiOwo+PiAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7Cj4+Cj4+Cj4+
IC8vIFNvZnR3YXJlIEd1aWRlIDogQmVnaW5MYXRleAo+PiAvLwo+PiAvLyBUaGUgR0RDTVNlcmll
c0ZpbGVOYW1lcyBvYmplY3QgZmlyc3QgaWRlbnRpZmllcyB0aGUgbGlzdCBvZiBESUNPTSBzZXJp
ZXMKPj4gLy8gcHJlc2VudCBpbiB0aGUgZ2l2ZW4gZGlyZWN0b3J5LiBXZSByZWNlaXZlIHRoYXQg
bGlzdCBpbiBhIHJlZmVyZW5jZQo+PiAvLyB0byBhIGNvbnRhaW5lciBvZiBzdHJpbmdzIGFuZCB0
aGVuIHdlIGNhbiBkbyB0aGluZ3MgbGlrZSBwcmludCBvdXQgYWxsCj4+IC8vIHRoZSBzZXJpZXMg
aWRlbnRpZmllcnMgdGhhdCB0aGUgZ2VuZXJhdG9yIGhhZCBmb3VuZC4gU2luY2UgdGhlIHByb2Nl
c3Mgb2YKPj4gLy8gZmluZGluZyB0aGUgc2VyaWVzIGlkZW50aWZpZXJzIGNhbiBwb3RlbnRpYWxs
eSB0aHJvdyBleGNlcHRpb25zLCBpdCBpcwo+PiAvLyB3aXNlIHRvIHB1dCB0aGlzIGNvZGUgaW5z
aWRlIGEgXGNvZGV7dHJ5L2NhdGNofSBibG9jay4KPj4gLy8KPj4KPj4KPj4gICAgIHR5cGVkZWYg
c3RkOjp2ZWN0b3I8IHN0ZDo6c3RyaW5nID4gICAgU2VyaWVzSWRDb250YWluZXI7Cj4+Cj4+ICAg
ICBjb25zdCBTZXJpZXNJZENvbnRhaW5lciAmIHNlcmllc1VJRCA9IG5hbWVHZW5lcmF0b3ItPkdl
dFNlcmllc1VJRHMoKTsKPj4KPj4gLy8gR2l2ZW4gdGhhdCBpdCBpcyBjb21tb24gdG8gZmluZCBt
dWx0aXBsZSBESUNPTSBzZXJpZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5LAo+PiAvLyB3ZSBtdXN0
IHRlbGwgdGhlIEdEQ00gY2xhc3NlcyB3aGF0IHNwZWNpZmljIHNlcmllcyB3ZSB3YW50IHRvIHJl
YWQuIEluCj4+IC8vIHRoaXMgZXhhbXBsZSB3ZSBkbyB0aGlzIGJ5IGNoZWNraW5nIGZpcnN0IGlm
IHRoZSB1c2VyIGhhcyBwcm92aWRlZCBhIHNlcmllcwo+PiAvLyBpZGVudGlmaWVyIGluIHRoZSBj
b21tYW5kIGxpbmUgYXJndW1lbnRzLiBJZiBubyBzZXJpZXMgaWRlbnRpZmllciBoYXMgYmVlbgo+
PiAvLyBwYXNzZWQsIHRoZW4gd2Ugc2ltcGx5IHVzZSB0aGUgZmlyc3Qgc2VyaWVzIGZvdW5kIGR1
cmluZyB0aGUgZXhwbG9yYXRpb24gb2YKPj4gLy8gdGhlIGRpcmVjdG9yeS4KPj4KPj4KPj4gICAg
IHN0ZDo6c3RyaW5nIHNlcmllc0lkZW50aWZpZXI7Cj4+Cj4+ICAgICAgc2VyaWVzSWRlbnRpZmll
ciA9IHNlcmllc1VJRC5iZWdpbigpLT5jX3N0cigpOwo+Pgo+PiAgICAgc3RkOjpjb3V0IDw8IHN0
ZDo6ZW5kbCA8PCBzdGQ6OmVuZGw7Cj4+ICAgICBzdGQ6OmNvdXQgPDwgIk5vdyByZWFkaW5nIHNl
cmllczogIiA8PCBzdGQ6OmVuZGwgPDwgc3RkOjplbmRsOwo+PiAgICAgc3RkOjpjb3V0IDw8IHNl
cmllc0lkZW50aWZpZXIgPDwgc3RkOjplbmRsOwo+PiAgICAgc3RkOjpjb3V0IDw8IHN0ZDo6ZW5k
bCA8PCBzdGQ6OmVuZGw7Cj4+Cj4+Cj4+IC8vIFdlIHBhc3MgdGhlIHNlcmllcyBpZGVudGlmaWVy
IHRvIHRoZSBuYW1lIGdlbmVyYXRvciBhbmQgYXNrIGZvciBhbGwgdGhlCj4+IC8vIGZpbGVuYW1l
cyBhc3NvY2lhdGVkIHRvIHRoYXQgc2VyaWVzLiBUaGlzIGxpc3QgaXMgcmV0dXJuZWQgaW4gYSBj
b250YWluZXIgb2YKPj4gLy8gc3RyaW5ncyBieSB0aGUgXGNvZGV7R2V0RmlsZU5hbWVzKCl9IG1l
dGhvZC4KPj4KPj4KPj4gICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8IHN0ZDo6c3RyaW5nID4gICBG
aWxlTmFtZXNDb250YWluZXI7Cj4+ICAgICBGaWxlTmFtZXNDb250YWluZXIgZmlsZU5hbWVzOwo+
Pgo+PiAgICAgZmlsZU5hbWVzID0gbmFtZUdlbmVyYXRvci0+R2V0RmlsZU5hbWVzKCBzZXJpZXNJ
ZGVudGlmaWVyICk7Cj4+Cj4+IC8vCj4+IC8vIFRoZSBsaXN0IG9mIGZpbGVuYW1lcyBjYW4gbm93
IGJlIHBhc3NlZCB0byB0aGUgXGRveHlnZW57SW1hZ2VTZXJpZXNSZWFkZXJ9Cj4+IC8vIHVzaW5n
IHRoZSBcY29kZXtTZXRGaWxlTmFtZXMoKX0gbWV0aG9kLgo+Pgo+Pgo+PiAgICAgcmVhZGVyLT5T
ZXRGaWxlTmFtZXMoIGZpbGVOYW1lcyApOwo+Pgo+PiAvLyBGaW5hbGx5IHdlIGNhbiB0cmlnZ2Vy
IHRoZSByZWFkaW5nIHByb2Nlc3MgYnkgaW52b2tpbmcgdGhlIFxjb2Rle1VwZGF0ZSgpfQo+PiAv
LyBtZXRob2QgaW4gdGhlIHJlYWRlci4gVGhpcyBjYWxsIGFzIHVzdWFsIGlzIHBsYWNlZCBpbnNp
ZGUgYSBcY29kZXt0cnkvY2F0Y2h9Cj4+IC8vIGJsb2NrLgo+Pgo+PiAgICAgdHJ5Cj4+ICAgICAg
IHsKPj4gICAgICAgcmVhZGVyLT5VcGRhdGUoKTsKPj4gICAgICAgfQo+PiAgICAgY2F0Y2ggKGl0
azo6RXhjZXB0aW9uT2JqZWN0ICZleCkKPj4gICAgICAgewo+PiAgICAgICBzdGQ6OmNvdXQgPDwg
ZXggPDwgc3RkOjplbmRsOwo+PiAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwo+PiAgICAgICB9
Cj4+IH0KPj4gICBjYXRjaCAoaXRrOjpFeGNlcHRpb25PYmplY3QgJmV4KQo+PiAgICAgewo+PiAg
ICAgc3RkOjpjb3V0IDw8IGV4IDw8IHN0ZDo6ZW5kbDsKPj4gICAgIHJldHVybiBFWElUX0ZBSUxV
UkU7Cj4+ICAgICB9Cj4+Cj4+ICAgLy8gVmlzdWFsaXphdGlvbiBwaXBlbGluZQo+Pgo+PiAgICAg
Ly8gQ3JlYXRlIHRoZSByZW5kZXJlciwgcmVuZGVyIHdpbmRvdyBhbmQgaW50ZXJhY3Rvcgo+PiAg
ICB2dGtSZW5kZXJlciAqcmVuZGVyZXIgPSB2dGtSZW5kZXJlcjo6TmV3KCk7Cj4+ICAgIHZ0a1Jl
bmRlcldpbmRvdyAqcmVuV2luID0gdnRrUmVuZGVyV2luZG93OjpOZXcoKTsKPj4gICAgcmVuV2lu
LT5BZGRSZW5kZXJlcihyZW5kZXJlcik7Cj4+Cj4+ICAgICB2dGtSZW5kZXJXaW5kb3dJbnRlcmFj
dG9yICppcmVuID0gdnRrUmVuZGVyV2luZG93SW50ZXJhY3Rvcjo6TmV3KCk7Cj4+ICAgICBpcmVu
LT5TZXRSZW5kZXJXaW5kb3cocmVuV2luKTsKPj4KPj4gICAgLy8gUmVhZCB0aGUgZGF0YQo+PiAg
ICB2dGtJbWFnZURhdGEgKmlucHV0ID0gbnVsbHB0cjsKPj4KPj4gLyogICAgdnRrRElDT01JbWFn
ZVJlYWRlciAqcmVhZGVyID0gdnRrRElDT01JbWFnZVJlYWRlcjo6TmV3KCk7Cj4+IC8vIHZ0a1RJ
RkZSZWFkZXIgKnJlYWRlciA9IHZ0a1RJRkZSZWFkZXI6Ok5ldygpOwo+PiAgICByZWFkZXItPlNl
dEZpbGVOYW1lKGFyZ3ZbMV0pOyAqLwo+PiAgICAvLyByZWFkZXItPlVwZGF0ZSgpOyAvLyByZWFk
IGRhdGEKPj4KPj4KPj4gICAgY29ubmVjdG9yLT5TZXRJbnB1dChyZWFkZXItPkdldE91dHB1dCgp
KTsKPj4KPj4gICAgIC8vIENyZWF0ZSBvdXIgdm9sdW1lIGFuZCBtYXBwZXIKPj4gICAgIHZ0a1Zv
bHVtZSAqdm9sdW1lID0gdnRrVm9sdW1lOjpOZXcoKTsKPj4gICAgIHZ0a0ZpeGVkUG9pbnRWb2x1
bWVSYXlDYXN0TWFwcGVyICptYXBwZXIgPSB2dGtGaXhlZFBvaW50Vm9sdW1lUmF5Q2FzdE1hcHBl
cjo6TmV3KCk7Cj4+IC8vIHZ0a1ZvbHVtZVJheUNhc3RDb21wb3NpdGVGdW5jdGlvbiAqY29tcG9z
aXRlRnVuY3Rpb24gPSB2dGtWb2x1bWVSYXlDYXN0Q29tcG9zaXRlRnVuY3Rpb246Ok5ldygpOwo+
PiB2dGtJbnRlcmFjdG9yU3R5bGVUcmFja2JhbGxDYW1lcmEgKnN0eWxlQ2FtZXJhID0gdnRrSW50
ZXJhY3RvclN0eWxlVHJhY2tiYWxsQ2FtZXJhOjpOZXcoKTsKPj4KPj4gICAgIC8vIGNvbm5lY3Qg
dXAgdGhlIHZvbHVtZSB0byB0aGUgcHJvcGVydHkgYW5kIHRoZSBtYXBwZXIKPj4gICAgIG1hcHBl
ciAtPiBTZXRJbnB1dERhdGEoIGNvbm5lY3RvciAtPiBHZXRPdXRwdXQoKSApOwo+PiBtYXBwZXIg
LT4gU2V0U2FtcGxlRGlzdGFuY2UoIDAuMSApOwo+Pgo+PiB2dGtTbWFydFBvaW50ZXI8dnRrVm9s
dW1lUHJvcGVydHk+IHZvbHVtZVByb3BlcnR5ID0gdnRrU21hcnRQb2ludGVyPHZ0a1ZvbHVtZVBy
b3BlcnR5Pjo6TmV3KCk7Cj4+Cj4+Cj4+IHZvbHVtZVByb3BlcnR5LT5TZXRJbnRlcnBvbGF0aW9u
VHlwZVRvTGluZWFyKCk7IC8vIGJldHRlciBpbWFnZSBxdWFsaXR5IGJ1dCBjb21wdXRhdGlvbidz
IGxvbmdlcgo+Pgo+Pgo+PiB2dGtTbWFydFBvaW50ZXI8dnRrUGllY2V3aXNlRnVuY3Rpb24+IHNj
YWxhck9wYWNpdHkgPSB2dGtTbWFydFBvaW50ZXI8dnRrUGllY2V3aXNlRnVuY3Rpb24+OjpOZXco
KTsKPj4gdnRrU21hcnRQb2ludGVyPHZ0a1BpZWNld2lzZUZ1bmN0aW9uPiBncmFkaWVudE9wYWNp
dHkgPSB2dGtTbWFydFBvaW50ZXI8dnRrUGllY2V3aXNlRnVuY3Rpb24+OjpOZXcoKTsKPj4KPj4g
ICBzY2FsYXJPcGFjaXR5LT5BZGRQb2ludCgwLCAgICAwLjAwKTsKPj4gICBzY2FsYXJPcGFjaXR5
LT5BZGRQb2ludCg1MDAsICAwLjE1KTsKPj4gICBzY2FsYXJPcGFjaXR5LT5BZGRQb2ludCgxMDAw
LCAwLjE1KTsKPj4gICBzY2FsYXJPcGFjaXR5LT5BZGRQb2ludCgxMTUwLCAwLjg1KTsKPj4KPj4K
Pj4gICBncmFkaWVudE9wYWNpdHktPkFkZFBvaW50KDAsICAgMC4wKTsKPj4gICBncmFkaWVudE9w
YWNpdHktPkFkZFBvaW50KDkwLCAgMC41KTsKPj4gICBncmFkaWVudE9wYWNpdHktPkFkZFBvaW50
KDEwMCwgMS4wKTsKPj4KPj4KPj4gLy9zZXQgdGhlIHRyYW5zZmVyIGZ1bmN0aW9ucyB0byB0aGUg
cHJvcGVydHkKPj4gdm9sdW1lUHJvcGVydHktPlNldFNjYWxhck9wYWNpdHkoc2NhbGFyT3BhY2l0
eSk7Cj4+IHZvbHVtZVByb3BlcnR5LT5TZXRHcmFkaWVudE9wYWNpdHkoZ3JhZGllbnRPcGFjaXR5
KTsKPj4KPj4gLy9zZXQgdGhlIHByb3BlcnR5IHRvIHRoZSB2b2x1bWUKPj4KPj4gdm9sdW1lLT5T
ZXRQcm9wZXJ0eSh2b2x1bWVQcm9wZXJ0eSk7Cj4+Cj4+IHZvbHVtZS0+U2V0TWFwcGVyKCBtYXBw
ZXIgKTsKPj4gICAgIGlyZW4gLT4gU2V0SW50ZXJhY3RvclN0eWxlKHN0eWxlQ2FtZXJhKTsKPj4g
ICAgIC8vIFNldCB0aGUgZGVmYXVsdCB3aW5kb3cgc2l6ZQo+PiAgICAgcmVuV2luLT5TZXRTaXpl
KDYwMCw2MDApOwo+Pgo+PiAgICAgLy8gQWRkIHRoZSB2b2x1bWUgdG8gdGhlIHNjZW5lCj4+ICAg
ICByZW5kZXJlci0+QWRkVm9sdW1lKCB2b2x1bWUgKTsKPj4KPj4gICAgIC8vIGludGVyYWN0IHdp
dGggZGF0YQo+PiAgICAgcmVuV2luLT5SZW5kZXIoKTsKPj4gICAgIGlyZW4gLT4gU3RhcnQoKTsK
Pj4KPj4KPj4gICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cj4+ICAgfQo+Pgo+Pgo+Pgo+PiBJbnZp
YXRvIGRhIE91dGxvb2sKPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4gRGE6
IETFvmVuYW4gWnVracSHIDxkemVuYW56QGdtYWlsLmNvbT4KPj4gSW52aWF0bzogdmVuZXJkw6wg
MTUgbWFyem8gMjAxOSAxNzoxOQo+PiBBOiBNYXJjbyBGZXN0dWdhdG8KPj4gQ2M6IGluc2lnaHQt
dXNlcnNAaXRrLm9yZwo+PiBPZ2dldHRvOiBSZTogW0lUSy11c2Vyc10gUmVhZGluZyBESUNPTSBz
ZXJpZXMgYW5kIHZpc3VhbGl6ZSB0aGUgdm9sdW1lIHdpdGggVlRLCj4+Cj4+IEhpIE1hcmNvLAo+
Pgo+PiB5b3UgY291bGQgY29tYmluZSB0aGF0IGV4YW1wbGUgd2l0aCBWVEsgVm9sdW1lUmVuZGVy
aW5nIGV4YW1wbGUgYW5kIGNvbm5lY3QgdGhlbSB1c2luZyBJVEtWVEtHbHVlLgo+Pgo+PiBSZWdh
cmRzLAo+PiBExb5lbmFuCj4+Cj4+IE9uIEZyaSwgTWFyIDE1LCAyMDE5IGF0IDc6MDAgQU0gTWFy
Y28gRmVzdHVnYXRvIDxtYXJjby5mZXN0dWdhdG9Ab3V0bG9vay5pdD4gd3JvdGU6Cj4+Cj4+IEhp
IGd1eXMhIEknbSB2ZXJ5IG5ldyB0byBJVEstVlRLLi4ud2hhdCBpIGhhdmUgdG8gZG8gaXMgcmVh
ZGluZyAxOTkgZGljb20KPj4gaW1hZ2VzIHVzaW5nIElUSyBhbmQgdmlzdWFsaXplIHRoZSB2b2x1
bWUgdXNpbmcgVlRLLgo+PiBVc2luZyB0aGUgZXhhbXBsZSAiRGljb21TZXJpZXNSZWFkSW1hZ2VX
cml0ZTIiIGltIGFibGUgdG8gcmVhZCB0aGUgc2VyaWVzCj4+IGFuZCBjcmVhdGUgYSAzRCB2b2x1
bWUgYnV0IGkgZG9udCBrbm93IGhvdyB0byB2aXN1YWxpemUgaXQgd2l0aCBWVEshCj4+IEFueSBo
ZWxwPyA6KQo+PiBUaGFuayB1IGZvciB5b3VyIHRpbWUhCj4+Cj4+IEludmlhdG8gZGEgT3V0bG9v
awo+PiBUaGUgSVRLIGNvbW11bml0eSBpcyB0cmFuc2l0aW9uaW5nIGZyb20gdGhpcyBtYWlsaW5n
IGxpc3QgdG8gZGlzY291cnNlLml0ay5vcmcuIFBsZWFzZSBqb2luIHVzIHRoZXJlIQo+PiBfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBQb3dlcmVkIGJ5IHd3dy5raXR3YXJlLmNv
bQo+Pgo+PiBWaXNpdCBvdGhlciBLaXR3YXJlIG9wZW4tc291cmNlIHByb2plY3RzIGF0Cj4+IGh0
dHA6Ly93d3cua2l0d2FyZS5jb20vb3BlbnNvdXJjZS9vcGVuc291cmNlLmh0bWwKPj4KPj4gS2l0
d2FyZSBvZmZlcnMgSVRLIFRyYWluaW5nIENvdXJzZXMsIGZvciBtb3JlIGluZm9ybWF0aW9uIHZp
c2l0Ogo+PiBodHRwOi8vd3d3LmtpdHdhcmUuY29tL3Byb2R1Y3RzL3Byb3RyYWluaW5nLnBocAo+
Pgo+PiBQbGVhc2Uga2VlcCBtZXNzYWdlcyBvbi10b3BpYyBhbmQgY2hlY2sgdGhlIElUSyBGQVEg
YXQ6Cj4+IGh0dHA6Ly93d3cuaXRrLm9yZy9XaWtpL0lUS19GQVEKPj4KPj4gRm9sbG93IHRoaXMg
bGluayB0byBzdWJzY3JpYmUvdW5zdWJzY3JpYmU6Cj4+IGh0dHBzOi8vaXRrLm9yZy9tYWlsbWFu
L2xpc3RpbmZvL2luc2lnaHQtdXNlcnMKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCj4gUG93ZXJlZCBieSB3d3cua2l0d2FyZS5jb20KPgo+IFZpc2l0
IG90aGVyIEtpdHdhcmUgb3Blbi1zb3VyY2UgcHJvamVjdHMgYXQgaHR0cDovL3d3dy5raXR3YXJl
LmNvbS9vcGVuc291cmNlL29wZW5zb3VyY2UuaHRtbAo+Cj4gUGxlYXNlIGtlZXAgbWVzc2FnZXMg
b24tdG9waWMgYW5kIGNoZWNrIHRoZSBWVEsgRkFRIGF0OiBodHRwOi8vd3d3LnZ0ay5vcmcvV2lr
aS9WVEtfRkFRCj4KPiBTZWFyY2ggdGhlIGxpc3QgYXJjaGl2ZXMgYXQ6IGh0dHA6Ly9tYXJrbWFp
bC5vcmcvc2VhcmNoLz9xPXZ0a3VzZXJzCj4KPiBGb2xsb3cgdGhpcyBsaW5rIHRvIHN1YnNjcmli
ZS91bnN1YnNjcmliZToKPiBodHRwczovL3Z0ay5vcmcvbWFpbG1hbi9saXN0aW5mby92dGt1c2Vy
cwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpQb3dlcmVk
IGJ5IHd3dy5raXR3YXJlLmNvbQoKVmlzaXQgb3RoZXIgS2l0d2FyZSBvcGVuLXNvdXJjZSBwcm9q
ZWN0cyBhdCBodHRwOi8vd3d3LmtpdHdhcmUuY29tL29wZW5zb3VyY2Uvb3BlbnNvdXJjZS5odG1s
CgpQbGVhc2Uga2VlcCBtZXNzYWdlcyBvbi10b3BpYyBhbmQgY2hlY2sgdGhlIFZUSyBGQVEgYXQ6
IGh0dHA6Ly93d3cudnRrLm9yZy9XaWtpL1ZUS19GQVEKClNlYXJjaCB0aGUgbGlzdCBhcmNoaXZl
cyBhdDogaHR0cDovL21hcmttYWlsLm9yZy9zZWFyY2gvP3E9dnRrdXNlcnMKCkZvbGxvdyB0aGlz
IGxpbmsgdG8gc3Vic2NyaWJlL3Vuc3Vic2NyaWJlOgpodHRwczovL3Z0ay5vcmcvbWFpbG1hbi9s
aXN0aW5mby92dGt1c2Vycwo=