<div dir="ltr"><div style="" class="markdown-here-wrapper"><p style="margin:0px 0px 1.2em!important">Hello List!</p>
<p style="margin:0px 0px 1.2em!important">I feel it’s fine to hold back the other changes for later but the<br>upgrade-strategy change should get shipped out to the world as quickly as<br>possible. Even how the change is exposed the user can also be discussed later.</p>
<p style="margin:0px 0px 1.2em!important">I request the list members to focus on <em>only</em> the change of the default<br>upgrade strategy to be non-eager.</p>
<p style="margin:0px 0px 1.2em!important">Does anyone have any concerns regarding the change of the default upgrade<br>strategy to be non-eager? If not, let’s get <em>just</em> that shipped out as soon as possible.</p>
<p style="margin:0px 0px 1.2em!important">Cheers,<br>Pradyun Gedam </p>
<p style="margin:0px 0px 1.2em!important">On Mon, 27 Jun 2016 at 12:02 Pradyun Gedam <a href="http://mailto:pradyunsg@gmail.com">pradyunsg@gmail.com</a> wrote:</p>
<p style="margin:0px 0px 1.2em!important"></p><div class="markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div class="gmail_quote"><div dir="ltr">On Sun, 26 Jun 2016 at 23:02 Donald Stufft <<a href="mailto:donald@stufft.io" target="_blank">donald@stufft.io</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><br><div><blockquote type="cite"><div>On Jun 25, 2016, at 6:25 AM, Pradyun Gedam <<a href="mailto:pradyunsg@gmail.com" target="_blank">pradyunsg@gmail.com</a>> wrote:</div><br><div><p style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;margin:0px 0px 1.2em!important">There is currently a proposal to change the behaviour to<span> </span><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline">pip install</code><span> </span>to upgrade a package that is passed even if it is already installed.</p><p style="font-family:Helvetica;font-size:12px;font-style:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;margin:0px 0px 1.2em!important">This behaviour change is accompanied with a change in the upgrade strategy - pip would stop “eagerly” upgrading dependencies and would become more conservative, upgrading a dependency only when it doesn’t meet lower constraints of the newer version of a parent. Moreover, the behaviour of<span> </span><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline">pip install --target</code><span> </span>would also be changed so that<span> </span><code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline">--upgrade</code><span> </span>no longer affects it.</p></div></blockquote></div></div><div style="word-wrap:break-word">I think bundling these two changes (and I think I might have been the one that originally suggested it) is making this discussion harder than it needs to be as folks are having to fight on multiple different fronts at once. I think the change to the default behavior of pip install is dependent on the change to —upgrade, so I suggest we focus on the change to —upgrade first, changing from a “recursive” to a “conservative” strategy. Once we get that change figured out and landed then we can worry about what to do with pip install.</div></blockquote><div><br></div></div></div></div></div><div dir="ltr"><div><div><div class="gmail_quote"><div>You were. In fact, the majority swayed in favour of changing the behaviour of pip install post one of your comments on Github.<br><br></div><div>I'll be happier *only* seeing in change the behaviour of --upgrade and not --target or pip install. It reduces the number of things that changes from 3 to 1. Much easier to discuss about.<br></div></div></div></div></div><div dir="ltr"><div><div><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>I’m not going to repeat the entire post, but I just made a fairly lengthy comment at <a href="https://github.com/pypa/pip/issues/3786#issuecomment-228611906" target="_blank">https://github.com/pypa/pip/issues/3786#issuecomment-228611906</a> but to try and boil it down to a few points:

