<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>117710</bug_id>
          
          <creation_ts>2013-06-17 11:45:31 -0700</creation_ts>
          <short_desc>fourthTier: DFG should have switch_char</short_desc>
          <delta_ts>2013-06-20 10:54:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>901128</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-17 11:45:31 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901129</commentid>
    <comment_count>1</comment_count>
      <attachid>204844</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-17 11:46:15 -0700</bug_when>
    <thetext>Created attachment 204844
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901189</commentid>
    <comment_count>2</comment_count>
      <attachid>204863</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-17 16:00:37 -0700</bug_when>
    <thetext>Created attachment 204863
it compiles!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901416</commentid>
    <comment_count>3</comment_count>
      <attachid>204918</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-18 08:40:30 -0700</bug_when>
    <thetext>Created attachment 204918
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901435</commentid>
    <comment_count>4</comment_count>
      <attachid>204918</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2013-06-18 10:09:09 -0700</bug_when>
    <thetext>Comment on attachment 204918
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=204918&amp;action=review

&gt; Source/WTF/ChangeLog:11
&gt; +        Also made it possible to convert a UChar to a utf8 CString without
&gt; +        allocating a StringImpl.

Since this is only used with dump() methods, why do we care about allocating a StringImpl?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901447</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-18 10:39:34 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 204918 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=204918&amp;action=review
&gt; 
&gt; &gt; Source/WTF/ChangeLog:11
&gt; &gt; +        Also made it possible to convert a UChar to a utf8 CString without
&gt; &gt; +        allocating a StringImpl.
&gt; 
&gt; Since this is only used with dump() methods, why do we care about allocating a StringImpl?

Because you cannot ref/deref StringImpl&apos;s on the compiler thread, which implicitly means you cannot allocate them.  That&apos;s an important assertion, since StringImpl&apos;s aren&apos;t thread-safe ref-counted.  So we want to keep that assertion; but to keep it, we can&apos;t allocate StringImpls in the compiler thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>901452</commentid>
    <comment_count>6</comment_count>
      <attachid>204925</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-18 11:05:55 -0700</bug_when>
    <thetext>Created attachment 204925
patch for landing

Now including tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>902213</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-06-20 10:54:46 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/151781</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204844</attachid>
            <date>2013-06-17 11:46:15 -0700</date>
            <delta_ts>2013-06-17 16:00:37 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16130</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNTE2NDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY3LDYgKzE2Nyw4IEBACiAJCTBGNDY4MEQzMTRCQkQx
NjcwMEJGRTI3MiAvKiBMTEludERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNDY4MENGMTRCQkIzRDEwMEJGRTI3MiAvKiBMTEludERhdGEuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ2ODBE
NDE0QkJEMjQ5MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMDE0QkJDNUY4MDBCRkUy
NzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgKi87IH07CiAJCTBGNDY4MEQ1MTRCQkQyNEIw
MEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNDZFNkM1MTc2RjhBNUUwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZDMjE3
NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovOyB9OworCQkwRjQ2RTZDNjE3
NkY4QTYwMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdM
YXp5SlNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNDkzQUZBMTZEMENBRDMwMDg0NTA4QiAvKiBTb3VyY2VQcm92aWRlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ5M0FGODE2RDBD
QUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovOyB9OwogCQkwRjRFMUEwRTE3M0FF
RERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwQzE3M0FFRERDMDA3RUUyRDMg
LyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgKi87IH07CiAJCTBGNEUxQTBGMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjRFMUEwRDE3M0FFRERDMDA3RUUyRDMgLyogSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xMTY3LDYgKzExNjksOCBAQAogCQkwRjQ2ODBDRjE0QkJCM0QxMDBC
RkUyNzIgLyogTExJbnREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExM
SW50RGF0YS5oOyBwYXRoID0gbGxpbnQvTExJbnREYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhvc3RDYWxsUmV0dXJu
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2ODBEMTE0QkJDNUY4
MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBIb3N0Q2FsbFJldHVyblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGNDZFNkMyMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMYXp5SlNWYWx1ZS5jcHA7IHBh
dGggPSBkZmcvREZHTGF6eUpTVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuaDsgcGF0aCA9IGRmZy9ERkdM
YXp5SlNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ5M0FGODE2RDBD
QUQxMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU291cmNlUHJvdmlkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjRFMUEwQzE3M0FFRERDMDA3RUUyRDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFp
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RTFBMEQxNzNB
RUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjk3OSw2ICsyOTgzLDggQEAKIAkJCQk4NkVDOURCQzEzMjhERjgy
MDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuaCAqLywKIAkJCQkwRkRCMkNENTE3NDJEODA0MDA3
QjNDMUIgLyogREZHSklURmluYWxpemVyLmNwcCAqLywKIAkJCQkwRkRCMkNENjE3NDJEODA0MDA3
QjNDMUIgLyogREZHSklURmluYWxpemVyLmggKi8sCisJCQkJMEY0NkU2QzIxNzZGOEE1QjAwRTFG
NzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCAqLywKKwkJCQkwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3
NTUgLyogREZHTGF6eUpTVmFsdWUuaCAqLywKIAkJCQkwRkI0QjUxQzE2QjYyNzcyMDAzRjY5NkIg
LyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwICovLAogCQkJCTBGQjRCNTFEMTZCNjI3NzIwMDNGNjk2
QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5oICovLAogCQkJCTBGMkJEQzNEMTUyMjgwMTcwMENEODkx
MCAvKiBERkdNaW5pZmllZEdyYXBoLmggKi8sCkBAIC0zNzczLDYgKzM3NzksNyBAQAogCQkJCTBG
NzE0Q0E1MTZFQTkyRjIwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjEzNkQ0RDE3NEFENjlFMDA3NUIzNTQgLyogRGVmZXJHQy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1RUU0RTkxNzU0MjRBRjAwOUFFNDJEIC8qIEpTQ1Rlc3RS
dW5uZXJVdGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0NkU2QzYxNzZGOEE2MDAwRTFGNzU1
IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTQyMDYsNyArNDIxMyw2IEBA
CiAJCQkJODY4ODBGMUYxNDMyOEJCOTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVDRTc0NTcxNzQ1NDU2NTAwRkY5MzAwIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2ODgwRjREMTQzNTNC
MjEwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJ
CTBGNjM5NDQwMTVDNzVGMUQwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEYyQjlFMTczMDZDOEQwMDdEQkRBNSAvKiBTb3VyY2VD
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBE
RkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMkIxNTQ3NTAwMDAwM0VEMEZG
IC8qIERGR1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDQ2Miw2ICs0NDY4LDcgQEAK
IAkJCQlBREUzOUZGRjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVydHlUYWJsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJv
cGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjVFRTRFODE3NTQyNEFGMDA5
QUU0MkQgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNDZF
NkM1MTc2RjhBNUUwMEUxRjc1NSAvKiBERkdMYXp5SlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgJKHJldmlz
aW9uIDE1MTY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwOCBDYW1lcm9uIFp3YXJpY2ggPGN3endhcmljaEB1d2F0ZXJsb28uY2E+CiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NjUsNyArMjc2NSw3
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
IGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmxhc3QoKSks
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBMQVNU
X09QQ09ERShvcF9zd2l0Y2hfaW1tKTsKICAgICAgICAgfQotCisgICAgICAgICAgICAKICAgICAg
ICAgY2FzZSBvcF9yZXQ6CiAgICAgICAgICAgICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1cmVkVmFy
aWFibGVzKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlv
blBoYXNlLmNwcAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4LDcg
KzE4OCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgIFRyaVN0YXRlIGZvdW5k
ID0gRmFsc2VUcmlTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5kZXggdGFy
Z2V0QmxvY2tJbmRleCA9IE5vQmxvY2s7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBkYXRhLT5jYXNlcy5zaXplKCk7IGZvdW5kID09IEZhbHNlVHJpU3RhdGUgJiYg
aS0tOykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gSlNWYWx1ZTo6cHVy
ZVN0cmljdEVxdWFsKHZhbHVlLCBkYXRhLT5jYXNlc1tpXS52YWx1ZSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSBkYXRhLT5jYXNlc1tpXS52YWx1ZS5zdHJpY3RFcXVhbCh2
YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdW5kID09IFRydWVUcmlT
dGF0ZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QmxvY2tJbmRleCA9
IGRhdGEtPmNhc2VzW2ldLnRhcmdldDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lv
biAxNTE2NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCw3IEBAIHZvaWQgSklUQ29tcGlsZXI6Omxp
bmsoTGlua0J1ZmZlciYgbGlua0IKICAgICAgICAgICAgIHRhYmxlLmN0aU9mZnNldHNbal0gPSB0
YWJsZS5jdGlEZWZhdWx0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBkYXRhLmNhc2VzLnNp
emUoKTsgai0tOykgewogICAgICAgICAgICAgU3dpdGNoQ2FzZSYgbXlDYXNlID0gZGF0YS5jYXNl
c1tqXTsKLSAgICAgICAgICAgIHRhYmxlLmN0aU9mZnNldHNbbXlDYXNlLnZhbHVlLmFzSW50MzIo
KSAtIHRhYmxlLm1pbl0gPQorICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tteUNhc2UudmFs
dWUudmFsdWUoKS5hc0ludDMyKCkgLSB0YWJsZS5taW5dID0KICAgICAgICAgICAgICAgICBsaW5r
QnVmZmVyLmxvY2F0aW9uT2YobV9ibG9ja0hlYWRzW215Q2FzZS50YXJnZXRdKTsKICAgICAgICAg
fQogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMYXp5
SlNWYWx1ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJERkdMYXp5SlNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
SlNWYWx1ZSBMYXp5SlNWYWx1ZTo6Z2V0VmFsdWUoVk0mIHZtKSBjb25zdAoreworICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgY2FzZSBLbm93blZhbHVlOgorICAgICAgICByZXR1cm4gdmFsdWUo
KTsKKyAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKKyAgICAgICAgcmV0dXJuIGpzU2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKCZ2bSwgdS5jaGFyYWN0ZXIpOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGF0aWMgVHJpU3RhdGUgZXF1YWxUb1Npbmds
ZUNoYXJhY3RlcihKU1ZhbHVlIHZhbHVlLCBVQ2hhciBjaGFyYWN0ZXIpCit7CisgICAgaWYgKCF2
YWx1ZS5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKKyAgICAKKyAg
ICBKU1N0cmluZyoganNTdHJpbmcgPSBhc1N0cmluZyh2YWx1ZSk7CisgICAgaWYgKGpzU3RyaW5n
LT5sZW5ndGgoKSAhPSAxKQorICAgICAgICByZXR1cm4gRmFsc2VUcmlTdGF0ZTsKKyAgICAKKyAg
ICBjb25zdCBTdHJpbmdJbXBsKiBzdHJpbmcgPSBqc1N0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCk7
CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBNaXhlZFRyaVN0YXRlOworICAgIAor
ICAgIHJldHVybiB0cmlTdGF0ZShzdHJpbmctPmF0KDApID09IGNoYXJhY3Rlcik7Cit9CisKK1Ry
aVN0YXRlIExhenlKU1ZhbHVlOjpzdHJpY3RFcXVhbChjb25zdCBMYXp5SlNWYWx1ZSYgb3RoZXIp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEtub3duVmFsdWU6Cisg
ICAgICAgIHN3aXRjaCAob3RoZXIubV9raW5kKSB7CisgICAgICAgIGNhc2UgS25vd25WYWx1ZToK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpwdXJlU3RyaWN0RXF1YWwodmFsdWUoKSwgb3Ro
ZXIudmFsdWUoKSk7CisgICAgICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgorICAgICAg
ICAgICAgcmV0dXJuIGVxdWFsVG9TaW5nbGVDaGFyYWN0ZXIodmFsdWUoKSwgb3RoZXIuY2hhcmFj
dGVyKCkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nOgorICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNl
IFNpbmdsZUNoYXJhY3RlclN0cmluZzoKKyAgICAgICAgICAgIHJldHVybiB0cmlTdGF0ZShjaGFy
YWN0ZXIoKSA9PSBvdGhlci5jaGFyYWN0ZXIoKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gb3RoZXIuc3RyaWN0RXF1YWwoKnRoaXMpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIExhenlKU1ZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEtub3duVmFsdWU6CisgICAgICAgIHZhbHVlKCkuZHVt
cChvdXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6
CisgICAgICAgIG91dC5wcmludCgiTGF6eTpTaW5nbGVDaGFyYWN0ZXJTdHJpbmcoIik7CisgICAg
ICAgIG91dC5wcmludGYoIiUwNFgiLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2hhcmFjdGVyKCkp
KTsKKyAgICAgICAgaWYgKGNoYXJhY3RlcigpID49ICcgJyAmJiBjaGFyYWN0ZXIoKSA8IDB4N2Yp
CisgICAgICAgICAgICBvdXQucHJpbnRmKCIgLyAlYyIsIGNoYXJhY3RlcigpKTsKKyAgICAgICAg
b3V0LnByaW50KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5k
aWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGF6eUpTVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xhenlKU1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0xhenlKU1ZhbHVlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHTGF6
eUpTVmFsdWVfaAorI2RlZmluZSBERkdMYXp5SlNWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBERkcgeworCisvLyBSZXByZXNlbnRzIGVpdGhlciBhIEpTVmFsdWUsIG9yIGZvciBK
U1ZhbHVlcyB0aGF0IHJlcXVpcmUgYWxsb2NhdGlvbiBpbiB0aGUgaGVhcCwKKy8vIGl0IHRlbGxz
IHlvdSBldmVyeXRoaW5nIHlvdSdkIG5lZWQgdG8ga25vdyBpbiBvcmRlciB0byBhbGxvY2F0ZSBp
dC4KKworZW51bSBMYXppbmVzc0tpbmQgeworICAgIEtub3duVmFsdWUsCisgICAgU2luZ2xlQ2hh
cmFjdGVyU3RyaW5nCit9OworCitjbGFzcyBMYXp5SlNWYWx1ZSB7CitwdWJsaWM6CisgICAgTGF6
eUpTVmFsdWUoSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWUoKSkKKyAgICAgICAgOiBtX2tpbmQoS25v
d25WYWx1ZSkKKyAgICB7CisgICAgICAgIHUudmFsdWUgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgTGF6eUpTVmFsdWUgc2luZ2xlQ2hhcmFjdGVyU3Ry
aW5nKFVDaGFyIGNoYXJhY3RlcikKKyAgICB7CisgICAgICAgIExhenlKU1ZhbHVlIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFNpbmdsZUNoYXJhY3RlclN0cmluZzsKKyAgICAgICAg
cmVzdWx0LnUuY2hhcmFjdGVyID0gY2hhcmFjdGVyOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIHRyeUdldFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChtX2tpbmQgPT0gS25vd25WYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSgp
OworICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGdl
dFZhbHVlKFZNJikgY29uc3Q7CisgICAgCisgICAgSlNWYWx1ZSB2YWx1ZSgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9raW5kID09IEtub3duVmFsdWUpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZGVjb2RlKHUudmFsdWUpOworICAgIH0KKyAgICAKKyAgICBVQ2hhciBjaGFyYWN0
ZXIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcpOworICAgICAgICByZXR1cm4gdS5jaGFyYWN0ZXI7CisgICAgfQorICAgIAorICAg
IFRyaVN0YXRlIHN0cmljdEVxdWFsKGNvbnN0IExhenlKU1ZhbHVlJiBvdGhlcikgY29uc3Q7Cisg
ICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIHVuaW9uIHsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgdmFsdWU7CisgICAgICAgIFVDaGFy
IGNoYXJhY3RlcjsKKyAgICB9IHU7CisgICAgTGF6aW5lc3NLaW5kIG1fa2luZDsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisj
ZW5kaWYgLy8gREZHTGF6eUpTVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJERkdB
ZGphY2VuY3lMaXN0LmgiCiAjaW5jbHVkZSAiREZHQXJyYXlNb2RlLmgiCiAjaW5jbHVkZSAiREZH
Q29tbW9uLmgiCisjaW5jbHVkZSAiREZHTGF6eUpTVmFsdWUuaCIKICNpbmNsdWRlICJERkdOb2Rl
RmxhZ3MuaCIKICNpbmNsdWRlICJERkdOb2RlVHlwZS5oIgogI2luY2x1ZGUgIkRGR1ZhcmlhYmxl
QWNjZXNzRGF0YS5oIgpAQCAtODMsMTMgKzg0LDEzIEBAIHN0cnVjdCBTd2l0Y2hDYXNlIHsKICAg
ICB7CiAgICAgfQogICAgIAotICAgIFN3aXRjaENhc2UoSlNWYWx1ZSB2YWx1ZSwgQmxvY2tJbmRl
eCB0YXJnZXQpCisgICAgU3dpdGNoQ2FzZShMYXp5SlNWYWx1ZSB2YWx1ZSwgQmxvY2tJbmRleCB0
YXJnZXQpCiAgICAgICAgIDogdmFsdWUodmFsdWUpCiAgICAgICAgICwgdGFyZ2V0KHRhcmdldCkK
ICAgICB7CiAgICAgfQogICAgIAotICAgIEpTVmFsdWUgdmFsdWU7CisgICAgTGF6eUpTVmFsdWUg
dmFsdWU7CiAgICAgQmxvY2tJbmRleCB0YXJnZXQ7CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgJKHdvcmtpbmcgY29weSkKQEAgLTY1MywxMyArNjUzLDE0IEBAIHB1YmxpYzoKIAog
ICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN1YnN0cmlu
Zyh1bnNpZ25lZCBwb3MsIHVuc2lnbmVkIGxlbiA9IFVJTlRfTUFYKTsKIAotICAgIFVDaGFyIG9w
ZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QKKyAgICBVQ2hhciBhdCh1bnNpZ25lZCBpKSBjb25z
dAogICAgIHsKICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1f
bGVuZ3RoKTsKICAgICAgICAgaWYgKGlzOEJpdCgpKQogICAgICAgICAgICAgcmV0dXJuIG1fZGF0
YThbaV07CiAgICAgICAgIHJldHVybiBtX2RhdGExNltpXTsKICAgICB9CisgICAgVUNoYXIgb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpKSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIFdURl9FWFBP
UlRfU1RSSU5HX0FQSSBVQ2hhcjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQpOwogCiAg
ICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204863</attachid>
            <date>2013-06-17 16:00:37 -0700</date>
            <delta_ts>2013-06-18 08:40:30 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37548</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNjU3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEzLTA2LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBoYXZlIHN3aXRjaF9jaGFyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc3MTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZCBvcF9zd2l0Y2hfY2hh
