[bt-devel] Feature plan

Joachim Ansorg bt-devel@crosswire.org
Wed, 5 Jul 2000 00:25:11 +0000


--------------Boundary-00=_ZT77DA9X4F3HKM7YSY2G
Content-Type: text/plain
Content-Transfer-Encoding: 8bit

Hi Martin!

> > Release 0.3:
> > ---------
> > -bug fixes for:
> > 	o Drag&Drop: If you drag a module ina edit widget the whole chapter of
> > 	"Genesis 1" is inserted. The type of Drah should be checked (and it
> > should be denied if it's a wrong type)
>
> I don't understand this. Now only the first verse is inserted. Should the
> whole chapter be inserted? Why? And which chapter?
> What type of drag should be denied?

Ok, my bad enlish ;-)

I'll try to explain better:
	
If you start dragging a module of the groupmanager around you started a 
"module-drag", but since the edit widget uses dropped verse references it 
shouldn't accept module-drags !
But at te moemnt it does accept module-drags - the first chapter of Genesis 
is inserted. Module-drags should be denied.

Do you understand?

> > 	o Searchdialog: Some problems with the search analysis (my part)
> >
> > 	o Commentary presenter, the combo vboxes are not refreshed if you drag a
> > 	verse reference on it (my part, maybe a backend bug)
> >
> > 	o Put a QWhatsThis help on every widget
>
> Good! though i didn't manage to see the tips.

Really?
Edit the toolbar and put the WhatsThis button on the bar or press SHIFT+F1 
and click on a widget.

> > Release 0.4:
> > ---------
> > Release 0.4 is the next release after 0.3. It shouldn't take half a year
> > as 0.3 did ;-)
> >
> > -New features of 0.4:
> > 	o Printing: Really necessary for a real usage of BibleTime. Should use a
> > 	good layouted printdialog (like the oe in 0.2) and should support useful
> > 	features. The features need discussion.
>
> Yes!

> > 	o Module installer dialog: IMHO it's useful because lots  of newbies
> > ahve problems with bash and it's commands (setting permissions, using
> > groups, unpacking, configuration of SWORD etc.). This will hopefuly
> > reduce the support mails.
>
> Good. Too difficult for me.

I'll try it. A thing I would like to do a very long time! I hope it's not so 
difficult as you say ;-)

> > 	o Some improvements of the searchdialog:
> > 		- Better layout
> > 		- Maybe reg-exp widget
> > 		- Improvements to the search analysis (e.g. drawing to an image and
> > scroll the image)
>
> Good. I suggest displaying solid bars.

Solid bars? Whats this? I'm missing a German translation. Do you mean bars 
like I did in 0.2 ?
Using bars it's difficult to show results for more than one module.

> > -Things that have to be discussed for 0.4:
> > 	o Plugin support
> > 	This is useful for future extensions of BibleTime
>
> ok. needs a perfect interface.

Couldn't we add functions later? I have at the moment no idea of coding 
plugin support.

> > 	o KParts supports
> > 	Use presenters as KParts. Together with plugin support this could
> > introduce user-made presenters or easy extandibilty of BibleTime if new
> > moduletypes are introduced. Memory-Saving because they are only loaded at
> > runtme if they are required.  Not sure if it's really useful.
>
> It would be useful, but might turn out to be very difficult.

You are right. Very difficult but useful for user extensions.

> > 	o Threading: We should try to tread BibleTime so it's usable even ehilw
> > 	searching
>
> That would be my part - at least to try it. I didn't get an answer in
> sword-devel to my question if sword is thread safe yet.

I read some pages (Introduction to GNU PTh, a page about threaded KDE 
programs (attached to this mail)). 
IMHO it's possible to use threads in BibleTime if QT/KDE have one thread and 
SWORD has an own one.
All queries etc. should be send to the SWORD thread so there are no threads 
accessing SWORD modules at the same time!
But I've no idea.

> > 	o Sermon backend
> > 	Will improve usability. But it's not SWORD related so it may break
> > 	standards.
> > 	Has somebody tested GNOMESword ? I was unable to compile it. Doesn't it
> > have something like a sermon part?
>
> That might be one with the kparts. could be done as the first plugin -
> since it is not sword related.

Yes, will be difficult. First we would need a kparts plugin support.
But we may also implement a second backend since BibleTime is designed to 
support multiple backends.

> btw, there are still problems with the backend (strong numbers, ...) I'll
> look at this and inform you.

problems?

> > As you can see we have some nice ideas and things to do for 0.4. But we
> > need discussions to improve usability and usage of these features.
> > Otherwise we would break the usability of BT!

> > -Important things:
> > 	o Would you use these things ?
> > 	o How would you improve them for best usability?
> > 	o What's missing in the feature list for 0.3 / 0.4 ?
> >
> >
> > Please post your comments!
> >
> > --Joachim
>
> Martin

--Joachim
--------------Boundary-00=_ZT77DA9X4F3HKM7YSY2G
Content-Type: text/html;
  name="displayarticle.phtml"
Content-Transfer-Encoding: base64
Content-Description: page with a description of how to code multithreaded QT apps
Content-Disposition: attachment; filename="displayarticle.phtml"