</div></div></blockquote><div><br></div></div></div></div></div><div dir="ltr"><div><div><div class="gmail_quote"><div>Thanks for this.<br> <br></div></div></div></div></div><div dir="ltr"><div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>* ``pip install —upgrade`` is not a good security mechanism, relying on it is inconsistent at best. If we want to support trying to keep people on secure versions of software we need a better mechanism than this anyways, so we shouldn’t let it influence our choice here.</div></div></blockquote><div><br></div></div></div></div></div><div dir="ltr"><div><div><div class="gmail_quote"><div>AFAIK, this was the only outstanding concern

 raised against having a non-eager (conservative) upgrade strategy.<br><br></div></div></div></div></div><div dir="ltr"><div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>* For the general case, it’s not going to matter a lot which way we go, but not upgrading has the greatest chance of not breaking *already installed software*.</div></div></blockquote><div><br></div></div></div></div></div><div dir="ltr"><div><div><div class="gmail_quote"><div>I strongly agree with this. Another thing worth a mention is that it's easier to get the lower bounds of your requirements correct, rather than upper bounds.<br></div></div></div></div></div><div dir="ltr"><div><div><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div>* For the hard-to-upgrade case, the current behavior is so bad that people are outright attempting to subvert the way pip typically behaviors, *AND* advocating for other’s to do the same, in an attempt to escape that behavior. I think that this is not a good place to be in.<br></div></div></blockquote><div><br></div></div></div></div></div><div dir="ltr"><div><div><div class="gmail_quote"><div>Ditto.<br><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><div><div>