ci4gTW9zdCBvZiB0aGlzIGlzIGZhaXJseSBzaW1wbGUsIGV4Y2VwdCBmb3IgdGhlIHdob2xlCisg
ICAgICAgIExhenlKU1ZhbHVlIHRoaW5nLgorICAgICAgICAKKyAgICAgICAgSXQncyBsb25nIGJl
ZW4gdGhlIGNhc2UgdGhhdCBhbnl0aW1lIHlvdSB3YW50ZWQgdGhlIERGRyB0byBzcGVhayBvZiBh
IHN0cmluZworICAgICAgICB0aGF0IGRpZG4ndCBhcHBlYXIgaW4gdGhlIGNvbnN0YW50IHBvb2ws
IHlvdSB3b3VsZCBoYXZlIGEgaGFyZCB0aW1lIHNpbmNlCisgICAgICAgIHRoZSBERkcgaXNuJ3Qg
YWxsb3dlZCB0byBhbGxvY2F0ZSBpbiB0aGUgR0MgaGVhcC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBr
bm93CisgICAgICAgIHRoYXQgeW91IHdhbnQgdG8gc3BlYWsgb2YgYSBzaW5nbGUgY2hhcmFjdGVy
IHN0cmluZywgeW91IG1pZ2h0IGZpbmQgdGhhdAorICAgICAgICB0aGUgb25lIHlvdSB3YW50ZWQg
dG8gc3BlYWsgb2YgaGFkIGJlZW4gR0MnZC4gQW5vdGhlciBleGFtcGxlIGlzIGlmIHlvdQorICAg
ICAgICB3YW50ZWQgdG8gYWRkIGNvbnN0YW50IGZvbGRpbmcgZm9yIHN0cmluZyBjb25jYXRlbmF0
aW9uIC0gc29tZXRoaW5nIHdlIGRvbid0CisgICAgICAgIGhhdmUgeWV0IGJ1dCB3aWxsIHdhbnQg
ZXZlbnR1YWxseS4KKyAgICAgICAgCisgICAgICAgIEkgc29sdmUgdGhpcyBieSBmaW5hbGx5IGFk
ZGluZyB0aGUgbm90aW9uIG9mIExhenlKU1ZhbHVlLiBJbiB0aGUgZnV0dXJlIEkKKyAgICAgICAg
YW50aWNpcGF0ZSB1c2luZyB0aGlzIGZvciBhIHZhcmlldHkgb2Ygc3RyaW5nLXJlbGF0ZWQgdGhp
bmdzLiBUaGUgaWRlYSBoZXJlCisgICAgICAgIGlzIHRoYXQgdGhlIERGRyBjYW4gZWl0aGVyIHNh
eSB0aGF0IGl0IGFscmVhZHkga25vd3Mgd2hhdCB0aGUgdmFsdWUgaXMsIG9yCisgICAgICAgIGl0
IGNhbiBkZXNjcmliZSB0aGUgdmFsdWUuIEZvciBleGFtcGxlLCBpbiB0aGlzIHBhdGNoIEkgbmVl
ZGVkIHRvIGJlIGFibGUgdG8KKyAgICAgICAgZGVzY3JpYmUgc2luZ2xlLWNoYXJhY3RlciBzdHJp
bmdzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBieXRlY29kZS9KdW1wVGFibGUuaDoKKyAgICAgICAgKiBkZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAg
KiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAq
IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNlOjpm
aXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHUFJJbmZvLmg6CisgICAgICAgIChKU0M6OkRG
Rzo6SlNWYWx1ZVJlZ3M6OnBheWxvYWRHUFIpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21waWxl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omp1bXBUYWJsZSk6CisgICAg
ICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpudW1iZXJPZkp1bXBU
YWJsZXMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rU3dpdGNoZXMpOgor
ICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZH
SklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcvREZH
TGF6eUpTVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRG
Rzo6TGF6eUpTVmFsdWU6OmdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjplcXVhbFRvU2lu
Z2xlQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6c3RyaWN0RXF1
YWwpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpkdW1wKToKKyAgICAgICAgKiBk
ZmcvREZHTGF6eUpTVmFsdWUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoTGF6
eUpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpMYXp5SlNWYWx1ZSk6
CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0cmluZyk6
CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnRyeUdldFZhbHVlKToKKyAgICAgICAg
KEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlK
U1ZhbHVlOjpjaGFyYWN0ZXIpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgIChTd2l0Y2hDYXNlKToK
KyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW50SnVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW1JbnRKdW1wKToKKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0pOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoQ2hhclN0cmluZ0p1bXApOgor
ICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoQ2hhcik6CisgICAg
ICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2gpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgorCiAyMDEz
LTA2LTE3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBSb2xsaW5n
IHIxNTE0NTYsIHIxNTE0MjAgYmFjayBpbiB3aXRoIHNvbWUgZml4ZXMuCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTE2Nyw2ICsxNjcsOCBAQAogCQkwRjQ2ODBEMzE0QkJEMTY3MDBCRkUyNzIgLyog
TExJbnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjQ2ODBDRjE0QkJCM0QxMDBCRkUyNzIgLyogTExJbnREYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NjgwRDQxNEJCRDI0OTAwQkZF
MjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxs
UmV0dXJuVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9z
dENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjQ2
RTZDNTE3NkY4QTVFMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzIxNzZGOEE1QjAwRTFGNzU1
IC8qIERGR0xhenlKU1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEY0NkU2QzYxNzZGOEE2MDAwRTFGNzU1
IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjQ5M0FG
QTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8q
IFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUxNzNBRUREQzAwN0VFMkQzIC8q
IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FFRERDMDA3RUUyRDMgLyogSW50
ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJl
Q2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpA
QCAtMTE2Nyw2ICsxMTY5LDggQEAKIAkJMEY0NjgwQ0YxNEJCQjNEMTAwQkZFMjcyIC8qIExMSW50
RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludERhdGEuaDsgcGF0
aCA9IGxsaW50L0xMSW50RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2
ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhv
c3RDYWxsUmV0dXJuVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSG9z
dENhbGxSZXR1cm5WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ2RTZD
MjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3BwOyBwYXRoID0gZGZnL0RGR0xh
enlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2QzMxNzZG
OEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcvREZHTGF6eUpTVmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8q
IFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RTFB
MEMxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEUxQTBEMTczQUVEREMwMDdFRTJEMyAv
KiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTI5NzksNiArMjk4Myw4IEBACiAJCQkJODZFQzlEQkMxMzI4REY4MjAwMkIyQUQ3IC8qIERG
R0pJVENvbXBpbGVyLmggKi8sCiAJCQkJMEZEQjJDRDUxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0pJ
VEZpbmFsaXplci5jcHAgKi8sCiAJCQkJMEZEQjJDRDYxNzQyRDgwNDAwN0IzQzFCIC8qIERGR0pJ
VEZpbmFsaXplci5oICovLAorCQkJCTBGNDZFNkMyMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5
SlNWYWx1ZS5jcHAgKi8sCisJCQkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlK
U1ZhbHVlLmggKi8sCiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdMaXZl
ZFN0YXRlLmNwcCAqLywKIAkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyogREZHTG9uZ0xp
dmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyogREZHTWluaWZp
ZWRHcmFwaC5oICovLApAQCAtMzc3Myw2ICszNzc5LDcgQEAKIAkJCQkwRjcxNENBNTE2RUE5MkYy
MDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNUVFNEU5MTc1NDI0QUYwMDlBRTQyRCAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGNDZFNkM2MTc2RjhBNjAwMEUxRjc1NSAvKiBERkdMYXp5SlNW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0
cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00MjA2LDcgKzQyMTMsNiBAQAogCQkJCTg2ODgwRjFG
MTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFQ0U3NDU3MTc0NTQ1NjUwMEZGOTMwMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBCMDhENDIgLyog
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjYzOTQ0MDE1Qzc1
RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjhGMkI5RTE3MzA2QzhEMDA3REJEQTUgLyogU291cmNlQ29kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBGRiAvKiBERkdWYWxpZGF0
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0NjIsNiArNDQ2OCw3IEBACiAJCQkJQURFMzlGRkYx
NkREMTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1RUU0RTgxNzU0MjRBRjAwOUFFNDJEIC8qIEpTQ1Rl
c3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjQ2RTZDNTE3NkY4QTVFMDBF
MUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCShyZXZpc2lvbiAxNTE2NDUpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggQ2FtZXJvbiBa
d2FyaWNoIDxjd3p3YXJpY2hAdXdhdGVybG9vLmNhPgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0JhY2t3YXJkc1By
b3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxNTE2NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNDgsMTQgKzM0OCwxNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFN3aXRjaDogewog
ICAgICAgICAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKICAgICAg
ICAgICAgIHN3aXRjaCAoZGF0YS0+a2luZCkgewotICAgICAgICAgICAgY2FzZSBTd2l0Y2hJbW06
IHsKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoSW1tOgorICAgICAgICAgICAgY2FzZSBTd2l0Y2hD
aGFyOiB7CiAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgbmVlZCBOb2RlTmVlZHNOZWdaZXJv
IGJlY2F1c2UgaWYgdGhlIGNhc2VzIGFyZSBhbGwgaW50ZWdlcnMKLSAgICAgICAgICAgICAgICAv
LyB0aGVuIC0wIGFuZCAwIGFyZSB0cmVhdGVkIHRoZSBzYW1lLiAgV2UgZG9uJ3QgbmVlZCBOb2Rl
VXNlZEFzT3RoZXIKLSAgICAgICAgICAgICAgICAvLyBiZWNhdXNlIGlmIGFsbCBvZiB0aGUgY2Fz
ZXMgYXJlIGludGVnZXJzIHRoZW4gTmFOIGFuZCB1bmRlZmluZWQgYXJlCi0gICAgICAgICAgICAg
ICAgLy8gdHJlYXRlZCB0aGUgc2FtZS4KKyAgICAgICAgICAgICAgICAvLyBvciBzdHJpbmdzIHRo
ZW4gLTAgYW5kIDAgYXJlIHRyZWF0ZWQgdGhlIHNhbWUuICBXZSBkb24ndCBuZWVkCisgICAgICAg
ICAgICAgICAgLy8gTm9kZVVzZWRBc090aGVyIGJlY2F1c2UgaWYgYWxsIG9mIHRoZSBjYXNlcyBh
cmUgaW50ZWdlcnMgb3IKKyAgICAgICAgICAgICAgICAvLyBzaW5nbGUtY2hhcmFjdGVyIHN0cmlu
Z3MgdGhlbiBOYU4gYW5kIHVuZGVmaW5lZCBhcmUgdHJlYXRlZCB0aGUgc2FtZQorICAgICAgICAg
ICAgICAgIC8vIChpLmUuIHRoZXkgd2lsbCB0YWtlIGRlZmF1bHQpLgogICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkMSgpLT5tZXJnZUZsYWdzKE5vZGVVc2VkQXNOdW1iZXIgfCBOb2RlVXNlZEFz
SW50KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0gfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAJKHJldmlzaW9uIDE1MTY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDI4LDYgKzEwMjgs
NyBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fY29uc3RhbnRSZW1hcDsK
ICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2NvbnN0YW50QnVmZmVyUmVtYXA7CiAgICAgICAg
IFZlY3Rvcjx1bnNpZ25lZD4gbV9zd2l0Y2hJbW1SZW1hcDsKKyAgICAgICAgVmVjdG9yPHVuc2ln
bmVkPiBtX3N3aXRjaENoYXJSZW1hcDsKICAgICAgICAgCiAgICAgICAgIC8vIEJsb2NrcyBpbnRy
b2R1Y2VkIGJ5IHRoaXMgY29kZSBibG9jaywgd2hpY2ggbmVlZCBzdWNjZXNzb3IgbGlua2luZy4K
ICAgICAgICAgLy8gTWF5IGluY2x1ZGUgdXAgdG8gb25lIGJhc2ljIGJsb2NrIHRoYXQgaW5jbHVk
ZXMgdGhlIGNvbnRpbnVhdGlvbiBhZnRlcgpAQCAtMjc2NSw2ICsyNzY2LDI2IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGFkZFRvR3JhcGgo
U3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmxhc3QoKSksIGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9z
d2l0Y2hfaW1tKTsKICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGNhc2Ugb3Bfc3dp
dGNoX2NoYXI6IHsKKyAgICAgICAgICAgIFN3aXRjaERhdGEgZGF0YTsKKyAgICAgICAgICAgIGRh
dGEua2luZCA9IFN3aXRjaENoYXI7CisgICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXgg
PSBtX2lubGluZVN0YWNrVG9wLT5tX3N3aXRjaENoYXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kXTsKKyAgICAgICAgICAgIGRhdGEuZmFsbFRocm91Z2ggPSBtX2N1cnJlbnRJ
bmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBTaW1w
bGVKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPmNoYXJhY3RlclN3aXRjaEp1bXBUYWJs
ZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHRhYmxlLmJyYW5jaE9mZnNldHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIXRhYmxlLmJyYW5jaE9mZnNldHNbaV0pCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fY3VycmVudEluZGV4ICsg
dGFibGUuYnJhbmNoT2Zmc2V0c1tpXTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGRh
dGEuZmFsbFRocm91Z2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGRhdGEuY2FzZXMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBTd2l0Y2hDYXNl
KExhenlKU1ZhbHVlOjpzaW5nbGVDaGFyYWN0ZXJTdHJpbmcodGFibGUubWluICsgaSksIHRhcmdl
dCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9ncmFwaC5tX3N3aXRjaERhdGEuYXBw
ZW5kKGRhdGEpOworICAgICAgICAgICAgYWRkVG9HcmFwaChTd2l0Y2gsIE9wSW5mbygmbV9ncmFw
aC5tX3N3aXRjaERhdGEubGFzdCgpKSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQpKTsKKyAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3N3aXRjaF9jaGFyKTsKKyAgICAgICAg
fQogCiAgICAgICAgIGNhc2Ugb3BfcmV0OgogICAgICAgICAgICAgZmx1c2hBcmd1bWVudHNBbmRD
YXB0dXJlZFZhcmlhYmxlcygpOwpAQCAtMzI2Myw2ICszMjg0LDcgQEAgQnl0ZUNvZGVQYXJzZXI6
OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBtX2NvbnN0YW50UmVtYXAucmVzaXpl
KGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKICAgICAgICAgbV9jb25z
dGFudEJ1ZmZlclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29uc3RhbnRCdWZmZXJz
KCkpOwogICAgICAgICBtX3N3aXRjaEltbVJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9m
SW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgbV9zd2l0Y2hDaGFyUmVtYXAu
cmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCkpOwog
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZklkZW50
aWZpZXJzKCk7ICsraSkgewogICAgICAgICAgICAgU3RyaW5nSW1wbCogcmVwID0gY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGkpLmltcGwoKTsKQEAgLTMzMDcsNiArMzMyOSwxMCBAQCBCeXRlQ29kZVBh
cnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAgICAgICAgICBtX3N3aXRjaEltbVJl
bWFwW2ldID0gYnl0ZUNvZGVQYXJzZXItPm1fY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3
aXRjaEp1bXBUYWJsZXMoKTsKICAgICAgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9j
ay0+YWRkSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKCkgPSBjb2RlQmxvY2stPmltbWVkaWF0ZVN3
aXRjaEp1bXBUYWJsZShpKTsKICAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMoKTsgKytp
KSB7CisgICAgICAgICAgICBtX3N3aXRjaENoYXJSZW1hcFtpXSA9IGJ5dGVDb2RlUGFyc2VyLT5t
X2NvZGVCbG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCk7CisgICAgICAg
ICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZENoYXJhY3RlclN3aXRjaEp1bXBU
YWJsZSgpID0gY29kZUJsb2NrLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoaSk7CisgICAgICAg
IH0KICAgICAgICAgbV9jYWxsc2l0ZUJsb2NrSGVhZE5lZWRzTGlua2luZyA9IHRydWU7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgLy8gTWFjaGluZSBjb2RlIGJsb2NrIGNhc2UuCkBAIC0zMzIyLDYg
KzMzNDgsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lCiAgICAg
ICAgIG1fY29uc3RhbnRSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50UmVn
aXN0ZXJzKCkpOwogICAgICAgICBtX2NvbnN0YW50QnVmZmVyUmVtYXAucmVzaXplKGNvZGVCbG9j
ay0+bnVtYmVyT2ZDb25zdGFudEJ1ZmZlcnMoKSk7CiAgICAgICAgIG1fc3dpdGNoSW1tUmVtYXAu
cmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCkpOwor
ICAgICAgICBtX3N3aXRjaENoYXJSZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNoYXJh
Y3RlclN3aXRjaEp1bXBUYWJsZXMoKSk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29kZUJsb2NrLT5udW1iZXJPZklkZW50aWZpZXJzKCk7ICsraSkKICAgICAgICAgICAgIG1faWRl
bnRpZmllclJlbWFwW2ldID0gaTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb2Rl
QmxvY2stPm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKTsgKytpKQpAQCAtMzMzMCw2ICszMzU3
LDggQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAg
ICAgbV9jb25zdGFudEJ1ZmZlclJlbWFwW2ldID0gaTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpOyAr
K2kpCiAgICAgICAgICAgICBtX3N3aXRjaEltbVJlbWFwW2ldID0gaTsKKyAgICAgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjb2RlQmxvY2stPm51bWJlck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRh
YmxlcygpOyArK2kpCisgICAgICAgICAgICBtX3N3aXRjaENoYXJSZW1hcFtpXSA9IGk7CiAgICAg
ICAgIG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSBmYWxzZTsKICAgICB9CiAgICAg
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ0ZHU2lt
cGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE1MTY0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE4OCw3ICsxODgsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICBUcmlT
dGF0ZSBmb3VuZCA9IEZhbHNlVHJpU3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBCbG9j
a0luZGV4IHRhcmdldEJsb2NrSW5kZXggPSBOb0Jsb2NrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gZGF0YS0+Y2FzZXMuc2l6ZSgpOyBmb3VuZCA9PSBGYWxzZVRy
aVN0YXRlICYmIGktLTspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IEpT
VmFsdWU6OnB1cmVTdHJpY3RFcXVhbCh2YWx1ZSwgZGF0YS0+Y2FzZXNbaV0udmFsdWUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gZGF0YS0+Y2FzZXNbaV0udmFsdWUuc3Ry
aWN0RXF1YWwodmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZCA9
PSBUcnVlVHJpU3RhdGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEJs
b2NrSW5kZXggPSBkYXRhLT5jYXNlc1tpXS50YXJnZXQ7CiAgICAgICAgICAgICAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAxNTE2NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nh
cGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsNyBAQCBDYXBhYmls
aXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF90eXBlb2Y6CiAg
ICAgY2FzZSBvcF90b19udW1iZXI6CiAgICAgY2FzZSBvcF9zd2l0Y2hfaW1tOgorICAgIGNhc2Ug
b3Bfc3dpdGNoX2NoYXI6CiAgICAgY2FzZSBvcF9pbjoKICAgICBjYXNlIG9wX2dldF9mcm9tX3Nj
b3BlOgogICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxNTE2NDUpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NjEsNiArNTYxLDEwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAgICAgICAgICAgICAgICAgIHNldFVz
ZUtpbmRBbmRVbmJveElmUHJvZml0YWJsZTxJbnQzMlVzZT4obm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTd2l0Y2hDaGFyOgorICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlU3RyaW5nKCkpCisg
ICAgICAgICAgICAgICAgICAgIHNldFVzZUtpbmRBbmRVbmJveElmUHJvZml0YWJsZTxTdHJpbmdV
c2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAg
cHVibGljOgogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9ncHIgPT0gSW52
YWxpZEdQUlJlZzsgfQogICAgIAogICAgIEdQUlJlZyBncHIoKSBjb25zdCB7IHJldHVybiBtX2dw
cjsgfQorICAgIEdQUlJlZyBwYXlsb2FkR1BSKCkgY29uc3QgeyByZXR1cm4gbV9ncHI7IH0KICAg
ICAKIHByaXZhdGU6CiAgICAgR1BSUmVnIG1fZ3ByOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE1MTY0NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTAsNDAgKzE1MCw2NiBAQCB2b2lkIEpJVENvbXBpbGVyOjpjb21waWxlRXhjZXB0aW9uSGFu
ZGxlCiAgICAgfQogfQogCi12b2lkIEpJVENvbXBpbGVyOjpsaW5rKExpbmtCdWZmZXImIGxpbmtC
dWZmZXIpCitTaW1wbGVKdW1wVGFibGUmIEpJVENvbXBpbGVyOjpqdW1wVGFibGUoU3dpdGNoS2lu
ZCBraW5kLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFN3aXRjaEltbToKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGUoaW5kZXgpOworICAgIGNhc2UgU3dpdGNoQ2hhcjoKKyAgICAgICAgcmV0dXJuIG1f
Y29kZUJsb2NrLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoaW5kZXgpOworICAgIH0KK30KKwor
dW5zaWduZWQgSklUQ29tcGlsZXI6Om51bWJlck9mSnVtcFRhYmxlcyhTd2l0Y2hLaW5kIGtpbmQp
Cit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTd2l0Y2hJbW06CisgICAgICAgIHJl
dHVybiBtX2NvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCk7Cisg
ICAgY2FzZSBTd2l0Y2hDaGFyOgorICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPm51bWJlck9m
Q2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpOworICAgIH0KK30KKwordm9pZCBKSVRDb21waWxl
cjo6bGlua1N3aXRjaGVzKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIFN3aXRjaEtpbmQga2luZCkK
IHsKLSAgICAvLyBMaW5rIHRoZSBjb2RlLCBwb3B1bGF0ZSBkYXRhIGluIENvZGVCbG9jayBkYXRh
IHN0cnVjdHVyZXMuCi0jaWYgREZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgIGRhdGFMb2dG
KCJKSVQgY29kZSBmb3IgJXAgc3RhcnQgYXQgWyVwLCAlcCkuIFNpemUgPSAlenUuXG4iLCBtX2Nv
ZGVCbG9jaywgbGlua0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSwgc3RhdGljX2Nhc3Q8Y2hhcio+KGxp
bmtCdWZmZXIuZGVidWdBZGRyZXNzKCkpICsgbGlua0J1ZmZlci5kZWJ1Z1NpemUoKSwgbGlua0J1
ZmZlci5kZWJ1Z1NpemUoKSk7Ci0jZW5kaWYKLSAgICAKICAgICBCaXRWZWN0b3IgdXNlZEp1bXBU
YWJsZXM7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9ncmFwaC5tX3N3aXRjaERhdGEuc2l6ZSgp
OyBpLS07KSB7CiAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSBtX2dyYXBoLm1fc3dpdGNoRGF0
YVtpXTsKICAgICAgICAgaWYgKCFkYXRhLmRpZFVzZUp1bXBUYWJsZSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAKLSAgICAgICAgLy8gQ2FzdCB0byBpbnQgdG8gYXZvaWQgdGF1dG9s
b2dpY2FsIGNvbXBhcmlzb24gd2FybmluZ3MuCi0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXRp
Y19jYXN0PGludD4oZGF0YS5raW5kKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KFN3aXRjaEltbSkpOwor
ICAgICAgICBpZiAoZGF0YS5raW5kICE9IGtpbmQpCisgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgCiAgICAgICAgIHVzZWRKdW1wVGFibGVzLnNldChkYXRhLnN3aXRjaFRhYmxlSW5kZXgp
OwotICAgICAgICBTaW1wbGVKdW1wVGFibGUmIHRhYmxlID0KLSAgICAgICAgICAgIG1fY29kZUJs
b2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAg
ICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IGp1bXBUYWJsZShraW5kLCBkYXRhLnN3aXRj
aFRhYmxlSW5kZXgpOwogICAgICAgICB0YWJsZS5jdGlEZWZhdWx0ID0gbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoXSk7CiAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpOyBqLS07KQogICAgICAgICAgICAgdGFi
bGUuY3RpT2Zmc2V0c1tqXSA9IHRhYmxlLmN0aURlZmF1bHQ7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBqLS07KSB7CiAgICAgICAgICAgICBTd2l0Y2hDYXNl
JiBteUNhc2UgPSBkYXRhLmNhc2VzW2pdOwotICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tt
eUNhc2UudmFsdWUuYXNJbnQzMigpIC0gdGFibGUubWluXSA9CisgICAgICAgICAgICB0YWJsZS5j
dGlPZmZzZXRzW215Q2FzZS52YWx1ZS52YWx1ZSgpLmFzSW50MzIoKSAtIHRhYmxlLm1pbl0gPQog
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNl
LnRhcmdldF0pOwogICAgICAgICB9CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IG1fY29k
ZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKTsgaS0tOykgeworICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IG51bWJlck9mSnVtcFRhYmxlcyhraW5kKTsgaS0tOykg
ewogICAgICAgICBpZiAodXNlZEp1bXBUYWJsZXMuZ2V0KGkpKQogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIAotICAgICAgICBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRh
YmxlKGkpLmNsZWFyKCk7CisgICAgICAgIGp1bXBUYWJsZShraW5kLCBpKS5jbGVhcigpOwogICAg
IH0KK30KKwordm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQor
eworICAgIC8vIExpbmsgdGhlIGNvZGUsIHBvcHVsYXRlIGRhdGEgaW4gQ29kZUJsb2NrIGRhdGEg
c3RydWN0dXJlcy4KKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0YUxvZ0Yo
IkpJVCBjb2RlIGZvciAlcCBzdGFydCBhdCBbJXAsICVwKS4gU2l6ZSA9ICV6dS5cbiIsIG1fY29k
ZUJsb2NrLCBsaW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpLCBzdGF0aWNfY2FzdDxjaGFyKj4obGlu
a0J1ZmZlci5kZWJ1Z0FkZHJlc3MoKSkgKyBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgpLCBsaW5rQnVm
ZmVyLmRlYnVnU2l6ZSgpKTsKKyNlbmRpZgorCisgICAgbGlua1N3aXRjaGVzKGxpbmtCdWZmZXIs
IFN3aXRjaEltbSk7CisgICAgbGlua1N3aXRjaGVzKGxpbmtCdWZmZXIsIFN3aXRjaENoYXIpOwog
CiAgICAgLy8gTGluayBhbGwgY2FsbHMgb3V0IGZyb20gdGhlIEpJVCBjb2RlIHRvIHRoZWlyIHJl
c3BlY3RpdmUgZnVuY3Rpb25zLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxz
LnNpemUoKTsgKytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuaAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsNiArNDcyLDEwIEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjb21waWxlRW50cnkoKTsKICAgICB2b2lkIGNvbXBpbGVCb2R5KCk7CiAg
ICAgdm9pZCBsaW5rKExpbmtCdWZmZXImKTsKKyAgICAKKyAgICBTaW1wbGVKdW1wVGFibGUmIGp1
bXBUYWJsZShTd2l0Y2hLaW5kLCB1bnNpZ25lZCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZKdW1w
VGFibGVzKFN3aXRjaEtpbmQpOworICAgIHZvaWQgbGlua1N3aXRjaGVzKExpbmtCdWZmZXImLCBT
d2l0Y2hLaW5kKTsKIAogICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JF
eGl0JiwgU3BlY3VsYXRpb25SZWNvdmVyeSopOwogICAgIHZvaWQgY29tcGlsZUV4Y2VwdGlvbkhh
bmRsZXJzKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1Zh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6
eUpTVmFsdWUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiREZHTGF6eUpTVmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5j
bHVkZSAiT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K0pTVmFsdWUgTGF6eUpTVmFsdWU6OmdldFZhbHVlKFZNJiB2bSkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKG1fa2luZCkgeworICAgIGNhc2UgS25vd25WYWx1ZToKKyAgICAgICAgcmV0dXJuIHZhbHVl
KCk7CisgICAgY2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CisgICAgICAgIHJldHVybiBqc1Np
bmdsZUNoYXJhY3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVyKTsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIFRyaVN0YXRlIGVxdWFsVG9TaW5n
bGVDaGFyYWN0ZXIoSlNWYWx1ZSB2YWx1ZSwgVUNoYXIgY2hhcmFjdGVyKQoreworICAgIGlmICgh
dmFsdWUuaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7CisgICAgCisg
ICAgSlNTdHJpbmcqIGpzU3RyaW5nID0gYXNTdHJpbmcodmFsdWUpOworICAgIGlmIChqc1N0cmlu
Zy0+bGVuZ3RoKCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7CisgICAgCisg
ICAgY29uc3QgU3RyaW5nSW1wbCogc3RyaW5nID0ganNTdHJpbmctPnRyeUdldFZhbHVlSW1wbCgp
OworICAgIGlmICghc3RyaW5nKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICAK
KyAgICByZXR1cm4gdHJpU3RhdGUoc3RyaW5nLT5hdCgwKSA9PSBjaGFyYWN0ZXIpOworfQorCitU
cmlTdGF0ZSBMYXp5SlNWYWx1ZTo6c3RyaWN0RXF1YWwoY29uc3QgTGF6eUpTVmFsdWUmIG90aGVy
KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBLbm93blZhbHVlOgor
ICAgICAgICBzd2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEtub3duVmFsdWU6
CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6cHVyZVN0cmljdEVxdWFsKHZhbHVlKCksIG90
aGVyLnZhbHVlKCkpOworICAgICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKKyAgICAg
ICAgICAgIHJldHVybiBlcXVhbFRvU2luZ2xlQ2hhcmFjdGVyKHZhbHVlKCksIG90aGVyLmNoYXJh
Y3RlcigpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNpbmdsZUNoYXJh
Y3RlclN0cmluZzoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2Fz
ZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gdHJpU3RhdGUoY2hh
cmFjdGVyKCkgPT0gb3RoZXIuY2hhcmFjdGVyKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIG90aGVyLnN0cmljdEVxdWFsKCp0aGlzKTsKKyAgICAgICAgfQorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
dm9pZCBMYXp5SlNWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBLbm93blZhbHVlOgorICAgICAgICB2YWx1ZSgpLmR1
bXAob3V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5n
OgorICAgICAgICBvdXQucHJpbnQoIkxhenk6U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCIpOworICAg
ICAgICBvdXQucHJpbnRmKCIlMDRYIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3Rlcigp
KSk7CisgICAgICAgIGlmIChjaGFyYWN0ZXIoKSA+PSAnICcgJiYgY2hhcmFjdGVyKCkgPCAweDdm
KQorICAgICAgICAgICAgb3V0LnByaW50ZigiIC8gJWMiLCBjaGFyYWN0ZXIoKSk7CisgICAgICAg
IG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0xhenlKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMYXp5SlNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMYXp5SlNWYWx1ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR0xh
enlKU1ZhbHVlX2gKKyNkZWZpbmUgREZHTGF6eUpTVmFsdWVfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUu
aCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKKworLy8gUmVwcmVzZW50cyBlaXRoZXIgYSBKU1ZhbHVlLCBvciBmb3Ig
SlNWYWx1ZXMgdGhhdCByZXF1aXJlIGFsbG9jYXRpb24gaW4gdGhlIGhlYXAsCisvLyBpdCB0ZWxs
cyB5b3UgZXZlcnl0aGluZyB5b3UnZCBuZWVkIHRvIGtub3cgaW4gb3JkZXIgdG8gYWxsb2NhdGUg
aXQuCisKK2VudW0gTGF6aW5lc3NLaW5kIHsKKyAgICBLbm93blZhbHVlLAorICAgIFNpbmdsZUNo
YXJhY3RlclN0cmluZworfTsKKworY2xhc3MgTGF6eUpTVmFsdWUgeworcHVibGljOgorICAgIExh
enlKU1ZhbHVlKEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlKCkpCisgICAgICAgIDogbV9raW5kKEtu
b3duVmFsdWUpCisgICAgeworICAgICAgICB1LnZhbHVlID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVl
KTsKKyAgICB9CisgICAgCisgICAgc3RhdGljIExhenlKU1ZhbHVlIHNpbmdsZUNoYXJhY3RlclN0
cmluZyhVQ2hhciBjaGFyYWN0ZXIpCisgICAgeworICAgICAgICBMYXp5SlNWYWx1ZSByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc7CisgICAgICAg
IHJlc3VsdC51LmNoYXJhY3RlciA9IGNoYXJhY3RlcjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgSlNWYWx1ZSB0cnlHZXRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9raW5kID09IEtub3duVmFsdWUpCisgICAgICAgICAgICByZXR1cm4gdmFsdWUo
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CisgICAgCisgICAgSlNWYWx1ZSBn
ZXRWYWx1ZShWTSYpIGNvbnN0OworICAgIAorICAgIEpTVmFsdWUgdmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKG1fa2luZCA9PSBLbm93blZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmRlY29kZSh1LnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgVUNoYXIgY2hhcmFj
dGVyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gU2luZ2xlQ2hhcmFj
dGVyU3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIHUuY2hhcmFjdGVyOworICAgIH0KKyAgICAKKyAg
ICBUcmlTdGF0ZSBzdHJpY3RFcXVhbChjb25zdCBMYXp5SlNWYWx1ZSYgb3RoZXIpIGNvbnN0Owor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToK
KyAgICB1bmlvbiB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlIHZhbHVlOworICAgICAgICBVQ2hh
ciBjaGFyYWN0ZXI7CisgICAgfSB1OworICAgIExhemluZXNzS2luZCBtX2tpbmQ7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwor
I2VuZGlmIC8vIERGR0xhenlKU1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdOb2RlLmgJKHJldmlzaW9uIDE1MTY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiREZH
QWRqYWNlbmN5TGlzdC5oIgogI2luY2x1ZGUgIkRGR0FycmF5TW9kZS5oIgogI2luY2x1ZGUgIkRG
R0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0xhenlKU1ZhbHVlLmgiCiAjaW5jbHVkZSAiREZHTm9k
ZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKICNpbmNsdWRlICJERkdWYXJpYWJs
ZUFjY2Vzc0RhdGEuaCIKQEAgLTgzLDE4ICs4NCwxOSBAQCBzdHJ1Y3QgU3dpdGNoQ2FzZSB7CiAg
ICAgewogICAgIH0KICAgICAKLSAgICBTd2l0Y2hDYXNlKEpTVmFsdWUgdmFsdWUsIEJsb2NrSW5k
ZXggdGFyZ2V0KQorICAgIFN3aXRjaENhc2UoTGF6eUpTVmFsdWUgdmFsdWUsIEJsb2NrSW5kZXgg
dGFyZ2V0KQogICAgICAgICA6IHZhbHVlKHZhbHVlKQogICAgICAgICAsIHRhcmdldCh0YXJnZXQp
CiAgICAgewogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlIHZhbHVlOworICAgIExhenlKU1ZhbHVl
IHZhbHVlOwogICAgIEJsb2NrSW5kZXggdGFyZ2V0OwogfTsKIAogZW51bSBTd2l0Y2hLaW5kIHsK
LSAgICBTd2l0Y2hJbW0KKyAgICBTd2l0Y2hJbW0sCisgICAgU3dpdGNoQ2hhcgogfTsKIAogc3Ry
dWN0IFN3aXRjaERhdGEgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1MTY0NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NDQw
LDkgKzQ0NDAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVjdWxhdGUoTm9kZSosIEVkCiAg
ICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tSW50SnVtcChOb2Rl
KiwgU3dpdGNoRGF0YSogZGF0YSwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCkKK3ZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKAorICAgIFN3aXRjaERhdGEqIGRhdGEs
IFNpbXBsZUp1bXBUYWJsZSYgdGFibGUsIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gpCiB7
Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1faml0LmNvZGVCbG9jaygpLT5pbW1lZGlh
dGVTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCk7CiAgICAgbV9qaXQuc3Vi
MzIoSW1tMzIodGFibGUubWluKSwgdmFsdWUpOwogICAgIGFkZEJyYW5jaCgKICAgICAgICAgbV9q
aXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwgdmFsdWUsIEltbTMyKHRhYmxl
LmN0aU9mZnNldHMuc2l6ZSgpKSksCkBAIC00NDUzLDEzICs0NDUzLDIxIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW1JbnRKdW0KICAgICBkYXRhLT5kaWRVc2VKdW1wVGFibGUg
PSB0cnVlOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tSW50SnVtcCgK
KyAgICBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBzY3JhdGNoKQorewor
ICAgIGVtaXRTd2l0Y2hJbnRKdW1wKAorICAgICAgICBkYXRhLCBtX2ppdC5jb2RlQmxvY2soKS0+
aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLAorICAgICAg
ICB2YWx1ZSwgc2NyYXRjaCk7Cit9CisKIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJ
bW0oTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSkKIHsKICAgICBzd2l0Y2ggKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSkgewogICAgIGNhc2UgSW50MzJVc2U6IHsKICAgICAgICAgU3BlY3Vs
YXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBH
UFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgZW1pdFN3aXRjaEltbUludEp1bXAobm9k
ZSwgZGF0YSwgdmFsdWUuZ3ByKCksIHRlbXAuZ3ByKCkpOworICAgICAgICBlbWl0U3dpdGNoSW1t
SW50SnVtcChkYXRhLCB2YWx1ZS5ncHIoKSwgdGVtcC5ncHIoKSk7CiAgICAgICAgIG5vUmVzdWx0
KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDc1LDcgKzQ0ODMsNyBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAjaWYgVVNFKEpTVkFMVUU2NCkK
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SW50ID0gbV9qaXQuYnJhbmNoNjQoCiAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6QmVsb3csIHZhbHVlUmVncy5ncHIoKSwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgZW1pdFN3aXRjaEltbUludEp1bXAobm9kZSwg
ZGF0YSwgdmFsdWVSZWdzLmdwcigpLCBzY3JhdGNoKTsKKyAgICAgICAgZW1pdFN3aXRjaEltbUlu
dEp1bXAoZGF0YSwgdmFsdWVSZWdzLmdwcigpLCBzY3JhdGNoKTsKICAgICAgICAgbm90SW50Lmxp
bmsoJm1faml0KTsKICAgICAgICAgYWRkQnJhbmNoKAogICAgICAgICAgICAgbV9qaXQuYnJhbmNo
VGVzdDY0KApAQCAtNDQ4OCw3ICs0NDk2LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3
aXRjaEltbShOb2RlKgogI2Vsc2UKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SW50ID0g
bV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIHZhbHVl
UmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAg
IGVtaXRTd2l0Y2hJbW1JbnRKdW1wKG5vZGUsIGRhdGEsIHZhbHVlUmVncy5wYXlsb2FkR1BSKCks
IHNjcmF0Y2gpOworICAgICAgICBlbWl0U3dpdGNoSW1tSW50SnVtcChkYXRhLCB2YWx1ZVJlZ3Mu
cGF5bG9hZEdQUigpLCBzY3JhdGNoKTsKICAgICAgICAgbm90SW50LmxpbmsoJm1faml0KTsKICAg
ICAgICAgYWRkQnJhbmNoKAogICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCkBAIC00NTEwLDYg
KzQ1MTgsMTA1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAg
ICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcCgK
KyAgICBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcgdmFsdWUsIEdQUlJlZyBzY3JhdGNoKQorewor
ICAgIGFkZEJyYW5jaCgKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh2YWx1ZSwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLAorICAgICAgICAgICAgVHJ1c3Rl
ZEltbTMyKDEpKSwKKyAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworICAgIAorICAgIG1faml0
LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWUsIEpTU3RyaW5nOjpvZmZzZXRP
ZlZhbHVlKCkpLCBzY3JhdGNoKTsKKyAgICAKKyAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKKyAg
ICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdFB0cihNYWNy
b0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaCksCisgICAgICAgICAgICB0aGlzLCBvcGVyYXRpb25S
ZXNvbHZlUm9wZSwgc2NyYXRjaCwgdmFsdWUpKTsKKyAgICAKKyAgICBtX2ppdC5sb2FkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gsIFN0cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSks
IHZhbHVlKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBpczhCaXQgPSBtX2ppdC5icmFu
Y2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoLCBTdHJpbmdJbXBsOjpmbGFnc09mZnNldCgpKSwK
KyAgICAgICAgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJczhCaXQoKSkpOworICAgIAor
ICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZSksIHNjcmF0Y2gp
OworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHJlYWR5ID0gbV9qaXQuanVtcCgpOworICAg
IAorICAgIGlzOEJpdC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3ModmFsdWUpLCBzY3JhdGNoKTsKKyAgICAKKyAgICByZWFkeS5saW5rKCZtX2pp
dCk7CisgICAgZW1pdFN3aXRjaEludEp1bXAoCisgICAgICAgIGRhdGEsIG1faml0LmNvZGVCbG9j
aygpLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRleCksCisg
ICAgICAgIHNjcmF0Y2gsIHZhbHVlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3
aXRjaENoYXIoTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSkKK3sKKyAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgU3RyaW5nVXNlOiB7CisgICAgICAg
IFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAg
IEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIG9wMUdQ
UiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAg
ICAgICAKKyAgICAgICAgb3AxLnVzZSgpOworCisgICAgICAgIERGR19UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQx
KCksIFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaFB0cigKKyAgICAgICAgICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUu
Z2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBlbWl0U3dpdGNoQ2hhclN0cmluZ0p1bXAoZGF0
YSwgb3AxR1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgbm9SZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5D
YWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBj
YXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgICAgIAor
ICAgICAgICBKU1ZhbHVlUmVncyBvcDFSZWdzID0gb3AxLmpzVmFsdWVSZWdzKCk7CisgICAgICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIG9wMS51c2Uo
KTsKKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgYWRkQnJhbmNoKAorICAg
ICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpOb25aZXJvLCBvcDFSZWdzLmdwcigpLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpLAor
ICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworI2Vsc2UKKyAgICAgICAgYWRkQnJhbmNo
KAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6Ok5vdEVxdWFsLCBvcDFSZWdzLnRhZ0dQUigpLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
Q2VsbFRhZykpLAorICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworI2VuZGlmCisgICAg
ICAgIAorICAgICAgICBhZGRCcmFuY2goCisgICAgICAgICAgICBtX2ppdC5icmFuY2hQdHIoCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLAorICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMVJlZ3MucGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0
cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSwKKyAgICAgICAgICAg
IGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgCisgICAgICAgIGVtaXRTd2l0Y2hDaGFyU3Ry
aW5nSnVtcChkYXRhLCBvcDFSZWdzLnBheWxvYWRHUFIoKSwgdGVtcEdQUik7CisgICAgICAgIG5v
UmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCiB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0U3dpdGNoKE5vZGUqIG5vZGUpCiB7CiAgICAgU3dpdGNoRGF0YSogZGF0YSA9
IG5vZGUtPnN3aXRjaERhdGEoKTsKQEAgLTQ1MTcsNiArNDYyNCwxMCBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0U3dpdGNoKE5vZGUqIG5vCiAgICAgY2FzZSBTd2l0Y2hJbW06IHsKICAgICAg
ICAgZW1pdFN3aXRjaEltbShub2RlLCBkYXRhKTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBjYXNlIFN3aXRjaENoYXI6IHsKKyAgICAgICAgZW1pdFN3aXRjaENoYXIobm9kZSwgZGF0YSk7
CisgICAgICAgIHJldHVybjsKICAgICB9IH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODQ0LDggKzE4NDQsMTEgQEAg
cHVibGljOgogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9kZSopOwogICAgIHZvaWQgZW1p
dE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJ
bmRleCBub3RUYWtlbik7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5vZGUqKTsKLSAgICB2b2lkIGVt
aXRTd2l0Y2hJbW1JbnRKdW1wKE5vZGUqLCBTd2l0Y2hEYXRhKiwgR1BSUmVnIHZhbHVlLCBHUFJS
ZWcgc2NyYXRjaCk7CisgICAgdm9pZCBlbWl0U3dpdGNoSW50SnVtcChTd2l0Y2hEYXRhKiwgU2lt
cGxlSnVtcFRhYmxlJiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCk7CisgICAgdm9pZCBl
bWl0U3dpdGNoSW1tSW50SnVtcChTd2l0Y2hEYXRhKiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2Ny
YXRjaCk7CiAgICAgdm9pZCBlbWl0U3dpdGNoSW1tKE5vZGUqLCBTd2l0Y2hEYXRhKik7CisgICAg
dm9pZCBlbWl0U3dpdGNoQ2hhclN0cmluZ0p1bXAoU3dpdGNoRGF0YSosIEdQUlJlZyB2YWx1ZSwg
R1BSUmVnIHNjcmF0Y2gpOworICAgIHZvaWQgZW1pdFN3aXRjaENoYXIoTm9kZSosIFN3aXRjaERh
dGEqKTsKICAgICB2b2lkIGVtaXRTd2l0Y2goTm9kZSopOwogICAgIAogICAgIHZvaWQgY29tcGls
ZVRvU3RyaW5nT25DZWxsKE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNTE2NTcpCisrKyBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTA2
LTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgZm91cnRoVGll
cjogREZHIHNob3VsZCBoYXZlIHN3aXRjaF9jaGFyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc3MTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEkgd2FudGVkIHRvIGJlIGFibGUgdG8gc2F5
IHN0cmluZ0ltcGwtPmF0KGluZGV4KSwgYW5kIG5vdyBJIGNhbiEKKworICAgICAgICAqIHd0Zi90
ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6YXQpOgorICAgICAg
ICAoV1RGOjpTdHJpbmdJbXBsOjpvcGVyYXRvcltdKToKKwogMjAxMy0wNi0xNSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IEFkZCBDRkcgc2lt
cGxpZmljYXRpb24gZm9yIFN3aXRjaApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJKHJl
dmlzaW9uIDE1MTY0NSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NTMsMTMgKzY1MywxNCBAQCBwdWJsaWM6CiAKICAgICBXVEZfRVhQT1JU
X1NUUklOR19BUEkgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdWJzdHJpbmcodW5zaWduZWQgcG9z
LCB1bnNpZ25lZCBsZW4gPSBVSU5UX01BWCk7CiAKLSAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2ln
bmVkIGkpIGNvbnN0CisgICAgVUNoYXIgYXQodW5zaWduZWQgaSkgY29uc3QKICAgICB7CiAgICAg
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGkgPCBtX2xlbmd0aCk7CiAgICAg
ICAgIGlmIChpczhCaXQoKSkKICAgICAgICAgICAgIHJldHVybiBtX2RhdGE4W2ldOwogICAgICAg
ICByZXR1cm4gbV9kYXRhMTZbaV07CiAgICAgfQorICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWdu
ZWQgaSkgY29uc3QgeyByZXR1cm4gYXQoaSk7IH0KICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
VUNoYXIzMiBjaGFyYWN0ZXJTdGFydGluZ0F0KHVuc2lnbmVkKTsKIAogICAgIFdURl9FWFBPUlRf
U1RSSU5HX0FQSSBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204918</attachid>
            <date>2013-06-18 08:40:30 -0700</date>
            <delta_ts>2013-06-18 11:05:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48652</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNjg0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDEzLTA2LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBoYXZlIHN3aXRjaF9jaGFyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc3MTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFkZCBvcF9zd2l0Y2hfY2hh