PEhUTUw+CiAgPEhFQUQ+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRl
bnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KICAgIDxtZXRhIG5hbWU9IkF1dGhv
ciIgY29udGVudD0id2VibWFzdGVyQHNwbGl0aGVsaXguY29tIj4KICAgIDxtZXRhIG5hbWU9IkRl
c2NyaXB0aW9uIiBjb250ZW50PSJTcGxpdCBIZWxpeCI+CiAgICAKCgo8VElUTEU+W1NIRE5dIFNl
YXJjaCBSZXN1bHRzPC9USVRMRT4KPCEtLSAvKgoKICAgICAgICBDT1BZUklHSFQgTk9USUNFCgog
ICAgICAgIFRoZSBjb2RlIGFuZCBncmFwaGljcyBvbiB0aGlzIHdlYnNpdGUgKGFuZCBpdCdzIG1p
cnJvciAKICAgICAgICBzaXRlcywgaWYgYW55KSBhcmUgQ29weXJpZ2h0IChjKSAyMDAwIFNwbGl0
IEhlbGl4LiAKICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgoKICAgICAgICBFeGNlcHQgYXMg
b3RoZXJ3aXNlIGluZGljYXRlZCBlbHNld2hlcmUgb24gdGhpcyBzaXRlLCB5b3UgCiAgICAgICAg
bWF5IHZpZXcsIGNvcHksIHByaW50LCBhbmQgZGlzdHJpYnV0ZSBkb2N1bWVudHMgYXZhaWxhYmxl
IAogICAgICAgIG9uIHRoaXMgV2ViIHNpdGUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnM6IAoKICAgICAgICBvIFRoZSBkb2N1bWVudCBtYXkgYmUgdXNlZCBzb2xlbHkgZm9yIGlu
Zm9ybWF0aW9uYWwgcHVycG9zZXMuCgogICAgICAgIG8gU3BsaXQgSGVsaXgsIFNIRE4sIGFuZCBh
bGwgb3RoZXIgYWZmaWxpdGVzIGFyZSBub3QgCiAgICAgICAgICByZXNwb25zaWJsZSBmb3IgdGhl
IGNvbnRlbnRzIG9mIGFydGljbGVzIG9yIGNvbnNlcXVlbmNlcwogICAgICAgICAgYnJvdWdodCBh
Ym91dCBieSBmb2xsb3dpbmcgc3VnZ2VzdGlvbnMgaW4gdGhlIGFydGljbGVzLgoKICAgICAgICBv
IEFsbCBhcnRpY2xlcyBhcmUgb3duZWQgYnkgdGhlIEF1dGhvciBvZiB0aGUgYXJ0aWNsZSBhbmQg
YWxsCiAgICAgICAgICBwZXJtaXNzaW9uIHRvIGNvcHkgb3IgZGlzdHJpYnV0ZSB0aGUgYXJ0aWNs
ZSBtdXN0IGJlIG9idGFpbmVkCiAgICAgICAgICBieSB0aGUgYXV0aG9yLgoKICAgICAgICBvIEFu
eSBjb3B5IG9mIHdlYiBwYWdlcyBvciBwb3J0aW9uIHRoZXJlb2YgKG5vdCBpbmNsdWRpbmcgYXJ0
aWNsZXMpIAogICAgICAgICAgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgcGVybWlzc2lvbiBu
b3RpY2U6IAoKICAgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAgICAgICAqICBQRVJNSVNTSU9OIE5P
VElDRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAgICAgICAqICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoK
ICAgICAgICAqICBBbGwgQ29kZSB1c2VkIHdpdGggcGVybWlzc2lvbiBvZiB0aGUgU3BsaXQgSGVs
aXguICAgICAgICoKICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICoKICAgICAgICAqICBDb3B5cmlnaHQgKGMpIDIwMDAuICBB
bGwgcmlnaHRzIHJlc2VydmVkLiAgICAgICAgICAgICAgICoKICAgICAgICAqICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAgICAgICAq
ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBwbGVhc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICoKICAgICAgICAqICBzZWUgPGh0dHA6Ly93d3cuc3BsaXRoZWxpeC5jb20+ICAgICAgICAgICAg
ICAgICAgICAgICAgICoKICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICoKICAgICAgICAqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCiAgICAgICAgbyBTcGxpdCBI
ZWxpeCByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmV2b2tlIHN1Y2ggCiAgICAgICAgICBhdXRob3Jp
emF0aW9uIGF0IGFueSB0aW1lLCBhbmQgYW55IHN1Y2ggdXNlIHNoYWxsIGJlIGRpcy0KICAgICAg
ICAgIGNvbnRpbnVlZCBpbW1lZGlhdGVseSB1cG9uIG5vdGljZSBmcm9tIFNwbGl0IEhlbGl4LgoK
ICAgICAgICBEb2N1bWVudHMgc3BlY2lmaWVkIGFib3ZlIERPIE5PVCBpbmNsdWRlIHRoZSBncmFw
aGljYWwgCiAgICAgICAgZWxlbWVudHMsIGRlc2lnbiwgb3IgbGF5b3V0IG9mIHRoaXMgV2ViIHNp
dGUuICBFbGVtZW50cyBvZiAKICAgICAgICB0aGlzIFdlYiBzaXRlIGFyZSBwcm90ZWN0ZWQgYnkg
dHJhZGUgZHJlc3MgYW5kIG90aGVyIGxhd3MgYW5kIAogICAgICAgIE1BWSBOT1QgQkUgQ09QSUVE
IE9SIElNSVRBVEVEIElOIFdIT0xFIE9SIElOIFBBUlQuCgogICAgICAgIFlvdSBjYW4gY29udGFj
dCB0aGUgd2VibWFzdGVyIGF0IDx3ZWJtYXN0ZXJAc3BsaXRoZWxpeC5jb20+LgoKICAgICAgICBG
b3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBTcGxpdCBIZWxpeCwgCiAgICAgICAgc2VlIDxodHRw
Oi8vd3d3LnNwbGl0aGVsaXguY29tPi4KKi8gLS0+CjwvSEVBRD4KCjxCT0RZIHRleHQ9IiMwMDAw
MDAiIGJnY29sb3I9IiNGRkZGRkYiCiBsaW5rPSIjMzMzMzMzIiB2bGluaz0iI0ZGMDAwMCIgYWxp
bms9IiMzMzAwMzMiPgoKPCEtLSBOT1RFOiAnS0RFIERldmVsb3BlcnMnIGxvZ28gd2FzIG9yaWdp
bmFsbHkgdGFrZW4gZnJvbSBodHRwOi8vZGV2ZWxvcGVyLmtkZS5vcmcgLS0+Cjx0YWJsZSBCT1JE
RVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTAgV0lEVEg9IjEwMCUiIE5PU0FWRSA+CiAg
PHRyIE5PU0FWRT4KICAgIDx0ZCByb3dzcGFuPSIyIiBXSURUSD0iMTU2Ij48YSBIUkVGPSJpbmRl
eC5waHRtbD9HZW5lcmFsX1Nlc3Npb249MDExOTkxNzRjOTE2ZjgzMTJhZWQ1NjhkYTE4ZjVlZTMi
PjxpbWcgU1JDPSJrZGUvaW1hZ2VzL2tvbnF5LWxvZ28ucG5nIiBCT1JERVI9IjAiIFdJRFRIPSIx
NTYiPjwvYT48L3RkPgogICAgPHRkIHZhbGlnbj1DRU5URVI+CiAgICAgIDxpbWcgU1JDPSJrZGUv
aW1hZ2VzL2RldmVsb3BlcmNvcm5lci1sb2dvLnBuZyIgQk9SREVSPSIwIj4KICAgIDwvdGQ+CiAg
PC90cj4KICA8dHI+CiAgICA8dGQgdmFsaWduPWJvdHRvbSBXSURUSD0iMTAwJSI+Cjx0YWJsZSBC
T1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTMgV0lEVEg9IjEwMCUiIEJHQ09MT1I9
IzMzODhGRiBOT1NBVkUgPiAKICA8dHIgTk9TQVZFPgogICAgPHRkPgogICAgICA8Yj48Zm9udCBz
aXplPSItMSIgY29sb3I9IiNGRkZGRkYiPgogICAgICAgIDxhIGhyZWY9ImluZGV4LnBodG1sP0dl
bmVyYWxfU2Vzc2lvbj0wMTE5OTE3NGM5MTZmODMxMmFlZDU2OGRhMThmNWVlMyI+SG9tZTwvYT4K
ICAgICAgPC9mb250PjwvYj4KICAgIDwvdGQ+CiAgICA8dGQ+CiAgICAgIDxiPjxmb250IHNpemU9
Ii0xIiBjb2xvcj0iI0ZGRkZGRiI+CiAgICAgICAgPGEgaHJlZj0iYnJvd3NlYXJ0aWNsZXMucGh0
bWw/R2VuZXJhbF9TZXNzaW9uPTAxMTk5MTc0YzkxNmY4MzEyYWVkNTY4ZGExOGY1ZWUzIj5Ccm93
c2U8L2E+CiAgICAgIDwvZm9udD48L2I+CiAgICA8L3RkPgogICAgPHRkPgogICAgICA8Yj48Zm9u
dCBzaXplPSItMSIgY29sb3I9IiNGRkZGRkYiPgogICAgICAgIDxhIGhyZWY9InNlYXJjaF9hcnRp
Y2xlLnBodG1sP0dlbmVyYWxfU2Vzc2lvbj0wMTE5OTE3NGM5MTZmODMxMmFlZDU2OGRhMThmNWVl
MyI+U2VhcmNoPC9hPgogICAgICA8L2ZvbnQ+PC9iPgogICAgPC90ZD4KICAgIDx0ZD4KICAgICAg
PGI+PGZvbnQgc2l6ZT0iLTEiIGNvbG9yPSIjRkZGRkZGIj4KICAgICAgICA8YSBocmVmPSJjb250
cmlidXRlLnBodG1sP0dlbmVyYWxfU2Vzc2lvbj0wMTE5OTE3NGM5MTZmODMxMmFlZDU2OGRhMThm
NWVlMyI+Q29udHJpYnV0ZTwvYT4KICAgICAgPC9mb250PjwvYj4KICAgIDwvdGQ+CiAgICA8dGQg
V0lEVEg9IjEwMCUiIE5PU0FWRT4KICAgICAgIDxkaXYgYWxpZ249cmlnaHQ+CiAgICAgICAgIDxi
Pjxmb250IHNpemU9LTE+CiAgICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3d3dy5zaGRuLm9yZyI+
QWJvdXQ8L2E+CiAgICAgICAgIDwvZm9udD48L2I+CiAgICAgICA8L2Rpdj4KICAgIDwvdGQ+CiAg
PC90cj4KPC90YWJsZT4KPHRhYmxlIEJPUkRFUj0wIENFTExTUEFDSU5HPTAgQ0VMTFBBRERJTkc9
MSBXSURUSD0iMTAwJSIgTk9TQVZFID4KICA8dHIgTk9TQVZFPgogICAgPHRkIFdJRFRIPSI4NSUi
IE5PU0FWRT4mbmJzcDs8L3RkPgogICAgPHRkPjxmb250IHNpemU9LTE+PGEgaHJlZj0ibXlfaW5k
ZXgucGh0bWw/R2VuZXJhbF9TZXNzaW9uPTAxMTk5MTc0YzkxNmY4MzEyYWVkNTY4ZGExOGY1ZWUz
Ij5wcmVmZXJlbmNlczwvYT48L2ZvbnQ+PC90ZD4KICAgIDx0ZD48Zm9udCBzaXplPS0xPjxhIGhy
ZWY9Im15X2luZGV4LnBodG1sP0dlbmVyYWxfU2Vzc2lvbj0wMTE5OTE3NGM5MTZmODMxMmFlZDU2
OGRhMThmNWVlMyI+bG9nIGluPC9hPjwvZm9udD48L3RkPgogIDwvdHI+CjwvdGFibGU+CiAgICA8
L3RkPgogIDwvdHI+CjwvdGFibGU+CjxUQUJMRSBCT1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQ
QURESU5HPTIgV0lEVEg9IjEwMCUiPgogIDxUUiBWQUxJR049VE9QPgo8IS0tIEJPRFkgVEFCTEUg
RklSU1QgQ09MVU1OIC0tPgo8VEQgV0lEVEg9IjE3MCI+CjwvVEQ+CjwhLS0gQk9EWSBUQUJMRSBT
RUNPTkQgQ09MVU1OIC0tPgo8VEQgV0lEVEg9IjEwMCUiPgo8dGFibGUgQk9SREVSPTAgQ0VMTFNQ
QUNJTkc9MCBDRUxMUEFERElORz0xIFdJRFRIPSIxMDAlIj4KICA8dHIgVkFMSUdOPUNFTlRFUj4K
ICAgIDx0ZD4KICAgICAgPHRhYmxlIEJHQ09MT1I9I0ZGRkZGRiBCT1JERVI9MCBDRUxMU1BBQ0lO
Rz0wCiAgICAgICBDRUxMUEFERElORz0xIFdJRFRIPSIxMDAlIj4KICAgICAgICA8dHIgVkFMSUdO
PUNFTlRFUj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPHRhYmxlIEJHQ09MT1I9I0Q4RDhG
RiBCT1JERVI9MCBDRUxMU1BBQ0lORz0wCiAgICAgICAgICAgICBDRUxMUEFERElORz0yIFdJRFRI
PSIxMDAlIj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQ+Cjxmb250IHNp
emU9IisxIj5BcnRpY2xlPC9mb250Pjxicj48YnI+Cjx0YWJsZSBXSURUSD0iMTAwJSIKICA8dHIg
VkFMSUdOPXRvcD4KICAgIDx0ZD4KPEgyPjx1PlRocmVhZGluZyB3aXRoIFF0L0tERTwvdT48L0gy
Pgo8Zm9udCBzaXplPS0xPjxpPkJ5OiBSb2JlcnRvIEFsc2luYTwvaT48L2ZvbnQ+CiAgICA8L3Rk
PgogICAgPHRkIEFMSUdOPXJpZ2h0PgogICAgICA8dGFibGU+CiAgICAgICAgPHRyPgogICAgICAg
ICAgPHRkPjxmb250IHNpemU9LTE+PGI+R2VucmU6PC9iPjwvZm9udD48L3RkPgogICAgICAgICAg
PHRkPjxmb250IHNpemU9LTE+RXNzYXk8L2ZvbnQ+PC90ZD4KICAgICAgICA8L3RyPgogICAgICAg
IDx0cj4KICAgICAgICAgIDx0ZD48Zm9udCBzaXplPS0xPjxiPlRvcGljOjwvYj48L2ZvbnQ+PC90
ZD4KICAgICAgICAgIDx0ZD48Zm9udCBzaXplPS0xPk11bHRpdGhyZWFkaW5nPC9mb250PjwvdGQ+
CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQ+PGZvbnQgc2l6ZT0tMT48
Yj5QdWJsaWNhdGlvbiBEYXRlOjwvYj48L2ZvbnQ+PC90ZD4KICAgICAgICAgIDx0ZD48Zm9udCBz
aXplPS0xPjIwMDAtMDYtMjY8L2ZvbnQ+PC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4K
ICAgICAgICAgIDx0ZD48Zm9udCBzaXplPS0xPjxiPktleXdvcmRzOjwvYj48L2ZvbnQ+PC90ZD4K
ICAgICAgICAgIDx0ZD48Zm9udCBzaXplPS0xPkdVSSwgTXVsdGl0aHJlYWRpbmcsIFF0PC9mb250
PjwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZQogICAgPC90ZD4KICA8L3RyPgo8L3Rh
YmxlCjxicj4KPGhyPgo8dT48Yj5JbnRyb2R1Y3Rpb248L2I+PC91PjxwPg0KDQoJVGhlIHB1cnBv
c2Ugb2YgdGhpcyBkb2N1bWVudCBpcyB0byBleHBsYWluIHRoZSBwcm9zIGFuZCBjb25zIG9mDQpp
bXBsZW1lbnRpbmcgYSBtdWx0aXRocmVhZGVkIEtERSAob3IgUXQpIGFwcGxpY2F0aW9uLCBhcyB3
ZWxsIGFzDQpleHBsYWluaW5nIGJyaWVmbHkgdGhlIHdheSBpbiB3aGljaCB0aGF0IGNhbiBiZSBk
b25lLg0KDQo8cD48dT48Yj5XaHkgbXVsdGl0aHJlYWRlZCBhcHBzIGFyZSBnb29kPC9iPjwvdT48
cD4NCg0KCU11bHRpdGhyZWFkZWQgYXBwcyBhcmUgZ29vZCBpbiB0aGF0IHRoZXkgYWxsb3cgeW91
IHRvIGhhdmUgYQ0Kbm9uLWJsb2NraW5nIEdVSSB3aXRob3V0IGRvaW5nIG11Y2ggdHJpY2tlcnku
IEZvciBpbnN0YW5jZSwgd2hlbiB5b3UNCndhbnQgdG8gcGVyZm9ybSBhIGxlbmd0aHkgY2FsY3Vs
YXRpb24gaW4gYSBzaW5nbGV0aHJlYWRlZCBRdA0KYXBwbGljYXRpb24sIHlvdSBuZWVkIHRvIHB1
dCBzb21lIHByb2Nlc3NFdmVudHMoKSBjYWxscyBpbiBiZXR3ZWVuDQpsZW5ndGh5IG9wZXJhdGlv
bnMgbGlrZSB0aGlzOg0KDQo8cHJlPg0Kdm9pZCBkb0xvbmdUaGluZygpDQp7DQogICAgYm9vbCBh
Ow0KICAgIGZvciAoO2E7KQ0KICAgIHsNCiAgICAgICAgYT1kb1NvbWV0aGluZygpOw0KICAgICAg
ICBxQXBwLT5wcm9jZXNzRXZlbnRzKCk7DQogICAgfQ0KfQ0KPC9wcmU+DQoNClRoaXMgaGFzIGEg
c2VyaW91cyBkb3duc2lkZTogd2hpbGUgeW91IHdpbGwgaGF2ZSBhIFVJIHRoYXQgcmVkcmF3cyBp
dHNlbGYNCmNvcnJlY3RseSAoYXMgbG9uZyBhcyBkb1NvbWV0aGluZygpIGRvZXNuJ3QgdGFrZSBs
b25nKSwgeW91IFNUSUxMIG5lZWQgdG8gDQpibG9jayAob3IgcmF0aGVyLCBkaXNhYmxlKSBtb3N0
IG9mIHlvdXIgVUkuDQoNCklmIHlvdSBkb24ndCBkaXNhYmxlIHBhcnQgb2YgdGhlIFVJLCBxQXBw
LT5wcm9jZXNzRXZlbnRzKCkgd2lsbCBnZXQgYQ0KYnV0dG9uIHByZXNzIGFuZCBzZW5kIHlvdXIg
YXBwIHRvIGRvIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5IG1ha2luZyB5b3VyDQpsaWZlIGRpZmZp
Y3VsdCwgb3IgeW91IGhhdmUgdG8gd3JpdGUgeW91ciBhcHAgdG8gYmUgYWJsZSB0byBqdWdnbGUN
CnNlcGFyYXRlIGNhbGxzIHRvIGRvTG9uZ1RoaW5nKCkgYXQgdGhlIHNhbWUgdGltZSwgZm9yIGV4
YW1wbGUuDQoNClRoZXJlIGlzIGFuIGFsdGVybmF0aXZlLCB3aGljaCBpcyBtb3ZpbmcgbGVuZ3Ro
eSBvcGVyYXRpb25zIGludG8gc2VwYXJhdGUNCnByb2Nlc3NlcywgYW5kIGp1c3QgaGF2ZSB5b3Vy
IGFwcCB3YWl0IGZvciB0aGUgc2VwYXJhdGUgcHJvY2Vzc2VzIHRvIGVuZC4NClRoaXMgaXMgdGhl
IGFwcHJvYWNoIHVzZWQgaW4gS0RFIGZvciBLSU8uIFRoaXMgaXMgZ29vZCEgVGhpcyBpcyBoYXJk
IHRvIGRvDQp3ZWxsLCBqdXN0IGFzayB0aGUgZ3V5cyB3aG8gZGVzaWduZWQgS0lPIDstKQ0KDQpP
biBhIG11bHRpdGhyZWFkZWQgYXBwLCB5b3Ugd291bGQgbm90IGRvIGEgcUFwcC0+cHJvY2Vzc0V2
ZW50cygpIGFuZA0Kc2ltcGx5IGxvb3AgYXQgd2lsbC4gWW91IHdvbid0IGRpc2FibGUgdGhlIFVJ
IGJlY2F1c2UgdGhlcmUgaXMgbm8gYSBwcmlvcmkNCnJlYXNvbiB3aHkgeW91IGNhbid0IGRvIHNl
dmVyYWwgZG9Mb25nVGhpbmcoKSBhdCB0aGUgc2FtZSB0aW1lLCBqdXN0IG1ha2UNCnN1cmUgZWFj
aCBvbmUgcnVucyBpbiBpdHMgb3duIHRocmVhZC4NCg0KPHA+PHU+PGI+V2h5IG11bHRpdGhyZWFk
ZWQgYXBwcyBhcmUgYmFkPC9iPjwvdT48cD4NCg0KCU11bHRpdGhyZWFkZWQgYXBwcyBhcmUgYmFk
IGluIHNldmVyYWwgd2F5cy4gRm9yIG9uZSB0aGluZywgdGhlcmUgaXMgbm8NCndheSB0byBpbXBs
ZW1lbnQgYSByZWFsbHkgbXVsdGl0aHJlYWRlZCBhcHAgdGhhdCB1c2VzIFF0IGZyb20gc2V2ZXJh
bCB0aHJlYWRzDQphdCBvbmNlLCBiZWNhdXNlIFF0IGlzIG5vdCByZWVudHJhbnQuDQoNCg0KCVdo
YXQncyBiZWluZyByZWVudHJhbnQ/IExldCBtZSBxdW90ZSBSYWxmIFMuIEVuZ2Vsc2NoYWxsIHRo
YXQga25vd3MNCm11Y2ggbW9yZSB0aGFuIEkgZG8gOy0pDQoNCjx1bD5yZWVudHJhbnQsIHRocmVh
ZC1zYWZlIGFuZCBhc3luY2hyb25vdXMtc2FmZSBmdW5jdGlvbnMNCiAgICAgICBBIHJlZW50cmFu
dCBmdW5jdGlvbiBpcyBvbmUgdGhhdCBiZWhhdmVzIGNvcnJlY3RseSBpZiBpdA0KICAgICAgIGlz
IGNhbGxlZCBzaW11bHRhbmVvdXNseSBieSBzZXZlcmFsIHRocmVhZHMgYW5kIHRoZW4gYWxzbw0K
ICAgICAgIGV4ZWN1dGVzIHNpbXVsdGFuZW91c2x5LiAgRnVuY3Rpb25zIHRoYXQgYWNjZXNzIGds
b2JhbA0KICAgICAgIHN0YXRlLCBzdWNoIGFzIG1lbW9yeSBvciBmaWxlcywgb2YgY291cnNlLCBu
ZWVkIHRvIGJlDQogICAgICAgY2FyZWZ1bGx5IGRlc2lnbmVkIGluIG9yZGVyIHRvIGJlIHJlZW50
cmFudC4gVHdvDQogICAgICAgdHJhZGl0aW9uYWwgYXBwcm9hY2hlcyB0byBzb2x2ZSB0aGVzZSBw
cm9ibGVtcyBhcmUNCiAgICAgICBjYWxsZXItc3VwcGxpZWQgc3RhdGVzIGFuZCB0aHJlYWQtc3Bl
Y2lmaWMgZGF0YS4NCg0KICAgICAgIFRocmVhZC1zYWZldHkgaXMgdGhlIGF2b2lkYW5jZSBvZiBk
YXRhIHJhY2VzLCBpLmUuLA0KICAgICAgIHNpdHVhdGlvbnMgaW4gd2hpY2ggZGF0YSBpcyBzZXQg
dG8gZWl0aGVyIGNvcnJlY3Qgb3INCiAgICAgICBpbmNvcnJlY3QgdmFsdWUgZGVwZW5kaW5nIHVw
b24gdGhlICh1bnByZWRpY3RhYmxlKSBvcmRlcg0KICAgICAgIGluIHdoaWNoIG11bHRpcGxlIHRo
cmVhZHMgYWNjZXNzIGFuZCBtb2RpZnkgdGhlIGRhdGEuIFNvIGENCiAgICAgICBmdW5jdGlvbiBp
cyB0aHJlYWQtc2FmZSB3aGVuIGl0IHN0aWxsIGJlaGF2ZXMgc2VtYW50aWNhbGx5DQogICAgICAg
Y29ycmVjdCB3aGVuIGNhbGxlZCBzaW11bHRhbmVvdXNseSBieSBzZXZlcmFsIHRocmVhZHMgKGl0
DQogICAgICAgaXMgbm90IHJlcXVpcmVkIHRoYXQgdGhlIGZ1bmN0aW9ucyBhbHNvIGV4ZWN1dGUN
CiAgICAgICBzaW11bHRhbmVvdXNseSkuIFRoZSB0cmFkaXRpb25hbCBhcHByb2FjaCB0byBhY2hp
ZXZlDQogICAgICAgdGhyZWFkLXNhZmV0eSBpcyB0byB3cmFwIGEgZnVuY3Rpb24gYm9keSB3aXRo
IGFuIGludGVybmFsDQogICAgICAgbXV0dWFsIGV4Y2x1c2lvbiBsb2NrIChha2EgYG11dGV4Jyku
IEFzIHlvdSBzaG91bGQNCiAgICAgICByZWNvZ25pemUsIHJlZW50cmFudCBpcyBhIHN0cm9uZ2Vy
IGF0dHJpYnV0ZSB0aGFuIHRocmVhZC0NCiAgICAgICBzYWZlLCBiZWNhdXNlIGl0IGlzIGhhcmRl
ciB0byBhY2hpZXZlIGFuZCByZXN1bHRzDQogICAgICAgZXNwZWNpYWxseSBpbiBubyBydW4tdGlt
ZSBjb250ZW50aW9uIGJldHdlZW4gdGhyZWFkcy4gU28sDQogICAgICAgYSByZWVudHJhbnQgZnVu
Y3Rpb24gaXMgYWx3YXlzIHRocmVhZC1zYWZlLCBidXQgbm90IHZpY2UNCiAgICAgICB2ZXJzYS4N
CjwvdWw+ICAgICAgICANCiAgICAgICAgU28sIHlvdSBDQU4gaW1wbGVtZW50IGEgbXVsdGl0aHJl
YWRlZCBRdCBhcHBsaWNhdGlvbiwgYXMgbG9uZyBhcw0KeW91IGtlZXAgYWxsIHlvdXIgUXQgKGFu
ZCBLREUpIHJlbGF0ZWQgZnVuY3Rpb24gY2FsbHMgaW4gYSBzaW5nbGUgdGhyZWFkLA0KYW5kIG1v
dmUgdG8gb3RoZXIgdGhyZWFkcyB0aGluZ3MgbGlrZSBudW1lcmljYWwgY2FsY3VsYXRpb25zLg0K
DQoJU2FkbHksIHRoaXMgaXMgYSByZWFsIHBhaW4gaW4gYSBLREUgYXBwbGljYXRpb24sIGJlY2F1
c2Ugd2UgZG8NCkxPVFMgb2YgdGhpbmdzIHVzaW5nIFF0IGFuZCBLREUgbGlicy4gRm9yIGluc3Rh
bmNlLCBJIHVzZSBrZmlsZWlvIChwYXJ0IG9mDQprZWRpdCwgSSBiZWxpZXZlKSB0byBsb2FkIHRl
eHQgZmlsZXMgaW50byBtZW1vcnksIGJlY2F1c2UgaXQgc2hvd3MgbmljZQ0Kd2FybmluZyBib3hl
cyB3aGVuIHNvbWV0aGluZyBnb2VzIHdyb25nLiBJIGNhbid0IGRvIHRoYXQgZnJvbSBhIHNlcGFy
YXRlDQp0aHJlYWQuIFRoYXQncyBub3QgZ29vZC4NCg0KCVRoZXJlIGlzIGFsc28gYSBub3cgbWlu
b3IgcHJvYmxlbTogcmVhbCB0aHJlYWRzIChQdGhyZWFkcykgYXJlIG5vdA0KYWxsIHRoYXQgcG9y
dGFibGUuIEhvd2V2ZXIgdGhlc2UgZGF5cyBtb3N0IHVuaXgtbGlrZSBzeXN0ZW1zIHN1cHBvcnQg
dGhlbQ0KaW4gdGhlaXIgbGF0ZXN0IHZlcnNpb25zLCBzbyBpdCdzIG5vdCBhcyBiYWQgYXMgaXQg
dXNlZCB0byBiZS4NCg0KPHA+PHU+PGI+R05VIFB0aCwgYW5kIHdoeSBpdHMgZ29vZDwvYj48L3U+
PHA+DQoNCglTaW5jZSByZWFsIG11bHRpdGhyZWFkZWQgYXBwcyBhcmUgbm90IGFsbCB0aGF0IHBv
c3NpYmxlLCBhbmQgZ29vZA0Kbm9uLW11bHRpdGhyZWFkZWQgYXBwcyBhcmUgbm90IHRvbyBlYXN5
IHRvIHdyaXRlIGluIHNvbWUgc2l0dWF0aW9ucywgSSBsb29rZWQNCmFyb3VuZCwgYW5kIGZvdW5k
IEdOVSBQdGgsIHRoZSBHTlUgUG9ydGFibGUgdGhyZWFkcyBsaWJyYXJ5Lg0KDQoJR05VIFB0aCBk
b2VzIGNvb3BlcmF0aXZlIHVzZXJzcGFjZSBtdWx0aXRocmVhZGluZy4gV2hhdCBkb2VzIHRoYXQg
DQptZWFuPw0KDQoJVXNlcnNwYWNlIG1lYW5zIHRoYXQgaXQgZG9lc24ndCByZXF1aXJlIGtlcm5l
bCBzdXBwb3J0LiBUaGF0IGhlbHBzDQp3aXRoIHRoZSBwb3J0YWJpbGl0eSBwcm9ibGVtLiBHTlUg
UHRoIHdvcmtzIG9uIHN5c3RlbXMgbGlrZSBsaWJjNSBsaW51eCB3aGVyZQ0KcHRocmVhZHMgZG9u
J3QgZXhpc3QgKG9yIHN1Y2spLg0KDQoJQ29vcGVyYXRpdmUgbXVsdGl0aHJlYWRpbmcgbWVhbnMg
dGhhdCB0aHJlYWRzIGFyZSBub3Qgc3VzcGVuZGVkIHRvIA0KYWxsb3cgZm9yIHRoZSBleGVjdXRp
b24gb2YgYW5vdGhlciB0aHJlYWQgdW50aWwgdGhleSB5aWVsZCBjb250cm9sLCBvciBzdXNwZW5k
DQppbXBsaWNpdGx5IGJ5IGNhbGxpbmcgc29tZSBmdW5jdGlvbnMgdGhhdCwgd2VsbCwgc3VzcGVu
ZCB0aGVtIHdoaWxlIHdhaXRpbmcNCmZvciBzb21lIGV2ZW50IChsaWtlIEkvTykuDQoNCglUbyB0
aG9zZSBoZXJlIHdobyBhcmUgbm93IHRoaW5raW5nIG9mIFdpbmRvd3MgMy4xIGFuZCBNYWNpbnRv
c2gncw0KY29vcGVyYXRpdmUgbXVsdGl0YXNraW5nLCBkb24ndCBiZSB0b28gYWZyYWlkLCB5b3Ug
b25seSBuZWVkIHRvIGNvb3BlcmF0ZSANCndpdGggeW91cnNlbGYsIHNvIGl0J3Mgbm90IHRoYXQg
Y3JhcHB5IDotKQ0KDQoJU28sIGhvdyB3b3VsZCBvdXIgY29kZSBsb29rIHVzaW5nIEdOVSBQdGg/
DQoNCjxwcmU+ICAgICAgICANCnZvaWQgZG9Mb25nVGhpbmcoKQ0Kew0KICAgIGJvb2wgYTsNCiAg
ICBmb3IgKDthOykNCiAgICB7DQogICAgICAgIGE9ZG9Tb21ldGhpbmcoKTsNCiAgICAgICAgcHRo
X3lpZWxkKE5VTEwpOw0KICAgIH0NCn0NCjwvcHJlPg0KICAgICAgIA0KCU5vdCBhbGwgdGhhdCBk
aWZmZXJlbnQgOi0pDQogICAgICAgIA0KICAgICAgICBIb3dldmVyLCB0aGVyZSBpcyBhIGJpZyBk
aWZmZXJlbmNlOiBydW5uaW5nIHNldmVyYWwgZG9Mb25nVGhpbmcoKXMgDQphdCB0aGUgc2FtZSB0
aW1lIGlzIHJhdGhlciBuYXR1cmFsLCBhcyBsb25nIGFzIHlvdSBtYWtlIHN1cmUgZWFjaCBydW5z
IGluDQphIHNlcGFyYXRlIHRocmVhZCwgYW5kIHlvdSBkb24ndCByZWFsbHkgbmVlZCB0byBkaXNh
YmxlIHRoZSBVSSENCg0KCUFsc28sIHNpbmNlIHVzaW5nIGNvb3BlcmF0aXZlIE1UIG1lYW5zIHRo
YXQgeW91ciBjb2RlIGlzIG5vdCANCnByZWVtcHRlZCwgeW91IENBTiBjYWxsIFF0IGFuZCBLREVM
aWJzIGZyb20gdGhlIHNlY29uZGFyeSB0aHJlYWRzLCB3aXRoIHNvbWUNCnZlcnkgbWlub3IgY2F2
ZWF0cyAod2hpY2ggd2Ugd2lsbCBzZWUpLg0KDQo8cD48dT48Yj5Ib3cgdG8gbWFrZSBhIG11bHRp
dGhyZWFkZWQgUUFwcGxpY2F0aW9uPC9iPjwvdT48cD4NCg0KSGVyZSBpcyB0aGUgc2ltcGxlIGNs
YXNzIEkgdXNlIHRvIG1ha2UgYSBtdWx0aXRocmVhZGVkIFFBcHAgKG1vZGlmeSBpbiB0aGUgDQpv
YnZpb3VzIHdheSB0byBtYWtlIGl0IGEgS0FwcCk6DQoNCjxwcmU+DQpjbGFzcyBRTVRBcHBsaWNh
dGlvbjogcHVibGljIFFBcHBsaWNhdGlvbg0Kew0KICAgIFFfT0JKRUNUDQpwdWJsaWM6DQogICAg
UU1UQXBwbGljYXRpb24gKGludCBhcmdjLCBjaGFyICoqYXJndik7DQogICAgflFNVEFwcGxpY2F0
aW9uICgpOw0KICAgIGludCBleGVjKCk7DQogICAgdm9pZCBxdWl0KCk7DQogICAgYm9vbCBleGl0
Z3VpdGhyZWFkOw0KfQ0KDQpRTVRBcHBsaWNhdGlvbjo6UU1UQXBwbGljYXRpb24gKGludCBhcmdj
LCBjaGFyICoqYXJnYyk6IFFBcHBsaWNhdGlvbiAoYXJnYyxhcmd2KQ0Kew0KICAgIGV4aXRndWl0
aHJlYWQ9ZmFsc2U7DQogICAgLy9Jbml0aWFsaXplIHRoZSBQdGggbGlicmFyeQ0KICAgIHB0aF9p
bml0KCk7DQp9DQoNClFNVEFwcGxpY2F0aW9uOjp+UU1UQXBwbGljYXRpb24gKCkNCnsNCiAgICAv
L0tpbGwgdGhlIFB0aCBsaWJyYXJ5DQogICAgcHRoX2tpbGwoKTsNCn0NCg0KaW50IEtSTkFwcGxp
Y2F0aW9uOjpleGVjKCkNCnsNCiAgICBmb3IgKDshZXhpdGd1aXRocmVhZDspDQogICAgew0KICAg
ICAgICBwcm9jZXNzRXZlbnRzKCk7IC8vUHJvY2VzcyBhbnkgZXZlbnRzDQogICAgICAgIHB0aF9u
YXAocHRoX3RpbWUoMCwxMDAwKSk7IC8vd2FpdCAxLzEwMDAgb2YgYSBzZWNvbmQsIHNvIHdlIGRv
bid0IGhvZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3RoZSBDUFUgYW5k
IGxldCBvdGhlciB0aHJlYWRzIGV4ZWN1dGUuDQogICAgfQ0KfQ0KDQp2b2lkIFFNVEFwcGxpY2F0
aW9uOjpxdWl0KCkNCnsNCiAgICBleGl0Z3VpdGhyZWFkPXRydWU7DQp9DQo8L3ByZT4NCg0KCVdo
YXQgZG9lcyBpdCBkbz8gSXQgc2ltcGx5IGluaXRpYWxpemVzIGFuZCBjbG9zZXMgdGhlIFB0aCBs
aWJyYXJ5IGluIA0KdGhlIHJpZ2h0IG1vbWVudHMsIGFuZCB5aWVsZHMgcHJvY2Vzc2luZyB0byB0
aGUgb3RoZXIgdGhyZWFkcyAxMDAwIHRpbWVzDQpwZXIgc2Vjb25kIChtb3JlIG9yIGxlc3MpLg0K
DQoJRXZlbiBpZiBleGVjKCkgc2VlbXMgdG8gYmUgYSBDUFUgaG9nLCBpdCBpcyBub3QuIENQVSB1
c2FnZSBpcyBub3QNCm1lYXN1cmFibGUgb24gYSBpZGxlIGFwcGxpY2F0aW9uLg0KDQoJTm93LCB3
aGlsZSB0aGlzIGlzIHRlY2huaWNhbGx5IGEgbXVsdGl0aHJlYWRlZCBhcHBsaWNhdGlvbiwgaXQn
cw0KYSBvbmUtdGhyZWFkIE1UIGFwcCwgd2hpY2ggaXMgbm90IHRvbyBpbnRlcmVzdGluZy4gV2hh
dCB5b3UgbmVlZCB0byBkbw0KdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgUHRoLCBpcyBtYWtlIHlvdXIg
YXBwbGljYXRpb24gc3Bhd24gbmV3IHRocmVhZHMgd2hlbmV2ZXINCnlvdSBzdGFydCBkb2luZyBz
b21ldGhpbmcgdGhhdCB0YWtlcyBsb25nLg0KDQoJU28sIHN1cHBvc2UgYSBidXR0b24gaGFzIGEg
c2xvdCBjb25uZWN0ZWQgdG8gaXRzIGNsaWNrZWQoKSBzaWduYWwsIGFuZA0KdGhhdCBzbG90IGlz
IGNhbGxlZCBzbG90RG9Mb25nVGhpbmcoKS4NCg0KCUhlcmUgaXMgaG93IHRoYXQgc2xvdCB3aWxs
IGxvb2sgKGJ1dCBpdCBjYW4gYmUgZG9uZSBwcmV0dGllciwgSSBiZXQpLg0KDQo8cHJlPg0KLy9Q
cm90b3R5cGUgb2YgdGhlIHJlYWwgZnVuY3Rpb24gdGhhdCBkb2VzIHRoZSB3b3JrDQp2b2lkICpz
bG90RG9Mb25nVGhpbmdUaHJlYWQodm9pZCAqYXJnKTsNCg0Kdm9pZCBNeUJ1dHRvbjo6c2xvdERv
TG9uZ1RoaW5nKHZvaWQpDQp7DQogICAgLy9UaGlzIGRlZmluZXMgc29tZSBhc3BlY3RzIG9mIHRo
ZSBjaGlsZCB0aHJlYWQsIGxvb2sgYXQgdGhlIFB0aA0KICAgIC8vZG9jcy4NCiAgICBwdGhfYXR0
cl90IGF0dHIgPSBwdGhfYXR0cl9uZXcoKTsNCiAgICBwdGhfYXR0cl9zZXQoYXR0cixQVEhfQVRU
Ul9DQU5DRUxfU1RBVEUsUFRIX0NBTkNFTF9BU1lOQ0hST05PVVMpOw0KICAgIHB0aF9hdHRyX3Nl
dChhdHRyLFBUSF9BVFRSX0pPSU5BQkxFLEZBTFNFKTsNCiAgICBwdGhfYXR0cl9zZXQoYXR0ciwg
UFRIX0FUVFJfU1RBQ0tfU0laRSwgMTI4KjEwMjQpOw0KICAgIHB0aF9zcGF3bihhdHRyLHF1ZXJ5
X2FjdGlvbnNfdGhyZWFkLHRoaXMpOw0KfQ0KDQovL1RoZSByZWFsIGZ1bmN0aW9uIHRoYXQgZG9l
cyB0aGUgd29yay4NCnZvaWQgKnNsb3REb0xvbmdUaGluZ1RocmVhZCh2b2lkICphcmcpDQp7DQog
ICAgTXlCdXR0b24gKm15Yj0oTXlCdXR0b24gKilhcmc7DQogICAgYm9vbCBhOw0KICAgIGZvciAo
O2E7KQ0KICAgIHsNCiAgICAgICAgYT1kb1NvbWV0aGluZygpOw0KICAgICAgICBteWItPmRvVGhp
bmdXaXRoQnV0dG9uKCk7DQogICAgICAgIHB0aF95aWVsZChOVUxMKTsNCiAgICB9DQogICAgcmV0
dXJuIE5VTEw7DQp9DQo8L3ByZT4NCg0KCVNvLCB3aGVuZXZlciBzbG90RG9Mb25nVGhpbmcgaXMg
Y2FsbGVkLCBpdCB3aWxsIHNwYXduIGEgbmV3IHRocmVhZA0KdG8gZG9Tb21ldGhpbmcoKSBhIGxv
bmcgd2hpbGUsIGFuZCB5b3VyIFVJIHdpbGwgbm90IGJsb2NrIChiZWNhdXNlIHlvdSBjYWxsDQpw
dGhfeWllbGQoKSwgb3IgYXQgbGVhc3QsIGl0IHdpbGwgYmxvY2sgYXMgbGl0dGxlIGFzIGl0IHdv
dWxkIGlmIHlvdSBjYWxsZWQNCnByb2Nlc3NFdmVudHMoKSwgYW5kIHlvdSBkb24ndCBuZWVkIHRv
IGRpc2FibGUgdGhlIFVJIGJlY2F1c2UgbXVsdGlwbGUNCmRvTG9uZ1RoaW5ncyBjYW4gYmUgZG9u
ZSB3aXRob3V0IGFueSBmdXJ0aGVyIHByb2dyYW1taW5nIHRyaWNrLg0KDQoJQXMgYSBydWxlLCBJ
IG5ldmVyIGNhbGwgcHJvY2Vzc0V2ZW50cygpIGZyb20gYW55IG9mIHRoZSBzcGF3bmVkIA0KdGhy
ZWFkcyBiZWNhdXNlIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZTogeW91IGdldCBpbiB0aGUgc2FtZSBt
ZXNzIGFzIGlmIHlvdQ0Kd2VyZSBub3QgdXNpbmcgUHRoISBJIGp1c3QgcHRoX3lpZWxkKE5VTEwp
LCBhbmQgZXZlbnR1YWxseSBpdCB3aWxsIGdldCB0bw0KYSBwcm9jZXNzRXZlbnRzKCkgaW4gdGhl
IG1haW4gdGhyZWFkLg0KDQo8cD48dT48Yj5XaGF0IHVzaW5nIFB0aCB3b24ndCBnZXQgeW91PC9i
PjwvdT48cD4NCg0KCVlvdSB3b24ndCB0YWtlIGFkdmFudGFnZSBvZiBtdWx0aXBsZSBDUFVzLiBZ
b3UgbmVlZCByZWFsIFB0aHJlYWRzIA0KZm9yIHRoYXQuDQoNCglZb3UgZG9uJ3QgZ2V0IG5vbi1i
bG9ja2luZyBJL08uLi4gdW5sZXNzIHlvdSB1c2UgcHRoX3JlYWQgaW5zdGVhZA0Kb2YgcmVhZCgp
LCBwdGhfd3JpdGUoKSBpbnN0ZWFkIG9mIHdyaXRlKCkgYW5kIHNvIG9uLiBZb3UgbWF5IG9yIG1h
eSBub3QNCmJlIGFibGUgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhhdCwgZGVwZW5kaW5nIG9uIHlv
dXIgYXBwbGljYXRpb24uDQoNCiAgICAgICAgWW91IGRvbid0IGdldCBQRVJGRUNUTFkgbm9uLWJs
b2NraW5nIFVJLiBZb3UgZ2V0IGEgbW9zdGx5IG5vbi1ibG9ja2luZw0Kb25lLiBJZiB5b3UgZG9u
J3QgY2FsbCBwdGhfeWllbGQoKSwgeW91IFdJTEwgYmxvY2suIEluIG1vc3QgY2FzZXMsIHlvdSBn
ZXQNCmEgR09PRCBFTk9VR0ggbm9uYmxvY2tpbmcgVUksIHRob3VnaC4NCg0KCVlvdSBkb24ndCBn
ZXQgcmlkIG9mIGRhdGEgcmFjZXMuIFlvdSBnZXQgcmlkIG9mIE1PU1QgZGF0YSByYWNlcywgYnV0
DQp5b3UgY2FuIGdldCBzb21lLiBDb25zaWRlciB3aGF0IGhhcHBlbnMgaW4gdGhlIGV4YW1wbGUg
aWYgc29tZW9uZSBkZWxldGVzIHRoZQ0KYnV0dG9uIDotKSBZb3UgY2FuIGZpeCBtb3N0IG9mIHRo
ZXNlIHRoaW5ncyBieSBtYWtpbmcgb2JqZWN0cyBhYm9ydCB0aHJlYWRzDQp0aGF0IGhhbmRsZSBy
ZWZlcmVuY2VzIHRvIHRoZW0uIGhlcmUncyB3aGF0IEkgdXNlICh3aXRoIGEgYml0IG9mIG11bHRp
cGxlDQppbmhlcml0YW5jZSk6DQoNCjxwcmU+DQpjbGFzcyBUaHJlYWRPd25lcg0Kew0KcHVibGlj
Og0KICAgIFRocmVhZE93bmVyKCkge307DQogICAgflRocmVhZE93bmVyKCkNCiAgICB7DQogICAg
ICAgIFFMaXN0SXRlcmF0b3IgPHB0aF90PiBpdCh0aHJlYWRzKTsNCiAgICAgICAgZm9yICg7aXQu
Y3VycmVudCgpOysraXQpDQogICAgICAgIHsNCiAgICAgICAgICAgIHB0aF9hYm9ydCgqaXQuY3Vy
cmVudCgpKTsNCiAgICAgICAgfQ0KICAgIH07DQogICAgdm9pZCByZWdpc3RlclRocmVhZChjb25z
dCBwdGhfdCAqdCkNCiAgICB7DQogICAgICAgIHRocmVhZHMuYXBwZW5kKHQpOw0KICAgIH07DQog
ICAgdm9pZCByZWxlYXNlVGhyZWFkKGNvbnN0IHB0aF90ICp0KQ0KICAgIHsNCiAgICAgICAgdGhy
ZWFkcy5yZW1vdmVSZWYodCk7DQogICAgfTsNCg0KICAgIFFMaXN0IDxwdGhfdD4gdGhyZWFkczsN
Cn07DQoNCjwvcHJlPg0KCUp1c3QgbWFrZSBzdXJlIHlvdSBjYWxsIHJlZ2lzdGVyVGhyZWFkIHdo
ZW4geW91IHNwYXduIGEgdGhyZWFkLCANCnJlbGVhc2VUaHJlYWQgd2hlbiB0aGUgdGhyZWFkIGV4
aXRzLCBhbmQgeW91IGFyZSBwcm9iYWJseSBzYWZlLg0KDQo8cD48dT48Yj5GaW5hbCB3b3Jkczo8
L2I+PC91PjxwPg0KDQoJV2hpbGUgdGhpcyBpcyBieSBubyBtZWFucyBhIHVuaXZlcnNhbCBzb2x1
dGlvbiwgSSBoYXZlIGZvdW5kIGl0IHVzZWZ1bC4NCkkgYW0gc3VyZSB0aGVyZSBhcmUgbG90cyBv
ZiBpbXByb3ZlbWVudHMgYmV0dGVyIHByb2dyYW1tZXJzIHRoYW4gSSBjYW4gZG8sIHNvDQpkb24n
dCBiZSBzaHkgdG8gZXhwbGFpbiB0aGVtIHRvIG1lIDotKQ0KDQoJWW91IGNhbiBnZXQgR05VIFB0
aCBmcm9tIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9wdGgvDQogICAgICAgIA0KICAgICAg
ICBZb3UgY2FuIGdldCBhIHZlcnNpb24gb2YgS1JOIHRoYXQgdXNlcyBQdGggZnJvbSBDVlMgYXMg
ZXhwbGFpbmVkDQppbiBodHRwOi8va3JuLnNvdXJjZWZvcmdlLm5ldCAoYnV0IGRvbid0IHVzZSBp
dCA7LSkNCgo8aHI+CgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgog
ICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICA8
L3RhYmxlPgogICAgPC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8QlI+CjwvVEQ+CjwhLS0gQk9EWSBU
QUJMRSBUSElSRCBDT0xVTU4gLS0+CjxURCBXSURUSD0iMTcwIj4KPHRhYmxlIEJHQ09MT1I9IzMz
NjZGRiBCT1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTEgV0lEVEg9IjE3MCI+CiAg
PHRyIFZBTElHTj1DRU5URVI+CiAgICA8dGQ+CiAgICAgIDx0YWJsZSBCR0NPTE9SPSNBOEE4RkYg
Qk9SREVSPTAgQ0VMTFNQQUNJTkc9MCBDRUxMUEFERElORz0yIFdJRFRIPSIxMDAlIj4KICAgICAg
ICA8dHI+CiAgICAgICAgICA8dGQ+CiAgICAgICAgICAgIDxiPjxmb250IHNpemU9LTE+IFNIRE4g
QXJ0aWNsZSBTZWFyY2ggPC9mb250PjwvYj4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4K
ICAgICAgPC90YWJsZT4KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+CiAgICAgIDx0
YWJsZSBCR0NPTE9SPSNEOEQ4RkYgQk9SREVSPTAKICAgICAgIENFTExTUEFDSU5HPTAgQ0VMTFBB
RERJTkc9MiBXSURUSD0iMTAwJSI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkPgo8Rk9STSBB
Q1RJT049InNlYXJjaF9hcnRpY2xlX3Jlc3VsdHMucGh0bWwiIE1FVEhPRD0iR0VUIj4KICA8VEFC
TEU+CiAgICA8VFI+CiAgICAgIDxURD4gPElOUFVUIE5BTUU9InNlYXJjaF90ZXh0IiBzaXplPTE1
IG1heGxlbmd0aD0yNTU+IDwvVEQ+CiAgICA8L1RSPgogICAgPFRSPgogICAgICAgIDxURCBBTElH
Tj0iTEVGVCI+IDxJTlBVVCBUWVBFPSJzdWJtaXQiIFZBTFVFPSJTZWFyY2giPiA8L1REPgogICAg
ICA8L1RSPgogICAgPC9UQUJMRT4KPC9GT1JNPgoKICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90
cj4KICAgICAgPC90YWJsZT4KICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPEJSPgo8dGFibGUg
QkdDT0xPUj0jMzM2NkZGIEJPUkRFUj0wIENFTExTUEFDSU5HPTAgQ0VMTFBBRERJTkc9MSBXSURU
SD0iMTcwIj4KICA8dHIgVkFMSUdOPUNFTlRFUj4KICAgIDx0ZD4KICAgICAgPHRhYmxlIEJHQ09M
T1I9I0E4QThGRiBCT1JERVI9MCBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTIgV0lEVEg9IjEw
MCUiPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgPGI+PGZvbnQgc2l6
ZT0tMT4gRm9ybWF0IGZvciBQcmludGluZyA8L2ZvbnQ+PC9iPgogICAgICAgICAgPC90ZD4KICAg
ICAgICA8L3RyPgogICAgICA8L3RhYmxlPgogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0
ZD4KICAgICAgPHRhYmxlIEJHQ09MT1I9I0Q4RDhGRiBCT1JERVI9MAogICAgICAgQ0VMTFNQQUNJ
Tkc9MCBDRUxMUEFERElORz0yIFdJRFRIPSIxMDAlIj4KICAgICAgICA8dHI+CiAgICAgICAgICA8
dGQ+CkZvcm1hdHRpbmcgZm9yIHByaW50ZXIgd2lsbCBzdHJpcCBhd2F5IGFsbCBncmFwaGljcyAK
YW5kIGJvcmRlcnMgZnJvbSB0aGlzIHBhZ2UsIGxlYXZpbmcganVzdCB0aGUgYXJ0aWNsZSAKZm9y
IHByaW50aW5nLiA8QlI+PEJSPjxjZW50ZXI+CjxhIGhyZWY9Ii9kaXNwbGF5YXJ0aWNsZS5waHRt
bD9HZW5lcmFsX1Nlc3Npb249MDExOTkxNzRjOTE2ZjgzMTJhZWQ1NjhkYTE4ZjVlZTMmYXJ0aWNs
ZV9pZD02JnByaW50YWJsZT0xIj5Gb3JtYXQgZm9yIFByaW50aW5nPC9hPgo8L2NlbnRlcj4KCiAg
ICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgIDwvdGFibGU+CiAgICA8L3RkPgogIDwv
dHI+CjwvdGFibGU+CjxCUj4KICAgIDwvVEQ+CiAgPC9UUj4KPC9UQUJMRT4KPGJyPiZuYnNwOwo8
Y2VudGVyPgogIDx0YWJsZSBDRUxMU1BBQ0lORz0wIENFTExQQURESU5HPTAgV0lEVEg9Ijc3MCIg
PgogICAgPHRyPgogICAgICA8dGQ+CiAgICAgICAgPGNlbnRlcj48Zm9udCBzaXplPS0xPkNvcHly
aWdodCAmY29weTsgMjAwMCBTcGxpdCBIZWxpeC4gQWxsIHJpZ2h0cyByZXNlcnZlZC48L2ZvbnQ+
CiAgICAgICAgPGJyPjxmb250IHNpemU9LTE+Q2xpY2sgPGEgaHJlZj0iLi92aWV3c291cmNlLnBo
dG1sP2ZpbGU9L2Rpc3BsYXlhcnRpY2xlLnBodG1sIj5oZXJlPC9hPiB0byB2aWV3IHRoZSBQSFAg
c291cmNlIG9mIHRoaXMgcGFnZS48L2ZvbnQ+CiAgICAgICAgPGJyPjxmb250IHNpemU9LTE+QmVz
dCBpZiB2aWV3ZWQgYXQgODAweDYwMCBvciBncmVhdGVyIHJlc29sdXRpb24uPC9mb250PgogICAg
ICAgIDxicj48Zm9udCBzaXplPS0xPjxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAc3BsaXRoZWxp
eC5jb20iPndlYm1hc3RlckBzcGxpdGhlbGl4LmNvbTwvYT48L2ZvbnQ+PC9jZW50ZXI+CiAgICAg
IDwvdGQ+CiAgICA8L3RyPgogIDwvdGFibGU+CjwvY2VudGVyPgoKPC9CT0RZPgo8L2h0bWw+Cjwv
dGQ+PC90cj48L3RhYmxlPjxiPkRhdGFiYXNlIGVycm9yOjwvYj4gSW52YWxpZCBTUUw6IGluc2Vy
dCBpbnRvIGFjdGl2ZV9zZXNzaW9ucyAoIHNpZCwgbmFtZSwgdmFsLCBjaGFuZ2VkICkgdmFsdWVz
ICgnMDExOTkxNzRjOTE2ZjgzMTJhZWQ1NjhkYTE4ZjVlZTMnLCAnR2VuZXJhbF9TZXNzaW9uJywg
J1IyVnVaWEpoYkY5VFpYTnphVzl1T2lSMGFHbHpMVDVwYmlBOUlDY25PeUFrZEdocGN5MCtjSFFn
UFNCaGNuSmhlU2dwT3lBa2RHaHBjeTArY0hSYkoyRjFkR2duWFNBOUlDY3hKenNnSkVkTVQwSkJU
Rk5iSjJGMWRHZ25YU0E5SUc1bGR5QkJiR3h2ZDE5RVpXWmhkV3gwWDBGMWRHZzdJQ1JIVEU5Q1FV
eFRXeWRoZFhSb0oxMHRQbUYxZEdnZ1BTQmhjbkpoZVNncE95QWtSMHhQUWtGTVUxc25ZWFYwYUNk
ZExUNWhkWFJvV3lkMWFXUW5YU0E5SUNkdWIySnZaSGtuT3lBa1IweFBRa0ZNVTFzbllYVjBhQ2Rk
TFQ1aGRYUm9XeWR3WlhKdEoxMGdQU0FuSnpzZ0pFZE1UMEpCVEZOYkoyRjFkR2duWFMwK1lYVjBh
RnNuWlhod0oxMGdQU0FuTWpFME56UTRNelkwTnljN0lDUkhURTlDUVV4VFd5ZGhkWFJvSjEwdFBt
RjFkR2hiSjNKbFpuSmxjMmduWFNBOUlDY3lNVFEzTkRnek5qUTNKenNnJywgJzIwMDAwNzA0MTc0
MzIwJyk8YnI+CjxiPk15U1FMIEVycm9yPC9iPjogMTA2MiAoRHVwbGljYXRlIGVudHJ5ICdHZW5l
cmFsX1Nlc3Npb24tMDExOTkxNzRjOTE2ZjgzMTJhZWQ1NjhkYTE4ZjVlZTMnIGZvciBrZXkgMSk8
YnI+ClNlc3Npb24gaGFsdGVkLg==

--------------Boundary-00=_ZT77DA9X4F3HKM7YSY2G--