<div style="color:rgb(0,0,0);font-family:Helvetica;font-style:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;word-wrap:break-word">—</div></div></div></div><div style="word-wrap:break-word"><div><div><div style="color:rgb(0,0,0);font-family:Helvetica;font-style:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;word-wrap:break-word"><br>Donald Stufft<br></div></div></div></div></blockquote><div><br></div><div>Happy-to-see-Donald's-response-ly,<br></div><div>Pradyun Gedam <br></div></div></div></div></div></blockquote><p></p></div><p style="margin:0px 0px 1.2em!important"></p>
<div title="MDH:SGVsbG8gTGlzdCE8YnI+PGJyPkkgZmVlbCBpdCdzIGZpbmUgdG8gaG9sZCBiYWNrIHRoZSBvdGhl
ciBjaGFuZ2VzIGZvciBsYXRlciBidXQgdGhlPGJyPnVwZ3JhZGUtc3RyYXRlZ3kgY2hhbmdlIHNo
b3VsZCBnZXQgc2hpcHBlZCBvdXQgdG8gdGhlIHdvcmxkIGFzIHF1aWNrbHkgYXMgPGJyPnBvc3Np
YmxlLiBFdmVuIGhvdyB0aGUgY2hhbmdlIGlzIGV4cG9zZWQgdGhlIHVzZXIgY2FuIGFsc28gYmUg
ZGlzY3Vzc2VkIGxhdGVyLjxicj48YnI+SSByZXF1ZXN0IHRoZSBsaXN0IG1lbWJlcnMgdG8gZm9j
dXMgb24gKm9ubHkqIHRoZSBjaGFuZ2Ugb2YgdGhlIGRlZmF1bHQgPGJyPnVwZ3JhZGUgc3RyYXRl
Z3kgdG8gYmUgbm9uLWVhZ2VyLjxicj48YnI+RG9lcyBhbnlvbmUgaGF2ZSBhbnkgY29uY2VybnMg
cmVnYXJkaW5nIHRoZSBjaGFuZ2Ugb2YgdGhlIGRlZmF1bHQgdXBncmFkZSA8YnI+c3RyYXRlZ3kg
dG8gYmUgbm9uLWVhZ2VyPyBJZiBub3QsIGxldCdzIGdldCAqanVzdCogdGhhdCBzaGlwcGVkIG91
dCBhcyBzb29uIGFzIHBvc3NpYmxlLjxicj48YnI+Q2hlZXJzLDxicj5QcmFkeXVuIEdlZGFtIDxi
cj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXYgZGlyPSJsdHIiPk9uIE1vbiwgMjcg
SnVuIDIwMTYgYXQgMTI6MDIgUHJhZHl1biBHZWRhbSAmbHQ7cHJhZHl1bnNnQGdtYWlsLmNvbSZn
dDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9
Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVm
dDoxZXg7Ij48ZGl2IGRpcj0ibHRyIj48ZGl2PjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUi
PjxkaXYgZGlyPSJsdHIiPk9uIFN1biwgMjYgSnVuIDIwMTYgYXQgMjM6MDIgRG9uYWxkIFN0dWZm
dCAmbHQ7PGEgaHJlZj0ibWFpbHRvOmRvbmFsZEBzdHVmZnQuaW8iIHRhcmdldD0iX2JsYW5rIj5k
b25hbGRAc3R1ZmZ0LmlvPC9hPiZndDsgd3JvdGU6PGJyPjwvZGl2PjxibG9ja3F1b3RlIGNsYXNz
PSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAj
Y2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgc3R5bGU9IndvcmQtd3JhcDpicmVhay13
b3JkIj48YnI+PGRpdj48YmxvY2txdW90ZSB0eXBlPSJjaXRlIj48ZGl2Pk9uIEp1biAyNSwgMjAx
NiwgYXQgNjoyNSBBTSwgUHJhZHl1biBHZWRhbSAmbHQ7PGEgaHJlZj0ibWFpbHRvOnByYWR5dW5z
Z0BnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5wcmFkeXVuc2dAZ21haWwuY29tPC9hPiZndDsg
d3JvdGU6PC9kaXY+PGJyPjxkaXY+PHAgc3R5bGU9ImZvbnQtZmFtaWx5OkhlbHZldGljYTtmb250
LXNpemU6MTJweDtmb250LXN0eWxlOm5vcm1hbDtmb250LXdlaWdodDpub3JtYWw7bGV0dGVyLXNw
YWNpbmc6bm9ybWFsO3RleHQtYWxpZ246c3RhcnQ7dGV4dC1pbmRlbnQ6MHB4O3RleHQtdHJhbnNm
b3JtOm5vbmU7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtc3BhY2luZzowcHg7bWFyZ2luOjBweCAw
cHggMS4yZW0haW1wb3J0YW50Ij5UaGVyZSBpcyBjdXJyZW50bHkgYSBwcm9wb3NhbCB0byBjaGFu
Z2UgdGhlIGJlaGF2aW91ciB0bzxzcGFuPiZuYnNwOzwvc3Bhbj48Y29kZSBzdHlsZT0iZm9udC1z
aXplOjAuODVlbTtmb250LWZhbWlseTpDb25zb2xhcyxJbmNvbnNvbGF0YSxDb3VyaWVyLG1vbm9z
cGFjZTttYXJnaW46MHB4IDAuMTVlbTtwYWRkaW5nOjBweCAwLjNlbTt3aGl0ZS1zcGFjZTpwcmUt
d3JhcDtib3JkZXI6MXB4IHNvbGlkIHJnYigyMzQsMjM0LDIzNCk7YmFja2dyb3VuZC1jb2xvcjpy
Z2IoMjQ4LDI0OCwyNDgpO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3Atcmln
aHQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRv
bS1sZWZ0LXJhZGl1czozcHg7ZGlzcGxheTppbmxpbmUiPnBpcCBpbnN0YWxsPC9jb2RlPjxzcGFu
PiZuYnNwOzwvc3Bhbj50byB1cGdyYWRlIGEgcGFja2FnZSB0aGF0IGlzIHBhc3NlZCBldmVuIGlm
IGl0IGlzIGFscmVhZHkgaW5zdGFsbGVkLjwvcD48cCBzdHlsZT0iZm9udC1mYW1pbHk6SGVsdmV0
aWNhO2ZvbnQtc2l6ZToxMnB4O2ZvbnQtc3R5bGU6bm9ybWFsO2ZvbnQtd2VpZ2h0Om5vcm1hbDts
ZXR0ZXItc3BhY2luZzpub3JtYWw7dGV4dC1hbGlnbjpzdGFydDt0ZXh0LWluZGVudDowcHg7dGV4
dC10cmFuc2Zvcm06bm9uZTt3aGl0ZS1zcGFjZTpub3JtYWw7d29yZC1zcGFjaW5nOjBweDttYXJn
aW46MHB4IDBweCAxLjJlbSFpbXBvcnRhbnQiPlRoaXMgYmVoYXZpb3VyIGNoYW5nZSBpcyBhY2Nv
bXBhbmllZCB3aXRoIGEgY2hhbmdlIGluIHRoZSB1cGdyYWRlIHN0cmF0ZWd5IC0gcGlwIHdvdWxk
IHN0b3Ag4oCcZWFnZXJseeKAnSB1cGdyYWRpbmcgZGVwZW5kZW5jaWVzIGFuZCB3b3VsZCBiZWNv
bWUgbW9yZSBjb25zZXJ2YXRpdmUsIHVwZ3JhZGluZyBhIGRlcGVuZGVuY3kgb25seSB3aGVuIGl0
IGRvZXNu4oCZdCBtZWV0IGxvd2VyIGNvbnN0cmFpbnRzIG9mIHRoZSBuZXdlciB2ZXJzaW9uIG9m
IGEgcGFyZW50LiBNb3Jlb3ZlciwgdGhlIGJlaGF2aW91ciBvZjxzcGFuPiZuYnNwOzwvc3Bhbj48
Y29kZSBzdHlsZT0iZm9udC1zaXplOjAuODVlbTtmb250LWZhbWlseTpDb25zb2xhcyxJbmNvbnNv
bGF0YSxDb3VyaWVyLG1vbm9zcGFjZTttYXJnaW46MHB4IDAuMTVlbTtwYWRkaW5nOjBweCAwLjNl
bTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDtib3JkZXI6MXB4IHNvbGlkIHJnYigyMzQsMjM0LDIzNCk7
YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjQ4LDI0OCwyNDgpO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6
M3B4O2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOjNweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1
czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czozcHg7ZGlzcGxheTppbmxpbmUiPnBpcCBp
bnN0YWxsIC0tdGFyZ2V0PC9jb2RlPjxzcGFuPiZuYnNwOzwvc3Bhbj53b3VsZCBhbHNvIGJlIGNo
YW5nZWQgc28gdGhhdDxzcGFuPiZuYnNwOzwvc3Bhbj48Y29kZSBzdHlsZT0iZm9udC1zaXplOjAu
ODVlbTtmb250LWZhbWlseTpDb25zb2xhcyxJbmNvbnNvbGF0YSxDb3VyaWVyLG1vbm9zcGFjZTtt
YXJnaW46MHB4IDAuMTVlbTtwYWRkaW5nOjBweCAwLjNlbTt3aGl0ZS1zcGFjZTpwcmUtd3JhcDti
b3JkZXI6MXB4IHNvbGlkIHJnYigyMzQsMjM0LDIzNCk7YmFja2dyb3VuZC1jb2xvcjpyZ2IoMjQ4
LDI0OCwyNDgpO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6M3B4O2JvcmRlci10b3AtcmlnaHQtcmFk
aXVzOjNweDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czozcHg7Ym9yZGVyLWJvdHRvbS1sZWZ0
LXJhZGl1czozcHg7ZGlzcGxheTppbmxpbmUiPi0tdXBncmFkZTwvY29kZT48c3Bhbj4mbmJzcDs8
L3NwYW4+bm8gbG9uZ2VyIGFmZmVjdHMgaXQuPC9wPjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48
L2Rpdj48ZGl2IHN0eWxlPSJ3b3JkLXdyYXA6YnJlYWstd29yZCI+SSB0aGluayBidW5kbGluZyB0
aGVzZSB0d28gY2hhbmdlcyAoYW5kIEkgdGhpbmsgSSBtaWdodCBoYXZlIGJlZW4gdGhlIG9uZSB0
aGF0IG9yaWdpbmFsbHkgc3VnZ2VzdGVkIGl0KSBpcyBtYWtpbmcgdGhpcyBkaXNjdXNzaW9uIGhh
cmRlciB0aGFuIGl0IG5lZWRzIHRvIGJlIGFzIGZvbGtzIGFyZSBoYXZpbmcgdG8gZmlnaHQgb24g
bXVsdGlwbGUgZGlmZmVyZW50IGZyb250cyBhdCBvbmNlLiBJIHRoaW5rIHRoZSBjaGFuZ2UgdG8g
dGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgcGlwIGluc3RhbGwgaXMgZGVwZW5kZW50IG9uIHRoZSBj
aGFuZ2UgdG8g4oCUdXBncmFkZSwgc28gSSBzdWdnZXN0IHdlIGZvY3VzIG9uIHRoZSBjaGFuZ2Ug
dG8g4oCUdXBncmFkZSBmaXJzdCwgY2hhbmdpbmcgZnJvbSBhIOKAnHJlY3Vyc2l2ZeKAnSB0byBh
IOKAnGNvbnNlcnZhdGl2ZeKAnSBzdHJhdGVneS4gT25jZSB3ZSBnZXQgdGhhdCBjaGFuZ2UgZmln
dXJlZCBvdXQgYW5kIGxhbmRlZCB0aGVuIHdlIGNhbiB3b3JyeSBhYm91dCB3aGF0IHRvIGRvIHdp
dGggcGlwIGluc3RhbGwuPC9kaXY+PC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2PjwvZGl2Pjwv
ZGl2PjwvZGl2PjwvZGl2PjxkaXYgZGlyPSJsdHIiPjxkaXY+PGRpdj48ZGl2IGNsYXNzPSJnbWFp
bF9xdW90ZSI+PGRpdj5Zb3Ugd2VyZS4gSW4gZmFjdCwgdGhlIG1ham9yaXR5IHN3YXllZCBpbiBm
YXZvdXIgb2YgY2hhbmdpbmcgdGhlIGJlaGF2aW91ciBvZiBwaXAgaW5zdGFsbCBwb3N0IG9uZSBv
ZiB5b3VyIGNvbW1lbnRzIG9uIEdpdGh1Yi48YnI+PGJyPjwvZGl2PjxkaXY+SSdsbCBiZSBoYXBw
aWVyICpvbmx5KiBzZWVpbmcgaW4gY2hhbmdlIHRoZSBiZWhhdmlvdXIgb2YgLS11cGdyYWRlIGFu
ZCBub3QgLS10YXJnZXQgb3IgcGlwIGluc3RhbGwuIEl0IHJlZHVjZXMgdGhlIG51bWJlciBvZiB0
aGluZ3MgdGhhdCBjaGFuZ2VzIGZyb20gMyB0byAxLiBNdWNoIGVhc2llciB0byBkaXNjdXNzIGFi
b3V0Ljxicj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGRpcj0ibHRyIj48ZGl2
PjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXY+PGJyPjwvZGl2PjxibG9ja3F1b3Rl
IGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0
OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgc3R5bGU9IndvcmQtd3JhcDpi
cmVhay13b3JkIj48ZGl2PknigJltIG5vdCBnb2luZyB0byByZXBlYXQgdGhlIGVudGlyZSBwb3N0
LCBidXQgSSBqdXN0IG1hZGUgYSBmYWlybHkgbGVuZ3RoeSBjb21tZW50IGF0Jm5ic3A7PGEgaHJl
Zj0iaHR0cHM6Ly9naXRodWIuY29tL3B5cGEvcGlwL2lzc3Vlcy8zNzg2I2lzc3VlY29tbWVudC0y
Mjg2MTE5MDYiIHRhcmdldD0iX2JsYW5rIiBkYXRhLXNhZmVyZWRpcmVjdHVybD0iaHR0cHM6Ly93
d3cuZ29vZ2xlLmNvbS91cmw/cT1odHRwczovL2dpdGh1Yi5jb20vcHlwYS9waXAvaXNzdWVzLzM3
ODYlMjNpc3N1ZWNvbW1lbnQtMjI4NjExOTA2JmFtcDtzb3VyY2U9Z21haWwmYW1wO3VzdD0xNDY3
MDk1NTMxMTYwMDAwJmFtcDt1c2c9QUZRakNOR2VnOTJ4RFJYcU8tVHBCZzVxS0cyTmZUSEdGdyI+
aHR0cHM6Ly9naXRodWIuY29tL3B5cGEvPHdicj5waXAvaXNzdWVzLzM3ODYjaXNzdWVjb21tZW50
LTx3YnI+MjI4NjExOTA2PC9hPiZuYnNwO2J1dCB0byB0cnkgYW5kIGJvaWwgaXQgZG93biB0byBh
IGZldyBwb2ludHM6Cgo8L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PGRpdj48YnI+PC9kaXY+PC9k
aXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBkaXI9Imx0ciI+PGRpdj48ZGl2PjxkaXYgY2xhc3M9
ImdtYWlsX3F1b3RlIj48ZGl2PlRoYW5rcyBmb3IgdGhpcy48YnI+Jm5ic3A7PGJyPjwvZGl2Pjwv
ZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgZGlyPSJsdHIiPjxkaXY+PGRpdj48ZGl2IGNsYXNz
PSJnbWFpbF9xdW90ZSI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFy
Z2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFl
eCI+PGRpdiBzdHlsZT0id29yZC13cmFwOmJyZWFrLXdvcmQiPjxkaXY+KiBgYHBpcCBpbnN0YWxs
IOKAlHVwZ3JhZGVgYCBpcyBub3QgYSBnb29kIHNlY3VyaXR5IG1lY2hhbmlzbSwgcmVseWluZyBv
biBpdCBpcyBpbmNvbnNpc3RlbnQgYXQgYmVzdC4gSWYgd2Ugd2FudCB0byBzdXBwb3J0IHRyeWlu
ZyB0byBrZWVwIHBlb3BsZSBvbiBzZWN1cmUgdmVyc2lvbnMgb2Ygc29mdHdhcmUgd2UgbmVlZCBh
IGJldHRlciBtZWNoYW5pc20gdGhhbiB0aGlzIGFueXdheXMsIHNvIHdlIHNob3VsZG7igJl0IGxl
dCBpdCBpbmZsdWVuY2Ugb3VyIGNob2ljZSBoZXJlLjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48
ZGl2Pjxicj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGRpcj0ibHRyIj48ZGl2
PjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxkaXY+QUZBSUssIHRoaXMgd2FzIHRoZSBv
bmx5IG91dHN0YW5kaW5nIGNvbmNlcm4KCiByYWlzZWQgYWdhaW5zdCBoYXZpbmcgYSBub24tZWFn
ZXIgKGNvbnNlcnZhdGl2ZSkgdXBncmFkZSBzdHJhdGVneS48YnI+PGJyPjwvZGl2PjwvZGl2Pjwv
ZGl2PjwvZGl2PjwvZGl2PjxkaXYgZGlyPSJsdHIiPjxkaXY+PGRpdj48ZGl2IGNsYXNzPSJnbWFp
bF9xdW90ZSI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAg
MCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRp
diBzdHlsZT0id29yZC13cmFwOmJyZWFrLXdvcmQiPjxkaXY+KiBGb3IgdGhlIGdlbmVyYWwgY2Fz
ZSwgaXTigJlzIG5vdCBnb2luZyB0byBtYXR0ZXIgYSBsb3Qgd2hpY2ggd2F5IHdlIGdvLCBidXQg
bm90IHVwZ3JhZGluZyBoYXMgdGhlIGdyZWF0ZXN0IGNoYW5jZSBvZiBub3QgYnJlYWtpbmcgKmFs
cmVhZHkgaW5zdGFsbGVkIHNvZnR3YXJlKi48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PGRpdj48
YnI+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBkaXI9Imx0ciI+PGRpdj48ZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2Pkkgc3Ryb25nbHkgYWdyZWUgd2l0aCB0aGlz
LiBBbm90aGVyIHRoaW5nIHdvcnRoIGEgbWVudGlvbiBpcyB0aGF0IGl0J3MgZWFzaWVyIHRvIGdl
dCB0aGUgbG93ZXIgYm91bmRzIG9mIHlvdXIgcmVxdWlyZW1lbnRzIGNvcnJlY3QsIHJhdGhlciB0
aGFuIHVwcGVyIGJvdW5kcy48YnI+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBk
aXI9Imx0ciI+PGRpdj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2PiZuYnNwOzwv
ZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAu
OGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgc3R5
bGU9IndvcmQtd3JhcDpicmVhay13b3JkIj48ZGl2PiogRm9yIHRoZSBoYXJkLXRvLXVwZ3JhZGUg
Y2FzZSwgdGhlIGN1cnJlbnQgYmVoYXZpb3IgaXMgc28gYmFkIHRoYXQgcGVvcGxlIGFyZSBvdXRy
aWdodCBhdHRlbXB0aW5nIHRvIHN1YnZlcnQgdGhlIHdheSBwaXAgdHlwaWNhbGx5IGJlaGF2aW9y
cywgKkFORCogYWR2b2NhdGluZyBmb3Igb3RoZXLigJlzIHRvIGRvIHRoZSBzYW1lLCBpbiBhbiBh
dHRlbXB0IHRvIGVzY2FwZSB0aGF0IGJlaGF2aW9yLiBJIHRoaW5rIHRoYXQgdGhpcyBpcyBub3Qg
YSBnb29kIHBsYWNlIHRvIGJlIGluLjxicj48L2Rpdj48L2Rpdj48L2Jsb2NrcXVvdGU+PGRpdj48
YnI+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBkaXI9Imx0ciI+PGRpdj48ZGl2
PjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48ZGl2PkRpdHRvLjxicj48YnI+PC9kaXY+PGJsb2Nr
cXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVy
LWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBzdHlsZT0id29yZC13
cmFwOmJyZWFrLXdvcmQiPjxkaXY+PGRpdj4KPGRpdiBzdHlsZT0iY29sb3I6cmdiKDAsMCwwKTtm
b250LWZhbWlseTpIZWx2ZXRpY2E7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFs
O2xldHRlci1zcGFjaW5nOm5vcm1hbDtsaW5lLWhlaWdodDpub3JtYWw7dGV4dC1hbGlnbjotd2Vi
a2l0LWF1dG87dGV4dC1pbmRlbnQ6MHB4O3RleHQtdHJhbnNmb3JtOm5vbmU7d2hpdGUtc3BhY2U6
bm9ybWFsO3dvcmQtc3BhY2luZzowcHg7d29yZC13cmFwOmJyZWFrLXdvcmQiPuKAlDwvZGl2Pjwv
ZGl2PjwvZGl2PjwvZGl2PjxkaXYgc3R5bGU9IndvcmQtd3JhcDpicmVhay13b3JkIj48ZGl2Pjxk
aXY+PGRpdiBzdHlsZT0iY29sb3I6cmdiKDAsMCwwKTtmb250LWZhbWlseTpIZWx2ZXRpY2E7Zm9u
dC1zdHlsZTpub3JtYWw7Zm9udC13ZWlnaHQ6bm9ybWFsO2xldHRlci1zcGFjaW5nOm5vcm1hbDts
aW5lLWhlaWdodDpub3JtYWw7dGV4dC1hbGlnbjotd2Via2l0LWF1dG87dGV4dC1pbmRlbnQ6MHB4
O3RleHQtdHJhbnNmb3JtOm5vbmU7d2hpdGUtc3BhY2U6bm9ybWFsO3dvcmQtc3BhY2luZzowcHg7
d29yZC13cmFwOmJyZWFrLXdvcmQiPjxicj5Eb25hbGQgU3R1ZmZ0PGJyPjwvZGl2PjwvZGl2Pjwv
ZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2PkhhcHB5LXRvLXNlZS1E
b25hbGQncy08d2JyPnJlc3BvbnNlLWx5LDxicj48L2Rpdj48ZGl2PlByYWR5dW4gR2VkYW0gPGJy
PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj4=" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>