ci4gTW9zdCBvZiB0aGlzIGlzIGZhaXJseSBzaW1wbGUsIGV4Y2VwdCBmb3IgdGhlIHdob2xlCisg
ICAgICAgIExhenlKU1ZhbHVlIHRoaW5nLgorICAgICAgICAKKyAgICAgICAgSXQncyBsb25nIGJl
ZW4gdGhlIGNhc2UgdGhhdCBhbnl0aW1lIHlvdSB3YW50ZWQgdGhlIERGRyB0byBzcGVhayBvZiBh
IHN0cmluZworICAgICAgICB0aGF0IGRpZG4ndCBhcHBlYXIgaW4gdGhlIGNvbnN0YW50IHBvb2ws
IHlvdSB3b3VsZCBoYXZlIGEgaGFyZCB0aW1lIHNpbmNlCisgICAgICAgIHRoZSBERkcgaXNuJ3Qg
YWxsb3dlZCB0byBhbGxvY2F0ZSBpbiB0aGUgR0MgaGVhcC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBr
bm93CisgICAgICAgIHRoYXQgeW91IHdhbnQgdG8gc3BlYWsgb2YgYSBzaW5nbGUgY2hhcmFjdGVy
IHN0cmluZywgeW91IG1pZ2h0IGZpbmQgdGhhdAorICAgICAgICB0aGUgb25lIHlvdSB3YW50ZWQg
dG8gc3BlYWsgb2YgaGFkIGJlZW4gR0MnZC4gQW5vdGhlciBleGFtcGxlIGlzIGlmIHlvdQorICAg
ICAgICB3YW50ZWQgdG8gYWRkIGNvbnN0YW50IGZvbGRpbmcgZm9yIHN0cmluZyBjb25jYXRlbmF0
aW9uIC0gc29tZXRoaW5nIHdlIGRvbid0CisgICAgICAgIGhhdmUgeWV0IGJ1dCB3aWxsIHdhbnQg
ZXZlbnR1YWxseS4KKyAgICAgICAgCisgICAgICAgIEkgc29sdmUgdGhpcyBieSBmaW5hbGx5IGFk
ZGluZyB0aGUgbm90aW9uIG9mIExhenlKU1ZhbHVlLiBJbiB0aGUgZnV0dXJlIEkKKyAgICAgICAg
YW50aWNpcGF0ZSB1c2luZyB0aGlzIGZvciBhIHZhcmlldHkgb2Ygc3RyaW5nLXJlbGF0ZWQgdGhp
bmdzLiBUaGUgaWRlYSBoZXJlCisgICAgICAgIGlzIHRoYXQgdGhlIERGRyBjYW4gZWl0aGVyIHNh
eSB0aGF0IGl0IGFscmVhZHkga25vd3Mgd2hhdCB0aGUgdmFsdWUgaXMsIG9yCisgICAgICAgIGl0
IGNhbiBkZXNjcmliZSB0aGUgdmFsdWUuIEZvciBleGFtcGxlLCBpbiB0aGlzIHBhdGNoIEkgbmVl
ZGVkIHRvIGJlIGFibGUgdG8KKyAgICAgICAgZGVzY3JpYmUgc2luZ2xlLWNoYXJhY3RlciBzdHJp
bmdzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2Nr
KToKKyAgICAgICAgKiBieXRlY29kZS9KdW1wVGFibGUuaDoKKyAgICAgICAgKiBkZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAg
KiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAq
IGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHUFJJbmZvLmg6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3M6OnBheWxvYWRHUFIpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omp1bXBUYWJsZSk6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpudW1iZXJPZkp1
bXBUYWJsZXMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rU3dpdGNoZXMp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcv
REZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcv
REZHTGF6eUpTVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6TGF6eUpTVmFsdWU6OmdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjplcXVhbFRv
U2luZ2xlQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6c3RyaWN0
RXF1YWwpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpkdW1wKToKKyAgICAgICAg
KiBkZmcvREZHTGF6eUpTVmFsdWUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAo
TGF6eUpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpMYXp5SlNWYWx1
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0cmlu
Zyk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnRyeUdldFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Okxh
enlKU1ZhbHVlOjpjaGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpz
d2l0Y2hMb29rdXBWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTd2l0Y2hDYXNlOjpTd2l0Y2hDYXNlKToKKyAgICAgICAgKFN3aXRjaENhc2UpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbUludEp1bXApOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisKIDIwMTMt
MDYtMTcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRlRM
OiBBZGQgYW5vdGhlciB0ZW1wIHJlZ2lzdGVyIHJlZ1Q0IHRvIEpTSW50ZXJmYWNlSklUCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsOCBAQAogCQkwRjQ2ODBEMzE0QkJEMTY3MDBC
RkUyNzIgLyogTExJbnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ2ODBDRjE0QkJCM0QxMDBCRkUyNzIgLyogTExJbnREYXRhLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NjgwRDQxNEJC
RDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8q
IEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUy
NzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0
dXJuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjQ2RTZDNTE3NkY4QTVFMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzIxNzZGOEE1
QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEY0NkU2QzYxNzZGOEE2
MDAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpT
VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlkZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0OTNBRjgxNkQwQ0FEMTAw
ODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0RTFBMEUxNzNBRUREQzAw
N0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRUREQzAwN0VFMkQzIC8qIElu
dGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwogCQkwRjRFMUEwRjE3M0FFRERDMDA3RUUy
RDMgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEQxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVk
U3RydWN0dXJlQ2hhaW4uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwpAQCAtMTE2Nyw2ICsxMTY5LDggQEAKIAkJMEY0NjgwQ0YxNEJCQjNEMTAwQkZFMjcy
IC8qIExMSW50RGF0YS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludERh
dGEuaDsgcGF0aCA9IGxsaW50L0xMSW50RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjQ2ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIb3N0Q2FsbFJldHVyblZhbHVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NjgwRDExNEJCQzVGODAwQkZF
MjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSG9zdENhbGxSZXR1cm5WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3BwOyBwYXRoID0g
ZGZnL0RGR0xhenlKU1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0
NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcvREZHTGF6eUpT
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0OTNBRjgxNkQwQ0FEMTAw
ODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0RTFBMEMxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNEUxQTBEMTczQUVEREMw
MDdFRTJEMyAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEludGVuZGVkU3RydWN0dXJlQ2hhaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI5NzksNiArMjk4Myw4IEBACiAJCQkJODZFQzlEQkMxMzI4REY4MjAwMkIy
QUQ3IC8qIERGR0pJVENvbXBpbGVyLmggKi8sCiAJCQkJMEZEQjJDRDUxNzQyRDgwNDAwN0IzQzFC
IC8qIERGR0pJVEZpbmFsaXplci5jcHAgKi8sCiAJCQkJMEZEQjJDRDYxNzQyRDgwNDAwN0IzQzFC
IC8qIERGR0pJVEZpbmFsaXplci5oICovLAorCQkJCTBGNDZFNkMyMTc2RjhBNUIwMEUxRjc1NSAv
KiBERkdMYXp5SlNWYWx1ZS5jcHAgKi8sCisJCQkJMEY0NkU2QzMxNzZGOEE1QjAwRTFGNzU1IC8q
IERGR0xhenlKU1ZhbHVlLmggKi8sCiAJCQkJMEZCNEI1MUMxNkI2Mjc3MjAwM0Y2OTZCIC8qIERG
R0xvbmdMaXZlZFN0YXRlLmNwcCAqLywKIAkJCQkwRkI0QjUxRDE2QjYyNzcyMDAzRjY5NkIgLyog
REZHTG9uZ0xpdmVkU3RhdGUuaCAqLywKIAkJCQkwRjJCREMzRDE1MjI4MDE3MDBDRDg5MTAgLyog
REZHTWluaWZpZWRHcmFwaC5oICovLApAQCAtMzc3Myw2ICszNzc5LDcgQEAKIAkJCQkwRjcxNENB
NTE2RUE5MkYyMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYxMzZENEQxNzRBRDY5RTAwNzVCMzU0IC8qIERlZmVyR0MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNUVFNEU5MTc1NDI0QUYwMDlBRTQyRCAvKiBKU0NUZXN0UnVubmVy
VXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNDZFNkM2MTc2RjhBNjAwMEUxRjc1NSAvKiBE
RkdMYXp5SlNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC00MjA2LDcgKzQyMTMsNiBAQAogCQkJ
CTg2ODgwRjFGMTQzMjhCQjkwMEIwOEQ0MiAvKiBERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZFQ0U3NDU3MTc0NTQ1NjUwMEZGOTMwMCAvKiBNYWNyb0Fzc2Vt
Ymxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4Njg4MEY0RDE0MzUzQjIxMDBC
MDhENDIgLyogREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQkwRjYz
OTQ0MDE1Qzc1RjFEMDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjhGMkI5RTE3MzA2QzhEMDA3REJEQTUgLyogU291cmNlQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1
bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTJCMTU0NzUwMDAwMDNFRDBGRiAvKiBE
RkdWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQ0NjIsNiArNDQ2OCw3IEBACiAJCQkJ
QURFMzlGRkYxNkREMTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1RUU0RTgxNzU0MjRBRjAwOUFFNDJE
IC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjQ2RTZDNTE3
NkY4QTVFMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkp
OwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2NSw3ICs1NjUsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cEJ5dGVjb2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIEFTU0VSVCghKChpICsgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hK
dW1wVGFibGVzW2ldLm1pbikgJiB+MHhGRkZGKSk7CiAgICAgICAgICAgICAgICAgVUNoYXIgY2gg
PSBzdGF0aWNfY2FzdDxVQ2hhcj4oZW50cnkgKyBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRj
aEp1bXBUYWJsZXNbaV0ubWluKTsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJcdFx0XCIl
c1wiID0+ICUwNGRcbiIsIFN0cmluZygmY2gsIDEpLnV0ZjgoKS5kYXRhKCksICppdGVyKTsKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnRmKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIFN0cmluZ0lt
cGw6OnV0ZjhGb3JDaGFyYWN0ZXJzKCZjaCwgMSkuZGF0YSgpLCAqaXRlcik7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIgICAgICB9XG4iKTsKICAgICAgICAgICAgICsr
aTsKQEAgLTE4NDMsNiArMTg0MywyMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVj
dXRhYmxlKiBvCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIGppdEFmdGVyV2FybVVw
KCk7CiAKKyAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2Rl
IGJsb2NrJ3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKKyAgICAvLyBzeW5jaHJvbm91c2x5
LgorICAgIGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25z
OjpzaG93REZHRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wQnl0ZWNvZGVB
dERGR1RpbWUoKQorICAgICAgICB8fCBPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24oKQorICAg
ICAgICB8fCBPcHRpb25zOjpsb2dDb21waWxhdGlvbkNoYW5nZXMoKQorICAgICAgICB8fCBPcHRp
b25zOjp2YWxpZGF0ZUdyYXBoKCkKKyAgICAgICAgfHwgT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0
RWFjaFBoYXNlKCkKKyAgICAgICAgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpCisgICAgICAgIHx8
IE9wdGlvbnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkKKyAgICAgICAgfHwgT3B0aW9uczo6
cmVwb3J0Q29tcGlsZVRpbWVzKCkpCisgICAgICAgIGhhc2goKTsKKwogICAgIGlmIChPcHRpb25z
OjpkdW1wR2VuZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1bXBCeXRlY29kZSgpOwogICAg
IG1fdm0tPmZpbmlzaGVkQ29tcGlsaW5nKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9KdW1wVGFibGUuaAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6
d2FyaWNoQHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBo
YXNlLmNwcAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDE0
ICszNDgsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2g6IHsKICAgICAgICAgICAg
IFN3aXRjaERhdGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CiAgICAgICAgICAgICBzd2l0
Y2ggKGRhdGEtPmtpbmQpIHsKLSAgICAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CisgICAgICAg
ICAgICBjYXNlIFN3aXRjaEltbToKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjogewogICAg
ICAgICAgICAgICAgIC8vIFdlIGRvbid0IG5lZWQgTm9kZU5lZWRzTmVnWmVybyBiZWNhdXNlIGlm
IHRoZSBjYXNlcyBhcmUgYWxsIGludGVnZXJzCi0gICAgICAgICAgICAgICAgLy8gdGhlbiAtMCBh
bmQgMCBhcmUgdHJlYXRlZCB0aGUgc2FtZS4gIFdlIGRvbid0IG5lZWQgTm9kZVVzZWRBc090aGVy
Ci0gICAgICAgICAgICAgICAgLy8gYmVjYXVzZSBpZiBhbGwgb2YgdGhlIGNhc2VzIGFyZSBpbnRl
Z2VycyB0aGVuIE5hTiBhbmQgdW5kZWZpbmVkIGFyZQotICAgICAgICAgICAgICAgIC8vIHRyZWF0
ZWQgdGhlIHNhbWUuCisgICAgICAgICAgICAgICAgLy8gb3Igc3RyaW5ncyB0aGVuIC0wIGFuZCAw
IGFyZSB0cmVhdGVkIHRoZSBzYW1lLiAgV2UgZG9uJ3QgbmVlZAorICAgICAgICAgICAgICAgIC8v
IE5vZGVVc2VkQXNPdGhlciBiZWNhdXNlIGlmIGFsbCBvZiB0aGUgY2FzZXMgYXJlIGludGVnZXJz
IG9yCisgICAgICAgICAgICAgICAgLy8gc2luZ2xlLWNoYXJhY3RlciBzdHJpbmdzIHRoZW4gTmFO
IGFuZCB1bmRlZmluZWQgYXJlIHRyZWF0ZWQgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAvLyAo
aS5lLiB0aGV5IHdpbGwgdGFrZSBkZWZhdWx0KS4KICAgICAgICAgICAgICAgICBub2RlLT5jaGls
ZDEoKS0+bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc0ludCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CShyZXZpc2lvbiAxNTE2NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyOCw2ICsxMDI4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2NvbnN0YW50UmVtYXA7CiAgICAgICAgIFZl
Y3Rvcjx1bnNpZ25lZD4gbV9jb25zdGFudEJ1ZmZlclJlbWFwOwogICAgICAgICBWZWN0b3I8dW5z
aWduZWQ+IG1fc3dpdGNoSW1tUmVtYXA7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9zd2l0
Y2hDaGFyUmVtYXA7CiAgICAgICAgIAogICAgICAgICAvLyBCbG9ja3MgaW50cm9kdWNlZCBieSB0
aGlzIGNvZGUgYmxvY2ssIHdoaWNoIG5lZWQgc3VjY2Vzc29yIGxpbmtpbmcuCiAgICAgICAgIC8v
IE1heSBpbmNsdWRlIHVwIHRvIG9uZSBiYXNpYyBibG9jayB0aGF0IGluY2x1ZGVzIHRoZSBjb250
aW51YXRpb24gYWZ0ZXIKQEAgLTI3NjUsNiArMjc2NiwyNiBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJ
bmZvKCZtX2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2ltbSk7
CiAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7
CisgICAgICAgICAgICBTd2l0Y2hEYXRhIGRhdGE7CisgICAgICAgICAgICBkYXRhLmtpbmQgPSBT
d2l0Y2hDaGFyOworICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVT
dGFja1RvcC0+bV9zd2l0Y2hDaGFyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZF07CisgICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoID0gbV9jdXJyZW50SW5kZXggKyBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxl
JiB0YWJsZSA9IG1fY29kZUJsb2NrLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0
Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJs
ZS5icmFuY2hPZmZzZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0YWJs
ZS5icmFuY2hPZmZzZXRzW2ldKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJbmRleCArIHRhYmxlLmJyYW5j
aE9mZnNldHNbaV07CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJv
dWdoKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBkYXRh
LmNhc2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZShMYXp5SlNWYWx1
ZTo6c2luZ2xlQ2hhcmFjdGVyU3RyaW5nKHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFwcGVuZChkYXRhKTsK
KyAgICAgICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9zd2l0Y2hE
YXRhLmxhc3QoKSksIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAg
ICAgICAgICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfY2hhcik7CisgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIG9wX3JldDoKICAgICAgICAgICAgIGZsdXNoQXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJp
YWJsZXMoKTsKQEAgLTMyNjMsNiArMzI4NCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFj
a0VudHJ5OjpJbmxpbmUKICAgICAgICAgbV9jb25zdGFudFJlbWFwLnJlc2l6ZShjb2RlQmxvY2st
Pm51bWJlck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJS
ZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpKTsKICAgICAg
ICAgbV9zd2l0Y2hJbW1SZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3
aXRjaEp1bXBUYWJsZXMoKSk7CisgICAgICAgIG1fc3dpdGNoQ2hhclJlbWFwLnJlc2l6ZShjb2Rl
QmxvY2stPm51bWJlck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpKTsKIAogICAgICAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyAr
K2kpIHsKICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IGNvZGVCbG9jay0+aWRlbnRpZmll
cihpKS5pbXBsKCk7CkBAIC0zMzA3LDYgKzMzMjksMTAgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGlu
ZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAgICAgbV9zd2l0Y2hJbW1SZW1hcFtpXSA9IGJ5
dGVDb2RlUGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGVzKCk7CiAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZEltbWVk
aWF0ZVN3aXRjaEp1bXBUYWJsZSgpID0gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFi
bGUoaSk7CiAgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVC
bG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCk7ICsraSkgeworICAgICAg
ICAgICAgbV9zd2l0Y2hDaGFyUmVtYXBbaV0gPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2st
Pm51bWJlck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpOworICAgICAgICAgICAgYnl0ZUNv
ZGVQYXJzZXItPm1fY29kZUJsb2NrLT5hZGRDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoKSA9IGNv
ZGVCbG9jay0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKGkpOworICAgICAgICB9CiAgICAgICAg
IG1fY2FsbHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSB0cnVlOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNlLgpAQCAtMzMyMiw2ICszMzQ4LDcgQEAg
Qnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBtX2NvbnN0
YW50UmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsK
ICAgICAgICAgbV9jb25zdGFudEJ1ZmZlclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9m
Q29uc3RhbnRCdWZmZXJzKCkpOwogICAgICAgICBtX3N3aXRjaEltbVJlbWFwLnJlc2l6ZShjb2Rl
QmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgbV9z
d2l0Y2hDaGFyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hK
dW1wVGFibGVzKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+
bnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1h
cFtpXSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1i
ZXJPZkNvbnN0YW50UmVnaXN0ZXJzKCk7ICsraSkKQEAgLTMzMzAsNiArMzM1Nyw4IEBAIEJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgICAgIG1fY29uc3Rh
bnRCdWZmZXJSZW1hcFtpXSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29k
ZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKTsgKytpKQogICAgICAg
ICAgICAgbV9zd2l0Y2hJbW1SZW1hcFtpXSA9IGk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMoKTsgKytp
KQorICAgICAgICAgICAgbV9zd2l0Y2hDaGFyUmVtYXBbaV0gPSBpOwogICAgICAgICBtX2NhbGxz
aXRlQmxvY2tIZWFkTmVlZHNMaW5raW5nID0gZmFsc2U7CiAgICAgfQogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwCShyZXZpc2lvbiAxNTE2NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyAr
MTg4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgVHJpU3RhdGUgZm91bmQg
PSBGYWxzZVRyaVN0YXRlOwogICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0YXJn
ZXRCbG9ja0luZGV4ID0gTm9CbG9jazsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGRhdGEtPmNhc2VzLnNpemUoKTsgZm91bmQgPT0gRmFsc2VUcmlTdGF0ZSAmJiBp
LS07KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBKU1ZhbHVlOjpwdXJl
U3RyaWN0RXF1YWwodmFsdWUsIGRhdGEtPmNhc2VzW2ldLnZhbHVlKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmljdEVxdWFsKHZh
bHVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gVHJ1ZVRyaVN0
YXRlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0g
ZGF0YS0+Y2FzZXNbaV0udGFyZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNp
b24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNh
cGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdHlwZW9mOgogICAgIGNhc2Ugb3Bf
dG9fbnVtYmVyOgogICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9j
aGFyOgogICAgIGNhc2Ugb3BfaW46CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAgICBj
YXNlIG9wX3B1dF90b19zY29wZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
RHJpdmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ry
aXZlci5jcHAJKHJldmlzaW9uIDE1MTY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRHJpdmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMjAgKzY3LDYgQEAgc3RhdGljIENv
bXBpbGF0aW9uUmVzdWx0IGNvbXBpbGUoQ29tcGlsZQogICAgIGlmICghT3B0aW9uczo6dXNlREZH
SklUKCkgfHwgIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKICAgICAg
ICAgcmV0dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogICAgIAotICAgIC8vIElmIHRoZSBjb25jdXJy
ZW50IHRocmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNoLCB0aGVuIGNvbXB1dGUg
aXQgaGVyZQotICAgIC8vIHN5bmNocm9ub3VzbHkuCi0gICAgaWYgKE9wdGlvbnM6OnNob3dEaXNh
c3NlbWJseSgpCi0gICAgICAgIHx8IE9wdGlvbnM6OnNob3dERkdEaXNhc3NlbWJseSgpCi0gICAg
ICAgIHx8IE9wdGlvbnM6OmR1bXBCeXRlY29kZUF0REZHVGltZSgpCi0gICAgICAgIHx8IE9wdGlv
bnM6OnZlcmJvc2VDb21waWxhdGlvbigpCi0gICAgICAgIHx8IE9wdGlvbnM6OmxvZ0NvbXBpbGF0
aW9uQ2hhbmdlcygpCi0gICAgICAgIHx8IE9wdGlvbnM6OnZhbGlkYXRlR3JhcGgoKQotICAgICAg
ICB8fCBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKQotICAgICAgICB8fCBPcHRp
b25zOjp2ZXJib3NlT1NSKCkKLSAgICAgICAgfHwgT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9u
UXVldWUoKQotICAgICAgICB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKLSAgICAg
ICAgY29kZUJsb2NrLT5oYXNoKCk7Ci0gICAgCiAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdl
cygpKQogICAgICAgICBkYXRhTG9nKCJERkcoRHJpdmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9j
aywgIiwgbnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25D
b3VudCgpLCAiXG4iKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdGaXh1cFBoYXNlLmNwcAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDYgKzU2MSwx
MCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5i
b3hJZlByb2ZpdGFibGU8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAg
ICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8U3RyaW5nVXNlPihub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
UFJJbmZvLmgJKHJldmlzaW9uIDE1MTY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAg
ICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByID09IEludmFsaWRHUFJSZWc7
IH0KICAgICAKICAgICBHUFJSZWcgZ3ByKCkgY29uc3QgeyByZXR1cm4gbV9ncHI7IH0KKyAgICBH
UFJSZWcgcGF5bG9hZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9CiAgICAgCiBwcml2YXRl
OgogICAgIEdQUlJlZyBtX2dwcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
SklUQ29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHSklUQ29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTE2NDUpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDQwICsx
NTAsNjYgQEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgIH0K
IH0KIAotdm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQorU2lt
cGxlSnVtcFRhYmxlJiBKSVRDb21waWxlcjo6anVtcFRhYmxlKFN3aXRjaEtpbmQga2luZCwgdW5z
aWduZWQgaW5kZXgpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTd2l0Y2hJbW06
CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGlu
ZGV4KTsKKyAgICBjYXNlIFN3aXRjaENoYXI6CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+
Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKGluZGV4KTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIEpJ
VENvbXBpbGVyOjpudW1iZXJPZkp1bXBUYWJsZXMoU3dpdGNoS2luZCBraW5kKQoreworICAgIHN3
aXRjaCAoa2luZCkgeworICAgIGNhc2UgU3dpdGNoSW1tOgorICAgICAgICByZXR1cm4gbV9jb2Rl
QmxvY2stPm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpOworICAgIGNhc2UgU3dp
dGNoQ2hhcjoKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5udW1iZXJPZkNoYXJhY3RlclN3
aXRjaEp1bXBUYWJsZXMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmxpbmtTd2l0
Y2hlcyhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBTd2l0Y2hLaW5kIGtpbmQpCiB7Ci0gICAgLy8g
TGluayB0aGUgY29kZSwgcG9wdWxhdGUgZGF0YSBpbiBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmVz
LgotI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiSklUIGNvZGUg
Zm9yICVwIHN0YXJ0IGF0IFslcCwgJXApLiBTaXplID0gJXp1LlxuIiwgbV9jb2RlQmxvY2ssIGxp
bmtCdWZmZXIuZGVidWdBZGRyZXNzKCksIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRl
YnVnQWRkcmVzcygpKSArIGxpbmtCdWZmZXIuZGVidWdTaXplKCksIGxpbmtCdWZmZXIuZGVidWdT
aXplKCkpOwotI2VuZGlmCi0gICAgCiAgICAgQml0VmVjdG9yIHVzZWRKdW1wVGFibGVzOwogICAg
IGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLnNpemUoKTsgaS0tOykgewog
ICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gbV9ncmFwaC5tX3N3aXRjaERhdGFbaV07CiAgICAg
ICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgCi0gICAgICAgIC8vIENhc3QgdG8gaW50IHRvIGF2b2lkIHRhdXRvbG9naWNhbCBjb21w
YXJpc29uIHdhcm5pbmdzLgotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+
KGRhdGEua2luZCkgPT0gc3RhdGljX2Nhc3Q8aW50PihTd2l0Y2hJbW0pKTsKKyAgICAgICAgaWYg
KGRhdGEua2luZCAhPSBraW5kKQorICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAg
ICAgICB1c2VkSnVtcFRhYmxlcy5zZXQoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAg
U2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+aW1tZWRp
YXRlU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgIFNpbXBs
ZUp1bXBUYWJsZSYgdGFibGUgPSBqdW1wVGFibGUoa2luZCwgZGF0YS5zd2l0Y2hUYWJsZUluZGV4
KTsKICAgICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Js
b2NrSGVhZHNbZGF0YS5mYWxsVGhyb3VnaF0pOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB0
YWJsZS5jdGlPZmZzZXRzLnNpemUoKTsgai0tOykKICAgICAgICAgICAgIHRhYmxlLmN0aU9mZnNl
dHNbal0gPSB0YWJsZS5jdGlEZWZhdWx0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBkYXRh
LmNhc2VzLnNpemUoKTsgai0tOykgewogICAgICAgICAgICAgU3dpdGNoQ2FzZSYgbXlDYXNlID0g
ZGF0YS5jYXNlc1tqXTsKLSAgICAgICAgICAgIHRhYmxlLmN0aU9mZnNldHNbbXlDYXNlLnZhbHVl
LmFzSW50MzIoKSAtIHRhYmxlLm1pbl0gPQorICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tt
eUNhc2UudmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoKSAtIHRhYmxlLm1pbl0gPQogICAgICAgICAg
ICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldF0p
OwogICAgICAgICB9CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IG1fY29kZUJsb2NrLT5u
dW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKTsgaS0tOykgeworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IG51bWJlck9mSnVtcFRhYmxlcyhraW5kKTsgaS0tOykgewogICAgICAg
ICBpZiAodXNlZEp1bXBUYWJsZXMuZ2V0KGkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgIAotICAgICAgICBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGkpLmNs
ZWFyKCk7CisgICAgICAgIGp1bXBUYWJsZShraW5kLCBpKS5jbGVhcigpOwogICAgIH0KK30KKwor
dm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIC8v
IExpbmsgdGhlIGNvZGUsIHBvcHVsYXRlIGRhdGEgaW4gQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJl
cy4KKyNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0YUxvZ0YoIkpJVCBjb2Rl
IGZvciAlcCBzdGFydCBhdCBbJXAsICVwKS4gU2l6ZSA9ICV6dS5cbiIsIG1fY29kZUJsb2NrLCBs
aW5rQnVmZmVyLmRlYnVnQWRkcmVzcygpLCBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5k
ZWJ1Z0FkZHJlc3MoKSkgKyBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgpLCBsaW5rQnVmZmVyLmRlYnVn
U2l6ZSgpKTsKKyNlbmRpZgorCisgICAgbGlua1N3aXRjaGVzKGxpbmtCdWZmZXIsIFN3aXRjaElt
bSk7CisgICAgbGlua1N3aXRjaGVzKGxpbmtCdWZmZXIsIFN3aXRjaENoYXIpOwogCiAgICAgLy8g
TGluayBhbGwgY2FsbHMgb3V0IGZyb20gdGhlIEpJVCBjb2RlIHRvIHRoZWlyIHJlc3BlY3RpdmUg
ZnVuY3Rpb25zLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsg
KytpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAko
cmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21w
aWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NzIsNiArNDcyLDEwIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjb21waWxlRW50cnkoKTsKICAgICB2b2lkIGNvbXBpbGVCb2R5KCk7CiAgICAgdm9pZCBs
aW5rKExpbmtCdWZmZXImKTsKKyAgICAKKyAgICBTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZShT
d2l0Y2hLaW5kLCB1bnNpZ25lZCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZKdW1wVGFibGVzKFN3
aXRjaEtpbmQpOworICAgIHZvaWQgbGlua1N3aXRjaGVzKExpbmtCdWZmZXImLCBTd2l0Y2hLaW5k
KTsKIAogICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3Bl
Y3VsYXRpb25SZWNvdmVyeSopOwogICAgIHZvaWQgY29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
REZHTGF6eUpTVmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT3Bl
cmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0pTVmFsdWUg
TGF6eUpTVmFsdWU6OmdldFZhbHVlKFZNJiB2bSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgIGNhc2UgS25vd25WYWx1ZToKKyAgICAgICAgcmV0dXJuIHZhbHVlKCk7CisgICAg
Y2FzZSBTaW5nbGVDaGFyYWN0ZXJTdHJpbmc6CisgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJh
Y3RlclN0cmluZygmdm0sIHUuY2hhcmFjdGVyKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIFRyaVN0YXRlIGVxdWFsVG9TaW5nbGVDaGFyYWN0
ZXIoSlNWYWx1ZSB2YWx1ZSwgVUNoYXIgY2hhcmFjdGVyKQoreworICAgIGlmICghdmFsdWUuaXNT
dHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7CisgICAgCisgICAgSlNTdHJp
bmcqIGpzU3RyaW5nID0gYXNTdHJpbmcodmFsdWUpOworICAgIGlmIChqc1N0cmluZy0+bGVuZ3Ro
KCkgIT0gMSkKKyAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7CisgICAgCisgICAgY29uc3Qg
U3RyaW5nSW1wbCogc3RyaW5nID0ganNTdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpOworICAgIGlm
ICghc3RyaW5nKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICAKKyAgICByZXR1
cm4gdHJpU3RhdGUoc3RyaW5nLT5hdCgwKSA9PSBjaGFyYWN0ZXIpOworfQorCitUcmlTdGF0ZSBM
YXp5SlNWYWx1ZTo6c3RyaWN0RXF1YWwoY29uc3QgTGF6eUpTVmFsdWUmIG90aGVyKSBjb25zdAor
eworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBLbm93blZhbHVlOgorICAgICAgICBz
d2l0Y2ggKG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEtub3duVmFsdWU6CisgICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6cHVyZVN0cmljdEVxdWFsKHZhbHVlKCksIG90aGVyLnZhbHVl
KCkpOworICAgICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKKyAgICAgICAgICAgIHJl
dHVybiBlcXVhbFRvU2luZ2xlQ2hhcmFjdGVyKHZhbHVlKCksIG90aGVyLmNoYXJhY3RlcigpKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmlu
ZzoKKyAgICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBTaW5nbGVD
aGFyYWN0ZXJTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gdHJpU3RhdGUoY2hhcmFjdGVyKCkg
PT0gb3RoZXIuY2hhcmFjdGVyKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIG90aGVyLnN0cmljdEVxdWFsKCp0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBMYXp5
SlNWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgY2FzZSBLbm93blZhbHVlOgorICAgICAgICB2YWx1ZSgpLmR1bXAob3V0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgorICAgICAg
ICBvdXQucHJpbnQoIkxhenk6U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCIpOworICAgICAgICBvdXQu
cHJpbnRmKCIlMDRYIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlcigpKSk7CisgICAg
ICAgIG91dC5wcmludCgiIC8gIiwgU3RyaW5nSW1wbDo6dXRmOEZvckNoYXJhY3RlcnMoJnUuY2hh
cmFjdGVyLCAxKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNl
bmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdMYXp5SlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTGF6eUpTVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTGF6eUpTVmFsdWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdM
YXp5SlNWYWx1ZV9oCisjZGVmaW5lIERGR0xhenlKU1ZhbHVlX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIERGRyB7CisKKy8vIFJlcHJlc2VudHMgZWl0aGVyIGEgSlNWYWx1ZSwgb3IgZm9y
IEpTVmFsdWVzIHRoYXQgcmVxdWlyZSBhbGxvY2F0aW9uIGluIHRoZSBoZWFwLAorLy8gaXQgdGVs
bHMgeW91IGV2ZXJ5dGhpbmcgeW91J2QgbmVlZCB0byBrbm93IGluIG9yZGVyIHRvIGFsbG9jYXRl
IGl0LgorCitlbnVtIExhemluZXNzS2luZCB7CisgICAgS25vd25WYWx1ZSwKKyAgICBTaW5nbGVD
aGFyYWN0ZXJTdHJpbmcKK307CisKK2NsYXNzIExhenlKU1ZhbHVlIHsKK3B1YmxpYzoKKyAgICBM
YXp5SlNWYWx1ZShKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQorICAgICAgICA6IG1fa2luZChL
bm93blZhbHVlKQorICAgIHsKKyAgICAgICAgdS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1
ZSk7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBMYXp5SlNWYWx1ZSBzaW5nbGVDaGFyYWN0ZXJT
dHJpbmcoVUNoYXIgY2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgTGF6eUpTVmFsdWUgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOworICAgICAg
ICByZXN1bHQudS5jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgdHJ5R2V0VmFsdWUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fa2luZCA9PSBLbm93blZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVl
KCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUg
Z2V0VmFsdWUoVk0mKSBjb25zdDsKKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gS25vd25WYWx1ZSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUodS52YWx1ZSk7CisgICAgfQorICAgIAorICAgIFVDaGFyIGNoYXJh
Y3RlcigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IFNpbmdsZUNoYXJh
Y3RlclN0cmluZyk7CisgICAgICAgIHJldHVybiB1LmNoYXJhY3RlcjsKKyAgICB9CisgICAgCisg
ICAgVHJpU3RhdGUgc3RyaWN0RXF1YWwoY29uc3QgTGF6eUpTVmFsdWUmIG90aGVyKSBjb25zdDsK
KyAgICAKKyAgICB1bnNpZ25lZCBzd2l0Y2hMb29rdXBWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICAvLyBOQi4gTm90IGV2ZXJ5IGtpbmQgb2YgSlNWYWx1ZSB3aWxsIGJlIGFibGUgdG8gZ2l2
ZSB5b3UgYSBzd2l0Y2ggbG9va3VwCisgICAgICAgIC8vIHZhbHVlLCBhbmQgdGhpcyBtZXRob2Qg
d2lsbCBhc3NlcnQsIG9yIGRvIGJhZCB0aGluZ3MsIGlmIHlvdSB1c2UgaXQKKyAgICAgICAgLy8g
Zm9yIGEga2luZCBvZiB2YWx1ZSB0aGF0IGNhbid0LgorICAgICAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgICAgICBjYXNlIEtub3duVmFsdWU6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUoKS5h
c0ludDMyKCk7CisgICAgICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgorICAgICAgICAg
ICAgcmV0dXJuIGNoYXJhY3RlcigpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIEVuY29kZWRKU1Zh
bHVlIHZhbHVlOworICAgICAgICBVQ2hhciBjaGFyYWN0ZXI7CisgICAgfSB1OworICAgIExhemlu
ZXNzS2luZCBtX2tpbmQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRp
ZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xhenlKU1ZhbHVlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MTY0NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw3IEBACiAjaW5jbHVkZSAiREZHQWRqYWNlbmN5TGlzdC5oIgogI2luY2x1ZGUgIkRGR0Fy
cmF5TW9kZS5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0xhenlKU1Zh
bHVlLmgiCiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUu
aCIKICNpbmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKQEAgLTgzLDE4ICs4NCwxOSBA
QCBzdHJ1Y3QgU3dpdGNoQ2FzZSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBTd2l0Y2hDYXNl
KEpTVmFsdWUgdmFsdWUsIEJsb2NrSW5kZXggdGFyZ2V0KQorICAgIFN3aXRjaENhc2UoTGF6eUpT
VmFsdWUgdmFsdWUsIEJsb2NrSW5kZXggdGFyZ2V0KQogICAgICAgICA6IHZhbHVlKHZhbHVlKQog
ICAgICAgICAsIHRhcmdldCh0YXJnZXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBKU1ZhbHVl
IHZhbHVlOworICAgIExhenlKU1ZhbHVlIHZhbHVlOwogICAgIEJsb2NrSW5kZXggdGFyZ2V0Owog
fTsKIAogZW51bSBTd2l0Y2hLaW5kIHsKLSAgICBTd2l0Y2hJbW0KKyAgICBTd2l0Y2hJbW0sCisg
ICAgU3dpdGNoQ2hhcgogfTsKIAogc3RydWN0IFN3aXRjaERhdGEgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1
MTY0NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00NDQwLDkgKzQ0NDAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklU
OjpzcGVjdWxhdGUoTm9kZSosIEVkCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0U3dpdGNoSW1tSW50SnVtcChOb2RlKiwgU3dpdGNoRGF0YSogZGF0YSwgR1BSUmVnIHZhbHVl
LCBHUFJSZWcgc2NyYXRjaCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1w
KAorICAgIFN3aXRjaERhdGEqIGRhdGEsIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUsIEdQUlJlZyB2
YWx1ZSwgR1BSUmVnIHNjcmF0Y2gpCiB7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1f
aml0LmNvZGVCbG9jaygpLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFi
bGVJbmRleCk7CiAgICAgbV9qaXQuc3ViMzIoSW1tMzIodGFibGUubWluKSwgdmFsdWUpOwogICAg
IGFkZEJyYW5jaCgKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JF
cXVhbCwgdmFsdWUsIEltbTMyKHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpKSksCkBAIC00NDUzLDEz
ICs0NDUzLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW1JbnRKdW0KICAg
ICBkYXRhLT5kaWRVc2VKdW1wVGFibGUgPSB0cnVlOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklU
OjplbWl0U3dpdGNoSW1tSW50SnVtcCgKKyAgICBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcgdmFs
dWUsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIGVtaXRTd2l0Y2hJbnRKdW1wKAorICAgICAgICBk
YXRhLCBtX2ppdC5jb2RlQmxvY2soKS0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3
aXRjaFRhYmxlSW5kZXgpLAorICAgICAgICB2YWx1ZSwgc2NyYXRjaCk7Cit9CisKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSkK
IHsKICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgIGNhc2UgSW50
MzJVc2U6IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAg
ZW1pdFN3aXRjaEltbUludEp1bXAobm9kZSwgZGF0YSwgdmFsdWUuZ3ByKCksIHRlbXAuZ3ByKCkp
OworICAgICAgICBlbWl0U3dpdGNoSW1tSW50SnVtcChkYXRhLCB2YWx1ZS5ncHIoKSwgdGVtcC5n
cHIoKSk7CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBA
IC00NDc1LDcgKzQ0ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5v
ZGUqCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SW50
ID0gbV9qaXQuYnJhbmNoNjQoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmVsb3csIHZhbHVl
UmVncy5ncHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgZW1p
dFN3aXRjaEltbUludEp1bXAobm9kZSwgZGF0YSwgdmFsdWVSZWdzLmdwcigpLCBzY3JhdGNoKTsK
KyAgICAgICAgZW1pdFN3aXRjaEltbUludEp1bXAoZGF0YSwgdmFsdWVSZWdzLmdwcigpLCBzY3Jh
dGNoKTsKICAgICAgICAgbm90SW50LmxpbmsoJm1faml0KTsKICAgICAgICAgYWRkQnJhbmNoKAog
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KApAQCAtNDQ4OCw3ICs0NDk2LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbShOb2RlKgogI2Vsc2UKICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgbm90SW50ID0gbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBKSVRD
b21waWxlcjo6Tm90RXF1YWwsIHZhbHVlUmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFs
dWU6OkludDMyVGFnKSk7Ci0gICAgICAgIGVtaXRTd2l0Y2hJbW1JbnRKdW1wKG5vZGUsIGRhdGEs
IHZhbHVlUmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gpOworICAgICAgICBlbWl0U3dpdGNoSW1t
SW50SnVtcChkYXRhLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoKTsKICAgICAgICAg
bm90SW50LmxpbmsoJm1faml0KTsKICAgICAgICAgYWRkQnJhbmNoKAogICAgICAgICAgICAgbV9q
aXQuYnJhbmNoMzIoCkBAIC00NTEwLDYgKzQ1MTgsMTA1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRTd2l0Y2hJbW0oTm9kZSoKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVt
aXRTd2l0Y2hDaGFyU3RyaW5nSnVtcCgKKyAgICBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcgdmFs
dWUsIEdQUlJlZyBzY3JhdGNoKQoreworICAgIGFkZEJyYW5jaCgKKyAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZSwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3Ro
KCkpLAorICAgICAgICAgICAgVHJ1c3RlZEltbTMyKDEpKSwKKyAgICAgICAgZGF0YS0+ZmFsbFRo
cm91Z2gpOworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mo
dmFsdWUsIEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzY3JhdGNoKTsKKyAgICAKKyAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKKyAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAg
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaCksCisgICAg
ICAgICAgICB0aGlzLCBvcGVyYXRpb25SZXNvbHZlUm9wZSwgc2NyYXRjaCwgdmFsdWUpKTsKKyAg
ICAKKyAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gsIFN0
cmluZ0ltcGw6OmRhdGFPZmZzZXQoKSksIHZhbHVlKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBpczhCaXQgPSBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpOb25aZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoLCBTdHJp
bmdJbXBsOjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6
OmZsYWdJczhCaXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyh2YWx1ZSksIHNjcmF0Y2gpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHJl
YWR5ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgIGlzOEJpdC5saW5rKCZtX2ppdCk7CisgICAg
bV9qaXQubG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWUpLCBzY3JhdGNoKTsKKyAg
ICAKKyAgICByZWFkeS5saW5rKCZtX2ppdCk7CisgICAgZW1pdFN3aXRjaEludEp1bXAoCisgICAg
ICAgIGRhdGEsIG1faml0LmNvZGVCbG9jaygpLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoZGF0
YS0+c3dpdGNoVGFibGVJbmRleCksCisgICAgICAgIHNjcmF0Y2gsIHZhbHVlKTsKK30KKwordm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXIoTm9kZSogbm9kZSwgU3dpdGNoRGF0YSog
ZGF0YSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNh
c2UgU3RyaW5nVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAg
ICAKKyAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHRl
bXBHUFIgPSB0ZW1wLmdwcigpOworICAgICAgICAKKyAgICAgICAgb3AxLnVzZSgpOworCisgICAg
ICAgIERGR19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENl
bGwob3AxR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaFB0cigK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNl
dCgpKSwKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2pp
dC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBlbWl0
U3dpdGNoQ2hhclN0cmluZ0p1bXAoZGF0YSwgb3AxR1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgbm9S
ZXN1bHQobm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IHRlbXAodGhpcyk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlUmVncyBvcDFSZWdzID0gb3Ax
LmpzVmFsdWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAg
ICAgICAgCisgICAgICAgIG9wMS51c2UoKTsKKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgYWRkQnJhbmNoKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAorICAg
ICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFSZWdzLmdwcigpLCBHUFJJ
bmZvOjp0YWdNYXNrUmVnaXN0ZXIpLAorICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOwor
I2Vsc2UKKyAgICAgICAgYWRkQnJhbmNoKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisg
ICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFSZWdzLnRhZ0dQUigp
LCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLAorICAgICAgICAgICAgZGF0YS0+ZmFs
bFRocm91Z2gpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBhZGRCcmFuY2goCisgICAgICAg
ICAgICBtX2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5v
dEVxdWFsLAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMVJlZ3Mu
cGF5bG9hZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1
cmUuZ2V0KCkpKSwKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgCisg
ICAgICAgIGVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcChkYXRhLCBvcDFSZWdzLnBheWxvYWRHUFIo
KSwgdGVtcEdQUik7CisgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoKE5vZGUqIG5vZGUpCiB7
CiAgICAgU3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKQEAgLTQ1MTcsNiAr
NDYyNCwxMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoKE5vZGUqIG5vCiAgICAg
Y2FzZSBTd2l0Y2hJbW06IHsKICAgICAgICAgZW1pdFN3aXRjaEltbShub2RlLCBkYXRhKTsKICAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYXNlIFN3aXRjaENoYXI6IHsKKyAgICAgICAgZW1p
dFN3aXRjaENoYXIobm9kZSwgZGF0YSk7CisgICAgICAgIHJldHVybjsKICAgICB9IH0KICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODQ0LDggKzE4NDQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxO
b3QoTm9kZSopOwogICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwg
QmxvY2tJbmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbik7CiAgICAgdm9pZCBlbWl0QnJh
bmNoKE5vZGUqKTsKLSAgICB2b2lkIGVtaXRTd2l0Y2hJbW1JbnRKdW1wKE5vZGUqLCBTd2l0Y2hE
YXRhKiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCk7CisgICAgdm9pZCBlbWl0U3dpdGNo
SW50SnVtcChTd2l0Y2hEYXRhKiwgU2ltcGxlSnVtcFRhYmxlJiwgR1BSUmVnIHZhbHVlLCBHUFJS
ZWcgc2NyYXRjaCk7CisgICAgdm9pZCBlbWl0U3dpdGNoSW1tSW50SnVtcChTd2l0Y2hEYXRhKiwg
R1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCk7CiAgICAgdm9pZCBlbWl0U3dpdGNoSW1tKE5v
ZGUqLCBTd2l0Y2hEYXRhKik7CisgICAgdm9pZCBlbWl0U3dpdGNoQ2hhclN0cmluZ0p1bXAoU3dp
dGNoRGF0YSosIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gpOworICAgIHZvaWQgZW1pdFN3
aXRjaENoYXIoTm9kZSosIFN3aXRjaERhdGEqKTsKICAgICB2b2lkIGVtaXRTd2l0Y2goTm9kZSop
OwogICAgIAogICAgIHZvaWQgY29tcGlsZVRvU3RyaW5nT25DZWxsKE5vZGUqKTsKSW5kZXg6IFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxNTE2ODQpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDI1IEBACisyMDEzLTA2LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5j
b20+CisKKyAgICAgICAgZm91cnRoVGllcjogREZHIHNob3VsZCBoYXZlIHN3aXRjaF9jaGFyCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc3MTAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEkg
d2FudGVkIHRvIGJlIGFibGUgdG8gc2F5IHN0cmluZ0ltcGwtPmF0KGluZGV4KSwgYW5kIG5vdyBJ
IGNhbiEKKworICAgICAgICBBbHNvIG1hZGUgaXQgcG9zc2libGUgdG8gY29udmVydCBhIFVDaGFy
IHRvIGEgdXRmOCBDU3RyaW5nIHdpdGhvdXQKKyAgICAgICAgYWxsb2NhdGluZyBhIFN0cmluZ0lt
cGwuCisKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmNwcDoKKyAgICAgICAgKFdURjo6
U3RyaW5nSW1wbDo6dXRmOEltcGwpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKFdURjo6U3Ry
aW5nSW1wbDo6dXRmOEZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjp1
dGY4Rm9yUmFuZ2UpOgorICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAg
KFN0cmluZ0ltcGwpOgorICAgICAgICAoV1RGOjpTdHJpbmdJbXBsOjphdCk6CisgICAgICAgIChX
VEY6OlN0cmluZ0ltcGw6Om9wZXJhdG9yW10pOgorCiAyMDEzLTA2LTE1ICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogQWRkIENGRyBzaW1wbGlm
aWNhdGlvbiBmb3IgU3dpdGNoCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHJl
dmlzaW9uIDE1MTY0NSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5MDUsNiArMTkwNSw3MiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcHV0
VVRGOFRyaXBsZShjaGFyKiYgCiAgICAgKmJ1ZmZlcisrID0gc3RhdGljX2Nhc3Q8Y2hhcj4oKGNo
ICYgMHgzRikgfCAweDgwKTsKIH0KIAorYm9vbCBTdHJpbmdJbXBsOjp1dGY4SW1wbCgKKyAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBjaGFyKiYgYnVmZmVyLCBz
aXplX3QgYnVmZmVyU2l6ZSwgQ29udmVyc2lvbk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9
PSBTdHJpY3RDb252ZXJzaW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQpIHsK
KyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnNFbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3Ro
OworICAgICAgICBjaGFyKiBidWZmZXJFbmQgPSBidWZmZXIgKyBidWZmZXJTaXplOworICAgICAg
ICB3aGlsZSAoY2hhcmFjdGVycyA8IGNoYXJhY3RlcnNFbmQpIHsKKyAgICAgICAgICAgIC8vIFVz
ZSBzdHJpY3QgY29udmVyc2lvbiB0byBkZXRlY3QgdW5wYWlyZWQgc3Vycm9nYXRlcy4KKyAgICAg
ICAgICAgIENvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gY29udmVydFVURjE2VG9VVEY4KCZjaGFy
YWN0ZXJzLCBjaGFyYWN0ZXJzRW5kLCAmYnVmZmVyLCBidWZmZXJFbmQsIHRydWUpOworICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCAhPSB0YXJnZXRFeGhhdXN0ZWQpOworICAgICAgICAgICAgLy8g
Q29udmVyc2lvbiBmYWlscyB3aGVuIHRoZXJlIGlzIGFuIHVucGFpcmVkIHN1cnJvZ2F0ZS4KKyAg
ICAgICAgICAgIC8vIFB1dCByZXBsYWNlbWVudCBjaGFyYWN0ZXIgKFUrRkZGRCkgaW5zdGVhZCBv
ZiB0aGUgdW5wYWlyZWQgc3Vycm9nYXRlLgorICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBjb252
ZXJzaW9uT0spIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQoKDB4RDgwMCA8PSAqY2hhcmFjdGVy
cyAmJiAqY2hhcmFjdGVycyA8PSAweERGRkYpKTsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBz
aG91bGQgYmUgcm9vbSBsZWZ0LCBzaW5jZSBvbmUgVUNoYXIgaGFzbid0IGJlZW4gY29udmVydGVk
LgorICAgICAgICAgICAgICAgIEFTU0VSVCgoYnVmZmVyICsgMykgPD0gYnVmZmVyRW5kKTsKKyAg
ICAgICAgICAgICAgICBwdXRVVEY4VHJpcGxlKGJ1ZmZlciwgcmVwbGFjZW1lbnRDaGFyYWN0ZXIp
OworICAgICAgICAgICAgICAgICsrY2hhcmFjdGVyczsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIGJvb2wgc3RyaWN0ID0gbW9kZSA9PSBTdHJpY3RDb252
ZXJzaW9uOworICAgICAgICBjb25zdCBVQ2hhciogb3JpZ2luYWxDaGFyYWN0ZXJzID0gY2hhcmFj
dGVyczsKKyAgICAgICAgQ29udmVyc2lvblJlc3VsdCByZXN1bHQgPSBjb252ZXJ0VVRGMTZUb1VU
RjgoJmNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyBsZW5ndGgsICZidWZmZXIsIGJ1ZmZlciArIGJ1
ZmZlclNpemUsIHN0cmljdCk7CisgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gdGFyZ2V0RXhoYXVz
dGVkKTsgLy8gKGxlbmd0aCAqIDMpIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBhbnkgY29udmVy
c2lvbgorCisgICAgICAgIC8vIE9ubHkgcHJvZHVjZWQgZnJvbSBzdHJpY3QgY29udmVyc2lvbi4K
KyAgICAgICAgaWYgKHJlc3VsdCA9PSBzb3VyY2VJbGxlZ2FsKSB7CisgICAgICAgICAgICBBU1NF
UlQoc3RyaWN0KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIC8vIENoZWNrIGZvciBhbiB1bmNvbnZlcnRlZCBoaWdoIHN1cnJvZ2F0ZS4KKyAgICAgICAg
aWYgKHJlc3VsdCA9PSBzb3VyY2VFeGhhdXN0ZWQpIHsKKyAgICAgICAgICAgIGlmIChzdHJpY3Qp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgLy8gVGhpcyBzaG91
bGQgYmUgb25lIHVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlLiBUcmVhdCBpdCB0aGUgc2FtZQorICAg
ICAgICAgICAgLy8gd2FzIGFzIGFuIHVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlIHdvdWxkIGhhdmUg
YmVlbiBoYW5kbGVkIGluCisgICAgICAgICAgICAvLyB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nIHdp
dGggbm9uLXN0cmljdCBjb252ZXJzaW9uIC0gd2hpY2ggaXMKKyAgICAgICAgICAgIC8vIHRvIHNh
eSwgc2ltcGx5IGVuY29kZSBpdCB0byBVVEYtOC4KKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQo
CisgICAgICAgICAgICAgICAgb3JpZ2luYWxDaGFyYWN0ZXJzLCAoY2hhcmFjdGVycyArIDEpID09
IChvcmlnaW5hbENoYXJhY3RlcnMgKyBsZW5ndGgpKTsKKyAgICAgICAgICAgIEFTU0VSVCgoKmNo
YXJhY3RlcnMgPj0gMHhEODAwKSAmJiAoKmNoYXJhY3RlcnMgPD0gMHhEQkZGKSk7CisgICAgICAg
ICAgICAvLyBUaGVyZSBzaG91bGQgYmUgcm9vbSBsZWZ0LCBzaW5jZSBvbmUgVUNoYXIgaGFzbid0
IGJlZW4gY29udmVydGVkLgorICAgICAgICAgICAgQVNTRVJUKChidWZmZXIgKyAzKSA8PSAoYnVm
ZmVyICsgYnVmZmVyU2l6ZSkpOworICAgICAgICAgICAgcHV0VVRGOFRyaXBsZShidWZmZXIsICpj
aGFyYWN0ZXJzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworQ1N0cmluZyBTdHJpbmdJbXBsOjp1dGY4Rm9yQ2hhcmFjdGVycygKKyAgICBjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSBtb2RlKQorewor
ICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gQ1N0cmluZygiIiwgMCk7CisgICAgaWYg
KGxlbmd0aCA+IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkgLyAzKQorICAgICAgICBy
ZXR1cm4gQ1N0cmluZygpOworICAgIFZlY3RvcjxjaGFyLCAxMDI0PiBidWZmZXJWZWN0b3IobGVu
Z3RoICogMyk7CisgICAgY2hhciogYnVmZmVyID0gYnVmZmVyVmVjdG9yLmRhdGEoKTsKKyAgICBp
ZiAoIXV0ZjhJbXBsKGNoYXJhY3RlcnMsIGxlbmd0aCwgYnVmZmVyLCBidWZmZXJWZWN0b3Iuc2l6
ZSgpLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICByZXR1cm4gQ1N0cmlu
ZyhidWZmZXJWZWN0b3IuZGF0YSgpLCBidWZmZXIgLSBidWZmZXJWZWN0b3IuZGF0YSgpKTsKK30K
KwogQ1N0cmluZyBTdHJpbmdJbXBsOjp1dGY4Rm9yUmFuZ2UodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgsIENvbnZlcnNpb25Nb2RlIG1vZGUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKG9m
ZnNldCA8PSB0aGlzLT5sZW5ndGgoKSk7CkBAIC0xOTM1LDUxICsyMDAxLDggQEAgQ1N0cmluZyBT
dHJpbmdJbXBsOjp1dGY4Rm9yUmFuZ2UodW5zaWduZQogICAgICAgICBDb252ZXJzaW9uUmVzdWx0
IHJlc3VsdCA9IGNvbnZlcnRMYXRpbjFUb1VURjgoJmNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyBs
ZW5ndGgsICZidWZmZXIsIGJ1ZmZlciArIGJ1ZmZlclZlY3Rvci5zaXplKCkpOwogICAgICAgICBB
U1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0ICE9IHRhcmdldEV4aGF1c3RlZCk7IC8vIChsZW5n
dGggKiAzKSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYW55IGNvbnZlcnNpb24KICAgICB9IGVs
c2UgewotICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHRoaXMtPmNoYXJhY3RlcnMx
NigpICsgb2Zmc2V0OwotCi0gICAgICAgIGlmIChtb2RlID09IFN0cmljdENvbnZlcnNpb25SZXBs
YWNpbmdVbnBhaXJlZFN1cnJvZ2F0ZXNXaXRoRkZGRCkgewotICAgICAgICAgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnNFbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwotICAgICAgICAgICAgY2hh
ciogYnVmZmVyRW5kID0gYnVmZmVyICsgYnVmZmVyVmVjdG9yLnNpemUoKTsKLSAgICAgICAgICAg
IHdoaWxlIChjaGFyYWN0ZXJzIDwgY2hhcmFjdGVyc0VuZCkgewotICAgICAgICAgICAgICAgIC8v
IFVzZSBzdHJpY3QgY29udmVyc2lvbiB0byBkZXRlY3QgdW5wYWlyZWQgc3Vycm9nYXRlcy4KLSAg
ICAgICAgICAgICAgICBDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnRVVEYxNlRvVVRG
OCgmY2hhcmFjdGVycywgY2hhcmFjdGVyc0VuZCwgJmJ1ZmZlciwgYnVmZmVyRW5kLCB0cnVlKTsK
LSAgICAgICAgICAgICAgICBBU1NFUlQocmVzdWx0ICE9IHRhcmdldEV4aGF1c3RlZCk7Ci0gICAg
ICAgICAgICAgICAgLy8gQ29udmVyc2lvbiBmYWlscyB3aGVuIHRoZXJlIGlzIGFuIHVucGFpcmVk
IHN1cnJvZ2F0ZS4KLSAgICAgICAgICAgICAgICAvLyBQdXQgcmVwbGFjZW1lbnQgY2hhcmFjdGVy
IChVK0ZGRkQpIGluc3RlYWQgb2YgdGhlIHVucGFpcmVkIHN1cnJvZ2F0ZS4KLSAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0ICE9IGNvbnZlcnNpb25PSykgewotICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoKDB4RDgwMCA8PSAqY2hhcmFjdGVycyAmJiAqY2hhcmFjdGVycyA8PSAweERGRkYpKTsK
LSAgICAgICAgICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIHJvb20gbGVmdCwgc2luY2Ug
b25lIFVDaGFyIGhhc24ndCBiZWVuIGNvbnZlcnRlZC4KLSAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKChidWZmZXIgKyAzKSA8PSBidWZmZXJFbmQpOwotICAgICAgICAgICAgICAgICAgICBwdXRV
VEY4VHJpcGxlKGJ1ZmZlciwgcmVwbGFjZW1lbnRDaGFyYWN0ZXIpOwotICAgICAgICAgICAgICAg
ICAgICArK2NoYXJhY3RlcnM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgYm9vbCBzdHJpY3QgPSBtb2RlID09IFN0cmljdENv
bnZlcnNpb247Ci0gICAgICAgICAgICBDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnRV
VEYxNlRvVVRGOCgmY2hhcmFjdGVycywgY2hhcmFjdGVycyArIGxlbmd0aCwgJmJ1ZmZlciwgYnVm
ZmVyICsgYnVmZmVyVmVjdG9yLnNpemUoKSwgc3RyaWN0KTsKLSAgICAgICAgICAgIEFTU0VSVChy
ZXN1bHQgIT0gdGFyZ2V0RXhoYXVzdGVkKTsgLy8gKGxlbmd0aCAqIDMpIHNob3VsZCBiZSBzdWZm
aWNpZW50IGZvciBhbnkgY29udmVyc2lvbgotCi0gICAgICAgICAgICAvLyBPbmx5IHByb2R1Y2Vk
IGZyb20gc3RyaWN0IGNvbnZlcnNpb24uCi0gICAgICAgICAgICBpZiAocmVzdWx0ID09IHNvdXJj
ZUlsbGVnYWwpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoc3RyaWN0KTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQ1N0cmluZygpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBD
aGVjayBmb3IgYW4gdW5jb252ZXJ0ZWQgaGlnaCBzdXJyb2dhdGUuCi0gICAgICAgICAgICBpZiAo
cmVzdWx0ID09IHNvdXJjZUV4aGF1c3RlZCkgewotICAgICAgICAgICAgICAgIGlmIChzdHJpY3Qp
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBDU3RyaW5nKCk7Ci0gICAgICAgICAgICAgICAg
Ly8gVGhpcyBzaG91bGQgYmUgb25lIHVucGFpcmVkIGhpZ2ggc3Vycm9nYXRlLiBUcmVhdCBpdCB0
aGUgc2FtZQotICAgICAgICAgICAgICAgIC8vIHdhcyBhcyBhbiB1bnBhaXJlZCBoaWdoIHN1cnJv
Z2F0ZSB3b3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBpbgotICAgICAgICAgICAgICAgIC8vIHRoZSBt
aWRkbGUgb2YgYSBzdHJpbmcgd2l0aCBub24tc3RyaWN0IGNvbnZlcnNpb24gLSB3aGljaCBpcwot
ICAgICAgICAgICAgICAgIC8vIHRvIHNheSwgc2ltcGx5IGVuY29kZSBpdCB0byBVVEYtOC4KLSAg
ICAgICAgICAgICAgICBBU1NFUlQoKGNoYXJhY3RlcnMgKyAxKSA9PSAodGhpcy0+Y2hhcmFjdGVy
cygpICsgbGVuZ3RoKSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKCgqY2hhcmFjdGVycyA+PSAw
eEQ4MDApICYmICgqY2hhcmFjdGVycyA8PSAweERCRkYpKTsKLSAgICAgICAgICAgICAgICAvLyBU
aGVyZSBzaG91bGQgYmUgcm9vbSBsZWZ0LCBzaW5jZSBvbmUgVUNoYXIgaGFzbid0IGJlZW4gY29u
dmVydGVkLgotICAgICAgICAgICAgICAgIEFTU0VSVCgoYnVmZmVyICsgMykgPD0gKGJ1ZmZlciAr
IGJ1ZmZlclZlY3Rvci5zaXplKCkpKTsKLSAgICAgICAgICAgICAgICBwdXRVVEY4VHJpcGxlKGJ1
ZmZlciwgKmNoYXJhY3RlcnMpOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGlm
ICghdXRmOEltcGwodGhpcy0+Y2hhcmFjdGVyczE2KCkgKyBvZmZzZXQsIGxlbmd0aCwgYnVmZmVy
LCBidWZmZXJWZWN0b3Iuc2l6ZSgpLCBtb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBDU3RyaW5n
KCk7CiAgICAgfQogCiAgICAgcmV0dXJuIENTdHJpbmcoYnVmZmVyVmVjdG9yLmRhdGEoKSwgYnVm
ZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEoKSk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0
cmluZ0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
aAkocmV2aXNpb24gMTUxNjQ1KQorKysgU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUzNywxMCArNTM3LDEzIEBAIHB1YmxpYzoKICAgICBRU3RyaW5n
RGF0YSogcVN0cmluZ0RhdGEoKSB7IHJldHVybiBidWZmZXJPd25lcnNoaXAoKSA9PSBCdWZmZXJB
ZG9wdGVkUVN0cmluZyA/IG1fcVN0cmluZ0RhdGEgOiAwOyB9CiAjZW5kaWYKICAgICAKKyAgICBz
dGF0aWMgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENTdHJpbmcgdXRmOEZvckNoYXJhY3RlcnMoY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgPSBM
ZW5pZW50Q29udmVyc2lvbik7CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIENTdHJpbmcgdXRm
OEZvclJhbmdlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9k
ZSA9IExlbmllbnRDb252ZXJzaW9uKSBjb25zdDsKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
Q1N0cmluZyB1dGY4KENvbnZlcnNpb25Nb2RlID0gTGVuaWVudENvbnZlcnNpb24pIGNvbnN0Owog
CiBwcml2YXRlOgorICAgIHN0YXRpYyBXVEZfRVhQT1JUX1NUUklOR19BUEkgYm9vbCB1dGY4SW1w
bChjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBjaGFyKiYgYnVmZmVy
LCBzaXplX3QgYnVmZmVyU2l6ZSwgQ29udmVyc2lvbk1vZGUpOworICAgIAogICAgIC8vIFRoZSBo
aWdoIGJpdHMgb2YgJ2hhc2gnIGFyZSBhbHdheXMgZW1wdHksIGJ1dCB3ZSBwcmVmZXIgdG8gc3Rv
cmUgb3VyIGZsYWdzCiAgICAgLy8gaW4gdGhlIGxvdyBiaXRzIGJlY2F1c2UgaXQgbWFrZXMgdGhl
bSBzbGlnaHRseSBtb3JlIGVmZmljaWVudCB0byBhY2Nlc3MuCiAgICAgLy8gU28sIHdlIHNoaWZ0
IGxlZnQgYW5kIHJpZ2h0IHdoZW4gc2V0dGluZyBhbmQgZ2V0dGluZyBvdXIgaGFzaCBjb2RlLgpA
QCAtNjUzLDEzICs2NTYsMTQgQEAgcHVibGljOgogCiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJ
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3Vic3RyaW5nKHVuc2lnbmVkIHBvcywgdW5zaWduZWQg
bGVuID0gVUlOVF9NQVgpOwogCi0gICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBpKSBjb25z
dAorICAgIFVDaGFyIGF0KHVuc2lnbmVkIGkpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpIDwgbV9sZW5ndGgpOwogICAgICAgICBpZiAoaXM4
Qml0KCkpCiAgICAgICAgICAgICByZXR1cm4gbV9kYXRhOFtpXTsKICAgICAgICAgcmV0dXJuIG1f
ZGF0YTE2W2ldOwogICAgIH0KKyAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0
IHsgcmV0dXJuIGF0KGkpOyB9CiAgICAgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIFVDaGFyMzIgY2hh
cmFjdGVyU3RhcnRpbmdBdCh1bnNpZ25lZCk7CiAKICAgICBXVEZfRVhQT1JUX1NUUklOR19BUEkg
Ym9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKCk7Cg==
</data>
<flag name="review"
          id="226337"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>204925</attachid>
            <date>2013-06-18 11:05:55 -0700</date>
            <delta_ts>2013-06-18 11:05:55 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54763</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxNjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg1IEBA
