<?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>102830</bug_id>
          
          <creation_ts>2012-11-20 12:30:07 -0800</creation_ts>
          <short_desc>In-band text tracks infrastructure</short_desc>
          <delta_ts>2012-11-21 09:20:09 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          <blocked>102708</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>feature-media-reviews</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ojan</cc>
    
    <cc>pnormand</cc>
    
    <cc>rakuco</cc>
    
    <cc>silviapf</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>772090</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-20 12:30:07 -0800</bug_when>
    <thetext>Add infrastructure for in-band text tracks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772121</commentid>
    <comment_count>1</comment_count>
      <attachid>175269</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-20 13:31:24 -0800</bug_when>
    <thetext>Created attachment 175269
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772122</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-20 13:34:07 -0800</bug_when>
    <thetext>Attachment 175269 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/CMakeLists.txt&apos;, u&apos;Source/W...&quot; exit_code: 1
Source/WebCore/html/track/InbandTextTrack.h:50:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.h:60:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebCore/html/track/InbandTextTrack.cpp:30:  You should add a blank line after implementation file&apos;s own header.  [build/include_order] [4]
Source/WebCore/html/track/InbandTextTrack.cpp:32:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/html/track/InbandTextTrack.cpp:40:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 5 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772143</commentid>
    <comment_count>3</comment_count>
      <attachid>175269</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2012-11-20 13:55:53 -0800</bug_when>
    <thetext>Comment on attachment 175269
Proposed patch

Attachment 175269 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/14916711</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772154</commentid>
    <comment_count>4</comment_count>
    <who name="Silvia Pfeiffer">silviapf</who>
    <bug_when>2012-11-20 14:05:34 -0800</bug_when>
    <thetext>Nice! Looks generally good to me.

&gt; Source/WebCore/html/track/InbandTextTrackPrivate.h:57
&gt; +    virtual Kind kind() const { return none; }

Spec says that the default kind is &quot;subtitles&quot;:
    &quot;The missing value default is the subtitles state.&quot;.

You might want to return &quot;subtitles&quot; here instead of &quot;none&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772164</commentid>
    <comment_count>5</comment_count>
      <attachid>175276</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-20 14:16:41 -0800</bug_when>
    <thetext>Created attachment 175276
Updated patch

Updated for style problems and Silvia&apos;s suggestion. I don&apos;t understand the GTK build issue so this may not build yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772165</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-20 14:17:00 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Nice! Looks generally good to me.
&gt; 
&gt; &gt; Source/WebCore/html/track/InbandTextTrackPrivate.h:57
&gt; &gt; +    virtual Kind kind() const { return none; }
&gt; 
&gt; Spec says that the default kind is &quot;subtitles&quot;:
&gt;     &quot;The missing value default is the subtitles state.&quot;.
&gt; 
&gt; You might want to return &quot;subtitles&quot; here instead of &quot;none&quot;.

Good suggestion, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772216</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-20 15:25:03 -0800</bug_when>
    <thetext>Looks like the GTK failure was unrelated. This patch is ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772525</commentid>
    <comment_count>8</comment_count>
      <attachid>175276</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-11-20 23:55:11 -0800</bug_when>
    <thetext>Comment on attachment 175276
Updated patch

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

Looks pretty good! I just have a few nits to consider before landing.

&gt; Source/WebCore/ChangeLog:42
&gt; +        (TextTrackList::invalidateTrackIndexesAfterTrack): New, invalide the cached track indexes of

Typo: invalide

&gt; Source/WebCore/html/track/InbandTextTrack.cpp:40
&gt; +InbandTextTrack::InbandTextTrack(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr&lt;InbandTextTrackPrivate&gt; playerPrivate)

Nit: playerPrivate made me think of MediaPlayerPrivate here, maybe a different name can be used, something like trackPrivate?

&gt; Source/WebCore/html/track/InbandTextTrack.cpp:94
&gt; +void InbandTextTrack::addCue(InbandTextTrackPrivate*, double start, double end, const String&amp; id, const String&amp; content, const String&amp; settings)

I don&apos;t see this method used yet, unless I missed it :) Maybe the first argument is not necessary at all? We already have the InbandTextTrackPrivate pointer as a private member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773020</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-11-21 09:20:09 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 175276 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175276&amp;action=review
&gt; 
&gt; Looks pretty good! I just have a few nits to consider before landing.
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:42
&gt; &gt; +        (TextTrackList::invalidateTrackIndexesAfterTrack): New, invalide the cached track indexes of
&gt; 
&gt; Typo: invalide
&gt;
Fixed.

&gt; &gt; Source/WebCore/html/track/InbandTextTrack.cpp:40
&gt; &gt; +InbandTextTrack::InbandTextTrack(ScriptExecutionContext* context, TextTrackClient* client, PassRefPtr&lt;InbandTextTrackPrivate&gt; playerPrivate)
&gt; 
&gt; Nit: playerPrivate made me think of MediaPlayerPrivate here, maybe a different name can be used, something like trackPrivate?
&gt; 
Good suggestion, thanks. Fixed.

&gt; &gt; Source/WebCore/html/track/InbandTextTrack.cpp:94
&gt; &gt; +void InbandTextTrack::addCue(InbandTextTrackPrivate*, double start, double end, const String&amp; id, const String&amp; content, const String&amp; settings)
&gt; 
&gt; I don&apos;t see this method used yet, unless I missed it :) Maybe the first argument is not necessary at all? We already have the InbandTextTrackPrivate pointer as a private member.

I added an ASSEERT that it is the same as the private member. 

Thanks for the review, committed as r135410.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175269</attachid>
            <date>2012-11-20 13:31:24 -0800</date>
            <delta_ts>2012-11-20 14:16:41 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>inband_tracks_patch_2.txt</filename>
            <type>text/plain</type>
            <size>37437</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTMwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDEyLTExLTIwICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEluLWJhbmQgdGV4dCB0
cmFja3MgaW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMjgzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCB0aGUgaW5mcmFzdHJ1Y3R1cmUgbmVjZXNzYXJ5IHRvIGFsbG93IGEg
cG9ydC1zcGVjaWZpYyBtZWRpYSBlbmdpbmUgdG8gZXhwb3NlIGluLWJhbmQgdGV4dAorICAgICAg
ICB0cmFja3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIHBhdGNoIG9ubHkgYWRkcyBw
bHVtYmluZy4gRXhpc3RpbmcgdGVzdHMgdmVyaWZ5IHRoYXQgdGhlc2UgY2hhbmdlcyBkb24ndAor
ICAgICAgICBicmVhayBleGlzdGluZyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6IEFkZCBuZXcgcHJvamVjdCBmaWxlcy4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBUYXJnZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6IENhbGwg
cHJvY2Vzc0luYmFuZFRleHRUcmFja3Mgd2hlbiByZWFkeVN0YXRlIHJlYWNoZXMKKyAgICAgICAg
ICAgIEhBVkVfTUVUQURBVEEKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBy
b2Nlc3NJbmJhbmRUZXh0VHJhY2tzKTogRmV0Y2ggdGhlIGluLWJhbmQgdGV4dCB0cmFja3MgZnJv
bSB0aGUgCisgICAgICAgICAgICBtZWRpYSBwbGF5ZXIgYW5kIHByb2Nlc3NlcyB0aGVtLgorICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorCisgICAgICAgICogaHRtbC90cmFjay9J
bmJhbmRUZXh0VHJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZFRl
eHRUcmFjay5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZFRleHRUcmFja1By
aXZhdGUuaDogQWRkZWQuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorICAg
ICAgICAoVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6Y2xlYXJDbGll
bnQpOiBSZW1vdmUgdmlydHVhbCwgaXQgaXMgdW5uZWNlc3NhcnkKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRUcmFjazo6bW9kZSk6IE1ha2UgdmlydHVhbCBzbyBkZXJpdmVkIGNsYXNzZXMgY2FuIG92
ZXJyaWRlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpzZXRNb2RlKTogRGl0dG8uCisK
KyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwOgorICAgICAgICAoVGV4dFRy
YWNrTGlzdDo6bGVuZ3RoKTogVXBkYXRlIHRvIGRlYWwgd2l0aCBpbi1iYW5kIHRyYWNrcy4KKyAg
ICAgICAgKFRleHRUcmFja0xpc3Q6OmdldFRyYWNrSW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFRl
eHRUcmFja0xpc3Q6OmdldFRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MpOiBEaXR0
by4KKyAgICAgICAgKFRleHRUcmFja0xpc3Q6Oml0ZW0pOiBEaXR0by4KKyAgICAgICAgKFRleHRU
cmFja0xpc3Q6OmludmFsaWRhdGVUcmFja0luZGV4ZXNBZnRlclRyYWNrKTogTmV3LCBpbnZhbGlk
ZSB0aGUgY2FjaGVkIHRyYWNrIGluZGV4ZXMgb2YKKyAgICAgICAgICAgIGFsbCB0cmFja3MgYWZ0
ZXIgYW5vdGhlci4KKyAgICAgICAgKFRleHRUcmFja0xpc3Q6OmFwcGVuZCk6IFVwZGF0ZSB0byBk
ZWFsIHdpdGggaW4tYmFuZCB0cmFja3MuCisgICAgICAgIChUZXh0VHJhY2tMaXN0OjpyZW1vdmUp
OiBVcGRhdGUgdG8gZGVhbCB3aXRoIGluLWJhbmQgdHJhY2tzLgorICAgICAgICAoVGV4dFRyYWNr
TGlzdDo6c2NoZWR1bGVBZGRUcmFja0V2ZW50KTogUmVtb3ZlIHR5cG8uCisgICAgICAgICogaHRt
bC90cmFjay9UZXh0VHJhY2tMaXN0Lmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6Z2V0VGV4dFRy
YWNrcyk6IE5ldywgcGFzcyB0aHJvdWdoIHRvIHRoZSBtZWRpYSBlbmdpbmUuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0VGV4dFRyYWNrQ2xpZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2U6OnNldFByZWxvYWQpOiBDbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzb3VyY2VFbmRPZlN0cmVhbSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpnZXRUZXh0VHJh
Y2tzKTogTmV3IGNsaWVudCBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2U6OnNldFRleHRUcmFja0NsaWVudCk6IERpdHRvLgorCiAyMDEyLTExLTIw
ICBFbGxpb3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN0b3Jl
IE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2sgaW4gYSBoaWRkZW4gcHJvcGVydHkgZm9yIFY4Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTM1MjkxKQorKysgU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksNiArMTU0OSw3IEBAIFNF
VChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAK
ICAgICBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCiAKKyAgICBodG1s
L3RyYWNrL0luYmFuZFRleHRUcmFjay5jcHAKICAgICBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRy
YWNrLmNwcAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAogICAgIGh0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lv
biAxMzUyOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjAxLDYgKzM2MDEsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL1Rp
bWVSYW5nZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVSYW5nZXMuaCBcCisJU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
TG9hZGFibGVUZXh0VHJhY2suaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2suY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTM1MjkxKQorKysgU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTg2OCw2ICsxODY4LDggQEAgSEVB
REVSUyArPSBcCiAgICAgaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaCBcCiAgICAgaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaCBcCiAgICAgaHRtbC9zaGFkb3cvRGV0YWls
c01hcmtlckNvbnRyb2wuaCBcCisgICAgaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaCBcCisg
ICAgaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2tQcml2YXRlLmggXAogICAgIGh0bWwvdHJhY2sv
TG9hZGFibGVUZXh0VHJhY2suaCBcCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2suaCBcCiAgICAg
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biAxMzUyOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTQ0NTksNiArNDQ1OSw5IEBACiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L1RleHRGaWVsZERl
Y29yYXRpb25FbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvVGV4dEZpZWxk
RGVjb3JhdGlvbkVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRtbC90cmFjay9JbmJhbmRUZXh0
VHJhY2suY3BwJywKKyAgICAgICAgICAgICdodG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oJywK
KyAgICAgICAgICAgICdodG1sL3RyYWNrL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaCcsCiAgICAg
ICAgICAgICAnaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAnLAogICAgICAgICAgICAg
J2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suaCcsCiAgICAgICAgICAgICAnaHRtbC90cmFj
ay9UZXh0VHJhY2suY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzNTI5MSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDYgKzEwOCw5IEBACiAJCTA3MDc1NkRGMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFj
a0N1ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDcwNzU2RDkxNDIzOUI0QzAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgKi87
IH07CiAJCTA3MDc1NkUwMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDc1NkRBMTQy
MzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCAqLzsgfTsKIAkJMDcwOUZDNEUx
MDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAv
KiBBY2Nlc3NpYmlsaXR5U2xpZGVyLmggKi87IH07CisJCTA3MTFCRjhFMTY0MkQ5RDEwMDQxOUUz
NiAvKiBJbmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDcxMUJGOEQxNjQyRDlEMTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFj
ay5jcHAgKi87IH07CisJCTA3MTFCRjhGMTY0MkQ5RjQwMDQxOUUzNiAvKiBJbmJhbmRUZXh0VHJh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MTFC
RjhDMTY0MkQ4MTEwMDQxOUUzNiAvKiBJbmJhbmRUZXh0VHJhY2suaCAqLzsgfTsKKwkJMDcxMUJG
OTExNjQzMEM5MTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MTFCRjkwMTY0MzBDOTAwMDQx
OUUzNiAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmggKi87IH07CiAJCTA3MjBCMEEwMTREMzMy
MzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RTE0RDMzMjM1MDA2NDI5NTUgLyogR2Vu
ZXJpY0V2ZW50UXVldWUuY3BwICovOyB9OwogCQkwNzIwQjBBMDE0RDMzMjM1MDA2NDI5NTYgLyog
R2VzdHVyZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3MjBCMDlGMTREMzMyMzUwMDY0Mjk1NiAvKiBHZXN0dXJlRXZlbnQuY3BwICovOyB9
OwogCQkwNzIwQjBBMTE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjBCMDlGMTREMzMy
MzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MTgxLDYgKzcxODQsOSBAQAogCQkwNzA3NTZE
QTE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVMaXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVGV4dFRyYWNrQ3VlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwNzA5RkM0RDEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNs
aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U2xp
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEREOEY1MEYwMTg2ODAwMDcy
N0RFQiAvKiBtZWRpYUNvbnRyb2xzLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBtZWRpYUNv
bnRyb2xzLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcxMUJGOEMxNjQyRDgx
MTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmJhbmRUZXh0VHJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MDcxMUJGOEQxNjQyRDlEMTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFjay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmJhbmRUZXh0VHJhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwNzExQkY5MDE2NDMwQzkwMDA0MTlFMzYgLyogSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBC
MDlFMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmlj
RXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljRXZl
bnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIwQjA5RjE0RDMzMjM1
MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEdlc3R1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xOTM2NSw2ICsxOTM3MSw5IEBACiAJCUIxQUQ0RTc3MTNBMTJBNzIwMDg0NkIyNyAvKiB0cmFj
ayAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDcxMUJG
OTAxNjQzMEM5MDAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGUuaCAqLywKKwkJCQkw
NzExQkY4RDE2NDJEOUQxMDA0MTlFMzYgLyogSW5iYW5kVGV4dFRyYWNrLmNwcCAqLywKKwkJCQkw
NzExQkY4QzE2NDJEODExMDA0MTlFMzYgLyogSW5iYW5kVGV4dFRyYWNrLmggKi8sCiAJCQkJOTc1
OUU5MzQxNEVGMUNGODAwMjZBMkREIC8qIExvYWRhYmxlVGV4dFRyYWNrLmNwcCAqLywKIAkJCQk5
NzU5RTk0ODE0RUYxRDQ5MDAyNkEyREQgLyogTG9hZGFibGVUZXh0VHJhY2suaCAqLywKIAkJCQk5
NzU5RTkzNTE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrLmNwcCAqLywKQEAgLTIzOTM5LDYg
KzIzOTQ4LDggQEAKIAkJCQlCMjc1MzU3MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNv
dXJjZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyog
SW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MTFCRjhGMTY0MkQ5RjQw
MDQxOUUzNiAvKiBJbmJhbmRUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MTFCRjkx
MTY0MzBDOTEwMDQxOUUzNiAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlEQjIzQzJDQzBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUYzNjQ0QjAwMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3Rl
ZFNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUFCNjA1NEYxNTg3NEM1ODAwN0I1MDMxIC8q
IEluamVjdGVkU2NyaXB0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzE0NSw2ICsyNzE1Niw3
IEBACiAJCQkJQjI3NTM1NUYwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNEIzNDgwOTMwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNl
Q0dNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTExNzBFNkUxREE3MDBCRjYwODggLyog
SW1wbGljaXRBbmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcxMUJGOEUxNjQyRDlE
MTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQjIz
QzJDQjBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjM2NDRBRkYxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUFBQjYwNTRFMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3Rl
ZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNTI5MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDgg
QEAKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICNpbmNsdWRlICJIVE1MVHJhY2tFbGVtZW50
LmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJUZXh0VHJhY2tDdWVMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrTGlzdC5oIgpAQCAt
MTczOCw2ICsxNzQwLDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShN
ZWQKICAgICAgICAgcHJlcGFyZU1lZGlhRnJhZ21lbnRVUkkoKTsKICAgICAgICAgc2NoZWR1bGVF
dmVudChldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCk7CiAgICAgICAgIHNjaGVkdWxl
RXZlbnQoZXZlbnROYW1lcygpLmxvYWRlZG1ldGFkYXRhRXZlbnQpOworI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICAgICAgaWYgKG1fcGxheWVyICYmIG1fcGxheWVyLT5oYXNDbG9zZWRDYXB0
aW9ucygpKQorICAgICAgICAgICAgcHJvY2Vzc0luYmFuZFRleHRUcmFja3MoKTsKKyNlbmRpZgog
ICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICAgICAgbWVkaWFDb250cm9s
cygpLT5sb2FkZWRNZXRhZGF0YSgpOwogICAgICAgICBpZiAocmVuZGVyZXIoKSkKQEAgLTI3MTYs
NiArMjcyMiw1MCBAQCBmbG9hdCBIVE1MTWVkaWFFbGVtZW50OjpwZXJjZW50TG9hZGVkKCkgCiB9
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByb2Nl
c3NJbmJhbmRUZXh0VHJhY2tzKCkKK3sKKyAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rv
cjxSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZT4gPiBwcml2YXRlVGV4dFRyYWNrczsKKyAg
ICBtX3BsYXllci0+Z2V0VGV4dFRyYWNrcyhwcml2YXRlVGV4dFRyYWNrcyk7CisKKyAgICBpZiAo
IXByaXZhdGVUZXh0VHJhY2tzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcml2YXRlVGV4dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAvLyA0LjguMTAuMTIuMiBTb3VyY2luZyBpbi1iYW5kIHRleHQgdHJhY2tzCisgICAgICAgIC8v
IDEuIEFzc29jaWF0ZSB0aGUgcmVsZXZhbnQgZGF0YSB3aXRoIGEgbmV3IHRleHQgdHJhY2sgYW5k
IGl0cyBjb3JyZXNwb25kaW5nIG5ldyBUZXh0VHJhY2sgb2JqZWN0LgorICAgICAgICAKKyAgICAg
ICAgLy8gMi4gU2V0IHRoZSBuZXcgdGV4dCB0cmFjaydzIGtpbmQsIGxhYmVsLCBhbmQgbGFuZ3Vh
Z2UgYmFzZWQgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgcmVsZXZhbnQgZGF0YSwKKyAgICAgICAg
Ly8gYXMgZGVmaW5lZCBieSB0aGUgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbi4gSWYgdGhlcmUgaXMg
bm8gbGFiZWwgaW4gdGhhdCBkYXRhLCB0aGVuIHRoZSBsYWJlbCBtdXN0CisgICAgICAgIC8vIGJl
IHNldCB0byB0aGUgZW1wdHkgc3RyaW5nLgorICAgICAgICAvLyAgIC0gVGhpcyBpcyBkb25lIGJ5
IHRoZSBtZWRpYSBlbmdpbmUgd2hlbiBpdCBjcmVhdGVzIHRoZSBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlLgorICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSBJbmJhbmRUZXh0VHJh
Y2s6OmNyZWF0ZShBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhp
cywgcHJpdmF0ZVRleHRUcmFja3NbaV0pOworICAgICAgICAKKyAgICAgICAgLy8gNS4gUG9wdWxh
dGUgdGhlIG5ldyB0ZXh0IHRyYWNrJ3MgbGlzdCBvZiBjdWVzIHdpdGggdGhlIGN1ZXMgcGFyc2Vk
IHNvIGZhciwgZm9sbGxvd2luZyB0aGUgZ3VpZGVsaW5lcyBmb3IgZXhwb3NpbmcKKyAgICAgICAg
Ly8gY3VlcywgYW5kIGJlZ2luIHVwZGF0aW5nIGl0IGR5bmFtaWNhbGx5IGFzIG5lY2Vzc2FyeS4K
KyAgICAgICAgLy8gICAtIFRoaXMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSBhcyB0aGUgbWVk
aWEgZW5naW5lIGxvYWRzIHRoZSBjdWVzCisgICAgICAgIAorICAgICAgICAvLyA2LiBTZXQgdGhl
IG5ldyB0ZXh0IHRyYWNrJ3MgcmVhZGluZXNzIHN0YXRlIHRvIGxvYWRlZC4KKyAgICAgICAgdGV4
dFRyYWNrLT5zZXRSZWFkaW5lc3NTdGF0ZShUZXh0VHJhY2s6OkxvYWRlZCk7CisgICAgICAgIAor
ICAgICAgICAvLyA3LiBTZXQgdGhlIG5ldyB0ZXh0IHRyYWNrJ3MgbW9kZSB0byB0aGUgbW9kZSBj
b25zaXN0ZW50IHdpdGggdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBhbmQgdGhlIHJlcXVpcmVtZW50
cyBvZgorICAgICAgICAvLyB0aGUgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGRhdGEu
CisgICAgICAgIC8vICAtIFRoaXMgd2lsbCBoYXBwZW4gaW4gY29uZmlndXJlVGV4dFRyYWNrcygp
CisgICAgICAgIAorICAgICAgICAvLyA4LiBBZGQgdGhlIG5ldyB0ZXh0IHRyYWNrIHRvIHRoZSBt
ZWRpYSBlbGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcy4KKyAgICAgICAgdGV4dFRyYWNrcygp
LT5hcHBlbmQodGV4dFRyYWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIDkuIEZpcmUgYW4gZXZl
bnQgd2l0aCB0aGUgbmFtZSBhZGR0cmFjaywgdGhhdCBkb2VzIG5vdCBidWJibGUgYW5kIGlzIG5v
dCBjYW5jZWxhYmxlLCBhbmQgdGhhdCB1c2VzIHRoZSBUcmFja0V2ZW50CisgICAgICAgIC8vIGlu
dGVyZmFjZSwgd2l0aCB0aGUgdHJhY2sgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSB0ZXh0
IHRyYWNrJ3MgVGV4dFRyYWNrIG9iamVjdCwgYXQgdGhlIG1lZGlhIGVsZW1lbnQncworICAgICAg
ICAvLyB0ZXh0VHJhY2tzIGF0dHJpYnV0ZSdzIFRleHRUcmFja0xpc3Qgb2JqZWN0LgorICAgICAg
ICAvLyAgLSBUaGlzIHdhcyBkb25lIGluIFRleHRUcmFja0xpc3Q6OmFwcGVuZAorICAgIH0KKwor
ICAgIGNvbmZpZ3VyZVRleHRUcmFja3MoKTsKK30KKwogUGFzc1JlZlB0cjxUZXh0VHJhY2s+IEhU
TUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0
cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0VmlkZW9UcmFja0VuYWJs
ZWQoKSkKQEAgLTI4MTAsNyArMjg2MCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFJl
bW92ZVRyYWNrKEgKICAgICBpZiAoIW1fdGV4dFRyYWNrcykKICAgICAgICAgcmV0dXJuOwogICAg
IAotCiAgICAgLy8gNC44LjEwLjEyLjMgU291cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MK
ICAgICAvLyBXaGVuIGEgdHJhY2sgZWxlbWVudCdzIHBhcmVudCBlbGVtZW50IGNoYW5nZXMgYW5k
IHRoZSBvbGQgcGFyZW50IHdhcyBhIG1lZGlhIGVsZW1lbnQsIAogICAgIC8vIHRoZW4gdGhlIHVz
ZXIgYWdlbnQgbXVzdCByZW1vdmUgdGhlIHRyYWNrIGVsZW1lbnQncyBjb3JyZXNwb25kaW5nIHRl
eHQgdHJhY2sgZnJvbSB0aGUgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaAkocmV2aXNpb24gMTM1MjkxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgY2xhc3MgRGlzcGxheVNs
ZWVwRGlzYWJsZXI7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNzIElu
YmFuZFRleHRUcmFja1ByaXZhdGU7CisKIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPGRvdWJsZSwg
VGV4dFRyYWNrQ3VlKj4gQ3VlSW50ZXJ2YWxUcmVlOwogdHlwZWRlZiBWZWN0b3I8Q3VlSW50ZXJ2
YWxUcmVlOjpJbnRlcnZhbFR5cGU+IEN1ZUxpc3Q7CiAjZW5kaWYKQEAgLTIxMyw2ICsyMTUsOCBA
QCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2s+IGFkZFRleHRUcmFjayhjb25zdCBT
dHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBhZGRUZXh0VHJhY2soa2luZCwgbGFiZWwsIGVtcHR5U3RyaW5nKCksIGVjKTsgfQogICAg
IFBhc3NSZWZQdHI8VGV4dFRyYWNrPiBhZGRUZXh0VHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkVGV4dFRyYWNrKGtpbmQsIGVtcHR5U3RyaW5n
KCksIGVtcHR5U3RyaW5nKCksIGVjKTsgfQogCisgICAgdm9pZCBwcm9jZXNzSW5iYW5kVGV4dFRy
YWNrcygpOworCiAgICAgVGV4dFRyYWNrTGlzdCogdGV4dFRyYWNrcygpOwogICAgIEN1ZUxpc3Qg
Y3VycmVudGx5QWN0aXZlQ3VlcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudGx5QWN0aXZlQ3Vl
czsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJh
Y2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRU
ZXh0VHJhY2suY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUg
IkluYmFuZFRleHRUcmFjay5oIgorI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIK
KworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJN
ZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIlRleHRUcmFja0N1ZUxpc3QuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbmJhbmRUZXh0VHJhY2s6OkluYmFuZFRleHRUcmFjayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBUZXh0VHJhY2tDbGllbnQqIGNsaWVudCwgUmVmUHRyPElu
YmFuZFRleHRUcmFja1ByaXZhdGU+IHBsYXllclByaXZhdGUpCisgICAgOiBUZXh0VHJhY2soY29u
dGV4dCwgY2xpZW50LCBlbXB0eVN0cmluZygpLCBwbGF5ZXJQcml2YXRlLT5sYWJlbCgpLCBwbGF5
ZXJQcml2YXRlLT5sYW5ndWFnZSgpLCBJbkJhbmQpCisgICAgLCBtX3ByaXZhdGUocGxheWVyUHJp
dmF0ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldENsaWVudCh0aGlzKTsKKyAgICAKKyAgICBzd2l0
Y2ggKHBsYXllclByaXZhdGUtPmtpbmQoKSkgeworICAgIGNhc2UgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZTo6c3VidGl0bGVzOgorICAgICAgICBzZXRLaW5kKFRleHRUcmFjazo6c3VidGl0bGVzS2V5
d29yZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
OjpjYXB0aW9uczoKKyAgICAgICAgc2V0S2luZChUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpkZXNj
cmlwdGlvbnM6CisgICAgICAgIHNldEtpbmQoVGV4dFRyYWNrOjpkZXNjcmlwdGlvbnNLZXl3b3Jk
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEluYmFuZFRleHRUcmFja1ByaXZhdGU6OmNo
YXB0ZXJzOgorICAgICAgICBzZXRLaW5kKFRleHRUcmFjazo6Y2hhcHRlcnNLZXl3b3JkKCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEluYmFuZFRleHRUcmFja1ByaXZhdGU6Om1ldGFkYXRh
OgorICAgICAgICBzZXRLaW5kKFRleHRUcmFjazo6bWV0YWRhdGFLZXl3b3JkKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEluYmFuZFRleHRUcmFja1ByaXZhdGU6Om5vbmU6CisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworSW5iYW5kVGV4dFRyYWNrOjp+SW5iYW5kVGV4dFRyYWNrKCkKK3sKKyAgICBtX3By
aXZhdGUtPnNldENsaWVudCgwKTsKK30KKwordm9pZCBJbmJhbmRUZXh0VHJhY2s6OnNldE1vZGUo
Y29uc3QgQXRvbWljU3RyaW5nJiBtb2RlKQoreworICAgIFRleHRUcmFjazo6c2V0TW9kZShtb2Rl
KTsKKworICAgIGlmIChtb2RlID09IFRleHRUcmFjazo6ZGlzYWJsZWRLZXl3b3JkKCkpCisgICAg
ICAgIG1fcHJpdmF0ZS0+c2V0TW9kZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpkaXNhYmxlZCk7
CisgICAgZWxzZSBpZiAobW9kZSA9PSBUZXh0VHJhY2s6OmhpZGRlbktleXdvcmQoKSkKKyAgICAg
ICAgbV9wcml2YXRlLT5zZXRNb2RlKEluYmFuZFRleHRUcmFja1ByaXZhdGU6OmhpZGRlbik7Cisg
ICAgZWxzZSBpZiAobW9kZSA9PSBUZXh0VHJhY2s6OnNob3dpbmdLZXl3b3JkKCkpCisgICAgICAg
IG1fcHJpdmF0ZS0+c2V0TW9kZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpzaG93aW5nKTsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzaXplX3QgSW5iYW5k
VGV4dFRyYWNrOjppbmJhbmRUcmFja0luZGV4KCkKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlKTsK
KyAgICByZXR1cm4gbV9wcml2YXRlLT50ZXh0VHJhY2tJbmRleCgpOworfQorCit2b2lkIEluYmFu
ZFRleHRUcmFjazo6YWRkQ3VlKEluYmFuZFRleHRUcmFja1ByaXZhdGUqLCBkb3VibGUgc3RhcnQs
IGRvdWJsZSBlbmQsIGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IFN0cmluZyYgY29udGVudCwgY29u
c3QgU3RyaW5nJiBzZXR0aW5ncykKK3sKKyAgICBSZWZQdHI8VGV4dFRyYWNrQ3VlPiBjdWUgPSBU
ZXh0VHJhY2tDdWU6OmNyZWF0ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCksIHN0YXJ0LCBlbmQs
IGNvbnRlbnQpOworICAgIGN1ZS0+c2V0SWQoaWQpOworICAgIGN1ZS0+c2V0Q3VlU2V0dGluZ3Mo
c2V0dGluZ3MpOworICAgIGN1ZS0+c2V0VHJhY2sodGhpcyk7CisKKyAgICBpZiAoIW1fY3VlcykK
KyAgICAgICAgbV9jdWVzID0gVGV4dFRyYWNrQ3VlTGlzdDo6Y3JlYXRlKCk7CisgICAgbV9jdWVz
LT5hZGQoY3VlKTsKKyAgICAKKyAgICBpZiAoY2xpZW50KCkpCisgICAgICAgIGNsaWVudCgpLT50
ZXh0VHJhY2tBZGRDdWVzKHRoaXMsIG1fY3Vlcy5nZXQoKSk7Cit9CisgICAgCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9J
bmJhbmRUZXh0VHJhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0luYmFuZFRleHRUcmFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9JbmJhbmRUZXh0VHJhY2suaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBJbmJhbmRUZXh0VHJhY2tfaAorI2RlZmluZSBJbmJhbmRUZXh0VHJhY2tf
aAorCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorCisjaW5jbHVkZSAiVGV4dFRyYWNrLmgiCisj
aW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERv
Y3VtZW50OworY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTsKK2NsYXNzIE1lZGlhUGxheWVy
OworY2xhc3MgVGV4dFRyYWNrQ3VlOworCitjbGFzcyBJbmJhbmRUZXh0VHJhY2tDbGllbnQgewor
cHVibGljOgorICAgIHZpcnR1YWwgfkluYmFuZFRleHRUcmFja0NsaWVudCgpIHsgfQorCisgICAg
dmlydHVhbCB2b2lkIGFkZEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlIC8qc3Rh
cnQqLywgZG91YmxlIC8qZW5kKi8sIGNvbnN0IFN0cmluZyYgLyppZCovLCBjb25zdCBTdHJpbmcm
IC8qY29udGVudCovLCBjb25zdCBTdHJpbmcmIC8qc2V0dGluZ3MqLykgeyB9Cit9OworCitjbGFz
cyBJbmJhbmRUZXh0VHJhY2sgOiBwdWJsaWMgVGV4dFRyYWNrLCBwdWJsaWMgSW5iYW5kVGV4dFRy
YWNrQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJbmJhbmRUZXh0VHJh
Y2s+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBUZXh0VHJhY2tDbGll
bnQqIGNsaWVudCwgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+IHBsYXllclByaXZhdGUp
CisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluYmFuZFRleHRUcmFjayhjb250
ZXh0LCBjbGllbnQsIHBsYXllclByaXZhdGUpKTsKKyAgICB9CisgICAgdmlydHVhbCB+SW5iYW5k
VGV4dFRyYWNrKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TW9kZShjb25zdCBBdG9taWNTdHJp
bmcmKSBPVkVSUklERTsKKyAgICBzaXplX3QgaW5iYW5kVHJhY2tJbmRleCgpOworCitwcml2YXRl
OgorICAgIEluYmFuZFRleHRUcmFjayhTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgVGV4dFRyYWNr
Q2xpZW50KiwgUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+KTsKKworICAgIHZpcnR1YWwg
dm9pZCBhZGRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSwgZG91YmxlLCBjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKworICAgIFJlZlB0cjxJ
bmJhbmRUZXh0VHJhY2tQcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNr
L0luYmFuZFRleHRUcmFja1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL3RyYWNrL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluYmFuZFRleHRUcmFja1ByaXZh
dGVfaAorI2RlZmluZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworI2lmIEVOQUJM
RShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBJbmJhbmRUZXh0
VHJhY2tDbGllbnQ7CisKK2NsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGUgOiBwdWJsaWMgUmVm
Q291bnRlZDxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPiB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+IGNyZWF0
ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEluYmFuZFRleHRUcmFja1By
aXZhdGUoKSk7CisgICAgfQorICAgIHZpcnR1YWwgfkluYmFuZFRleHRUcmFja1ByaXZhdGUoKSB7
IH0KKyAgICAKKyAgICB2b2lkIHNldENsaWVudChJbmJhbmRUZXh0VHJhY2tDbGllbnQqIGNsaWVu
dCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQorICAgIEluYmFuZFRleHRUcmFja0NsaWVudCogY2xp
ZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIGVudW0gTW9kZSB7IGRpc2FibGVkLCBo
aWRkZW4sIHNob3dpbmcgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TW9kZShNb2RlIG1vZGUpIHsg
bV9tb2RlID0gbW9kZTsgfTsKKyAgICB2aXJ0dWFsIEluYmFuZFRleHRUcmFja1ByaXZhdGU6Ok1v
ZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorCisgICAgZW51bSBLaW5kIHsgc3Vi
dGl0bGVzLCBjYXB0aW9ucywgZGVzY3JpcHRpb25zLCBjaGFwdGVycywgbWV0YWRhdGEsIG5vbmUg
fTsKKyAgICB2aXJ0dWFsIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG5vbmU7IH0KKworICAg
IHZpcnR1YWwgQXRvbWljU3RyaW5nIGxhYmVsKCkgY29uc3QgeyByZXR1cm4gZW1wdHlTdHJpbmco
KTsgfQorICAgIHZpcnR1YWwgQXRvbWljU3RyaW5nIGxhbmd1YWdlKCkgY29uc3QgeyByZXR1cm4g
ZW1wdHlTdHJpbmcoKTsgfQorICAgIHZpcnR1YWwgYm9vbCBpc0RlZmF1bHQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorCisgICAgdmlydHVhbCBpbnQgdGV4dFRyYWNrSW5kZXgoKSBjb25zdCB7
IHJldHVybiAwOyB9CisKK3Byb3RlY3RlZDoKKyAgICBJbmJhbmRUZXh0VHJhY2tQcml2YXRlKCkK
KyAgICAgICAgOiBtX2NsaWVudCgwKQorICAgICAgICAsIG1fbW9kZShkaXNhYmxlZCkKKyAgICB7
CisgICAgfQorCitwcml2YXRlOgorICAgIEluYmFuZFRleHRUcmFja0NsaWVudCogbV9jbGllbnQ7
CisgICAgTW9kZSBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHJldmlz
aW9uIDEzNTI5MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtODMsOCArODQsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0
b21pY1N0cmluZyYgaGlkZGVuS2V5d29yZCgpOwogICAgIHN0YXRpYyBjb25zdCBBdG9taWNTdHJp
bmcmIHNob3dpbmdLZXl3b3JkKCk7CiAKLSAgICBBdG9taWNTdHJpbmcgbW9kZSgpIGNvbnN0Owot
ICAgIHZvaWQgc2V0TW9kZShjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIEF0b21p
Y1N0cmluZyBtb2RlKCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHNldE1vZGUoY29uc3QgQXRv
bWljU3RyaW5nJik7CiAKICAgICBib29sIHNob3dpbmdCeURlZmF1bHQoKSBjb25zdCB7IHJldHVy
biBtX3Nob3dpbmdCeURlZmF1bHQ7IH0KICAgICB2b2lkIHNldFNob3dpbmdCeURlZmF1bHQoYm9v
bCBzaG93aW5nKSB7IG1fc2hvd2luZ0J5RGVmYXVsdCA9IHNob3dpbmc7IH0KQEAgLTk2LDcgKzk3
LDcgQEAgcHVibGljOgogICAgIFRleHRUcmFja0N1ZUxpc3QqIGN1ZXMoKTsKICAgICBUZXh0VHJh
Y2tDdWVMaXN0KiBhY3RpdmVDdWVzKCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2xlYXJD
bGllbnQoKSB7IG1fY2xpZW50ID0gMDsgfQorICAgIHZvaWQgY2xlYXJDbGllbnQoKSB7IG1fY2xp
ZW50ID0gMDsgfQogICAgIFRleHRUcmFja0NsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGll
bnQ7IH0KIAogICAgIHZvaWQgYWRkQ3VlKFBhc3NSZWZQdHI8VGV4dFRyYWNrQ3VlPiwgRXhjZXB0
aW9uQ29kZSYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJhY2tMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xp
c3QuY3BwCShyZXZpc2lvbiAxMzUyOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFja0xpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMxLDYgKzMxLDggQEAKIAogI2luY2x1
ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSW5iYW5kVGV4dFRyYWNrLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5o
IgogI2luY2x1ZGUgIkxvYWRhYmxlVGV4dFRyYWNrLmgiCiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0
aW9uQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHRUcmFjay5oIgpAQCAtNTMsNyArNTUsNyBAQCBU
ZXh0VHJhY2tMaXN0Ojp+VGV4dFRyYWNrTGlzdCgpCiAKIHVuc2lnbmVkIFRleHRUcmFja0xpc3Q6
Omxlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpICsg
bV9lbGVtZW50VHJhY2tzLnNpemUoKTsKKyAgICByZXR1cm4gbV9hZGRUcmFja1RyYWNrcy5zaXpl
KCkgKyBtX2VsZW1lbnRUcmFja3Muc2l6ZSgpICsgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOwogfQog
CiBpbnQgVGV4dFRyYWNrTGlzdDo6Z2V0VHJhY2tJbmRleChUZXh0VHJhY2sgKnRleHRUcmFjaykK
QEAgLTY0LDYgKzY2LDkgQEAgaW50IFRleHRUcmFja0xpc3Q6OmdldFRyYWNrSW5kZXgoVGV4dFRy
YQogICAgIGlmICh0ZXh0VHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6QWRkVHJhY2sp
CiAgICAgICAgIHJldHVybiBtX2VsZW1lbnRUcmFja3Muc2l6ZSgpICsgbV9hZGRUcmFja1RyYWNr
cy5maW5kKHRleHRUcmFjayk7CiAKKyAgICBpZiAodGV4dFRyYWNrLT50cmFja1R5cGUoKSA9PSBU
ZXh0VHJhY2s6OkluQmFuZCkKKyAgICAgICAgcmV0dXJuIG1fZWxlbWVudFRyYWNrcy5zaXplKCkg
KyBtX2FkZFRyYWNrVHJhY2tzLnNpemUoKSArIG1faW5iYW5kVHJhY2tzLmZpbmQodGV4dFRyYWNr
KTsKKwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgcmV0dXJuIC0xOwpAQCAtODIs
NyArODcsNyBAQCBpbnQgVGV4dFRyYWNrTGlzdDo6Z2V0VHJhY2tJbmRleFJlbGF0aXZlCiAgICAg
ICAgICAgICByZXR1cm4gdHJhY2tJbmRleDsKICAgICAgICAgKyt0cmFja0luZGV4OwogICAgIH0K
LSAgICAKKwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9hZGRUcmFja1RyYWNrcy5zaXpl
KCk7ICsraSkgewogICAgICAgICBpZiAoIW1fYWRkVHJhY2tUcmFja3NbaV0tPmlzUmVuZGVyZWQo
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtOTEsOSArOTYsMTggQEAgaW50IFRleHRUcmFj
a0xpc3Q6OmdldFRyYWNrSW5kZXhSZWxhdGl2ZQogICAgICAgICAgICAgcmV0dXJuIHRyYWNrSW5k
ZXg7CiAgICAgICAgICsrdHJhY2tJbmRleDsKICAgICB9Ci0gICAgCisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1faW5iYW5kVHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICgh
bV9pbmJhbmRUcmFja3NbaV0tPmlzUmVuZGVyZWQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKG1faW5iYW5kVHJhY2tzW2ldID09IHRleHRUcmFjaykKKyAg
ICAgICAgICAgIHJldHVybiB0cmFja0luZGV4OworICAgICAgICArK3RyYWNrSW5kZXg7CisgICAg
fQorCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgCisKICAgICByZXR1cm4gLTE7CiB9
CiAKQEAgLTExMyw5ICsxMjcsNDAgQEAgVGV4dFRyYWNrKiBUZXh0VHJhY2tMaXN0OjppdGVtKHVu
c2lnbmVkIAogICAgIGlmIChpbmRleCA8IG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpKQogICAgICAg
ICByZXR1cm4gbV9hZGRUcmFja1RyYWNrc1tpbmRleF0uZ2V0KCk7CiAKKyAgICBpbmRleCAtPSBt
X2FkZFRyYWNrVHJhY2tzLnNpemUoKTsKKyAgICBpZiAoaW5kZXggPCBtX2luYmFuZFRyYWNrcy5z
aXplKCkpCisgICAgICAgIHJldHVybiBtX2luYmFuZFRyYWNrc1tpbmRleF0uZ2V0KCk7CisKICAg
ICByZXR1cm4gMDsKIH0KIAordm9pZCBUZXh0VHJhY2tMaXN0OjppbnZhbGlkYXRlVHJhY2tJbmRl
eGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2sqIHRyYWNrKQoreworICAgIFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrPiA+KiB0cmFja3MgPSAwOworCisgICAgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBU
ZXh0VHJhY2s6OlRyYWNrRWxlbWVudCkgeworICAgICAgICB0cmFja3MgPSAmbV9lbGVtZW50VHJh
Y2tzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWRkVHJhY2tUcmFja3Muc2l6
ZSgpOyArK2kpCisgICAgICAgICAgICBtX2FkZFRyYWNrVHJhY2tzW2ldLT5pbnZhbGlkYXRlVHJh
Y2tJbmRleCgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5iYW5kVHJhY2tz
LnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9pbmJhbmRUcmFja3NbaV0tPmludmFsaWRhdGVU
cmFja0luZGV4KCk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRy
YWNrOjpBZGRUcmFjaykgeworICAgICAgICB0cmFja3MgPSAmbV9hZGRUcmFja1RyYWNrczsKKyAg
ICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2luYmFuZFRyYWNrcy5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgIG1faW5iYW5kVHJhY2tzW2ldLT5pbnZhbGlkYXRlVHJhY2tJbmRleCgpOwor
ICAgIH0gZWxzZSBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKQor
ICAgICAgICB0cmFja3MgPSAmbV9pbmJhbmRUcmFja3M7CisgICAgZWxzZQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKworICAgIHNpemVfdCBpbmRleCA9IHRyYWNrcy0+ZmluZCh0cmFj
ayk7CisgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm47CisKKyAgICBm
b3IgKHNpemVfdCBpID0gaW5kZXg7IGkgPCB0cmFja3MtPnNpemUoKTsgKytpKQorICAgICAgICB0
cmFja3MtPmF0KGluZGV4KS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKK30KKwogdm9pZCBUZXh0
VHJhY2tMaXN0OjphcHBlbmQoUGFzc1JlZlB0cjxUZXh0VHJhY2s+IHBycFRyYWNrKQogewogICAg
IFJlZlB0cjxUZXh0VHJhY2s+IHRyYWNrID0gcHJwVHJhY2s7CkBAIC0xMjYsMTcgKzE3MSwxNSBA
QCB2b2lkIFRleHRUcmFja0xpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPFRlCiAgICAgICAgIC8vIElu
c2VydCB0cmFja3MgYWRkZWQgZm9yIDx0cmFjaz4gZWxlbWVudCBpbiB0cmVlIG9yZGVyLgogICAg
ICAgICBzaXplX3QgaW5kZXggPSBzdGF0aWNfY2FzdDxMb2FkYWJsZVRleHRUcmFjayo+KHRyYWNr
LmdldCgpKS0+dHJhY2tFbGVtZW50SW5kZXgoKTsKICAgICAgICAgbV9lbGVtZW50VHJhY2tzLmlu
c2VydChpbmRleCwgdHJhY2spOwotCi0gICAgICAgIC8vIEludmFsaWRhdGUgdGhlIGNhY2hlZCBp
bmRleCBmb3IgYWxsIHRoZSBmb2xsb3dpbmcgdHJhY2tzLgotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gaW5kZXg7IGkgPCBtX2VsZW1lbnRUcmFja3Muc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBt
X2VsZW1lbnRUcmFja3NbaV0tPmludmFsaWRhdGVUcmFja0luZGV4KCk7Ci0KLSAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX2FkZFRyYWNrVHJhY2tzLnNpemUoKTsgKytpKQotICAgICAg
ICAgICAgbV9hZGRUcmFja1RyYWNrc1tpXS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKLQorICAg
IH0gZWxzZSBpZiAodHJhY2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKSB7Cisg
ICAgICAgIC8vIEluc2VydCB0cmFja3MgYWRkZWQgZm9yIGluLWJhbmQgaW4gdGhlIG1lZGlhIGZp
bGUgb3JkZXIuCisgICAgICAgIHNpemVfdCBpbmRleCA9IHN0YXRpY19jYXN0PEluYmFuZFRleHRU
cmFjayo+KHRyYWNrLmdldCgpKS0+aW5iYW5kVHJhY2tJbmRleCgpOworICAgICAgICBtX2luYmFu
ZFRyYWNrcy5pbnNlcnQoaW5kZXgsIHRyYWNrKTsKICAgICB9IGVsc2UKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAKKyAgICBpbnZhbGlkYXRlVHJhY2tJbmRleGVzQWZ0ZXJUcmFjayh0
cmFjay5nZXQoKSk7CisKICAgICBBU1NFUlQoIXRyYWNrLT5tZWRpYUVsZW1lbnQoKSB8fCB0cmFj
ay0+bWVkaWFFbGVtZW50KCkgPT0gbV9vd25lcik7CiAgICAgdHJhY2stPnNldE1lZGlhRWxlbWVu
dChtX293bmVyKTsKIApAQCAtMTUxLDYgKzE5NCw4IEBAIHZvaWQgVGV4dFRyYWNrTGlzdDo6cmVt
b3ZlKFRleHRUcmFjayogdHIKICAgICAgICAgdHJhY2tzID0gJm1fZWxlbWVudFRyYWNrczsKICAg
ICBlbHNlIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpBZGRUcmFjaykKICAg
ICAgICAgdHJhY2tzID0gJm1fYWRkVHJhY2tUcmFja3M7CisgICAgZWxzZSBpZiAodHJhY2stPnRy
YWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKQorICAgICAgICB0cmFja3MgPSAmbV9pbmJh
bmRUcmFja3M7CiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIApAQCAt
MTU4LDYgKzIwMyw4IEBAIHZvaWQgVGV4dFRyYWNrTGlzdDo6cmVtb3ZlKFRleHRUcmFjayogdHIK
ICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIAorICAgIGludmFs
aWRhdGVUcmFja0luZGV4ZXNBZnRlclRyYWNrKHRyYWNrKTsKKwogICAgIEFTU0VSVCh0cmFjay0+
bWVkaWFFbGVtZW50KCkgPT0gbV9vd25lcik7CiAgICAgdHJhY2stPnNldE1lZGlhRWxlbWVudCgw
KTsKIApAQCAtMTcyLDcgKzIxOSw2IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgVGV4dFRyYWNrTGlz
dDo6aW50ZXIKIHZvaWQgVGV4dFRyYWNrTGlzdDo6c2NoZWR1bGVBZGRUcmFja0V2ZW50KFBhc3NS
ZWZQdHI8VGV4dFRyYWNrPiB0cmFjaykKIHsKICAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBv
dXQtb2YtYmFuZCB0ZXh0IHRyYWNrcwotICAgIC8vIDQuOC4xMC4xMi4zIFNvdXJjaW5nIG91dC1v
Zi1iYW5kIHRleHQgdHJhY2tzCiAgICAgLy8gNC44LjEwLjEyLjQgVGV4dCB0cmFjayBBUEkKICAg
ICAvLyAuLi4gdGhlbiBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhbiBldmVudCB3aXRoIHRoZSBuYW1l
IGFkZHRyYWNrLCB0aGF0IGRvZXMgbm90IAogICAgIC8vIGJ1YmJsZSBhbmQgaXMgbm90IGNhbmNl
bGFibGUsIGFuZCB0aGF0IHVzZXMgdGhlIFRyYWNrRXZlbnQgaW50ZXJmYWNlLCB3aXRoIApAQCAt
MTk0LDcgKzI0MCw3IEBAIHZvaWQgVGV4dFRyYWNrTGlzdDo6YXN5bmNFdmVudFRpbWVyRmlyZWQK
IHsKICAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IHBlbmRpbmdFdmVudHM7CiAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7Ci0gICAgCisKICAgICArK21fZGlzcGF0Y2hpbmdFdmVudHM7CiAgICAg
bV9wZW5kaW5nRXZlbnRzLnN3YXAocGVuZGluZ0V2ZW50cyk7CiAgICAgc2l6ZV90IGNvdW50ID0g
cGVuZGluZ0V2ZW50cy5zaXplKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFja0xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1Rl
eHRUcmFja0xpc3QuaAkocmV2aXNpb24gMTM1MjkxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2tMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjgsNyArNjgsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIGNsZWFyT3duZXIoKSB7IG1fb3duZXIgPSAwOyB9CiAgICAgTm9kZSog
b3duZXIoKSBjb25zdDsKLSAgICAKKwogICAgIGJvb2wgaXNGaXJpbmdFdmVudExpc3RlbmVycygp
IHsgcmV0dXJuIG1fZGlzcGF0Y2hpbmdFdmVudHM7IH0KIAogcHJpdmF0ZToKQEAgLTgzLDYgKzgz
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHNjaGVkdWxlQWRkVHJhY2tFdmVudChQYXNzUmVmUHRy
PFRleHRUcmFjaz4pOwogICAgIHZvaWQgYXN5bmNFdmVudFRpbWVyRmlyZWQoVGltZXI8VGV4dFRy
YWNrTGlzdD4qKTsKIAorICAgIHZvaWQgaW52YWxpZGF0ZVRyYWNrSW5kZXhlc0FmdGVyVHJhY2so
VGV4dFRyYWNrKik7CisKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBtX2NvbnRleHQ7CiAg
ICAgSFRNTE1lZGlhRWxlbWVudCogbV9vd25lcjsKIApAQCAtOTIsNyArOTQsOCBAQCBwcml2YXRl
OgogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKICAgICBWZWN0b3I8UmVm
UHRyPFRleHRUcmFjaz4gPiBtX2FkZFRyYWNrVHJhY2tzOwogICAgIFZlY3RvcjxSZWZQdHI8VGV4
dFRyYWNrPiA+IG1fZWxlbWVudFRyYWNrczsKLSAgICAKKyAgICBWZWN0b3I8UmVmUHRyPFRleHRU
cmFjaz4gPiBtX2luYmFuZFRyYWNrczsKKwogICAgIGludCBtX2Rpc3BhdGNoaW5nRXZlbnRzOwog
fTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmNwcAkocmV2aXNpb24gMTM1MjkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCwxMCBA
QAogI2luY2x1ZGUgIlRpbWVSYW5nZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKKyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZS5oIgorI2VuZGlmCisKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlIDxRdEdsb2JhbD4K
ICNlbmRpZgpAQCAtMTEwOSw2ICsxMTEzLDE4IEBAIENhY2hlZFJlc291cmNlTG9hZGVyKiBNZWRp
YVBsYXllcjo6Y2FjaGUKICAgICByZXR1cm4gbV9tZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5
ZXJDYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogfQogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQor
dm9pZCBNZWRpYVBsYXllcjo6Z2V0VGV4dFRyYWNrcyhWZWN0b3I8UmVmUHRyPEluYmFuZFRleHRU
cmFja1ByaXZhdGU+ID4mIHRyYWNrcykKK3sKKyAgICBtX3ByaXZhdGUtPmdldFRleHRUcmFja3Mo
dHJhY2tzKTsKK30KKwordm9pZCBNZWRpYVBsYXllcjo6c2V0VGV4dFRyYWNrQ2xpZW50KFRleHRU
cmFja0NsaWVudCogY2xpZW50KQoreworICAgIG1fcHJpdmF0ZS0+c2V0VGV4dFRyYWNrQ2xpZW50
KGNsaWVudCk7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkocmV2aXNpb24gMTM1MjkxKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTksOCArNTksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQXVk
aW9Tb3VyY2VQcm92aWRlcjsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgR1N0cmVhbWVyR1dvcmxk
OworY2xhc3MgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTsKIGNsYXNzIE1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZTsKIGNsYXNzIE1lZGlhU291cmNlOworY2xhc3MgVGV4dFRyYWNrQ2xpZW50Owog
CiAvLyBTdHJ1Y3R1cmUgdGhhdCB3aWxsIGhvbGQgZXZlcnkgbmF0aXZlCiAvLyB0eXBlcyBzdXBw
b3J0ZWQgYnkgdGhlIGN1cnJlbnQgbWVkaWEgcGxheWVyLgpAQCAtNDI3LDYgKzQyOSwxMSBAQCBw
dWJsaWM6CiAKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRlciogY2FjaGVkUmVzb3VyY2VMb2FkZXIo
KTsKIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICB2b2lkIGdldFRleHRUcmFja3MoVmVj
dG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPiA+Jik7CisgICAgdm9pZCBzZXRUZXh0
VHJhY2tDbGllbnQoVGV4dFRyYWNrQ2xpZW50Kik7CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBN
ZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCopOwogICAgIHZvaWQgbG9hZFdpdGhOZXh0TWVk
aWFFbmdpbmUoTWVkaWFQbGF5ZXJGYWN0b3J5Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkocmV2aXNpb24g
MTM1MjkxKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQ
cml2YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEwNCw3ICsx
MDQsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoR3JhcGhpY3NDb250ZXh0KiBjLCBjb25zdCBJbnRSZWN0JiByKSB7IHBhaW50KGMsIHIp
OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgc2V0UHJlbG9hZChNZWRpYVBsYXllcjo6UHJlbG9hZCkg
eyB9OworICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVsb2FkKE1lZGlhUGxheWVyOjpQcmVsb2FkKSB7
IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYXNBdmFpbGFibGVWaWRlb0ZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gcmVhZHlTdGF0ZSgpID49IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7IH0KIApA
QCAtMTc0LDcgKzE3NCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgc291cmNlQXBwZW5k
KGNvbnN0IFN0cmluZyYgaWQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxl
bmd0aCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgc291cmNlQWJvcnQoY29u
c3QgU3RyaW5nJiBpZCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc291cmNl
U2V0RHVyYXRpb24oZG91YmxlKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc291cmNlRW5kT2ZTdHJl
YW0oTWVkaWFQbGF5ZXI6OkVuZE9mU3RyZWFtU3RhdHVzKSB7IH07CisgICAgdmlydHVhbCB2b2lk
IHNvdXJjZUVuZE9mU3RyZWFtKE1lZGlhUGxheWVyOjpFbmRPZlN0cmVhbVN0YXR1cykgeyB9CiAg
ICAgdmlydHVhbCBib29sIHNvdXJjZVNldFRpbWVzdGFtcE9mZnNldChjb25zdCBTdHJpbmcmIGlk
LCBkb3VibGUgb2Zmc2V0KSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCiAKQEAgLTE4Myw2ICsx
ODMsMTEgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5RXhjZXB0
aW9uIGdlbmVyYXRlS2V5UmVxdWVzdChjb25zdCBTdHJpbmcmLCBjb25zdCB1bnNpZ25lZCBjaGFy
KiwgdW5zaWduZWQpIHsgcmV0dXJuIE1lZGlhUGxheWVyOjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7
IH0KICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpNZWRpYUtleUV4Y2VwdGlvbiBjYW5jZWxLZXlS
ZXF1ZXN0KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpIHsgcmV0dXJuIE1lZGlhUGxheWVy
OjpLZXlTeXN0ZW1Ob3RTdXBwb3J0ZWQ7IH0KICNlbmRpZgorCisjaWYgRU5BQkxFKFZJREVPX1RS
QUNLKQorICAgIHZpcnR1YWwgdm9pZCBnZXRUZXh0VHJhY2tzKFZlY3RvcjxSZWZQdHI8SW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZT4gPiYpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0VHJhY2tD
bGllbnQoVGV4dFRyYWNrQ2xpZW50KikgeyB9CisjZW5kaWYKIH07CiAKIH0K
</data>
<flag name="commit-queue"
          id="190670"
          type_id="3"
          status="-"
          setter="gtk-ews"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175276</attachid>
            <date>2012-11-20 14:16:41 -0800</date>
            <delta_ts>2012-11-20 23:55:11 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>inband_tracks_patch_3.txt</filename>
            <type>text/plain</type>
            <size>37457</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEzNTMwNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDEyLTExLTIwICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIEluLWJhbmQgdGV4dCB0
cmFja3MgaW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEwMjgzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEFkZCB0aGUgaW5mcmFzdHJ1Y3R1cmUgbmVjZXNzYXJ5IHRvIGFsbG93IGEg
cG9ydC1zcGVjaWZpYyBtZWRpYSBlbmdpbmUgdG8gZXhwb3NlIGluLWJhbmQgdGV4dAorICAgICAg
ICB0cmFja3MuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGlzIHBhdGNoIG9ubHkgYWRkcyBw
bHVtYmluZy4gRXhpc3RpbmcgdGVzdHMgdmVyaWZ5IHRoYXQgdGhlc2UgY2hhbmdlcyBkb24ndAor
ICAgICAgICBicmVhayBleGlzdGluZyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6IEFkZCBuZXcgcHJvamVjdCBmaWxlcy4KKyAgICAgICAgKiBHTlVtYWtlZmlsZS5s
aXN0LmFtOiBEaXR0by4KKyAgICAgICAgKiBUYXJnZXQucHJpOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogRGl0dG8uCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZSk6IENhbGwg
cHJvY2Vzc0luYmFuZFRleHRUcmFja3Mgd2hlbiByZWFkeVN0YXRlIHJlYWNoZXMKKyAgICAgICAg
ICAgIEhBVkVfTUVUQURBVEEKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnBy
b2Nlc3NJbmJhbmRUZXh0VHJhY2tzKTogRmV0Y2ggdGhlIGluLWJhbmQgdGV4dCB0cmFja3MgZnJv
bSB0aGUgCisgICAgICAgICAgICBtZWRpYSBwbGF5ZXIgYW5kIHByb2Nlc3NlcyB0aGVtLgorICAg
ICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5oOgorCisgICAgICAgICogaHRtbC90cmFjay9J
bmJhbmRUZXh0VHJhY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZFRl
eHRUcmFjay5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL3RyYWNrL0luYmFuZFRleHRUcmFja1By
aXZhdGUuaDogQWRkZWQuCisKKyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFjay5oOgorICAg
ICAgICAoVGV4dFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRUcmFjazo6Y2xlYXJDbGll
bnQpOiBSZW1vdmUgdmlydHVhbCwgaXQgaXMgdW5uZWNlc3NhcnkKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRUcmFjazo6bW9kZSk6IE1ha2UgdmlydHVhbCBzbyBkZXJpdmVkIGNsYXNzZXMgY2FuIG92
ZXJyaWRlLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFRyYWNrOjpzZXRNb2RlKTogRGl0dG8uCisK
KyAgICAgICAgKiBodG1sL3RyYWNrL1RleHRUcmFja0xpc3QuY3BwOgorICAgICAgICAoVGV4dFRy
YWNrTGlzdDo6bGVuZ3RoKTogVXBkYXRlIHRvIGRlYWwgd2l0aCBpbi1iYW5kIHRyYWNrcy4KKyAg
ICAgICAgKFRleHRUcmFja0xpc3Q6OmdldFRyYWNrSW5kZXgpOiBEaXR0by4KKyAgICAgICAgKFRl
eHRUcmFja0xpc3Q6OmdldFRyYWNrSW5kZXhSZWxhdGl2ZVRvUmVuZGVyZWRUcmFja3MpOiBEaXR0
by4KKyAgICAgICAgKFRleHRUcmFja0xpc3Q6Oml0ZW0pOiBEaXR0by4KKyAgICAgICAgKFRleHRU
cmFja0xpc3Q6OmludmFsaWRhdGVUcmFja0luZGV4ZXNBZnRlclRyYWNrKTogTmV3LCBpbnZhbGlk
ZSB0aGUgY2FjaGVkIHRyYWNrIGluZGV4ZXMgb2YKKyAgICAgICAgICAgIGFsbCB0cmFja3MgYWZ0
ZXIgYW5vdGhlci4KKyAgICAgICAgKFRleHRUcmFja0xpc3Q6OmFwcGVuZCk6IFVwZGF0ZSB0byBk
ZWFsIHdpdGggaW4tYmFuZCB0cmFja3MuCisgICAgICAgIChUZXh0VHJhY2tMaXN0OjpyZW1vdmUp
OiBVcGRhdGUgdG8gZGVhbCB3aXRoIGluLWJhbmQgdHJhY2tzLgorICAgICAgICAoVGV4dFRyYWNr
TGlzdDo6c2NoZWR1bGVBZGRUcmFja0V2ZW50KTogUmVtb3ZlIHR5cG8uCisgICAgICAgICogaHRt
bC90cmFjay9UZXh0VHJhY2tMaXN0Lmg6CisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllcjo6Z2V0VGV4dFRy
YWNrcyk6IE5ldywgcGFzcyB0aHJvdWdoIHRvIHRoZSBtZWRpYSBlbmdpbmUuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYVBsYXllcjo6c2V0VGV4dFRyYWNrQ2xpZW50KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2U6OnNldFByZWxvYWQpOiBDbGVhbnVwLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpzb3VyY2VFbmRPZlN0cmVhbSk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjpnZXRUZXh0VHJh
Y2tzKTogTmV3IGNsaWVudCBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2U6OnNldFRleHRUcmFja0NsaWVudCk6IERpdHRvLgorCiAyMDEyLTExLTIw
ICBFbGxpb3R0IFNwcmVobiAgPGVzcHJlaG5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFN0b3Jl
IE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2sgaW4gYSBoaWRkZW4gcHJvcGVydHkgZm9yIFY4Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTM1MjkxKQorKysgU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE1NDksNiArMTU0OSw3IEBAIFNF
VChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL3NoYWRvdy9TcGluQnV0dG9uRWxlbWVudC5jcHAK
ICAgICBodG1sL3NoYWRvdy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCiAKKyAgICBodG1s
L3RyYWNrL0luYmFuZFRleHRUcmFjay5jcHAKICAgICBodG1sL3RyYWNrL0xvYWRhYmxlVGV4dFRy
YWNrLmNwcAogICAgIGh0bWwvdHJhY2svVGV4dFRyYWNrLmNwcAogICAgIGh0bWwvdHJhY2svVGV4
dFRyYWNrQ3VlLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lv
biAxMzUyOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCSh3b3JraW5n
IGNvcHkpCkBAIC0zNjAxLDYgKzM2MDEsOSBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJj
ZS9XZWJDb3JlL2h0bWwvVGltZUlucHV0VHlwZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL1Rp
bWVSYW5nZXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9odG1sL1RpbWVSYW5nZXMuaCBcCisJU291
cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oIFwKKwlTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2sv
TG9hZGFibGVUZXh0VHJhY2suaCBcCiAJU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9UZXh0VHJh
Y2suY3BwIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQkocmV2aXNpb24gMTM1MjkxKQorKysgU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQkod29ya2luZyBjb3B5KQpAQCAtMTg2OCw2ICsxODY4LDggQEAgSEVB
REVSUyArPSBcCiAgICAgaHRtbC9zaGFkb3cvSFRNTFNoYWRvd0VsZW1lbnQuaCBcCiAgICAgaHRt
bC9zaGFkb3cvTWVkaWFDb250cm9sRWxlbWVudHMuaCBcCiAgICAgaHRtbC9zaGFkb3cvRGV0YWls
c01hcmtlckNvbnRyb2wuaCBcCisgICAgaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2suaCBcCisg
ICAgaHRtbC90cmFjay9JbmJhbmRUZXh0VHJhY2tQcml2YXRlLmggXAogICAgIGh0bWwvdHJhY2sv
TG9hZGFibGVUZXh0VHJhY2suaCBcCiAgICAgaHRtbC90cmFjay9UZXh0VHJhY2suaCBcCiAgICAg
aHRtbC90cmFjay9UZXh0VHJhY2tDdWUuaCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lv
biAxMzUyOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkK
QEAgLTQ0NTksNiArNDQ1OSw5IEBACiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvVGV4dENvbnRy
b2xJbm5lckVsZW1lbnRzLmgnLAogICAgICAgICAgICAgJ2h0bWwvc2hhZG93L1RleHRGaWVsZERl
Y29yYXRpb25FbGVtZW50LmNwcCcsCiAgICAgICAgICAgICAnaHRtbC9zaGFkb3cvVGV4dEZpZWxk
RGVjb3JhdGlvbkVsZW1lbnQuaCcsCisgICAgICAgICAgICAnaHRtbC90cmFjay9JbmJhbmRUZXh0
VHJhY2suY3BwJywKKyAgICAgICAgICAgICdodG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5oJywK
KyAgICAgICAgICAgICdodG1sL3RyYWNrL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaCcsCiAgICAg
ICAgICAgICAnaHRtbC90cmFjay9Mb2FkYWJsZVRleHRUcmFjay5jcHAnLAogICAgICAgICAgICAg
J2h0bWwvdHJhY2svTG9hZGFibGVUZXh0VHJhY2suaCcsCiAgICAgICAgICAgICAnaHRtbC90cmFj
ay9UZXh0VHJhY2suY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEzNTI5MSkKKysrIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
MTA4LDYgKzEwOCw5IEBACiAJCTA3MDc1NkRGMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFj
a0N1ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDcwNzU2RDkxNDIzOUI0QzAwNDE0MTYxIC8qIEpTVGV4dFRyYWNrQ3VlTGlzdC5jcHAgKi87
IH07CiAJCTA3MDc1NkUwMTQyMzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDc1NkRBMTQy
MzlCNEUwMDQxNDE2MSAvKiBKU1RleHRUcmFja0N1ZUxpc3QuaCAqLzsgfTsKIAkJMDcwOUZDNEUx
MDI1REVFMzAwNTlDREJBIC8qIEFjY2Vzc2liaWxpdHlTbGlkZXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MDlGQzREMTAyNURFRTMwMDU5Q0RCQSAv
KiBBY2Nlc3NpYmlsaXR5U2xpZGVyLmggKi87IH07CisJCTA3MTFCRjhFMTY0MkQ5RDEwMDQxOUUz
NiAvKiBJbmJhbmRUZXh0VHJhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDcxMUJGOEQxNjQyRDlEMTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFj
ay5jcHAgKi87IH07CisJCTA3MTFCRjhGMTY0MkQ5RjQwMDQxOUUzNiAvKiBJbmJhbmRUZXh0VHJh
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MTFC
RjhDMTY0MkQ4MTEwMDQxOUUzNiAvKiBJbmJhbmRUZXh0VHJhY2suaCAqLzsgfTsKKwkJMDcxMUJG
OTExNjQzMEM5MTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MTFCRjkwMTY0MzBDOTAwMDQx
OUUzNiAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmggKi87IH07CiAJCTA3MjBCMEEwMTREMzMy
MzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzIwQjA5RTE0RDMzMjM1MDA2NDI5NTUgLyogR2Vu
ZXJpY0V2ZW50UXVldWUuY3BwICovOyB9OwogCQkwNzIwQjBBMDE0RDMzMjM1MDA2NDI5NTYgLyog
R2VzdHVyZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA3MjBCMDlGMTREMzMyMzUwMDY0Mjk1NiAvKiBHZXN0dXJlRXZlbnQuY3BwICovOyB9
OwogCQkwNzIwQjBBMTE0RDMzMjM1MDA2NDI5NTUgLyogR2VuZXJpY0V2ZW50UXVldWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3MjBCMDlGMTREMzMy
MzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MTgxLDYgKzcxODQsOSBAQAogCQkwNzA3NTZE
QTE0MjM5QjRFMDA0MTQxNjEgLyogSlNUZXh0VHJhY2tDdWVMaXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTVGV4dFRyYWNrQ3VlTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwNzA5RkM0RDEwMjVERUUzMDA1OUNEQkEgLyogQWNjZXNzaWJpbGl0eVNs
aWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U2xp
ZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MEREOEY1MEYwMTg2ODAwMDcy
N0RFQiAvKiBtZWRpYUNvbnRyb2xzLmNzcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBtZWRpYUNv
bnRyb2xzLmNzczsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDcxMUJGOEMxNjQyRDgx
MTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbmJhbmRUZXh0VHJhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MDcxMUJGOEQxNjQyRDlEMTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFjay5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmJhbmRUZXh0VHJhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwNzExQkY5MDE2NDMwQzkwMDA0MTlFMzYgLyogSW5iYW5k
VGV4dFRyYWNrUHJpdmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmJh
bmRUZXh0VHJhY2tQcml2YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBC
MDlFMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmljRXZlbnRRdWV1ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHZW5lcmljRXZlbnRRdWV1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3MjBCMDlGMTREMzMyMzUwMDY0Mjk1NSAvKiBHZW5lcmlj
RXZlbnRRdWV1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHZW5lcmljRXZl
bnRRdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzIwQjA5RjE0RDMzMjM1
MDA2NDI5NTYgLyogR2VzdHVyZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEdlc3R1cmVFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0xOTM2NSw2ICsxOTM3MSw5IEBACiAJCUIxQUQ0RTc3MTNBMTJBNzIwMDg0NkIyNyAvKiB0cmFj
ayAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMDcxMUJG
OTAxNjQzMEM5MDAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGUuaCAqLywKKwkJCQkw
NzExQkY4RDE2NDJEOUQxMDA0MTlFMzYgLyogSW5iYW5kVGV4dFRyYWNrLmNwcCAqLywKKwkJCQkw
NzExQkY4QzE2NDJEODExMDA0MTlFMzYgLyogSW5iYW5kVGV4dFRyYWNrLmggKi8sCiAJCQkJOTc1
OUU5MzQxNEVGMUNGODAwMjZBMkREIC8qIExvYWRhYmxlVGV4dFRyYWNrLmNwcCAqLywKIAkJCQk5
NzU5RTk0ODE0RUYxRDQ5MDAyNkEyREQgLyogTG9hZGFibGVUZXh0VHJhY2suaCAqLywKIAkJCQk5
NzU5RTkzNTE0RUYxQ0Y4MDAyNkEyREQgLyogVGV4dFRyYWNrLmNwcCAqLywKQEAgLTIzOTM5LDYg
KzIzOTQ4LDggQEAKIAkJCQlCMjc1MzU3MTBCMDUzODE0MDAyQ0U2NEYgLyogSW1hZ2VTb3VyY2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTRCMzQ4MDk0MEVFRjUwRDQwMEFDMUI0MSAvKiBJbWFnZVNv
dXJjZUNHLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyog
SW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MTFCRjhGMTY0MkQ5RjQw
MDQxOUUzNiAvKiBJbmJhbmRUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTA3MTFCRjkx
MTY0MzBDOTEwMDQxOUUzNiAvKiBJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlEQjIzQzJDQzBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUYzNjQ0QjAwMTExOTgwNTkwMEUwRDUzNyAvKiBJbmplY3Rl
ZFNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUFCNjA1NEYxNTg3NEM1ODAwN0I1MDMxIC8q
IEluamVjdGVkU2NyaXB0QmFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNzE0NSw2ICsyNzE1Niw3
IEBACiAJCQkJQjI3NTM1NUYwQjA1MzgxNDAwMkNFNjRGIC8qIEltYWdlU291cmNlQ0cuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNEIzNDgwOTMwRUVGNTBENDAwQUMxQjQxIC8qIEltYWdlU291cmNl
Q0dNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQkzMTZGRTExNzBFNkUxREE3MDBCRjYwODggLyog
SW1wbGljaXRBbmltYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMDcxMUJGOEUxNjQyRDlE
MTAwNDE5RTM2IC8qIEluYmFuZFRleHRUcmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEQjIz
QzJDQjBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJRjM2NDRBRkYxMTE5ODA1OTAwRTBENTM3IC8qIEluamVjdGVkU2NyaXB0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUFBQjYwNTRFMTU4NzRDNTgwMDdCNTAzMSAvKiBJbmplY3Rl
ZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5jcHAJKHJldmlzaW9uIDEzNTI5MSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDYgKzk4LDgg
QEAKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICNpbmNsdWRlICJIVE1MVHJhY2tFbGVtZW50
LmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRyYWNrLmgiCisjaW5jbHVkZSAiSW5iYW5kVGV4dFRy
YWNrUHJpdmF0ZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKICNpbmNs
dWRlICJUZXh0VHJhY2tDdWVMaXN0LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrTGlzdC5oIgpAQCAt
MTczOCw2ICsxNzQwLDEwIEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6c2V0UmVhZHlTdGF0ZShN
ZWQKICAgICAgICAgcHJlcGFyZU1lZGlhRnJhZ21lbnRVUkkoKTsKICAgICAgICAgc2NoZWR1bGVF
dmVudChldmVudE5hbWVzKCkuZHVyYXRpb25jaGFuZ2VFdmVudCk7CiAgICAgICAgIHNjaGVkdWxl
RXZlbnQoZXZlbnROYW1lcygpLmxvYWRlZG1ldGFkYXRhRXZlbnQpOworI2lmIEVOQUJMRShWSURF
T19UUkFDSykKKyAgICAgICAgaWYgKG1fcGxheWVyICYmIG1fcGxheWVyLT5oYXNDbG9zZWRDYXB0
aW9ucygpKQorICAgICAgICAgICAgcHJvY2Vzc0luYmFuZFRleHRUcmFja3MoKTsKKyNlbmRpZgog
ICAgICAgICBpZiAoaGFzTWVkaWFDb250cm9scygpKQogICAgICAgICAgICAgbWVkaWFDb250cm9s
cygpLT5sb2FkZWRNZXRhZGF0YSgpOwogICAgICAgICBpZiAocmVuZGVyZXIoKSkKQEAgLTI3MTYs
NiArMjcyMiw1MCBAQCBmbG9hdCBIVE1MTWVkaWFFbGVtZW50OjpwZXJjZW50TG9hZGVkKCkgCiB9
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByb2Nl
c3NJbmJhbmRUZXh0VHJhY2tzKCkKK3sKKyAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OndlYmtpdFZpZGVvVHJhY2tFbmFibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3Rv
cjxSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZT4gPiBwcml2YXRlVGV4dFRyYWNrczsKKyAg
ICBtX3BsYXllci0+Z2V0VGV4dFRyYWNrcyhwcml2YXRlVGV4dFRyYWNrcyk7CisKKyAgICBpZiAo
IXByaXZhdGVUZXh0VHJhY2tzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBwcml2YXRlVGV4dFRyYWNrcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAvLyA0LjguMTAuMTIuMiBTb3VyY2luZyBpbi1iYW5kIHRleHQgdHJhY2tzCisgICAgICAgIC8v
IDEuIEFzc29jaWF0ZSB0aGUgcmVsZXZhbnQgZGF0YSB3aXRoIGEgbmV3IHRleHQgdHJhY2sgYW5k
IGl0cyBjb3JyZXNwb25kaW5nIG5ldyBUZXh0VHJhY2sgb2JqZWN0LgorICAgICAgICAKKyAgICAg
ICAgLy8gMi4gU2V0IHRoZSBuZXcgdGV4dCB0cmFjaydzIGtpbmQsIGxhYmVsLCBhbmQgbGFuZ3Vh
Z2UgYmFzZWQgb24gdGhlIHNlbWFudGljcyBvZiB0aGUgcmVsZXZhbnQgZGF0YSwKKyAgICAgICAg
Ly8gYXMgZGVmaW5lZCBieSB0aGUgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbi4gSWYgdGhlcmUgaXMg
bm8gbGFiZWwgaW4gdGhhdCBkYXRhLCB0aGVuIHRoZSBsYWJlbCBtdXN0CisgICAgICAgIC8vIGJl
IHNldCB0byB0aGUgZW1wdHkgc3RyaW5nLgorICAgICAgICAvLyAgIC0gVGhpcyBpcyBkb25lIGJ5
IHRoZSBtZWRpYSBlbmdpbmUgd2hlbiBpdCBjcmVhdGVzIHRoZSBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlLgorICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSBJbmJhbmRUZXh0VHJh
Y2s6OmNyZWF0ZShBY3RpdmVET01PYmplY3Q6OnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSwgdGhp
cywgcHJpdmF0ZVRleHRUcmFja3NbaV0pOworICAgICAgICAKKyAgICAgICAgLy8gNS4gUG9wdWxh
dGUgdGhlIG5ldyB0ZXh0IHRyYWNrJ3MgbGlzdCBvZiBjdWVzIHdpdGggdGhlIGN1ZXMgcGFyc2Vk
IHNvIGZhciwgZm9sbGxvd2luZyB0aGUgZ3VpZGVsaW5lcyBmb3IgZXhwb3NpbmcKKyAgICAgICAg
Ly8gY3VlcywgYW5kIGJlZ2luIHVwZGF0aW5nIGl0IGR5bmFtaWNhbGx5IGFzIG5lY2Vzc2FyeS4K
KyAgICAgICAgLy8gICAtIFRoaXMgd2lsbCBoYXBwZW4gYXV0b21hdGljYWxseSBhcyB0aGUgbWVk
aWEgZW5naW5lIGxvYWRzIHRoZSBjdWVzCisgICAgICAgIAorICAgICAgICAvLyA2LiBTZXQgdGhl
IG5ldyB0ZXh0IHRyYWNrJ3MgcmVhZGluZXNzIHN0YXRlIHRvIGxvYWRlZC4KKyAgICAgICAgdGV4
dFRyYWNrLT5zZXRSZWFkaW5lc3NTdGF0ZShUZXh0VHJhY2s6OkxvYWRlZCk7CisgICAgICAgIAor
ICAgICAgICAvLyA3LiBTZXQgdGhlIG5ldyB0ZXh0IHRyYWNrJ3MgbW9kZSB0byB0aGUgbW9kZSBj
b25zaXN0ZW50IHdpdGggdGhlIHVzZXIncyBwcmVmZXJlbmNlcyBhbmQgdGhlIHJlcXVpcmVtZW50
cyBvZgorICAgICAgICAvLyB0aGUgcmVsZXZhbnQgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGRhdGEu
CisgICAgICAgIC8vICAtIFRoaXMgd2lsbCBoYXBwZW4gaW4gY29uZmlndXJlVGV4dFRyYWNrcygp
CisgICAgICAgIAorICAgICAgICAvLyA4LiBBZGQgdGhlIG5ldyB0ZXh0IHRyYWNrIHRvIHRoZSBt
ZWRpYSBlbGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcy4KKyAgICAgICAgdGV4dFRyYWNrcygp
LT5hcHBlbmQodGV4dFRyYWNrKTsKKyAgICAgICAgCisgICAgICAgIC8vIDkuIEZpcmUgYW4gZXZl
bnQgd2l0aCB0aGUgbmFtZSBhZGR0cmFjaywgdGhhdCBkb2VzIG5vdCBidWJibGUgYW5kIGlzIG5v
dCBjYW5jZWxhYmxlLCBhbmQgdGhhdCB1c2VzIHRoZSBUcmFja0V2ZW50CisgICAgICAgIC8vIGlu
dGVyZmFjZSwgd2l0aCB0aGUgdHJhY2sgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSB0ZXh0
IHRyYWNrJ3MgVGV4dFRyYWNrIG9iamVjdCwgYXQgdGhlIG1lZGlhIGVsZW1lbnQncworICAgICAg
ICAvLyB0ZXh0VHJhY2tzIGF0dHJpYnV0ZSdzIFRleHRUcmFja0xpc3Qgb2JqZWN0LgorICAgICAg
ICAvLyAgLSBUaGlzIHdhcyBkb25lIGluIFRleHRUcmFja0xpc3Q6OmFwcGVuZAorICAgIH0KKwor
ICAgIGNvbmZpZ3VyZVRleHRUcmFja3MoKTsKK30KKwogUGFzc1JlZlB0cjxUZXh0VHJhY2s+IEhU
TUxNZWRpYUVsZW1lbnQ6OmFkZFRleHRUcmFjayhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFN0
cmluZyYgbGFiZWwsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2Via2l0VmlkZW9UcmFja0VuYWJs
ZWQoKSkKQEAgLTI4MTAsNyArMjg2MCw2IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6d2lsbFJl
bW92ZVRyYWNrKEgKICAgICBpZiAoIW1fdGV4dFRyYWNrcykKICAgICAgICAgcmV0dXJuOwogICAg
IAotCiAgICAgLy8gNC44LjEwLjEyLjMgU291cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MK
ICAgICAvLyBXaGVuIGEgdHJhY2sgZWxlbWVudCdzIHBhcmVudCBlbGVtZW50IGNoYW5nZXMgYW5k
IHRoZSBvbGQgcGFyZW50IHdhcyBhIG1lZGlhIGVsZW1lbnQsIAogICAgIC8vIHRoZW4gdGhlIHVz
ZXIgYWdlbnQgbXVzdCByZW1vdmUgdGhlIHRyYWNrIGVsZW1lbnQncyBjb3JyZXNwb25kaW5nIHRl
eHQgdHJhY2sgZnJvbSB0aGUgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaAkocmV2aXNpb24gMTM1MjkxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDYgKzY5LDggQEAgY2xhc3MgRGlzcGxheVNs
ZWVwRGlzYWJsZXI7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKK2NsYXNzIElu
YmFuZFRleHRUcmFja1ByaXZhdGU7CisKIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVlPGRvdWJsZSwg
VGV4dFRyYWNrQ3VlKj4gQ3VlSW50ZXJ2YWxUcmVlOwogdHlwZWRlZiBWZWN0b3I8Q3VlSW50ZXJ2
YWxUcmVlOjpJbnRlcnZhbFR5cGU+IEN1ZUxpc3Q7CiAjZW5kaWYKQEAgLTIxMyw2ICsyMTUsOCBA
QCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxUZXh0VHJhY2s+IGFkZFRleHRUcmFjayhjb25zdCBT
dHJpbmcmIGtpbmQsIGNvbnN0IFN0cmluZyYgbGFiZWwsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBhZGRUZXh0VHJhY2soa2luZCwgbGFiZWwsIGVtcHR5U3RyaW5nKCksIGVjKTsgfQogICAg
IFBhc3NSZWZQdHI8VGV4dFRyYWNrPiBhZGRUZXh0VHJhY2soY29uc3QgU3RyaW5nJiBraW5kLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkVGV4dFRyYWNrKGtpbmQsIGVtcHR5U3RyaW5n
KCksIGVtcHR5U3RyaW5nKCksIGVjKTsgfQogCisgICAgdm9pZCBwcm9jZXNzSW5iYW5kVGV4dFRy
YWNrcygpOworCiAgICAgVGV4dFRyYWNrTGlzdCogdGV4dFRyYWNrcygpOwogICAgIEN1ZUxpc3Qg
Y3VycmVudGx5QWN0aXZlQ3VlcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudGx5QWN0aXZlQ3Vl
czsgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRUZXh0VHJh
Y2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90cmFjay9JbmJhbmRU
ZXh0VHJhY2suY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUg
IkluYmFuZFRleHRUcmFjay5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJF
dmVudC5oIgorI2luY2x1ZGUgIkluYmFuZFRleHRUcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlICJN
ZWRpYVBsYXllci5oIgorI2luY2x1ZGUgIlRleHRUcmFja0N1ZUxpc3QuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitJbmJhbmRUZXh0VHJhY2s6OkluYmFuZFRleHRUcmFjayhTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBUZXh0VHJhY2tDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0
cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPiBwbGF5ZXJQcml2YXRlKQorICAgIDogVGV4dFRyYWNr
KGNvbnRleHQsIGNsaWVudCwgZW1wdHlTdHJpbmcoKSwgcGxheWVyUHJpdmF0ZS0+bGFiZWwoKSwg
cGxheWVyUHJpdmF0ZS0+bGFuZ3VhZ2UoKSwgSW5CYW5kKQorICAgICwgbV9wcml2YXRlKHBsYXll
clByaXZhdGUpCit7CisgICAgbV9wcml2YXRlLT5zZXRDbGllbnQodGhpcyk7CisgICAgCisgICAg
c3dpdGNoIChwbGF5ZXJQcml2YXRlLT5raW5kKCkpIHsKKyAgICBjYXNlIEluYmFuZFRleHRUcmFj
a1ByaXZhdGU6OnN1YnRpdGxlczoKKyAgICAgICAgc2V0S2luZChUZXh0VHJhY2s6OnN1YnRpdGxl
c0tleXdvcmQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5iYW5kVGV4dFRyYWNrUHJp
dmF0ZTo6Y2FwdGlvbnM6CisgICAgICAgIHNldEtpbmQoVGV4dFRyYWNrOjpjYXB0aW9uc0tleXdv
cmQoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6
ZGVzY3JpcHRpb25zOgorICAgICAgICBzZXRLaW5kKFRleHRUcmFjazo6ZGVzY3JpcHRpb25zS2V5
d29yZCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
OjpjaGFwdGVyczoKKyAgICAgICAgc2V0S2luZChUZXh0VHJhY2s6OmNoYXB0ZXJzS2V5d29yZCgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjptZXRh
ZGF0YToKKyAgICAgICAgc2V0S2luZChUZXh0VHJhY2s6Om1ldGFkYXRhS2V5d29yZCgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpub25lOgorICAg
IGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK0luYmFuZFRleHRUcmFjazo6fkluYmFuZFRleHRUcmFjaygpCit7CisgICAg
bV9wcml2YXRlLT5zZXRDbGllbnQoMCk7Cit9CisKK3ZvaWQgSW5iYW5kVGV4dFRyYWNrOjpzZXRN
b2RlKGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZSkKK3sKKyAgICBUZXh0VHJhY2s6OnNldE1vZGUo
bW9kZSk7CisKKyAgICBpZiAobW9kZSA9PSBUZXh0VHJhY2s6OmRpc2FibGVkS2V5d29yZCgpKQor
ICAgICAgICBtX3ByaXZhdGUtPnNldE1vZGUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6ZGlzYWJs
ZWQpOworICAgIGVsc2UgaWYgKG1vZGUgPT0gVGV4dFRyYWNrOjpoaWRkZW5LZXl3b3JkKCkpCisg
ICAgICAgIG1fcHJpdmF0ZS0+c2V0TW9kZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlOjpoaWRkZW4p
OworICAgIGVsc2UgaWYgKG1vZGUgPT0gVGV4dFRyYWNrOjpzaG93aW5nS2V5d29yZCgpKQorICAg
ICAgICBtX3ByaXZhdGUtPnNldE1vZGUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZTo6c2hvd2luZyk7
CisgICAgZWxzZQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc2l6ZV90IElu
YmFuZFRleHRUcmFjazo6aW5iYW5kVHJhY2tJbmRleCgpCit7CisgICAgQVNTRVJUKG1fcHJpdmF0
ZSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGV4dFRyYWNrSW5kZXgoKTsKK30KKwordm9pZCBJ
bmJhbmRUZXh0VHJhY2s6OmFkZEN1ZShJbmJhbmRUZXh0VHJhY2tQcml2YXRlKiwgZG91YmxlIHN0
YXJ0LCBkb3VibGUgZW5kLCBjb25zdCBTdHJpbmcmIGlkLCBjb25zdCBTdHJpbmcmIGNvbnRlbnQs
IGNvbnN0IFN0cmluZyYgc2V0dGluZ3MpCit7CisgICAgUmVmUHRyPFRleHRUcmFja0N1ZT4gY3Vl
ID0gVGV4dFRyYWNrQ3VlOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpLCBzdGFydCwg
ZW5kLCBjb250ZW50KTsKKyAgICBjdWUtPnNldElkKGlkKTsKKyAgICBjdWUtPnNldEN1ZVNldHRp
bmdzKHNldHRpbmdzKTsKKyAgICBjdWUtPnNldFRyYWNrKHRoaXMpOworCisgICAgaWYgKCFtX2N1
ZXMpCisgICAgICAgIG1fY3VlcyA9IFRleHRUcmFja0N1ZUxpc3Q6OmNyZWF0ZSgpOworICAgIG1f
Y3Vlcy0+YWRkKGN1ZSk7CisgICAgCisgICAgaWYgKGNsaWVudCgpKQorICAgICAgICBjbGllbnQo
KS0+dGV4dFRyYWNrQWRkQ3Vlcyh0aGlzLCBtX2N1ZXMuZ2V0KCkpOworfQorICAgIAorfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJh
Y2svSW5iYW5kVGV4dFRyYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9JbmJhbmRUZXh0VHJhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZm5kZWYgSW5iYW5kVGV4dFRyYWNrX2gKKyNkZWZpbmUgSW5iYW5kVGV4dFRy
YWNrX2gKKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworI2luY2x1ZGUgIlRleHRUcmFjay5o
IgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEb2N1bWVudDsKK2NsYXNzIEluYmFuZFRleHRUcmFja1ByaXZhdGU7CitjbGFzcyBNZWRpYVBs
YXllcjsKK2NsYXNzIFRleHRUcmFja0N1ZTsKKworY2xhc3MgSW5iYW5kVGV4dFRyYWNrQ2xpZW50
IHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5JbmJhbmRUZXh0VHJhY2tDbGllbnQoKSB7IH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBhZGRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSAv
KnN0YXJ0Ki8sIGRvdWJsZSAvKmVuZCovLCBjb25zdCBTdHJpbmcmIC8qaWQqLywgY29uc3QgU3Ry
aW5nJiAvKmNvbnRlbnQqLywgY29uc3QgU3RyaW5nJiAvKnNldHRpbmdzKi8pIHsgfQorfTsKKwor
Y2xhc3MgSW5iYW5kVGV4dFRyYWNrIDogcHVibGljIFRleHRUcmFjaywgcHVibGljIEluYmFuZFRl
eHRUcmFja0NsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SW5iYW5kVGV4
dFRyYWNrPiBjcmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgVGV4dFRyYWNr
Q2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZT4gcGxheWVy
UHJpdmF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSW5iYW5kVGV4dFRy
YWNrKGNvbnRleHQsIGNsaWVudCwgcGxheWVyUHJpdmF0ZSkpOworICAgIH0KKyAgICB2aXJ0dWFs
IH5JbmJhbmRUZXh0VHJhY2soKTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNb2RlKGNvbnN0IEF0
b21pY1N0cmluZyYpIE9WRVJSSURFOworICAgIHNpemVfdCBpbmJhbmRUcmFja0luZGV4KCk7CisK
K3ByaXZhdGU6CisgICAgSW5iYW5kVGV4dFRyYWNrKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBU
ZXh0VHJhY2tDbGllbnQqLCBQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+KTsKKwor
ICAgIHZpcnR1YWwgdm9pZCBhZGRDdWUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSosIGRvdWJsZSwg
ZG91YmxlLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKwor
ICAgIFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPiBtX3ByaXZhdGU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgorI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3RyYWNrL0luYmFuZFRleHRUcmFja1ByaXZhdGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvdHJhY2svSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEluYmFuZFRl
eHRUcmFja1ByaXZhdGVfaAorI2RlZmluZSBJbmJhbmRUZXh0VHJhY2tQcml2YXRlX2gKKworI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmcu
aD4KKworI2lmIEVOQUJMRShWSURFT19UUkFDSykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBJbmJhbmRUZXh0VHJhY2tDbGllbnQ7CisKK2NsYXNzIEluYmFuZFRleHRUcmFja1ByaXZh
dGUgOiBwdWJsaWMgUmVmQ291bnRlZDxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPiB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZSk7IFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEluYmFuZFRleHRUcmFj
a1ByaXZhdGU+IGNyZWF0ZSgpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IElu
YmFuZFRleHRUcmFja1ByaXZhdGUoKSk7CisgICAgfQorICAgIHZpcnR1YWwgfkluYmFuZFRleHRU
cmFja1ByaXZhdGUoKSB7IH0KKyAgICAKKyAgICB2b2lkIHNldENsaWVudChJbmJhbmRUZXh0VHJh
Y2tDbGllbnQqIGNsaWVudCkgeyBtX2NsaWVudCA9IGNsaWVudDsgfQorICAgIEluYmFuZFRleHRU
cmFja0NsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKworICAgIGVudW0gTW9k
ZSB7IGRpc2FibGVkLCBoaWRkZW4sIHNob3dpbmcgfTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TW9k
ZShNb2RlIG1vZGUpIHsgbV9tb2RlID0gbW9kZTsgfTsKKyAgICB2aXJ0dWFsIEluYmFuZFRleHRU
cmFja1ByaXZhdGU6Ok1vZGUgbW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fbW9kZTsgfQorCisgICAg
ZW51bSBLaW5kIHsgc3VidGl0bGVzLCBjYXB0aW9ucywgZGVzY3JpcHRpb25zLCBjaGFwdGVycywg
bWV0YWRhdGEsIG5vbmUgfTsKKyAgICB2aXJ0dWFsIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IHN1YnRpdGxlczsgfQorCisgICAgdmlydHVhbCBBdG9taWNTdHJpbmcgbGFiZWwoKSBjb25zdCB7
IHJldHVybiBlbXB0eVN0cmluZygpOyB9CisgICAgdmlydHVhbCBBdG9taWNTdHJpbmcgbGFuZ3Vh
Z2UoKSBjb25zdCB7IHJldHVybiBlbXB0eVN0cmluZygpOyB9CisgICAgdmlydHVhbCBib29sIGlz
RGVmYXVsdCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICB2aXJ0dWFsIGludCB0ZXh0
VHJhY2tJbmRleCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKworcHJvdGVjdGVkOgorICAgIEluYmFu
ZFRleHRUcmFja1ByaXZhdGUoKQorICAgICAgICA6IG1fY2xpZW50KDApCisgICAgICAgICwgbV9t
b2RlKGRpc2FibGVkKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgSW5iYW5kVGV4dFRy
YWNrQ2xpZW50KiBtX2NsaWVudDsKKyAgICBNb2RlIG1fbW9kZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
dHJhY2svVGV4dFRyYWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC90cmFj
ay9UZXh0VHJhY2suaAkocmV2aXNpb24gMTM1MjkxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC90
cmFjay9UZXh0VHJhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC04Myw4ICs4NCw4IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBoaWRkZW5LZXl3b3JkKCk7CiAgICAgc3Rh
dGljIGNvbnN0IEF0b21pY1N0cmluZyYgc2hvd2luZ0tleXdvcmQoKTsKIAotICAgIEF0b21pY1N0
cmluZyBtb2RlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRNb2RlKGNvbnN0IEF0b21pY1N0cmluZyYp
OworICAgIHZpcnR1YWwgQXRvbWljU3RyaW5nIG1vZGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2V0TW9kZShjb25zdCBBdG9taWNTdHJpbmcmKTsKIAogICAgIGJvb2wgc2hvd2luZ0J5RGVm
YXVsdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvd2luZ0J5RGVmYXVsdDsgfQogICAgIHZvaWQgc2V0
U2hvd2luZ0J5RGVmYXVsdChib29sIHNob3dpbmcpIHsgbV9zaG93aW5nQnlEZWZhdWx0ID0gc2hv
d2luZzsgfQpAQCAtOTYsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgVGV4dFRyYWNrQ3VlTGlzdCog
Y3VlcygpOwogICAgIFRleHRUcmFja0N1ZUxpc3QqIGFjdGl2ZUN1ZXMoKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgdm9pZCBjbGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSAwOyB9CisgICAgdm9pZCBj
bGVhckNsaWVudCgpIHsgbV9jbGllbnQgPSAwOyB9CiAgICAgVGV4dFRyYWNrQ2xpZW50KiBjbGll
bnQoKSB7IHJldHVybiBtX2NsaWVudDsgfQogCiAgICAgdm9pZCBhZGRDdWUoUGFzc1JlZlB0cjxU
ZXh0VHJhY2tDdWU+LCBFeGNlcHRpb25Db2RlJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L3RyYWNrL1RleHRUcmFja0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAJKHJldmlzaW9uIDEzNTI5MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEs
NiArMzEsOCBAQAogCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxNZWRp
YUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbmJhbmRUZXh0VHJhY2suaCIKKyNpbmNsdWRlICJJbmJh
bmRUZXh0VHJhY2tQcml2YXRlLmgiCiAjaW5jbHVkZSAiTG9hZGFibGVUZXh0VHJhY2suaCIKICNp
bmNsdWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFRyYWNrLmgi
CkBAIC01Myw3ICs1NSw3IEBAIFRleHRUcmFja0xpc3Q6On5UZXh0VHJhY2tMaXN0KCkKIAogdW5z
aWduZWQgVGV4dFRyYWNrTGlzdDo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9hZGRU
cmFja1RyYWNrcy5zaXplKCkgKyBtX2VsZW1lbnRUcmFja3Muc2l6ZSgpOworICAgIHJldHVybiBt
X2FkZFRyYWNrVHJhY2tzLnNpemUoKSArIG1fZWxlbWVudFRyYWNrcy5zaXplKCkgKyBtX2luYmFu
ZFRyYWNrcy5zaXplKCk7CiB9CiAKIGludCBUZXh0VHJhY2tMaXN0OjpnZXRUcmFja0luZGV4KFRl
eHRUcmFjayAqdGV4dFRyYWNrKQpAQCAtNjQsNiArNjYsOSBAQCBpbnQgVGV4dFRyYWNrTGlzdDo6
Z2V0VHJhY2tJbmRleChUZXh0VHJhCiAgICAgaWYgKHRleHRUcmFjay0+dHJhY2tUeXBlKCkgPT0g
VGV4dFRyYWNrOjpBZGRUcmFjaykKICAgICAgICAgcmV0dXJuIG1fZWxlbWVudFRyYWNrcy5zaXpl
KCkgKyBtX2FkZFRyYWNrVHJhY2tzLmZpbmQodGV4dFRyYWNrKTsKIAorICAgIGlmICh0ZXh0VHJh
Y2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6SW5CYW5kKQorICAgICAgICByZXR1cm4gbV9l
bGVtZW50VHJhY2tzLnNpemUoKSArIG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpICsgbV9pbmJhbmRU
cmFja3MuZmluZCh0ZXh0VHJhY2spOworCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAg
ICByZXR1cm4gLTE7CkBAIC04Miw3ICs4Nyw3IEBAIGludCBUZXh0VHJhY2tMaXN0OjpnZXRUcmFj
a0luZGV4UmVsYXRpdmUKICAgICAgICAgICAgIHJldHVybiB0cmFja0luZGV4OwogICAgICAgICAr
K3RyYWNrSW5kZXg7CiAgICAgfQotICAgIAorCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2FkZFRyYWNrVHJhY2tzLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGlmICghbV9hZGRUcmFja1Ry
YWNrc1tpXS0+aXNSZW5kZXJlZCgpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC05MSw5ICs5
NiwxOCBAQCBpbnQgVGV4dFRyYWNrTGlzdDo6Z2V0VHJhY2tJbmRleFJlbGF0aXZlCiAgICAgICAg
ICAgICByZXR1cm4gdHJhY2tJbmRleDsKICAgICAgICAgKyt0cmFja0luZGV4OwogICAgIH0KLSAg
ICAKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKCFtX2luYmFuZFRyYWNrc1tpXS0+aXNSZW5kZXJlZCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBpZiAobV9pbmJhbmRUcmFja3Nb
aV0gPT0gdGV4dFRyYWNrKQorICAgICAgICAgICAgcmV0dXJuIHRyYWNrSW5kZXg7CisgICAgICAg
ICsrdHJhY2tJbmRleDsKKyAgICB9CisKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAK
KwogICAgIHJldHVybiAtMTsKIH0KIApAQCAtMTEzLDkgKzEyNyw0MCBAQCBUZXh0VHJhY2sqIFRl
eHRUcmFja0xpc3Q6Oml0ZW0odW5zaWduZWQgCiAgICAgaWYgKGluZGV4IDwgbV9hZGRUcmFja1Ry
YWNrcy5zaXplKCkpCiAgICAgICAgIHJldHVybiBtX2FkZFRyYWNrVHJhY2tzW2luZGV4XS5nZXQo
KTsKIAorICAgIGluZGV4IC09IG1fYWRkVHJhY2tUcmFja3Muc2l6ZSgpOworICAgIGlmIChpbmRl
eCA8IG1faW5iYW5kVHJhY2tzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1faW5iYW5kVHJhY2tz
W2luZGV4XS5nZXQoKTsKKwogICAgIHJldHVybiAwOwogfQogCit2b2lkIFRleHRUcmFja0xpc3Q6
OmludmFsaWRhdGVUcmFja0luZGV4ZXNBZnRlclRyYWNrKFRleHRUcmFjayogdHJhY2spCit7Cisg
ICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4qIHRyYWNrcyA9IDA7CisKKyAgICBpZiAodHJh
Y2stPnRyYWNrVHlwZSgpID09IFRleHRUcmFjazo6VHJhY2tFbGVtZW50KSB7CisgICAgICAgIHRy
YWNrcyA9ICZtX2VsZW1lbnRUcmFja3M7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9hZGRUcmFja1RyYWNrcy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG1fYWRkVHJhY2tUcmFj
a3NbaV0tPmludmFsaWRhdGVUcmFja0luZGV4KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9pbmJhbmRUcmFja3Muc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBtX2luYmFuZFRy
YWNrc1tpXS0+aW52YWxpZGF0ZVRyYWNrSW5kZXgoKTsKKyAgICB9IGVsc2UgaWYgKHRyYWNrLT50
cmFja1R5cGUoKSA9PSBUZXh0VHJhY2s6OkFkZFRyYWNrKSB7CisgICAgICAgIHRyYWNrcyA9ICZt
X2FkZFRyYWNrVHJhY2tzOworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1faW5iYW5k
VHJhY2tzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgbV9pbmJhbmRUcmFja3NbaV0tPmludmFs
aWRhdGVUcmFja0luZGV4KCk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0g
VGV4dFRyYWNrOjpJbkJhbmQpCisgICAgICAgIHRyYWNrcyA9ICZtX2luYmFuZFRyYWNrczsKKyAg
ICBlbHNlCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgc2l6ZV90IGluZGV4
ID0gdHJhY2tzLT5maW5kKHRyYWNrKTsKKyAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IHRyYWNrcy0+c2l6
ZSgpOyArK2kpCisgICAgICAgIHRyYWNrcy0+YXQoaW5kZXgpLT5pbnZhbGlkYXRlVHJhY2tJbmRl
eCgpOworfQorCiB2b2lkIFRleHRUcmFja0xpc3Q6OmFwcGVuZChQYXNzUmVmUHRyPFRleHRUcmFj
az4gcHJwVHJhY2spCiB7CiAgICAgUmVmUHRyPFRleHRUcmFjaz4gdHJhY2sgPSBwcnBUcmFjazsK
QEAgLTEyNiwxNyArMTcxLDE1IEBAIHZvaWQgVGV4dFRyYWNrTGlzdDo6YXBwZW5kKFBhc3NSZWZQ
dHI8VGUKICAgICAgICAgLy8gSW5zZXJ0IHRyYWNrcyBhZGRlZCBmb3IgPHRyYWNrPiBlbGVtZW50
IGluIHRyZWUgb3JkZXIuCiAgICAgICAgIHNpemVfdCBpbmRleCA9IHN0YXRpY19jYXN0PExvYWRh
YmxlVGV4dFRyYWNrKj4odHJhY2suZ2V0KCkpLT50cmFja0VsZW1lbnRJbmRleCgpOwogICAgICAg
ICBtX2VsZW1lbnRUcmFja3MuaW5zZXJ0KGluZGV4LCB0cmFjayk7Ci0KLSAgICAgICAgLy8gSW52
YWxpZGF0ZSB0aGUgY2FjaGVkIGluZGV4IGZvciBhbGwgdGhlIGZvbGxvd2luZyB0cmFja3MuCi0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSBpbmRleDsgaSA8IG1fZWxlbWVudFRyYWNrcy5zaXplKCk7
ICsraSkKLSAgICAgICAgICAgIG1fZWxlbWVudFRyYWNrc1tpXS0+aW52YWxpZGF0ZVRyYWNrSW5k
ZXgoKTsKLQotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fYWRkVHJhY2tUcmFja3Mu
c2l6ZSgpOyArK2kpCi0gICAgICAgICAgICBtX2FkZFRyYWNrVHJhY2tzW2ldLT5pbnZhbGlkYXRl
VHJhY2tJbmRleCgpOwotCisgICAgfSBlbHNlIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4
dFRyYWNrOjpJbkJhbmQpIHsKKyAgICAgICAgLy8gSW5zZXJ0IHRyYWNrcyBhZGRlZCBmb3IgaW4t
YmFuZCBpbiB0aGUgbWVkaWEgZmlsZSBvcmRlci4KKyAgICAgICAgc2l6ZV90IGluZGV4ID0gc3Rh
dGljX2Nhc3Q8SW5iYW5kVGV4dFRyYWNrKj4odHJhY2suZ2V0KCkpLT5pbmJhbmRUcmFja0luZGV4
KCk7CisgICAgICAgIG1faW5iYW5kVHJhY2tzLmluc2VydChpbmRleCwgdHJhY2spOwogICAgIH0g
ZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAorICAgIGludmFsaWRhdGVUcmFj
a0luZGV4ZXNBZnRlclRyYWNrKHRyYWNrLmdldCgpKTsKKwogICAgIEFTU0VSVCghdHJhY2stPm1l
ZGlhRWxlbWVudCgpIHx8IHRyYWNrLT5tZWRpYUVsZW1lbnQoKSA9PSBtX293bmVyKTsKICAgICB0
cmFjay0+c2V0TWVkaWFFbGVtZW50KG1fb3duZXIpOwogCkBAIC0xNTEsNiArMTk0LDggQEAgdm9p
ZCBUZXh0VHJhY2tMaXN0OjpyZW1vdmUoVGV4dFRyYWNrKiB0cgogICAgICAgICB0cmFja3MgPSAm
bV9lbGVtZW50VHJhY2tzOwogICAgIGVsc2UgaWYgKHRyYWNrLT50cmFja1R5cGUoKSA9PSBUZXh0
VHJhY2s6OkFkZFRyYWNrKQogICAgICAgICB0cmFja3MgPSAmbV9hZGRUcmFja1RyYWNrczsKKyAg
ICBlbHNlIGlmICh0cmFjay0+dHJhY2tUeXBlKCkgPT0gVGV4dFRyYWNrOjpJbkJhbmQpCisgICAg
ICAgIHRyYWNrcyA9ICZtX2luYmFuZFRyYWNrczsKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogCkBAIC0xNTgsNiArMjAzLDggQEAgdm9pZCBUZXh0VHJhY2tMaXN0Ojpy
ZW1vdmUoVGV4dFRyYWNrKiB0cgogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkKICAgICAgICAg
cmV0dXJuOwogCisgICAgaW52YWxpZGF0ZVRyYWNrSW5kZXhlc0FmdGVyVHJhY2sodHJhY2spOwor
CiAgICAgQVNTRVJUKHRyYWNrLT5tZWRpYUVsZW1lbnQoKSA9PSBtX293bmVyKTsKICAgICB0cmFj
ay0+c2V0TWVkaWFFbGVtZW50KDApOwogCkBAIC0xNzIsNyArMjE5LDYgQEAgY29uc3QgQXRvbWlj
U3RyaW5nJiBUZXh0VHJhY2tMaXN0OjppbnRlcgogdm9pZCBUZXh0VHJhY2tMaXN0OjpzY2hlZHVs
ZUFkZFRyYWNrRXZlbnQoUGFzc1JlZlB0cjxUZXh0VHJhY2s+IHRyYWNrKQogewogICAgIC8vIDQu
OC4xMC4xMi4zIFNvdXJjaW5nIG91dC1vZi1iYW5kIHRleHQgdHJhY2tzCi0gICAgLy8gNC44LjEw
LjEyLjMgU291cmNpbmcgb3V0LW9mLWJhbmQgdGV4dCB0cmFja3MKICAgICAvLyA0LjguMTAuMTIu
NCBUZXh0IHRyYWNrIEFQSQogICAgIC8vIC4uLiB0aGVuIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFu
IGV2ZW50IHdpdGggdGhlIG5hbWUgYWRkdHJhY2ssIHRoYXQgZG9lcyBub3QgCiAgICAgLy8gYnVi
YmxlIGFuZCBpcyBub3QgY2FuY2VsYWJsZSwgYW5kIHRoYXQgdXNlcyB0aGUgVHJhY2tFdmVudCBp
bnRlcmZhY2UsIHdpdGggCkBAIC0xOTQsNyArMjQwLDcgQEAgdm9pZCBUZXh0VHJhY2tMaXN0Ojph
c3luY0V2ZW50VGltZXJGaXJlZAogewogICAgIFZlY3RvcjxSZWZQdHI8RXZlbnQ+ID4gcGVuZGlu
Z0V2ZW50czsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAKKwogICAgICsrbV9kaXNw
YXRjaGluZ0V2ZW50czsKICAgICBtX3BlbmRpbmdFdmVudHMuc3dhcChwZW5kaW5nRXZlbnRzKTsK
ICAgICBzaXplX3QgY291bnQgPSBwZW5kaW5nRXZlbnRzLnNpemUoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvdHJhY2svVGV4dFRyYWNrTGlzdC5oCShyZXZpc2lvbiAxMzUyOTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL3RyYWNrL1RleHRUcmFja0xpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBBcHBsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJPd25lcigpIHsgbV9vd25l
ciA9IDA7IH0KICAgICBOb2RlKiBvd25lcigpIGNvbnN0OwotICAgIAorCiAgICAgYm9vbCBpc0Zp
cmluZ0V2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9kaXNwYXRjaGluZ0V2ZW50czsgfQogCiBw
cml2YXRlOgpAQCAtODMsNiArODMsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2NoZWR1bGVBZGRU
cmFja0V2ZW50KFBhc3NSZWZQdHI8VGV4dFRyYWNrPik7CiAgICAgdm9pZCBhc3luY0V2ZW50VGlt
ZXJGaXJlZChUaW1lcjxUZXh0VHJhY2tMaXN0PiopOwogCisgICAgdm9pZCBpbnZhbGlkYXRlVHJh
Y2tJbmRleGVzQWZ0ZXJUcmFjayhUZXh0VHJhY2sqKTsKKwogICAgIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqIG1fY29udGV4dDsKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtX293bmVyOwogCkBAIC05
Miw3ICs5NCw4IEBAIHByaXZhdGU6CiAgICAgRXZlbnRUYXJnZXREYXRhIG1fZXZlbnRUYXJnZXRE
YXRhOwogICAgIFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IG1fYWRkVHJhY2tUcmFja3M7CiAg
ICAgVmVjdG9yPFJlZlB0cjxUZXh0VHJhY2s+ID4gbV9lbGVtZW50VHJhY2tzOwotICAgIAorICAg
IFZlY3RvcjxSZWZQdHI8VGV4dFRyYWNrPiA+IG1faW5iYW5kVHJhY2tzOworCiAgICAgaW50IG1f
ZGlzcGF0Y2hpbmdFdmVudHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCShyZXZpc2lvbiAxMzUyOTEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDEwIEBACiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyNpbmNsdWRl
ICJJbmJhbmRUZXh0VHJhY2tQcml2YXRlLmgiCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFFUKQog
I2luY2x1ZGUgPFF0R2xvYmFsPgogI2VuZGlmCkBAIC0xMTA5LDYgKzExMTMsMTggQEAgQ2FjaGVk
UmVzb3VyY2VMb2FkZXIqIE1lZGlhUGxheWVyOjpjYWNoZQogICAgIHJldHVybiBtX21lZGlhUGxh
eWVyQ2xpZW50LT5tZWRpYVBsYXllckNhY2hlZFJlc291cmNlTG9hZGVyKCk7CiB9CiAKKyNpZiBF
TkFCTEUoVklERU9fVFJBQ0spCit2b2lkIE1lZGlhUGxheWVyOjpnZXRUZXh0VHJhY2tzKFZlY3Rv
cjxSZWZQdHI8SW5iYW5kVGV4dFRyYWNrUHJpdmF0ZT4gPiYgdHJhY2tzKQoreworICAgIG1fcHJp
dmF0ZS0+Z2V0VGV4dFRyYWNrcyh0cmFja3MpOworfQorCit2b2lkIE1lZGlhUGxheWVyOjpzZXRU
ZXh0VHJhY2tDbGllbnQoVGV4dFRyYWNrQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9wcml2YXRl
LT5zZXRUZXh0VHJhY2tDbGllbnQoY2xpZW50KTsKK30KKyNlbmRpZgorCiB9CiAKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5o
CShyZXZpc2lvbiAxMzUyOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw4ICs1OSwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBjbGFzcyBBdWRpb1NvdXJjZVByb3ZpZGVyOwogY2xhc3MgRG9jdW1lbnQ7CiBj
bGFzcyBHU3RyZWFtZXJHV29ybGQ7CitjbGFzcyBJbmJhbmRUZXh0VHJhY2tQcml2YXRlOwogY2xh
c3MgTWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOwogY2xhc3MgTWVkaWFTb3VyY2U7CitjbGFz
cyBUZXh0VHJhY2tDbGllbnQ7CiAKIC8vIFN0cnVjdHVyZSB0aGF0IHdpbGwgaG9sZCBldmVyeSBu
YXRpdmUKIC8vIHR5cGVzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBtZWRpYSBwbGF5ZXIuCkBA
IC00MjcsNiArNDI5LDExIEBAIHB1YmxpYzoKIAogICAgIENhY2hlZFJlc291cmNlTG9hZGVyKiBj
YWNoZWRSZXNvdXJjZUxvYWRlcigpOwogCisjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQorICAgIHZv
aWQgZ2V0VGV4dFRyYWNrcyhWZWN0b3I8UmVmUHRyPEluYmFuZFRleHRUcmFja1ByaXZhdGU+ID4m
KTsKKyAgICB2b2lkIHNldFRleHRUcmFja0NsaWVudChUZXh0VHJhY2tDbGllbnQqKTsKKyNlbmRp
ZgorCiBwcml2YXRlOgogICAgIE1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAg
dm9pZCBsb2FkV2l0aE5leHRNZWRpYUVuZ2luZShNZWRpYVBsYXllckZhY3RvcnkqKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
UHJpdmF0ZS5oCShyZXZpc2lvbiAxMzUyOTEpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDExLCAyMDEy
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwpAQCAtMTA0LDcgKzEwNCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBw
YWludEN1cnJlbnRGcmFtZUluQ29udGV4dChHcmFwaGljc0NvbnRleHQqIGMsIGNvbnN0IEludFJl
Y3QmIHIpIHsgcGFpbnQoYywgcik7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBzZXRQcmVsb2FkKE1l
ZGlhUGxheWVyOjpQcmVsb2FkKSB7IH07CisgICAgdmlydHVhbCB2b2lkIHNldFByZWxvYWQoTWVk
aWFQbGF5ZXI6OlByZWxvYWQpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGhhc0F2YWlsYWJsZVZp
ZGVvRnJhbWUoKSBjb25zdCB7IHJldHVybiByZWFkeVN0YXRlKCkgPj0gTWVkaWFQbGF5ZXI6Okhh
dmVDdXJyZW50RGF0YTsgfQogCkBAIC0xNzQsNyArMTc0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBzb3VyY2VBcHBlbmQoY29uc3QgU3RyaW5nJiBpZCwgY29uc3QgdW5zaWduZWQgY2hh
ciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwg
Ym9vbCBzb3VyY2VBYm9ydChjb25zdCBTdHJpbmcmIGlkKSB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgdm9pZCBzb3VyY2VTZXREdXJhdGlvbihkb3VibGUpIHsgfQotICAgIHZpcnR1YWwg
dm9pZCBzb3VyY2VFbmRPZlN0cmVhbShNZWRpYVBsYXllcjo6RW5kT2ZTdHJlYW1TdGF0dXMpIHsg
fTsKKyAgICB2aXJ0dWFsIHZvaWQgc291cmNlRW5kT2ZTdHJlYW0oTWVkaWFQbGF5ZXI6OkVuZE9m
U3RyZWFtU3RhdHVzKSB7IH0KICAgICB2aXJ0dWFsIGJvb2wgc291cmNlU2V0VGltZXN0YW1wT2Zm
c2V0KGNvbnN0IFN0cmluZyYgaWQsIGRvdWJsZSBvZmZzZXQpIHsgcmV0dXJuIGZhbHNlOyB9CiAj
ZW5kaWYKIApAQCAtMTgzLDYgKzE4MywxMSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBNZWRpYVBs
YXllcjo6TWVkaWFLZXlFeGNlcHRpb24gZ2VuZXJhdGVLZXlSZXF1ZXN0KGNvbnN0IFN0cmluZyYs
IGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4gTWVkaWFQbGF5ZXI6Oktl
eVN5c3RlbU5vdFN1cHBvcnRlZDsgfQogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6Ok1lZGlhS2V5
RXhjZXB0aW9uIGNhbmNlbEtleVJlcXVlc3QoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJikg
eyByZXR1cm4gTWVkaWFQbGF5ZXI6OktleVN5c3RlbU5vdFN1cHBvcnRlZDsgfQogI2VuZGlmCisK
KyNpZiBFTkFCTEUoVklERU9fVFJBQ0spCisgICAgdmlydHVhbCB2b2lkIGdldFRleHRUcmFja3Mo
VmVjdG9yPFJlZlB0cjxJbmJhbmRUZXh0VHJhY2tQcml2YXRlPiA+JikgeyB9CisgICAgdmlydHVh
bCB2b2lkIHNldFRleHRUcmFja0NsaWVudChUZXh0VHJhY2tDbGllbnQqKSB7IH0KKyNlbmRpZgog
fTsKIAogfQo=
</data>
<flag name="review"
          id="190675"
          type_id="1"
          status="+"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>