CisyMDEzLTA2LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogREZHIHNob3VsZCBoYXZlIHN3aXRjaF9jaGFyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTc3MTAKKworICAgICAgICBSZXZpZXdl
ZCBieSBNaWNoYWVsIFNhYm9mZi4KKyAgICAgICAgCisgICAgICAgIEFkZCBvcF9zd2l0Y2hfY2hh
ci4gTW9zdCBvZiB0aGlzIGlzIGZhaXJseSBzaW1wbGUsIGV4Y2VwdCBmb3IgdGhlIHdob2xlCisg
ICAgICAgIExhenlKU1ZhbHVlIHRoaW5nLgorICAgICAgICAKKyAgICAgICAgSXQncyBsb25nIGJl
ZW4gdGhlIGNhc2UgdGhhdCBhbnl0aW1lIHlvdSB3YW50ZWQgdGhlIERGRyB0byBzcGVhayBvZiBh
IHN0cmluZworICAgICAgICB0aGF0IGRpZG4ndCBhcHBlYXIgaW4gdGhlIGNvbnN0YW50IHBvb2ws
IHlvdSB3b3VsZCBoYXZlIGEgaGFyZCB0aW1lIHNpbmNlCisgICAgICAgIHRoZSBERkcgaXNuJ3Qg
YWxsb3dlZCB0byBhbGxvY2F0ZSBpbiB0aGUgR0MgaGVhcC4gRm9yIGV4YW1wbGUsIGlmIHlvdSBr
bm93CisgICAgICAgIHRoYXQgeW91IHdhbnQgdG8gc3BlYWsgb2YgYSBzaW5nbGUgY2hhcmFjdGVy
IHN0cmluZywgeW91IG1pZ2h0IGZpbmQgdGhhdAorICAgICAgICB0aGUgb25lIHlvdSB3YW50ZWQg
dG8gc3BlYWsgb2YgaGFkIGJlZW4gR0MnZC4gQW5vdGhlciBleGFtcGxlIGlzIGlmIHlvdQorICAg
ICAgICB3YW50ZWQgdG8gYWRkIGNvbnN0YW50IGZvbGRpbmcgZm9yIHN0cmluZyBjb25jYXRlbmF0
aW9uIC0gc29tZXRoaW5nIHdlIGRvbid0CisgICAgICAgIGhhdmUgeWV0IGJ1dCB3aWxsIHdhbnQg
ZXZlbnR1YWxseS4KKyAgICAgICAgCisgICAgICAgIEkgc29sdmUgdGhpcyBieSBmaW5hbGx5IGFk
ZGluZyB0aGUgbm90aW9uIG9mIExhenlKU1ZhbHVlLiBJbiB0aGUgZnV0dXJlIEkKKyAgICAgICAg
YW50aWNpcGF0ZSB1c2luZyB0aGlzIGZvciBhIHZhcmlldHkgb2Ygc3RyaW5nLXJlbGF0ZWQgdGhp
bmdzLiBUaGUgaWRlYSBoZXJlCisgICAgICAgIGlzIHRoYXQgdGhlIERGRyBjYW4gZWl0aGVyIHNh
eSB0aGF0IGl0IGFscmVhZHkga25vd3Mgd2hhdCB0aGUgdmFsdWUgaXMsIG9yCisgICAgICAgIGl0
IGNhbiBkZXNjcmliZSB0aGUgdmFsdWUuIEZvciBleGFtcGxlLCBpbiB0aGlzIHBhdGNoIEkgbmVl
ZGVkIHRvIGJlIGFibGUgdG8KKyAgICAgICAgZGVzY3JpYmUgc2luZ2xlLWNoYXJhY3RlciBzdHJp
bmdzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJsb2Nr
KToKKyAgICAgICAgKiBieXRlY29kZS9KdW1wVGFibGUuaDoKKyAgICAgICAgKiBkZmcvREZHQmFj
a3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QmFja3dhcmRz
UHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVD
b2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmVTdGFja0VudHJ5KToKKyAgICAgICAg
KiBkZmcvREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Q0ZHU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAq
IGRmZy9ERkdEcml2ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNvbXBpbGUpOgorICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICAqIGRmZy9ERkdHUFJJbmZvLmg6CisgICAgICAgIChKU0M6
OkRGRzo6SlNWYWx1ZVJlZ3M6OnBheWxvYWRHUFIpOgorICAgICAgICAqIGRmZy9ERkdKSVRDb21w
aWxlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6SklUQ29tcGlsZXI6Omp1bXBUYWJsZSk6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpudW1iZXJPZkp1
bXBUYWJsZXMpOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rU3dpdGNoZXMp
OgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcv
REZHSklUQ29tcGlsZXIuaDoKKyAgICAgICAgKEpJVENvbXBpbGVyKToKKyAgICAgICAgKiBkZmcv
REZHTGF6eUpTVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6
OkRGRzo6TGF6eUpTVmFsdWU6OmdldFZhbHVlKToKKyAgICAgICAgKEpTQzo6REZHOjplcXVhbFRv
U2luZ2xlQ2hhcmFjdGVyKToKKyAgICAgICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6c3RyaWN0
RXF1YWwpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpkdW1wKToKKyAgICAgICAg
KiBkZmcvREZHTGF6eUpTVmFsdWUuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAo
TGF6eUpTVmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpMYXp5SlNWYWx1
ZSk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnNpbmdsZUNoYXJhY3RlclN0cmlu
Zyk6CisgICAgICAgIChKU0M6OkRGRzo6TGF6eUpTVmFsdWU6OnRyeUdldFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpMYXp5SlNWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpERkc6Okxh
enlKU1ZhbHVlOjpjaGFyYWN0ZXIpOgorICAgICAgICAoSlNDOjpERkc6OkxhenlKU1ZhbHVlOjpz
d2l0Y2hMb29rdXBWYWx1ZSk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpT
Qzo6REZHOjpTd2l0Y2hDYXNlOjpTd2l0Y2hDYXNlKToKKyAgICAgICAgKFN3aXRjaENhc2UpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbUludEp1bXApOgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbSk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hDaGFyKToKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaCk6CisgICAgICAgICogZGZn
L0RGR1NwZWN1bGF0aXZlSklULmg6CisgICAgICAgIChTcGVjdWxhdGl2ZUpJVCk6CisKIDIwMTMt
MDYtMTcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CiAKICAgICAgICAgRlRM
OiBBZGQgYW5vdGhlciB0ZW1wIHJlZ2lzdGVyIHJlZ1Q0IHRvIEpTSW50ZXJmYWNlSklUCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTUxNjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsOCBAQAogCQkwRjQ2ODBEMzE0QkJEMTY3MDBC
RkUyNzIgLyogTExJbnREYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjQ2ODBDRjE0QkJCM0QxMDBCRkUyNzIgLyogTExJbnREYXRhLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY0NjgwRDQxNEJC
RDI0OTAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8q
IEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICovOyB9OwogCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUy
NzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0
dXJuVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjQ2RTZDNTE3NkY4QTVFMDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QzIxNzZGOEE1
QjAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEY0NkU2QzYxNzZGOEE2
MDAwRTFGNzU1IC8qIERGR0xhenlKU1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2RTZDMzE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6eUpT
VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjQ2RTZCOTE3NkY4OURCMDBFMUY3NTUgLyogRlRMU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0NkU2QjcxNzZGODlEOTAwRTFG
NzU1IC8qIEZUTFN3aXRjaENhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkwRjQ5M0FGQTE2RDBDQUQzMDA4NDUwOEIgLyogU291cmNlUHJvdmlk
ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0
OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLzsgfTsKIAkJMEY0
RTFBMEUxNzNBRUREQzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY0RTFBMEMxNzNBRURE
QzAwN0VFMkQzIC8qIEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovOyB9OwpAQCAtMTE3Miw2
ICsxMTc0LDggQEAKIAkJMEY0NjgwQ0YxNEJCQjNEMTAwQkZFMjcyIC8qIExMSW50RGF0YS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMTEludERhdGEuaDsgcGF0aCA9IGxsaW50
L0xMSW50RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjQ2ODBEMDE0QkJD
NUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBIb3N0Q2FsbFJldHVyblZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0
dXJuVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSG9zdENhbGxSZXR1
cm5WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjQ2RTZDMjE3NkY4QTVC
MDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gREZHTGF6eUpTVmFsdWUuY3BwOyBwYXRoID0gZGZnL0RGR0xhenlKU1ZhbHVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY0NkU2QzMxNzZGOEE1QjAwRTFG
NzU1IC8qIERGR0xhenlKU1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0xhenlKU1ZhbHVlLmg7IHBhdGggPSBkZmcvREZHTGF6eUpTVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0NkU2QjcxNzZGODlEOTAwRTFGNzU1IC8qIEZUTFN3aXRj
aENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMU3dpdGNoQ2FzZS5o
OyBwYXRoID0gZnRsL0ZUTFN3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEY0OTNBRjgxNkQwQ0FEMTAwODQ1MDhCIC8qIFNvdXJjZVByb3ZpZGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNvdXJjZVByb3ZpZGVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY0RTFBMEMxNzNBRUREQzAwN0VFMkQzIC8qIEludGVu
ZGVkU3RydWN0dXJlQ2hhaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yOTk0LDYgKzI5OTgsOCBAQAogCQkJCTg2RUM5REJDMTMyOERGODIwMDJCMkFENyAvKiBE
RkdKSVRDb21waWxlci5oICovLAogCQkJCTBGREIyQ0Q1MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdK
SVRGaW5hbGl6ZXIuY3BwICovLAogCQkJCTBGREIyQ0Q2MTc0MkQ4MDQwMDdCM0MxQiAvKiBERkdK
SVRGaW5hbGl6ZXIuaCAqLywKKwkJCQkwRjQ2RTZDMjE3NkY4QTVCMDBFMUY3NTUgLyogREZHTGF6
eUpTVmFsdWUuY3BwICovLAorCQkJCTBGNDZFNkMzMTc2RjhBNUIwMEUxRjc1NSAvKiBERkdMYXp5
SlNWYWx1ZS5oICovLAogCQkJCTBGQjRCNTFDMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdMb25nTGl2
ZWRTdGF0ZS5jcHAgKi8sCiAJCQkJMEZCNEI1MUQxNkI2Mjc3MjAwM0Y2OTZCIC8qIERGR0xvbmdM
aXZlZFN0YXRlLmggKi8sCiAJCQkJMEYyQkRDM0QxNTIyODAxNzAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkR3JhcGguaCAqLywKQEAgLTM3OTEsNiArMzc5Nyw3IEBACiAJCQkJMEY3MTRDQTUxNkVBOTJG
MjAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMTM2RDREMTc0QUQ2OUUwMDc1QjM1NCAvKiBEZWZlckdDLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjVFRTRFOTE3NTQyNEFGMDA5QUU0MkQgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjQ2RTZDNjE3NkY4QTYwMDBFMUY3NTUgLyogREZHTGF6eUpT
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDZFNkI5MTc2Rjg5REIwMEUxRjc1NSAvKiBG
VExTd2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTQ0ODEsNiArNDQ4OCw3IEBACiAJCQkJQURFMzlG
RkYxNkREMTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1RUU0RTgxNzU0MjRBRjAwOUFFNDJEIC8qIEpT
Q1Rlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjQ2RTZDNTE3NkY4QTVF
MDBFMUY3NTUgLyogREZHTGF6eUpTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJ
cnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTUx
Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU2NSw3ICs1NjUsNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVtcEJ5dGVj
b2RlKFByaW50U3RyZWFtCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIEFTU0VSVCghKChpICsgbV9yYXJlRGF0YS0+bV9jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFi
bGVzW2ldLm1pbikgJiB+MHhGRkZGKSk7CiAgICAgICAgICAgICAgICAgVUNoYXIgY2ggPSBzdGF0
aWNfY2FzdDxVQ2hhcj4oZW50cnkgKyBtX3JhcmVEYXRhLT5tX2NoYXJhY3RlclN3aXRjaEp1bXBU
YWJsZXNbaV0ubWluKTsKLSAgICAgICAgICAgICAgICBvdXQucHJpbnRmKCJcdFx0XCIlc1wiID0+
ICUwNGRcbiIsIFN0cmluZygmY2gsIDEpLnV0ZjgoKS5kYXRhKCksICppdGVyKTsKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnRmKCJcdFx0XCIlc1wiID0+ICUwNGRcbiIsIFN0cmluZ0ltcGw6OnV0
ZjhGb3JDaGFyYWN0ZXJzKCZjaCwgMSkuZGF0YSgpLCAqaXRlcik7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIgICAgICB9XG4iKTsKICAgICAgICAgICAgICsraTsKQEAg
LTE4NDMsNiArMTg0MywyMCBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxl
KiBvCiAgICAgb3B0aW1pemVBZnRlcldhcm1VcCgpOwogICAgIGppdEFmdGVyV2FybVVwKCk7CiAK
KyAgICAvLyBJZiB0aGUgY29uY3VycmVudCB0aHJlYWQgd2lsbCB3YW50IHRoZSBjb2RlIGJsb2Nr
J3MgaGFzaCwgdGhlbiBjb21wdXRlIGl0IGhlcmUKKyAgICAvLyBzeW5jaHJvbm91c2x5LgorICAg
IGlmIChPcHRpb25zOjpzaG93RGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpzaG93
REZHRGlzYXNzZW1ibHkoKQorICAgICAgICB8fCBPcHRpb25zOjpkdW1wQnl0ZWNvZGVBdERGR1Rp
bWUoKQorICAgICAgICB8fCBPcHRpb25zOjp2ZXJib3NlQ29tcGlsYXRpb24oKQorICAgICAgICB8
fCBPcHRpb25zOjpsb2dDb21waWxhdGlvbkNoYW5nZXMoKQorICAgICAgICB8fCBPcHRpb25zOjp2
YWxpZGF0ZUdyYXBoKCkKKyAgICAgICAgfHwgT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBo
YXNlKCkKKyAgICAgICAgfHwgT3B0aW9uczo6dmVyYm9zZU9TUigpCisgICAgICAgIHx8IE9wdGlv
bnM6OnZlcmJvc2VDb21waWxhdGlvblF1ZXVlKCkKKyAgICAgICAgfHwgT3B0aW9uczo6cmVwb3J0
Q29tcGlsZVRpbWVzKCkpCisgICAgICAgIGhhc2goKTsKKwogICAgIGlmIChPcHRpb25zOjpkdW1w
R2VuZXJhdGVkQnl0ZWNvZGVzKCkpCiAgICAgICAgIGR1bXBCeXRlY29kZSgpOwogICAgIG1fdm0t
PmZpbmlzaGVkQ29tcGlsaW5nKHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0p1bXBUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9KdW1wVGFibGUuaAkocmV2aXNpb24gMTUxNjg1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IENhbWVyb24gWndhcmljaCA8Y3d6d2FyaWNo
QHV3YXRlcmxvby5jYT4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTUxNjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYWNr
d2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4LDE0ICszNDgs
MTcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTd2l0Y2g6IHsKICAgICAgICAgICAgIFN3aXRj
aERhdGEqIGRhdGEgPSBub2RlLT5zd2l0Y2hEYXRhKCk7CiAgICAgICAgICAgICBzd2l0Y2ggKGRh
dGEtPmtpbmQpIHsKLSAgICAgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CisgICAgICAgICAgICBj
YXNlIFN3aXRjaEltbToKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjogewogICAgICAgICAg
ICAgICAgIC8vIFdlIGRvbid0IG5lZWQgTm9kZU5lZWRzTmVnWmVybyBiZWNhdXNlIGlmIHRoZSBj
YXNlcyBhcmUgYWxsIGludGVnZXJzCi0gICAgICAgICAgICAgICAgLy8gdGhlbiAtMCBhbmQgMCBh
cmUgdHJlYXRlZCB0aGUgc2FtZS4gIFdlIGRvbid0IG5lZWQgTm9kZVVzZWRBc090aGVyCi0gICAg
ICAgICAgICAgICAgLy8gYmVjYXVzZSBpZiBhbGwgb2YgdGhlIGNhc2VzIGFyZSBpbnRlZ2VycyB0
aGVuIE5hTiBhbmQgdW5kZWZpbmVkIGFyZQotICAgICAgICAgICAgICAgIC8vIHRyZWF0ZWQgdGhl
IHNhbWUuCisgICAgICAgICAgICAgICAgLy8gb3Igc3RyaW5ncyB0aGVuIC0wIGFuZCAwIGFyZSB0
cmVhdGVkIHRoZSBzYW1lLiAgV2UgZG9uJ3QgbmVlZAorICAgICAgICAgICAgICAgIC8vIE5vZGVV
c2VkQXNPdGhlciBiZWNhdXNlIGlmIGFsbCBvZiB0aGUgY2FzZXMgYXJlIGludGVnZXJzIG9yCisg
ICAgICAgICAgICAgICAgLy8gc2luZ2xlLWNoYXJhY3RlciBzdHJpbmdzIHRoZW4gTmFOIGFuZCB1
bmRlZmluZWQgYXJlIHRyZWF0ZWQgdGhlIHNhbWUKKyAgICAgICAgICAgICAgICAvLyAoaS5lLiB0
aGV5IHdpbGwgdGFrZSBkZWZhdWx0KS4KICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZDEoKS0+
bWVyZ2VGbGFncyhOb2RlVXNlZEFzTnVtYmVyIHwgTm9kZVVzZWRBc0ludCk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZp
c2lvbiAxNTE2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAyOCw2ICsxMDI4LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgVmVjdG9yPHVuc2lnbmVkPiBtX2NvbnN0YW50UmVtYXA7CiAgICAgICAgIFZlY3Rvcjx1
bnNpZ25lZD4gbV9jb25zdGFudEJ1ZmZlclJlbWFwOwogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+
IG1fc3dpdGNoSW1tUmVtYXA7CisgICAgICAgIFZlY3Rvcjx1bnNpZ25lZD4gbV9zd2l0Y2hDaGFy
UmVtYXA7CiAgICAgICAgIAogICAgICAgICAvLyBCbG9ja3MgaW50cm9kdWNlZCBieSB0aGlzIGNv
ZGUgYmxvY2ssIHdoaWNoIG5lZWQgc3VjY2Vzc29yIGxpbmtpbmcuCiAgICAgICAgIC8vIE1heSBp
bmNsdWRlIHVwIHRvIG9uZSBiYXNpYyBibG9jayB0aGF0IGluY2x1ZGVzIHRoZSBjb250aW51YXRp
b24gYWZ0ZXIKQEAgLTI3NjUsNiArMjc2NiwyNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFN3aXRjaCwgT3BJbmZvKCZt
X2dyYXBoLm1fc3dpdGNoRGF0YS5sYXN0KCkpLCBnZXQoY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZCkpOwogICAgICAgICAgICAgTEFTVF9PUENPREUob3Bfc3dpdGNoX2ltbSk7CiAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOiB7CisgICAg
ICAgICAgICBTd2l0Y2hEYXRhIGRhdGE7CisgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hD
aGFyOworICAgICAgICAgICAgZGF0YS5zd2l0Y2hUYWJsZUluZGV4ID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9zd2l0Y2hDaGFyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZF07Cisg
ICAgICAgICAgICBkYXRhLmZhbGxUaHJvdWdoID0gbV9jdXJyZW50SW5kZXggKyBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICAgICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJs
ZSA9IG1fY29kZUJsb2NrLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJs
ZUluZGV4KTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0YWJsZS5icmFu
Y2hPZmZzZXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCF0YWJsZS5icmFu
Y2hPZmZzZXRzW2ldKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2N1cnJlbnRJbmRleCArIHRhYmxlLmJyYW5jaE9mZnNl
dHNbaV07CisgICAgICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBkYXRhLmZhbGxUaHJvdWdoKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBkYXRhLmNhc2Vz
LmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgU3dpdGNoQ2FzZShMYXp5SlNWYWx1ZTo6c2lu
Z2xlQ2hhcmFjdGVyU3RyaW5nKHRhYmxlLm1pbiArIGkpLCB0YXJnZXQpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1fZ3JhcGgubV9zd2l0Y2hEYXRhLmFwcGVuZChkYXRhKTsKKyAgICAg
ICAgICAgIGFkZFRvR3JhcGgoU3dpdGNoLCBPcEluZm8oJm1fZ3JhcGgubV9zd2l0Y2hEYXRhLmxh
c3QoKSksIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgICAgICAg
ICBMQVNUX09QQ09ERShvcF9zd2l0Y2hfY2hhcik7CisgICAgICAgIH0KIAogICAgICAgICBjYXNl
IG9wX3JldDoKICAgICAgICAgICAgIGZsdXNoQXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMo
KTsKQEAgLTMyNjMsNiArMzI4NCw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5
OjpJbmxpbmUKICAgICAgICAgbV9jb25zdGFudFJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJl
ck9mQ29uc3RhbnRSZWdpc3RlcnMoKSk7CiAgICAgICAgIG1fY29uc3RhbnRCdWZmZXJSZW1hcC5y
ZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkNvbnN0YW50QnVmZmVycygpKTsKICAgICAgICAgbV9z
d2l0Y2hJbW1SZW1hcC5yZXNpemUoY29kZUJsb2NrLT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1
bXBUYWJsZXMoKSk7CisgICAgICAgIG1fc3dpdGNoQ2hhclJlbWFwLnJlc2l6ZShjb2RlQmxvY2st
Pm51bWJlck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpKTsKIAogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZJZGVudGlmaWVycygpOyArK2kpIHsK
ICAgICAgICAgICAgIFN0cmluZ0ltcGwqIHJlcCA9IGNvZGVCbG9jay0+aWRlbnRpZmllcihpKS5p
bXBsKCk7CkBAIC0zMzA3LDYgKzMzMjksMTAgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNr
RW50cnk6OklubGluZQogICAgICAgICAgICAgbV9zd2l0Y2hJbW1SZW1hcFtpXSA9IGJ5dGVDb2Rl
UGFyc2VyLT5tX2NvZGVCbG9jay0+bnVtYmVyT2ZJbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzKCk7
CiAgICAgICAgICAgICBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPmFkZEltbWVkaWF0ZVN3
aXRjaEp1bXBUYWJsZSgpID0gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUoaSk7
CiAgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9jay0+
bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGVzKCk7ICsraSkgeworICAgICAgICAgICAg
bV9zd2l0Y2hDaGFyUmVtYXBbaV0gPSBieXRlQ29kZVBhcnNlci0+bV9jb2RlQmxvY2stPm51bWJl
ck9mQ2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcygpOworICAgICAgICAgICAgYnl0ZUNvZGVQYXJz
ZXItPm1fY29kZUJsb2NrLT5hZGRDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoKSA9IGNvZGVCbG9j
ay0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKGkpOworICAgICAgICB9CiAgICAgICAgIG1fY2Fs
bHNpdGVCbG9ja0hlYWROZWVkc0xpbmtpbmcgPSB0cnVlOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IC8vIE1hY2hpbmUgY29kZSBibG9jayBjYXNlLgpAQCAtMzMyMiw2ICszMzQ4LDcgQEAgQnl0ZUNv
ZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICBtX2NvbnN0YW50UmVt
YXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDb25zdGFudFJlZ2lzdGVycygpKTsKICAgICAg
ICAgbV9jb25zdGFudEJ1ZmZlclJlbWFwLnJlc2l6ZShjb2RlQmxvY2stPm51bWJlck9mQ29uc3Rh
bnRCdWZmZXJzKCkpOwogICAgICAgICBtX3N3aXRjaEltbVJlbWFwLnJlc2l6ZShjb2RlQmxvY2st
Pm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgbV9zd2l0Y2hD
aGFyUmVtYXAucmVzaXplKGNvZGVCbG9jay0+bnVtYmVyT2ZDaGFyYWN0ZXJTd2l0Y2hKdW1wVGFi
bGVzKCkpOwogICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVy
T2ZJZGVudGlmaWVycygpOyArK2kpCiAgICAgICAgICAgICBtX2lkZW50aWZpZXJSZW1hcFtpXSA9
IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2NrLT5udW1iZXJPZkNv
bnN0YW50UmVnaXN0ZXJzKCk7ICsraSkKQEAgLTMzMzAsNiArMzM1Nyw4IEBAIEJ5dGVDb2RlUGFy
c2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxpbmUKICAgICAgICAgICAgIG1fY29uc3RhbnRCdWZm
ZXJSZW1hcFtpXSA9IGk7CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29kZUJsb2Nr
LT5udW1iZXJPZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKTsgKytpKQogICAgICAgICAgICAg
bV9zd2l0Y2hJbW1SZW1hcFtpXSA9IGk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y29kZUJsb2NrLT5udW1iZXJPZkNoYXJhY3RlclN3aXRjaEp1bXBUYWJsZXMoKTsgKytpKQorICAg
ICAgICAgICAgbV9zd2l0Y2hDaGFyUmVtYXBbaV0gPSBpOwogICAgICAgICBtX2NhbGxzaXRlQmxv
Y2tIZWFkTmVlZHNMaW5raW5nID0gZmFsc2U7CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2Uu
Y3BwCShyZXZpc2lvbiAxNTE2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgVHJpU3RhdGUgZm91bmQgPSBGYWxz
ZVRyaVN0YXRlOwogICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tJbmRleCB0YXJnZXRCbG9j
a0luZGV4ID0gTm9CbG9jazsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGRhdGEtPmNhc2VzLnNpemUoKTsgZm91bmQgPT0gRmFsc2VUcmlTdGF0ZSAmJiBpLS07KSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBKU1ZhbHVlOjpwdXJlU3RyaWN0
RXF1YWwodmFsdWUsIGRhdGEtPmNhc2VzW2ldLnZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmb3VuZCA9IGRhdGEtPmNhc2VzW2ldLnZhbHVlLnN0cmljdEVxdWFsKHZhbHVlKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZm91bmQgPT0gVHJ1ZVRyaVN0YXRlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCbG9ja0luZGV4ID0gZGF0YS0+
Y2FzZXNbaV0udGFyZ2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTUx
Njg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxp
dHlMZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfdHlwZW9mOgogICAgIGNhc2Ugb3BfdG9fbnVt
YmVyOgogICAgIGNhc2Ugb3Bfc3dpdGNoX2ltbToKKyAgICBjYXNlIG9wX3N3aXRjaF9jaGFyOgog
ICAgIGNhc2Ugb3BfaW46CiAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKICAgICBjYXNlIG9w
X3B1dF90b19zY29wZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJpdmVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RyaXZlci5j
cHAJKHJldmlzaW9uIDE1MTY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRHJp
dmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMjAgKzY3LDYgQEAgc3RhdGljIENvbXBpbGF0
aW9uUmVzdWx0IGNvbXBpbGUoQ29tcGlsZQogICAgIGlmICghT3B0aW9uczo6dXNlREZHSklUKCkg
fHwgIU1hY3JvQXNzZW1ibGVyOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSkKICAgICAgICAgcmV0
dXJuIENvbXBpbGF0aW9uRmFpbGVkOwogICAgIAotICAgIC8vIElmIHRoZSBjb25jdXJyZW50IHRo
cmVhZCB3aWxsIHdhbnQgdGhlIGNvZGUgYmxvY2sncyBoYXNoLCB0aGVuIGNvbXB1dGUgaXQgaGVy
ZQotICAgIC8vIHN5bmNocm9ub3VzbHkuCi0gICAgaWYgKE9wdGlvbnM6OnNob3dEaXNhc3NlbWJs
eSgpCi0gICAgICAgIHx8IE9wdGlvbnM6OnNob3dERkdEaXNhc3NlbWJseSgpCi0gICAgICAgIHx8
IE9wdGlvbnM6OmR1bXBCeXRlY29kZUF0REZHVGltZSgpCi0gICAgICAgIHx8IE9wdGlvbnM6OnZl
cmJvc2VDb21waWxhdGlvbigpCi0gICAgICAgIHx8IE9wdGlvbnM6OmxvZ0NvbXBpbGF0aW9uQ2hh
bmdlcygpCi0gICAgICAgIHx8IE9wdGlvbnM6OnZhbGlkYXRlR3JhcGgoKQotICAgICAgICB8fCBP
cHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKQotICAgICAgICB8fCBPcHRpb25zOjp2
ZXJib3NlT1NSKCkKLSAgICAgICAgfHwgT3B0aW9uczo6dmVyYm9zZUNvbXBpbGF0aW9uUXVldWUo
KQotICAgICAgICB8fCBPcHRpb25zOjpyZXBvcnRDb21waWxlVGltZXMoKSkKLSAgICAgICAgY29k
ZUJsb2NrLT5oYXNoKCk7Ci0gICAgCiAgICAgaWYgKGxvZ0NvbXBpbGF0aW9uQ2hhbmdlcygpKQog
ICAgICAgICBkYXRhTG9nKCJERkcoRHJpdmVyKSBjb21waWxpbmcgIiwgKmNvZGVCbG9jaywgIiwg
bnVtYmVyIG9mIGluc3RydWN0aW9ucyA9ICIsIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25Db3VudCgp
LCAiXG4iKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1
cFBoYXNlLmNwcAkocmV2aXNpb24gMTUxNjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdGaXh1cFBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYxLDYgKzU2MSwxMCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3Vs
YXRlSW50ZWdlcigpKQogICAgICAgICAgICAgICAgICAgICBzZXRVc2VLaW5kQW5kVW5ib3hJZlBy
b2ZpdGFibGU8SW50MzJVc2U+KG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKKyAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZVN0cmluZygpKQorICAgICAgICAgICAgICAgICAg
ICBzZXRVc2VLaW5kQW5kVW5ib3hJZlByb2ZpdGFibGU8U3RyaW5nVXNlPihub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJ
bmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZv
LmgJKHJldmlzaW9uIDE1MTY4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR1BS
SW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICBib29s
IG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByID09IEludmFsaWRHUFJSZWc7IH0KICAg
ICAKICAgICBHUFJSZWcgZ3ByKCkgY29uc3QgeyByZXR1cm4gbV9ncHI7IH0KKyAgICBHUFJSZWcg
cGF5bG9hZEdQUigpIGNvbnN0IHsgcmV0dXJuIG1fZ3ByOyB9CiAgICAgCiBwcml2YXRlOgogICAg
IEdQUlJlZyBtX2dwcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29t
cGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklU
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNTE2ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDQwICsxNTAsNjYg
QEAgdm9pZCBKSVRDb21waWxlcjo6Y29tcGlsZUV4Y2VwdGlvbkhhbmRsZQogICAgIH0KIH0KIAot
dm9pZCBKSVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQorU2ltcGxlSnVt
cFRhYmxlJiBKSVRDb21waWxlcjo6anVtcFRhYmxlKFN3aXRjaEtpbmQga2luZCwgdW5zaWduZWQg
aW5kZXgpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTd2l0Y2hJbW06CisgICAg
ICAgIHJldHVybiBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGluZGV4KTsK
KyAgICBjYXNlIFN3aXRjaENoYXI6CisgICAgICAgIHJldHVybiBtX2NvZGVCbG9jay0+Y2hhcmFj
dGVyU3dpdGNoSnVtcFRhYmxlKGluZGV4KTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIEpJVENvbXBp
bGVyOjpudW1iZXJPZkp1bXBUYWJsZXMoU3dpdGNoS2luZCBraW5kKQoreworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgU3dpdGNoSW1tOgorICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2st
Pm51bWJlck9mSW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlcygpOworICAgIGNhc2UgU3dpdGNoQ2hh
cjoKKyAgICAgICAgcmV0dXJuIG1fY29kZUJsb2NrLT5udW1iZXJPZkNoYXJhY3RlclN3aXRjaEp1
bXBUYWJsZXMoKTsKKyAgICB9Cit9CisKK3ZvaWQgSklUQ29tcGlsZXI6OmxpbmtTd2l0Y2hlcyhM
aW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBTd2l0Y2hLaW5kIGtpbmQpCiB7Ci0gICAgLy8gTGluayB0
aGUgY29kZSwgcG9wdWxhdGUgZGF0YSBpbiBDb2RlQmxvY2sgZGF0YSBzdHJ1Y3R1cmVzLgotI2lm
IERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICBkYXRhTG9nRigiSklUIGNvZGUgZm9yICVw
IHN0YXJ0IGF0IFslcCwgJXApLiBTaXplID0gJXp1LlxuIiwgbV9jb2RlQmxvY2ssIGxpbmtCdWZm
ZXIuZGVidWdBZGRyZXNzKCksIHN0YXRpY19jYXN0PGNoYXIqPihsaW5rQnVmZmVyLmRlYnVnQWRk
cmVzcygpKSArIGxpbmtCdWZmZXIuZGVidWdTaXplKCksIGxpbmtCdWZmZXIuZGVidWdTaXplKCkp
OwotI2VuZGlmCi0gICAgCiAgICAgQml0VmVjdG9yIHVzZWRKdW1wVGFibGVzOwogICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fZ3JhcGgubV9zd2l0Y2hEYXRhLnNpemUoKTsgaS0tOykgewogICAgICAg
ICBTd2l0Y2hEYXRhJiBkYXRhID0gbV9ncmFwaC5tX3N3aXRjaERhdGFbaV07CiAgICAgICAgIGlm
ICghZGF0YS5kaWRVc2VKdW1wVGFibGUpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
Ci0gICAgICAgIC8vIENhc3QgdG8gaW50IHRvIGF2b2lkIHRhdXRvbG9naWNhbCBjb21wYXJpc29u
IHdhcm5pbmdzLgotICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KGRhdGEu
a2luZCkgPT0gc3RhdGljX2Nhc3Q8aW50PihTd2l0Y2hJbW0pKTsKKyAgICAgICAgaWYgKGRhdGEu
a2luZCAhPSBraW5kKQorICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICB1
c2VkSnVtcFRhYmxlcy5zZXQoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgU2ltcGxl
SnVtcFRhYmxlJiB0YWJsZSA9Ci0gICAgICAgICAgICBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dp
dGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgIFNpbXBsZUp1bXBU
YWJsZSYgdGFibGUgPSBqdW1wVGFibGUoa2luZCwgZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKICAg
ICAgICAgdGFibGUuY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVh
ZHNbZGF0YS5mYWxsVGhyb3VnaF0pOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSB0YWJsZS5j
dGlPZmZzZXRzLnNpemUoKTsgai0tOykKICAgICAgICAgICAgIHRhYmxlLmN0aU9mZnNldHNbal0g
PSB0YWJsZS5jdGlEZWZhdWx0OwogICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBkYXRhLmNhc2Vz
LnNpemUoKTsgai0tOykgewogICAgICAgICAgICAgU3dpdGNoQ2FzZSYgbXlDYXNlID0gZGF0YS5j
YXNlc1tqXTsKLSAgICAgICAgICAgIHRhYmxlLmN0aU9mZnNldHNbbXlDYXNlLnZhbHVlLmFzSW50
MzIoKSAtIHRhYmxlLm1pbl0gPQorICAgICAgICAgICAgdGFibGUuY3RpT2Zmc2V0c1tteUNhc2Uu
dmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoKSAtIHRhYmxlLm1pbl0gPQogICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldF0pOwogICAg
ICAgICB9CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IG1fY29kZUJsb2NrLT5udW1iZXJP
ZkltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZXMoKTsgaS0tOykgeworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IG51bWJlck9mSnVtcFRhYmxlcyhraW5kKTsgaS0tOykgewogICAgICAgICBpZiAo
dXNlZEp1bXBUYWJsZXMuZ2V0KGkpKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAot
ICAgICAgICBtX2NvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGkpLmNsZWFyKCk7
CisgICAgICAgIGp1bXBUYWJsZShraW5kLCBpKS5jbGVhcigpOwogICAgIH0KK30KKwordm9pZCBK
SVRDb21waWxlcjo6bGluayhMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKQoreworICAgIC8vIExpbmsg
dGhlIGNvZGUsIHBvcHVsYXRlIGRhdGEgaW4gQ29kZUJsb2NrIGRhdGEgc3RydWN0dXJlcy4KKyNp
ZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgZGF0YUxvZ0YoIkpJVCBjb2RlIGZvciAl
cCBzdGFydCBhdCBbJXAsICVwKS4gU2l6ZSA9ICV6dS5cbiIsIG1fY29kZUJsb2NrLCBsaW5rQnVm
ZmVyLmRlYnVnQWRkcmVzcygpLCBzdGF0aWNfY2FzdDxjaGFyKj4obGlua0J1ZmZlci5kZWJ1Z0Fk
ZHJlc3MoKSkgKyBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgpLCBsaW5rQnVmZmVyLmRlYnVnU2l6ZSgp
KTsKKyNlbmRpZgorCisgICAgbGlua1N3aXRjaGVzKGxpbmtCdWZmZXIsIFN3aXRjaEltbSk7Cisg
ICAgbGlua1N3aXRjaGVzKGxpbmtCdWZmZXIsIFN3aXRjaENoYXIpOwogCiAgICAgLy8gTGluayBh
bGwgY2FsbHMgb3V0IGZyb20gdGhlIEpJVCBjb2RlIHRvIHRoZWlyIHJlc3BlY3RpdmUgZnVuY3Rp
b25zLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NhbGxzLnNpemUoKTsgKytpKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuaAkocmV2aXNp
b24gMTUxNjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NzIsNiArNDcyLDEwIEBAIHByaXZhdGU6CiAgICAgdm9pZCBj
b21waWxlRW50cnkoKTsKICAgICB2b2lkIGNvbXBpbGVCb2R5KCk7CiAgICAgdm9pZCBsaW5rKExp
bmtCdWZmZXImKTsKKyAgICAKKyAgICBTaW1wbGVKdW1wVGFibGUmIGp1bXBUYWJsZShTd2l0Y2hL
aW5kLCB1bnNpZ25lZCk7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZKdW1wVGFibGVzKFN3aXRjaEtp
bmQpOworICAgIHZvaWQgbGlua1N3aXRjaGVzKExpbmtCdWZmZXImLCBTd2l0Y2hLaW5kKTsKIAog
ICAgIHZvaWQgZXhpdFNwZWN1bGF0aXZlV2l0aE9TUihjb25zdCBPU1JFeGl0JiwgU3BlY3VsYXRp
b25SZWNvdmVyeSopOwogICAgIHZvaWQgY29tcGlsZUV4Y2VwdGlvbkhhbmRsZXJzKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xhenlKU1ZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGF6eUpTVmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHTGF6
eUpTVmFsdWUuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK0pTVmFsdWUgTGF6eUpT
VmFsdWU6OmdldFZhbHVlKFZNJiB2bSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgIGNhc2UgS25vd25WYWx1ZToKKyAgICAgICAgcmV0dXJuIHZhbHVlKCk7CisgICAgY2FzZSBT
aW5nbGVDaGFyYWN0ZXJTdHJpbmc6CisgICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN0
cmluZygmdm0sIHUuY2hhcmFjdGVyKTsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworc3RhdGljIFRyaVN0YXRlIGVxdWFsVG9TaW5nbGVDaGFyYWN0ZXIoSlNW
YWx1ZSB2YWx1ZSwgVUNoYXIgY2hhcmFjdGVyKQoreworICAgIGlmICghdmFsdWUuaXNTdHJpbmco
KSkKKyAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7CisgICAgCisgICAgSlNTdHJpbmcqIGpz
U3RyaW5nID0gYXNTdHJpbmcodmFsdWUpOworICAgIGlmIChqc1N0cmluZy0+bGVuZ3RoKCkgIT0g
MSkKKyAgICAgICAgcmV0dXJuIEZhbHNlVHJpU3RhdGU7CisgICAgCisgICAgY29uc3QgU3RyaW5n
SW1wbCogc3RyaW5nID0ganNTdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpOworICAgIGlmICghc3Ry
aW5nKQorICAgICAgICByZXR1cm4gTWl4ZWRUcmlTdGF0ZTsKKyAgICAKKyAgICByZXR1cm4gdHJp
U3RhdGUoc3RyaW5nLT5hdCgwKSA9PSBjaGFyYWN0ZXIpOworfQorCitUcmlTdGF0ZSBMYXp5SlNW
YWx1ZTo6c3RyaWN0RXF1YWwoY29uc3QgTGF6eUpTVmFsdWUmIG90aGVyKSBjb25zdAoreworICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBLbm93blZhbHVlOgorICAgICAgICBzd2l0Y2gg
KG90aGVyLm1fa2luZCkgeworICAgICAgICBjYXNlIEtub3duVmFsdWU6CisgICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6cHVyZVN0cmljdEVxdWFsKHZhbHVlKCksIG90aGVyLnZhbHVlKCkpOwor
ICAgICAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKKyAgICAgICAgICAgIHJldHVybiBl
cXVhbFRvU2luZ2xlQ2hhcmFjdGVyKHZhbHVlKCksIG90aGVyLmNoYXJhY3RlcigpKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNpbmdsZUNoYXJhY3RlclN0cmluZzoKKyAg
ICAgICAgc3dpdGNoIChvdGhlci5tX2tpbmQpIHsKKyAgICAgICAgY2FzZSBTaW5nbGVDaGFyYWN0
ZXJTdHJpbmc6CisgICAgICAgICAgICByZXR1cm4gdHJpU3RhdGUoY2hhcmFjdGVyKCkgPT0gb3Ro
ZXIuY2hhcmFjdGVyKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG90
aGVyLnN0cmljdEVxdWFsKCp0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBMYXp5SlNWYWx1
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgY2FzZSBLbm93blZhbHVlOgorICAgICAgICB2YWx1ZSgpLmR1bXAob3V0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgorICAgICAgICBvdXQu
cHJpbnQoIkxhenk6U2luZ2xlQ2hhcmFjdGVyU3RyaW5nKCIpOworICAgICAgICBvdXQucHJpbnRm
KCIlMDRYIiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNoYXJhY3RlcigpKSk7CisgICAgICAgIG91
dC5wcmludCgiIC8gIiwgU3RyaW5nSW1wbDo6dXRmOEZvckNoYXJhY3RlcnMoJnUuY2hhcmFjdGVy
LCAxKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAv
LyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdM
YXp5SlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TGF6eUpTVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTGF6eUpTVmFsdWUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdMYXp5SlNW
YWx1ZV9oCisjZGVmaW5lIERGR0xhenlKU1ZhbHVlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKKy8vIFJlcHJlc2VudHMgZWl0aGVyIGEgSlNWYWx1ZSwgb3IgZm9yIEpTVmFs
dWVzIHRoYXQgcmVxdWlyZSBhbGxvY2F0aW9uIGluIHRoZSBoZWFwLAorLy8gaXQgdGVsbHMgeW91
IGV2ZXJ5dGhpbmcgeW91J2QgbmVlZCB0byBrbm93IGluIG9yZGVyIHRvIGFsbG9jYXRlIGl0Lgor
CitlbnVtIExhemluZXNzS2luZCB7CisgICAgS25vd25WYWx1ZSwKKyAgICBTaW5nbGVDaGFyYWN0
ZXJTdHJpbmcKK307CisKK2NsYXNzIExhenlKU1ZhbHVlIHsKK3B1YmxpYzoKKyAgICBMYXp5SlNW
YWx1ZShKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZSgpKQorICAgICAgICA6IG1fa2luZChLbm93blZh
bHVlKQorICAgIHsKKyAgICAgICAgdS52YWx1ZSA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyBMYXp5SlNWYWx1ZSBzaW5nbGVDaGFyYWN0ZXJTdHJpbmco
VUNoYXIgY2hhcmFjdGVyKQorICAgIHsKKyAgICAgICAgTGF6eUpTVmFsdWUgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOworICAgICAgICByZXN1
bHQudS5jaGFyYWN0ZXIgPSBjaGFyYWN0ZXI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorICAgIAorICAgIEpTVmFsdWUgdHJ5R2V0VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fa2luZCA9PSBLbm93blZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCk7Cisg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgZ2V0VmFs
dWUoVk0mKSBjb25zdDsKKyAgICAKKyAgICBKU1ZhbHVlIHZhbHVlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2tpbmQgPT0gS25vd25WYWx1ZSk7CisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjpkZWNvZGUodS52YWx1ZSk7CisgICAgfQorICAgIAorICAgIFVDaGFyIGNoYXJhY3Rlcigp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IFNpbmdsZUNoYXJhY3RlclN0
cmluZyk7CisgICAgICAgIHJldHVybiB1LmNoYXJhY3RlcjsKKyAgICB9CisgICAgCisgICAgVHJp
U3RhdGUgc3RyaWN0RXF1YWwoY29uc3QgTGF6eUpTVmFsdWUmIG90aGVyKSBjb25zdDsKKyAgICAK
KyAgICB1bnNpZ25lZCBzd2l0Y2hMb29rdXBWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICAv
LyBOQi4gTm90IGV2ZXJ5IGtpbmQgb2YgSlNWYWx1ZSB3aWxsIGJlIGFibGUgdG8gZ2l2ZSB5b3Ug
YSBzd2l0Y2ggbG9va3VwCisgICAgICAgIC8vIHZhbHVlLCBhbmQgdGhpcyBtZXRob2Qgd2lsbCBh
c3NlcnQsIG9yIGRvIGJhZCB0aGluZ3MsIGlmIHlvdSB1c2UgaXQKKyAgICAgICAgLy8gZm9yIGEg
a2luZCBvZiB2YWx1ZSB0aGF0IGNhbid0LgorICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
ICAgICBjYXNlIEtub3duVmFsdWU6CisgICAgICAgICAgICByZXR1cm4gdmFsdWUoKS5hc0ludDMy
KCk7CisgICAgICAgIGNhc2UgU2luZ2xlQ2hhcmFjdGVyU3RyaW5nOgorICAgICAgICAgICAgcmV0
dXJuIGNoYXJhY3RlcigpOworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICB1bmlvbiB7CisgICAgICAgIEVuY29kZWRKU1ZhbHVlIHZh
bHVlOworICAgICAgICBVQ2hhciBjaGFyYWN0ZXI7CisgICAgfSB1OworICAgIExhemluZXNzS2lu
ZCBtX2tpbmQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBF
TkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR0xhenlKU1ZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE1MTY4NSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiREZHQWRqYWNlbmN5TGlzdC5oIgogI2luY2x1ZGUgIkRGR0FycmF5TW9k
ZS5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkRGR0xhenlKU1ZhbHVlLmgi
CiAjaW5jbHVkZSAiREZHTm9kZUZsYWdzLmgiCiAjaW5jbHVkZSAiREZHTm9kZVR5cGUuaCIKICNp
bmNsdWRlICJERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCIKQEAgLTgzLDE4ICs4NCwxOSBAQCBzdHJ1
Y3QgU3dpdGNoQ2FzZSB7CiAgICAgewogICAgIH0KICAgICAKLSAgICBTd2l0Y2hDYXNlKEpTVmFs
dWUgdmFsdWUsIEJsb2NrSW5kZXggdGFyZ2V0KQorICAgIFN3aXRjaENhc2UoTGF6eUpTVmFsdWUg
dmFsdWUsIEJsb2NrSW5kZXggdGFyZ2V0KQogICAgICAgICA6IHZhbHVlKHZhbHVlKQogICAgICAg
ICAsIHRhcmdldCh0YXJnZXQpCiAgICAgewogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlIHZhbHVl
OworICAgIExhenlKU1ZhbHVlIHZhbHVlOwogICAgIEJsb2NrSW5kZXggdGFyZ2V0OwogfTsKIAog
ZW51bSBTd2l0Y2hLaW5kIHsKLSAgICBTd2l0Y2hJbW0KKyAgICBTd2l0Y2hJbW0sCisgICAgU3dp
dGNoQ2hhcgogfTsKIAogc3RydWN0IFN3aXRjaERhdGEgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE1MTY4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NDQwLDkgKzQ0NDAsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpzcGVj
dWxhdGUoTm9kZSosIEVkCiAgICAgfQogfQogCi12b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dp
dGNoSW1tSW50SnVtcChOb2RlKiwgU3dpdGNoRGF0YSogZGF0YSwgR1BSUmVnIHZhbHVlLCBHUFJS
ZWcgc2NyYXRjaCkKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbnRKdW1wKAorICAg
IFN3aXRjaERhdGEqIGRhdGEsIFNpbXBsZUp1bXBUYWJsZSYgdGFibGUsIEdQUlJlZyB2YWx1ZSwg
R1BSUmVnIHNjcmF0Y2gpCiB7Ci0gICAgU2ltcGxlSnVtcFRhYmxlJiB0YWJsZSA9IG1faml0LmNv
ZGVCbG9jaygpLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dpdGNoVGFibGVJbmRl
eCk7CiAgICAgbV9qaXQuc3ViMzIoSW1tMzIodGFibGUubWluKSwgdmFsdWUpOwogICAgIGFkZEJy
YW5jaCgKICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkFib3ZlT3JFcXVhbCwg
dmFsdWUsIEltbTMyKHRhYmxlLmN0aU9mZnNldHMuc2l6ZSgpKSksCkBAIC00NDUzLDEzICs0NDUz
LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hJbW1JbnRKdW0KICAgICBkYXRh
LT5kaWRVc2VKdW1wVGFibGUgPSB0cnVlOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
U3dpdGNoSW1tSW50SnVtcCgKKyAgICBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcgdmFsdWUsIEdQ
UlJlZyBzY3JhdGNoKQoreworICAgIGVtaXRTd2l0Y2hJbnRKdW1wKAorICAgICAgICBkYXRhLCBt
X2ppdC5jb2RlQmxvY2soKS0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRh
YmxlSW5kZXgpLAorICAgICAgICB2YWx1ZSwgc2NyYXRjaCk7Cit9CisKIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmVtaXRTd2l0Y2hJbW0oTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSkKIHsKICAg
ICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgIGNhc2UgSW50MzJVc2U6
IHsKICAgICAgICAgU3BlY3VsYXRlSW50ZWdlck9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgZW1pdFN3
aXRjaEltbUludEp1bXAobm9kZSwgZGF0YSwgdmFsdWUuZ3ByKCksIHRlbXAuZ3ByKCkpOworICAg
ICAgICBlbWl0U3dpdGNoSW1tSW50SnVtcChkYXRhLCB2YWx1ZS5ncHIoKSwgdGVtcC5ncHIoKSk7
CiAgICAgICAgIG5vUmVzdWx0KG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC00NDc1
LDcgKzQ0ODMsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoSW1tKE5vZGUqCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgbm90SW50ID0gbV9q
aXQuYnJhbmNoNjQoCiAgICAgICAgICAgICBKSVRDb21waWxlcjo6QmVsb3csIHZhbHVlUmVncy5n
cHIoKSwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAgICAgZW1pdFN3aXRj
aEltbUludEp1bXAobm9kZSwgZGF0YSwgdmFsdWVSZWdzLmdwcigpLCBzY3JhdGNoKTsKKyAgICAg
ICAgZW1pdFN3aXRjaEltbUludEp1bXAoZGF0YSwgdmFsdWVSZWdzLmdwcigpLCBzY3JhdGNoKTsK
ICAgICAgICAgbm90SW50LmxpbmsoJm1faml0KTsKICAgICAgICAgYWRkQnJhbmNoKAogICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KApAQCAtNDQ4OCw3ICs0NDk2LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaEltbShOb2RlKgogI2Vsc2UKICAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgbm90SW50ID0gbV9qaXQuYnJhbmNoMzIoCiAgICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm90RXF1YWwsIHZhbHVlUmVncy50YWdHUFIoKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSk7Ci0gICAgICAgIGVtaXRTd2l0Y2hJbW1JbnRKdW1wKG5vZGUsIGRhdGEsIHZhbHVl
UmVncy5wYXlsb2FkR1BSKCksIHNjcmF0Y2gpOworICAgICAgICBlbWl0U3dpdGNoSW1tSW50SnVt
cChkYXRhLCB2YWx1ZVJlZ3MucGF5bG9hZEdQUigpLCBzY3JhdGNoKTsKICAgICAgICAgbm90SW50
LmxpbmsoJm1faml0KTsKICAgICAgICAgYWRkQnJhbmNoKAogICAgICAgICAgICAgbV9qaXQuYnJh
bmNoMzIoCkBAIC00NTEwLDYgKzQ1MTgsMTA1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRT
d2l0Y2hJbW0oTm9kZSoKICAgICB9CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0
Y2hDaGFyU3RyaW5nSnVtcCgKKyAgICBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSZWcgdmFsdWUsIEdQ
UlJlZyBzY3JhdGNoKQoreworICAgIGFkZEJyYW5jaCgKKyAgICAgICAgbV9qaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyh2YWx1ZSwgSlNTdHJpbmc6Om9mZnNldE9mTGVuZ3RoKCkpLAor
ICAgICAgICAgICAgVHJ1c3RlZEltbTMyKDEpKSwKKyAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gp
OworICAgIAorICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWUs
IEpTU3RyaW5nOjpvZmZzZXRPZlZhbHVlKCkpLCBzY3JhdGNoKTsKKyAgICAKKyAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgc2xvd1BhdGhDYWxsKAorICAgICAgICAgICAgbV9qaXQu
YnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaCksCisgICAgICAgICAg
ICB0aGlzLCBvcGVyYXRpb25SZXNvbHZlUm9wZSwgc2NyYXRjaCwgdmFsdWUpKTsKKyAgICAKKyAg
ICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHNjcmF0Y2gsIFN0cmluZ0lt
cGw6OmRhdGFPZmZzZXQoKSksIHZhbHVlKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBp
czhCaXQgPSBtX2ppdC5icmFuY2hUZXN0MzIoCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvLAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoLCBTdHJpbmdJbXBs
OjpmbGFnc09mZnNldCgpKSwKKyAgICAgICAgVHJ1c3RlZEltbTMyKFN0cmluZ0ltcGw6OmZsYWdJ
czhCaXQoKSkpOworICAgIAorICAgIG1faml0LmxvYWQxNihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyh2YWx1ZSksIHNjcmF0Y2gpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHJlYWR5ID0g
bV9qaXQuanVtcCgpOworICAgIAorICAgIGlzOEJpdC5saW5rKCZtX2ppdCk7CisgICAgbV9qaXQu
bG9hZDgoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3ModmFsdWUpLCBzY3JhdGNoKTsKKyAgICAKKyAg
ICByZWFkeS5saW5rKCZtX2ppdCk7CisgICAgZW1pdFN3aXRjaEludEp1bXAoCisgICAgICAgIGRh
dGEsIG1faml0LmNvZGVCbG9jaygpLT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUoZGF0YS0+c3dp
dGNoVGFibGVJbmRleCksCisgICAgICAgIHNjcmF0Y2gsIHZhbHVlKTsKK30KKwordm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaENoYXIoTm9kZSogbm9kZSwgU3dpdGNoRGF0YSogZGF0YSkK
K3sKKyAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgU3Ry
aW5nVXNlOiB7CisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgICAgICAKKyAg
ICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOworICAgICAgICAKKyAgICAgICAgb3AxLnVzZSgpOworCisgICAgICAgIERG
R19UWVBFX0NIRUNLKAorICAgICAgICAgICAgSlNWYWx1ZVNvdXJjZTo6dW5ib3hlZENlbGwob3Ax
R1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNTdHJpbmcsIG1faml0LmJyYW5jaFB0cigKKyAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsCisgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Mob3AxR1BSLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwK
KyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgp
LT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CisgICAgICAgIAorICAgICAgICBlbWl0U3dpdGNo
Q2hhclN0cmluZ0p1bXAoZGF0YSwgb3AxR1BSLCB0ZW1wR1BSKTsKKyAgICAgICAgbm9SZXN1bHQo
bm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgICAgICAKKyAgICBjYXNlIFVudHlwZWRVc2U6IHsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7CisgICAgICAgIAorICAgICAgICBKU1ZhbHVlUmVncyBvcDFSZWdzID0gb3AxLmpzVmFs
dWVSZWdzKCk7CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAgICAg
CisgICAgICAgIG9wMS51c2UoKTsKKyAgICAgICAgCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgYWRkQnJhbmNoKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KAorICAgICAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFSZWdzLmdwcigpLCBHUFJJbmZvOjp0
YWdNYXNrUmVnaXN0ZXIpLAorICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91Z2gpOworI2Vsc2UK
KyAgICAgICAgYWRkQnJhbmNoKAorICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoCisgICAgICAg
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBvcDFSZWdzLnRhZ0dQUigpLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZykpLAorICAgICAgICAgICAgZGF0YS0+ZmFsbFRocm91
Z2gpOworI2VuZGlmCisgICAgICAgIAorICAgICAgICBhZGRCcmFuY2goCisgICAgICAgICAgICBt
X2ppdC5icmFuY2hQdHIoCisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LAorICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG9wMVJlZ3MucGF5bG9h
ZEdQUigpLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwKKyAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX2ppdC52bSgpLT5zdHJpbmdTdHJ1Y3R1cmUuZ2V0
KCkpKSwKKyAgICAgICAgICAgIGRhdGEtPmZhbGxUaHJvdWdoKTsKKyAgICAgICAgCisgICAgICAg
IGVtaXRTd2l0Y2hDaGFyU3RyaW5nSnVtcChkYXRhLCBvcDFSZWdzLnBheWxvYWRHUFIoKSwgdGVt
cEdQUik7CisgICAgICAgIG5vUmVzdWx0KG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCiB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoKE5vZGUqIG5vZGUpCiB7CiAgICAg
U3dpdGNoRGF0YSogZGF0YSA9IG5vZGUtPnN3aXRjaERhdGEoKTsKQEAgLTQ1MTcsNiArNDYyNCwx
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0U3dpdGNoKE5vZGUqIG5vCiAgICAgY2FzZSBT
d2l0Y2hJbW06IHsKICAgICAgICAgZW1pdFN3aXRjaEltbShub2RlLCBkYXRhKTsKICAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIFN3aXRjaENoYXI6IHsKKyAgICAgICAgZW1pdFN3aXRj
aENoYXIobm9kZSwgZGF0YSk7CisgICAgICAgIHJldHVybjsKICAgICB9IH0KICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTUxNjg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
ODQ0LDggKzE4NDQsMTEgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUxvZ2ljYWxOb3QoTm9k
ZSopOwogICAgIHZvaWQgZW1pdE9iamVjdE9yT3RoZXJCcmFuY2goRWRnZSB2YWx1ZSwgQmxvY2tJ
bmRleCB0YWtlbiwgQmxvY2tJbmRleCBub3RUYWtlbik7CiAgICAgdm9pZCBlbWl0QnJhbmNoKE5v
ZGUqKTsKLSAgICB2b2lkIGVtaXRTd2l0Y2hJbW1JbnRKdW1wKE5vZGUqLCBTd2l0Y2hEYXRhKiwg
R1BSUmVnIHZhbHVlLCBHUFJSZWcgc2NyYXRjaCk7CisgICAgdm9pZCBlbWl0U3dpdGNoSW50SnVt
cChTd2l0Y2hEYXRhKiwgU2ltcGxlSnVtcFRhYmxlJiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgc2Ny
YXRjaCk7CisgICAgdm9pZCBlbWl0U3dpdGNoSW1tSW50SnVtcChTd2l0Y2hEYXRhKiwgR1BSUmVn
IHZhbHVlLCBHUFJSZWcgc2NyYXRjaCk7CiAgICAgdm9pZCBlbWl0U3dpdGNoSW1tKE5vZGUqLCBT
d2l0Y2hEYXRhKik7CisgICAgdm9pZCBlbWl0U3dpdGNoQ2hhclN0cmluZ0p1bXAoU3dpdGNoRGF0
YSosIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIHNjcmF0Y2gpOworICAgIHZvaWQgZW1pdFN3aXRjaENo
YXIoTm9kZSosIFN3aXRjaERhdGEqKTsKICAgICB2b2lkIGVtaXRTd2l0Y2goTm9kZSopOwogICAg
IAogICAgIHZvaWQgY29tcGlsZVRvU3RyaW5nT25DZWxsKE5vZGUqKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE1MTY4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUq
IG5vZGUpCiAgICAgY2FzZSBKdW1wOgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgogICAgIGNhc2Ug
Rm9yd2FyZEZvcmNlT1NSRXhpdDoKLSAgICBjYXNlIFN3aXRjaDoKICAgICAgICAgLy8gVGhlc2Ug
YXJlIE9LLgogICAgICAgICBicmVhazsKICAgICBjYXNlIEdldEFycmF5TGVuZ3RoOgpAQCAtMTQx
LDYgKzE0MCwxNCBAQCBpbmxpbmUgYm9vbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
d2l0Y2g6CisgICAgICAgIHN3aXRjaCAobm9kZS0+c3dpdGNoRGF0YSgpLT5raW5kKSB7CisgICAg
ICAgIGNhc2UgU3dpdGNoSW1tOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgLy8gRG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueXRoaW5n
IGVsc2UuCiAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNTE2ODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQ4OSw3ICsxNDg5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIFZlY3RvcjxT
d2l0Y2hDYXNlPiBjYXNlczsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBk
YXRhLT5jYXNlcy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGNhc2VzLmFwcGVuZChT
d2l0Y2hDYXNlKAotICAgICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludDMyKGRhdGEtPmNh
c2VzW2ldLnZhbHVlLmFzSW50MzIoKSksCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50MzIoZGF0YS0+Y2FzZXNbaV0udmFsdWUuc3dpdGNoTG9va3VwVmFsdWUoKSksCiAgICAgICAg
ICAgICAgICAgICAgIG1fYmxvY2tzLmdldChtX2dyYXBoLm1fYmxvY2tzW2RhdGEtPmNhc2VzW2ld
LnRhcmdldF0uZ2V0KCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE0OTcs
NyArMTQ5NywxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGludFZhbHVlLCBjYXNlcywK
ICAgICAgICAgICAgICAgICBtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1tkYXRhLT5mYWxs
VGhyb3VnaF0uZ2V0KCkpKTsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSB9CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGNhc2UgU3dpdGNoQ2hhcjoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgCklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTUxNjg1KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMy0wNi0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6IERGRyBzaG91bGQgaGF2ZSBzd2l0Y2hf
Y2hhcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE3
NzEwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBTYWJvZmYuCisgICAgICAgIAorICAg
ICAgICBJIHdhbnRlZCB0byBiZSBhYmxlIHRvIHNheSBzdHJpbmdJbXBsLT5hdChpbmRleCksIGFu
ZCBub3cgSSBjYW4hCisKKyAgICAgICAgQWxzbyBtYWRlIGl0IHBvc3NpYmxlIHRvIGNvbnZlcnQg
YSBVQ2hhciB0byBhIHV0ZjggQ1N0cmluZyB3aXRob3V0CisgICAgICAgIGFsbG9jYXRpbmcgYSBT
dHJpbmdJbXBsLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5jcHA6CisgICAgICAg
IChXVEY6OlN0cmluZ0ltcGw6OnV0ZjhJbXBsKToKKyAgICAgICAgKFdURik6CisgICAgICAgIChX
VEY6OlN0cmluZ0ltcGw6OnV0ZjhGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdURjo6U3RyaW5n
SW1wbDo6dXRmOEZvclJhbmdlKToKKyAgICAgICAgKiB3dGYvdGV4dC9TdHJpbmdJbXBsLmg6Cisg
ICAgICAgIChTdHJpbmdJbXBsKToKKyAgICAgICAgKFdURjo6U3RyaW5nSW1wbDo6YXQpOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjpvcGVyYXRvcltdKToKKwogMjAxMy0wNi0xNSAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IEFkZCBDRkcg
c2ltcGxpZmljYXRpb24gZm9yIFN3aXRjaApJbmRleDogU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
Y3BwCShyZXZpc2lvbiAxNTE2ODUpCisrKyBTb3VyY2UvV1RGL3d0Zi90ZXh0L1N0cmluZ0ltcGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTA1LDYgKzE5MDUsNzIgQEAgc3RhdGljIGlubGluZSB2
b2lkIHB1dFVURjhUcmlwbGUoY2hhciomIAogICAgICpidWZmZXIrKyA9IHN0YXRpY19jYXN0PGNo
YXI+KChjaCAmIDB4M0YpIHwgMHg4MCk7CiB9CiAKK2Jvb2wgU3RyaW5nSW1wbDo6dXRmOEltcGwo
CisgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY2hhciomIGJ1
ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIENvbnZlcnNpb25Nb2RlIG1vZGUpCit7CisgICAgaWYg
KG1vZGUgPT0gU3RyaWN0Q29udmVyc2lvblJlcGxhY2luZ1VucGFpcmVkU3Vycm9nYXRlc1dpdGhG
RkZEKSB7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzRW5kID0gY2hhcmFjdGVycyAr
IGxlbmd0aDsKKyAgICAgICAgY2hhciogYnVmZmVyRW5kID0gYnVmZmVyICsgYnVmZmVyU2l6ZTsK
KyAgICAgICAgd2hpbGUgKGNoYXJhY3RlcnMgPCBjaGFyYWN0ZXJzRW5kKSB7CisgICAgICAgICAg
ICAvLyBVc2Ugc3RyaWN0IGNvbnZlcnNpb24gdG8gZGV0ZWN0IHVucGFpcmVkIHN1cnJvZ2F0ZXMu
CisgICAgICAgICAgICBDb252ZXJzaW9uUmVzdWx0IHJlc3VsdCA9IGNvbnZlcnRVVEYxNlRvVVRG
OCgmY2hhcmFjdGVycywgY2hhcmFjdGVyc0VuZCwgJmJ1ZmZlciwgYnVmZmVyRW5kLCB0cnVlKTsK
KyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgIT0gdGFyZ2V0RXhoYXVzdGVkKTsKKyAgICAgICAg
ICAgIC8vIENvbnZlcnNpb24gZmFpbHMgd2hlbiB0aGVyZSBpcyBhbiB1bnBhaXJlZCBzdXJyb2dh
dGUuCisgICAgICAgICAgICAvLyBQdXQgcmVwbGFjZW1lbnQgY2hhcmFjdGVyIChVK0ZGRkQpIGlu
c3RlYWQgb2YgdGhlIHVucGFpcmVkIHN1cnJvZ2F0ZS4KKyAgICAgICAgICAgIGlmIChyZXN1bHQg
IT0gY29udmVyc2lvbk9LKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKCgweEQ4MDAgPD0gKmNo
YXJhY3RlcnMgJiYgKmNoYXJhY3RlcnMgPD0gMHhERkZGKSk7CisgICAgICAgICAgICAgICAgLy8g
VGhlcmUgc2hvdWxkIGJlIHJvb20gbGVmdCwgc2luY2Ugb25lIFVDaGFyIGhhc24ndCBiZWVuIGNv
bnZlcnRlZC4KKyAgICAgICAgICAgICAgICBBU1NFUlQoKGJ1ZmZlciArIDMpIDw9IGJ1ZmZlckVu
ZCk7CisgICAgICAgICAgICAgICAgcHV0VVRGOFRyaXBsZShidWZmZXIsIHJlcGxhY2VtZW50Q2hh
cmFjdGVyKTsKKyAgICAgICAgICAgICAgICArK2NoYXJhY3RlcnM7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBib29sIHN0cmljdCA9IG1vZGUgPT0gU3Ry
aWN0Q29udmVyc2lvbjsKKyAgICAgICAgY29uc3QgVUNoYXIqIG9yaWdpbmFsQ2hhcmFjdGVycyA9
IGNoYXJhY3RlcnM7CisgICAgICAgIENvbnZlcnNpb25SZXN1bHQgcmVzdWx0ID0gY29udmVydFVU
RjE2VG9VVEY4KCZjaGFyYWN0ZXJzLCBjaGFyYWN0ZXJzICsgbGVuZ3RoLCAmYnVmZmVyLCBidWZm
ZXIgKyBidWZmZXJTaXplLCBzdHJpY3QpOworICAgICAgICBBU1NFUlQocmVzdWx0ICE9IHRhcmdl
dEV4aGF1c3RlZCk7IC8vIChsZW5ndGggKiAzKSBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYW55
IGNvbnZlcnNpb24KKworICAgICAgICAvLyBPbmx5IHByb2R1Y2VkIGZyb20gc3RyaWN0IGNvbnZl
cnNpb24uCisgICAgICAgIGlmIChyZXN1bHQgPT0gc291cmNlSWxsZWdhbCkgeworICAgICAgICAg
ICAgQVNTRVJUKHN0cmljdCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KworICAgICAgICAvLyBDaGVjayBmb3IgYW4gdW5jb252ZXJ0ZWQgaGlnaCBzdXJyb2dhdGUuCisg
ICAgICAgIGlmIChyZXN1bHQgPT0gc291cmNlRXhoYXVzdGVkKSB7CisgICAgICAgICAgICBpZiAo
c3RyaWN0KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIC8vIFRo
aXMgc2hvdWxkIGJlIG9uZSB1bnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZS4gVHJlYXQgaXQgdGhlIHNh
bWUKKyAgICAgICAgICAgIC8vIHdhcyBhcyBhbiB1bnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZSB3b3Vs
ZCBoYXZlIGJlZW4gaGFuZGxlZCBpbgorICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBvZiBhIHN0
cmluZyB3aXRoIG5vbi1zdHJpY3QgY29udmVyc2lvbiAtIHdoaWNoIGlzCisgICAgICAgICAgICAv
LyB0byBzYXksIHNpbXBseSBlbmNvZGUgaXQgdG8gVVRGLTguCisgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKAorICAgICAgICAgICAgICAgIG9yaWdpbmFsQ2hhcmFjdGVycywgKGNoYXJhY3RlcnMg
KyAxKSA9PSAob3JpZ2luYWxDaGFyYWN0ZXJzICsgbGVuZ3RoKSk7CisgICAgICAgICAgICBBU1NF
UlQoKCpjaGFyYWN0ZXJzID49IDB4RDgwMCkgJiYgKCpjaGFyYWN0ZXJzIDw9IDB4REJGRikpOwor
ICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIHJvb20gbGVmdCwgc2luY2Ugb25lIFVDaGFy
IGhhc24ndCBiZWVuIGNvbnZlcnRlZC4KKyAgICAgICAgICAgIEFTU0VSVCgoYnVmZmVyICsgMykg
PD0gKGJ1ZmZlciArIGJ1ZmZlclNpemUpKTsKKyAgICAgICAgICAgIHB1dFVURjhUcmlwbGUoYnVm
ZmVyLCAqY2hhcmFjdGVycyk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK0NTdHJpbmcgU3RyaW5nSW1wbDo6dXRmOEZvckNoYXJhY3RlcnMoCisgICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVyc2lvbk1vZGUgbW9k
ZSkKK3sKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIENTdHJpbmcoIiIsIDApOwor
ICAgIGlmIChsZW5ndGggPiBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpIC8gMykKKyAg
ICAgICAgcmV0dXJuIENTdHJpbmcoKTsKKyAgICBWZWN0b3I8Y2hhciwgMTAyND4gYnVmZmVyVmVj
dG9yKGxlbmd0aCAqIDMpOworICAgIGNoYXIqIGJ1ZmZlciA9IGJ1ZmZlclZlY3Rvci5kYXRhKCk7
CisgICAgaWYgKCF1dGY4SW1wbChjaGFyYWN0ZXJzLCBsZW5ndGgsIGJ1ZmZlciwgYnVmZmVyVmVj
dG9yLnNpemUoKSwgbW9kZSkpCisgICAgICAgIHJldHVybiBDU3RyaW5nKCk7CisgICAgcmV0dXJu
IENTdHJpbmcoYnVmZmVyVmVjdG9yLmRhdGEoKSwgYnVmZmVyIC0gYnVmZmVyVmVjdG9yLmRhdGEo
KSk7Cit9CisKIENTdHJpbmcgU3RyaW5nSW1wbDo6dXRmOEZvclJhbmdlKHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBDb252ZXJzaW9uTW9kZSBtb2RlKSBjb25zdAogewogICAgIEFT
U0VSVChvZmZzZXQgPD0gdGhpcy0+bGVuZ3RoKCkpOwpAQCAtMTkzNSw1MSArMjAwMSw4IEBAIENT
dHJpbmcgU3RyaW5nSW1wbDo6dXRmOEZvclJhbmdlKHVuc2lnbmUKICAgICAgICAgQ29udmVyc2lv
blJlc3VsdCByZXN1bHQgPSBjb252ZXJ0TGF0aW4xVG9VVEY4KCZjaGFyYWN0ZXJzLCBjaGFyYWN0
ZXJzICsgbGVuZ3RoLCAmYnVmZmVyLCBidWZmZXIgKyBidWZmZXJWZWN0b3Iuc2l6ZSgpKTsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdCAhPSB0YXJnZXRFeGhhdXN0ZWQpOyAv
LyAobGVuZ3RoICogMykgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIGFueSBjb252ZXJzaW9uCiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aGlzLT5jaGFy
YWN0ZXJzMTYoKSArIG9mZnNldDsKLQotICAgICAgICBpZiAobW9kZSA9PSBTdHJpY3RDb252ZXJz
aW9uUmVwbGFjaW5nVW5wYWlyZWRTdXJyb2dhdGVzV2l0aEZGRkQpIHsKLSAgICAgICAgICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzRW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKLSAgICAgICAg
ICAgIGNoYXIqIGJ1ZmZlckVuZCA9IGJ1ZmZlciArIGJ1ZmZlclZlY3Rvci5zaXplKCk7Ci0gICAg
ICAgICAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGNoYXJhY3RlcnNFbmQpIHsKLSAgICAgICAgICAg
ICAgICAvLyBVc2Ugc3RyaWN0IGNvbnZlcnNpb24gdG8gZGV0ZWN0IHVucGFpcmVkIHN1cnJvZ2F0
ZXMuCi0gICAgICAgICAgICAgICAgQ29udmVyc2lvblJlc3VsdCByZXN1bHQgPSBjb252ZXJ0VVRG
MTZUb1VURjgoJmNoYXJhY3RlcnMsIGNoYXJhY3RlcnNFbmQsICZidWZmZXIsIGJ1ZmZlckVuZCwg
dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHJlc3VsdCAhPSB0YXJnZXRFeGhhdXN0ZWQp
OwotICAgICAgICAgICAgICAgIC8vIENvbnZlcnNpb24gZmFpbHMgd2hlbiB0aGVyZSBpcyBhbiB1
bnBhaXJlZCBzdXJyb2dhdGUuCi0gICAgICAgICAgICAgICAgLy8gUHV0IHJlcGxhY2VtZW50IGNo
YXJhY3RlciAoVStGRkZEKSBpbnN0ZWFkIG9mIHRoZSB1bnBhaXJlZCBzdXJyb2dhdGUuCi0gICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSBjb252ZXJzaW9uT0spIHsKLSAgICAgICAgICAgICAg
ICAgICAgQVNTRVJUKCgweEQ4MDAgPD0gKmNoYXJhY3RlcnMgJiYgKmNoYXJhY3RlcnMgPD0gMHhE
RkZGKSk7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIHNob3VsZCBiZSByb29tIGxlZnQs
IHNpbmNlIG9uZSBVQ2hhciBoYXNuJ3QgYmVlbiBjb252ZXJ0ZWQuCi0gICAgICAgICAgICAgICAg
ICAgIEFTU0VSVCgoYnVmZmVyICsgMykgPD0gYnVmZmVyRW5kKTsKLSAgICAgICAgICAgICAgICAg
ICAgcHV0VVRGOFRyaXBsZShidWZmZXIsIHJlcGxhY2VtZW50Q2hhcmFjdGVyKTsKLSAgICAgICAg
ICAgICAgICAgICAgKytjaGFyYWN0ZXJzOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGJvb2wgc3RyaWN0ID0gbW9kZSA9PSBT
dHJpY3RDb252ZXJzaW9uOwotICAgICAgICAgICAgQ29udmVyc2lvblJlc3VsdCByZXN1bHQgPSBj
b252ZXJ0VVRGMTZUb1VURjgoJmNoYXJhY3RlcnMsIGNoYXJhY3RlcnMgKyBsZW5ndGgsICZidWZm
ZXIsIGJ1ZmZlciArIGJ1ZmZlclZlY3Rvci5zaXplKCksIHN0cmljdCk7Ci0gICAgICAgICAgICBB
U1NFUlQocmVzdWx0ICE9IHRhcmdldEV4aGF1c3RlZCk7IC8vIChsZW5ndGggKiAzKSBzaG91bGQg
YmUgc3VmZmljaWVudCBmb3IgYW55IGNvbnZlcnNpb24KLQotICAgICAgICAgICAgLy8gT25seSBw
cm9kdWNlZCBmcm9tIHN0cmljdCBjb252ZXJzaW9uLgotICAgICAgICAgICAgaWYgKHJlc3VsdCA9
PSBzb3VyY2VJbGxlZ2FsKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0cmljdCk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIENTdHJpbmcoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgLy8gQ2hlY2sgZm9yIGFuIHVuY29udmVydGVkIGhpZ2ggc3Vycm9nYXRlLgotICAgICAgICAg
ICAgaWYgKHJlc3VsdCA9PSBzb3VyY2VFeGhhdXN0ZWQpIHsKLSAgICAgICAgICAgICAgICBpZiAo
c3RyaWN0KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gQ1N0cmluZygpOwotICAgICAgICAg
ICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIG9uZSB1bnBhaXJlZCBoaWdoIHN1cnJvZ2F0ZS4gVHJl
YXQgaXQgdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAvLyB3YXMgYXMgYW4gdW5wYWlyZWQgaGln
aCBzdXJyb2dhdGUgd291bGQgaGF2ZSBiZWVuIGhhbmRsZWQgaW4KLSAgICAgICAgICAgICAgICAv
LyB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nIHdpdGggbm9uLXN0cmljdCBjb252ZXJzaW9uIC0gd2hp
Y2ggaXMKLSAgICAgICAgICAgICAgICAvLyB0byBzYXksIHNpbXBseSBlbmNvZGUgaXQgdG8gVVRG
LTguCi0gICAgICAgICAgICAgICAgQVNTRVJUKChjaGFyYWN0ZXJzICsgMSkgPT0gKHRoaXMtPmNo
YXJhY3RlcnMoKSArIGxlbmd0aCkpOwotICAgICAgICAgICAgICAgIEFTU0VSVCgoKmNoYXJhY3Rl
cnMgPj0gMHhEODAwKSAmJiAoKmNoYXJhY3RlcnMgPD0gMHhEQkZGKSk7Ci0gICAgICAgICAgICAg
ICAgLy8gVGhlcmUgc2hvdWxkIGJlIHJvb20gbGVmdCwgc2luY2Ugb25lIFVDaGFyIGhhc24ndCBi
ZWVuIGNvbnZlcnRlZC4KLSAgICAgICAgICAgICAgICBBU1NFUlQoKGJ1ZmZlciArIDMpIDw9IChi
dWZmZXIgKyBidWZmZXJWZWN0b3Iuc2l6ZSgpKSk7Ci0gICAgICAgICAgICAgICAgcHV0VVRGOFRy
aXBsZShidWZmZXIsICpjaGFyYWN0ZXJzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAg
ICAgICBpZiAoIXV0ZjhJbXBsKHRoaXMtPmNoYXJhY3RlcnMxNigpICsgb2Zmc2V0LCBsZW5ndGgs
IGJ1ZmZlciwgYnVmZmVyVmVjdG9yLnNpemUoKSwgbW9kZSkpCisgICAgICAgICAgICByZXR1cm4g
Q1N0cmluZygpOwogICAgIH0KIAogICAgIHJldHVybiBDU3RyaW5nKGJ1ZmZlclZlY3Rvci5kYXRh
KCksIGJ1ZmZlciAtIGJ1ZmZlclZlY3Rvci5kYXRhKCkpOwpJbmRleDogU291cmNlL1dURi93dGYv
dGV4dC9TdHJpbmdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgJKHJldmlzaW9uIDE1MTY4NSkKKysrIFNvdXJjZS9XVEYvd3RmL3RleHQvU3RyaW5n
SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MzcsMTAgKzUzNywxMyBAQCBwdWJsaWM6CiAgICAg
UVN0cmluZ0RhdGEqIHFTdHJpbmdEYXRhKCkgeyByZXR1cm4gYnVmZmVyT3duZXJzaGlwKCkgPT0g
QnVmZmVyQWRvcHRlZFFTdHJpbmcgPyBtX3FTdHJpbmdEYXRhIDogMDsgfQogI2VuZGlmCiAgICAg
CisgICAgc3RhdGljIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBDU3RyaW5nIHV0ZjhGb3JDaGFyYWN0
ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgsIENvbnZlcnNpb25N
b2RlID0gTGVuaWVudENvbnZlcnNpb24pOwogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBDU3Ry
aW5nIHV0ZjhGb3JSYW5nZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgQ29udmVy
c2lvbk1vZGUgPSBMZW5pZW50Q29udmVyc2lvbikgY29uc3Q7CiAgICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIENTdHJpbmcgdXRmOChDb252ZXJzaW9uTW9kZSA9IExlbmllbnRDb252ZXJzaW9uKSBj
b25zdDsKIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgV1RGX0VYUE9SVF9TVFJJTkdfQVBJIGJvb2wg
dXRmOEltcGwoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY2hhciom
IGJ1ZmZlciwgc2l6ZV90IGJ1ZmZlclNpemUsIENvbnZlcnNpb25Nb2RlKTsKKyAgICAKICAgICAv
LyBUaGUgaGlnaCBiaXRzIG9mICdoYXNoJyBhcmUgYWx3YXlzIGVtcHR5LCBidXQgd2UgcHJlZmVy
IHRvIHN0b3JlIG91ciBmbGFncwogICAgIC8vIGluIHRoZSBsb3cgYml0cyBiZWNhdXNlIGl0IG1h
a2VzIHRoZW0gc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgdG8gYWNjZXNzLgogICAgIC8vIFNvLCB3
ZSBzaGlmdCBsZWZ0IGFuZCByaWdodCB3aGVuIHNldHRpbmcgYW5kIGdldHRpbmcgb3VyIGhhc2gg
Y29kZS4KQEAgLTY1MywxMyArNjU2LDE0IEBAIHB1YmxpYzoKIAogICAgIFdURl9FWFBPUlRfU1RS
SU5HX0FQSSBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHN1YnN0cmluZyh1bnNpZ25lZCBwb3MsIHVu
c2lnbmVkIGxlbiA9IFVJTlRfTUFYKTsKIAotICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQg
aSkgY29uc3QKKyAgICBVQ2hhciBhdCh1bnNpZ25lZCBpKSBjb25zdAogICAgIHsKICAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaSA8IG1fbGVuZ3RoKTsKICAgICAgICAg
aWYgKGlzOEJpdCgpKQogICAgICAgICAgICAgcmV0dXJuIG1fZGF0YThbaV07CiAgICAgICAgIHJl
dHVybiBtX2RhdGExNltpXTsKICAgICB9CisgICAgVUNoYXIgb3BlcmF0b3JbXSh1bnNpZ25lZCBp
KSBjb25zdCB7IHJldHVybiBhdChpKTsgfQogICAgIFdURl9FWFBPUlRfU1RSSU5HX0FQSSBVQ2hh
cjMyIGNoYXJhY3RlclN0YXJ0aW5nQXQodW5zaWduZWQpOwogCiAgICAgV1RGX0VYUE9SVF9TVFJJ
TkdfQVBJIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSgpOwpJbmRleDogTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24g
MTUxNjg2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTMtMDYtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIGhhdmUgc3dpdGNoX2NoYXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExNzcxMAorCisgICAgICAg
IFJ1YmJlciBzdGFtcGVkIGJ5IE1hcmsgSGFobmVuYmVyZy4KKworICAgICAgICAqIGZhc3QvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvc3dpdGNoLWNoYXItY29uc3RhbnQuanM6IEFkZGVkLgorICAg
ICAgICAoZm9vKToKKyAgICAgICAgKGJhcik6CisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9zd2l0Y2gtY2hhci5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAg
ICAoYmFyKToKKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc3dpdGNoLWNoYXItY29uc3RhbnQt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL3JlZ3Jlc3Mvc3dpdGNoLWNo
YXItY29uc3RhbnQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3N3aXRj
aC1jaGFyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9yZWdyZXNzL3N3
aXRjaC1jaGFyLmh0bWw6IEFkZGVkLgorCiAyMDEzLTA2LTE1ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRoVGllcjogQWRkIENGRyBzaW1wbGlmaWNhdGlv
biBmb3IgU3dpdGNoCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc3dpdGNoLWNo
YXItY29uc3RhbnQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvcmVncmVzcy9zd2l0Y2gtY2hhci1jb25zdGFudC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc3dpdGNoLWNoYXItY29uc3RhbnQtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc3dpdGNo
LWNoYXItY29uc3RhbnQKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8g
ZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zd2l0Y2gtY2hh
ci1jb25zdGFudC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVz
cy9zd2l0Y2gtY2hhci1jb25zdGFudC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9yZWdyZXNzL3N3aXRjaC1jaGFyLWNvbnN0YW50Lmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InJlc291cmNl
cy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3N3
aXRjaC1jaGFyLWNvbnN0YW50LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
cmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMt
dGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvcmVncmVzcy9zd2l0Y2gtY2hhci1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3N3aXRjaC1jaGFyLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zd2l0Y2gtY2hhci1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9zd2l0
Y2gtY2hhcgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRp
b24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3N3aXRjaC1jaGFyLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3N3aXRjaC1jaGFyLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc3dpdGNoLWNo
YXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVC
TElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3Jj
PSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJzY3JpcHQtdGVzdHMvc3dpdGNoLWNoYXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
L3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zd2l0Y2gtY2hh
ci1jb25zdGFudC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL3N3aXRjaC1jaGFyLWNvbnN0YW50LmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zd2l0Y2gtY2hhci1jb25zdGFu
dC5qcwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorZnVuY3Rpb24gZm9vKGNoYXIpIHsK
KyAgICBzd2l0Y2ggKGNoYXIpIHsKKyAgICBjYXNlICJhIjoKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgY2FzZSAiYiI6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgImMiOgorICAgICAgICBy
ZXR1cm4gMzsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gNDsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIGJhcigpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwMDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IGZvbygiYSIpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK3ZhciByZXN1bHQgPSBiYXIoKTsKK2lmIChyZXN1bHQgIT0gMTAwMDAw
MCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3N3aXRjaC1jaGFyLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc3dpdGNo
LWNoYXIuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL3N3aXRjaC1jaGFyLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACitm
dW5jdGlvbiBmb28oY2hhcikgeworICAgIHN3aXRjaCAoY2hhcikgeworICAgIGNhc2UgImEiOgor
ICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlICJiIjoKKyAgICAgICAgcmV0dXJuIDI7CisgICAg
Y2FzZSAiYyI6CisgICAgICAgIHJldHVybiAzOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biA0OworICAgIH0KK30KKworZnVuY3Rpb24gYmFyKGFycmF5KSB7CisgICAgdmFyIHJlc3VsdCA9
IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpCisgICAgICAgIHJlc3Vs
dCArPSBmb28oYXJyYXlbaSAmIDNdKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2YXIgcmVz
dWx0ID0gYmFyKFsiYSIsICJiIiwgImMiLCAiZCJdKTsKK2lmIChyZXN1bHQgIT0gMjUwMDAwMCkK
KyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>