<?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>215070</bug_id>
          
          <creation_ts>2020-08-01 19:14:45 -0700</creation_ts>
          <short_desc>Remove some member functions of Range and many calls to createLiveRange</short_desc>
          <delta_ts>2020-08-03 09:29:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>changseok</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>pdr</cc>
    
    <cc>philipj</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1677188</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-01 19:14:45 -0700</bug_when>
    <thetext>Remove some member functions of Range and many calls to createLiveRange</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677192</commentid>
    <comment_count>1</comment_count>
      <attachid>405803</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-01 20:14:55 -0700</bug_when>
    <thetext>Created attachment 405803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677199</commentid>
    <comment_count>2</comment_count>
      <attachid>405804</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-01 21:05:10 -0700</bug_when>
    <thetext>Created attachment 405804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677210</commentid>
    <comment_count>3</comment_count>
      <attachid>405809</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-01 23:20:54 -0700</bug_when>
    <thetext>Created attachment 405809
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677228</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-02 13:31:31 -0700</bug_when>
    <thetext>Passing all tests now; given recent history I’m guessing review will be Sam?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677238</commentid>
    <comment_count>5</comment_count>
      <attachid>405809</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-08-02 17:37:10 -0700</bug_when>
    <thetext>Comment on attachment 405809
Patch

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

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:2342
&gt; +// FIXME: No reason for this to be a method instead of a function.
&gt; +- (NSRange)_convertToNSRange:(const SimpleRange&amp;)range

Reminds me we should investigate using direct methods / members at some point (https://reviews.llvm.org/D69991 / https://nshipster.com/direct/).

&gt; Source/WebCore/page/TextIndicator.cpp:306
&gt; +        textRects = RenderObject::collectSelectionRects(range).map([&amp;](const auto&amp; rect) -&gt; FloatRect {

Is the explicit return type needed here?

&gt; Source/WebCore/rendering/RenderObject.h:551
&gt; +    WEBCORE_EXPORT static Vector&lt;SelectionRect&gt; collectSelectionRects(const SimpleRange&amp;);
&gt; +    WEBCORE_EXPORT static Vector&lt;SelectionRect&gt; collectSelectionRectsWithoutUnionInteriorLines(const SimpleRange&amp;);

I&apos;m a little sad to be adding more to RenderObject, but given that there is already collectSelectionRects functions here, it seems ok. Do they use the fact that they are static member functions in anyway?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677239</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-02 17:47:57 -0700</bug_when>
    <thetext>Committed r265190: &lt;https://trac.webkit.org/changeset/265190&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 405809.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677240</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-02 17:48:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/66454378&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677315</commentid>
    <comment_count>8</comment_count>
      <attachid>405809</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-03 09:29:46 -0700</bug_when>
    <thetext>Comment on attachment 405809
Patch

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

&gt;&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:2342
&gt;&gt; +- (NSRange)_convertToNSRange:(const SimpleRange&amp;)range
&gt; 
&gt; Reminds me we should investigate using direct methods / members at some point (https://reviews.llvm.org/D69991 / https://nshipster.com/direct/).

Sure, that would apply to even more methods, including ones that, unlike this one, do use self!

&gt;&gt; Source/WebCore/page/TextIndicator.cpp:306
&gt;&gt; +        textRects = RenderObject::collectSelectionRects(range).map([&amp;](const auto&amp; rect) -&gt; FloatRect {
&gt; 
&gt; Is the explicit return type needed here?

Yes, because otherwise it’s an IntRect.

&gt;&gt; Source/WebCore/rendering/RenderObject.h:551
&gt;&gt; +    WEBCORE_EXPORT static Vector&lt;SelectionRect&gt; collectSelectionRectsWithoutUnionInteriorLines(const SimpleRange&amp;);
&gt; 
&gt; I&apos;m a little sad to be adding more to RenderObject, but given that there is already collectSelectionRects functions here, it seems ok. Do they use the fact that they are static member functions in anyway?

They do not. These functions can live anywhere appropriate. I am happy to move them out of RenderObject to a better home. When moving them out of Range I chose to put them next to the underlying RenderObject functions they are based on, but would be happy to put them somewhere else.

Clearly they are part of &quot;rendering&quot;.

Really open to moving them again! It won’t be hard.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405803</attachid>
            <date>2020-08-01 20:14:55 -0700</date>
            <delta_ts>2020-08-01 21:05:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215070-20200801201454.patch</filename>
            <type>text/plain</type>
            <size>126086</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWE5MDg5ZDQ3MmMyYzZh
MzdhMTI0ZDhmMjYxNGUyY2Y1Y2UwMDlmOC4uZGM1MGQ4YTg2NmE3M2JiMzViZTlmZmNmYmY0OTVh
YzVhMTFjZTQxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAyMC0wOC0wMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbWVtYmVy
IGZ1bmN0aW9ucyBvZiBSYW5nZSBhbmQgbWFueSBjYWxscyB0byBjcmVhdGVMaXZlUmFuZ2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTA3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6
Om5leHRCb3VuZGFyeSk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KTogRGl0dG8uCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6
XSk6IFRha2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHBvc2l0aW9uRm9yVGV4dE1hcmtlcjpdKTogUmVtb3ZlIGNyZWF0ZUxpdmVSYW5nZS4K
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dFJlY3RzRnJvbU1h
cmtlcnM6d2l0aFRleHQ6XSk6IERpdHRvLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0VG9OU1JhbmdlOl0pOiBUYWtlIFNpbXBsZVJh
bmdlLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfaW5kZXhGb3JU
ZXh0TWFya2VyOl0pOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfdGV4dE1hcmtlckZvckluZGV4Ol0pOiBEaXR0by4KKwor
ICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcik6IFJlbmFtZWQgcmFuZ2UgdG8gbWFr
ZVNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZVJhbmdlKTogRGl0dG8u
CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oOiBVcGRhdGUgZm9yIHRo
ZSBhYm92ZS4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6dGV4dCBjb25zdCk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6c2hhZG93Um9vdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpp
bnRlcnZhbHNTdWZmaWNpZW50bHlPdmVybGFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmFkanVzdExpbmVIZWlnaHRPZlNlbGVjdGlvblJlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvYWxlc2NlU2VsZWN0aW9uUmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1JhbmdlLmg6IFVwZGF0ZSBm
b3IgdGhlIGFib3ZlLiBBbHNvIG1ha2UgcGFzdExhc3ROb2RlIHByaXZhdGUgc2luY2UgaXQgaXMK
KyAgICAgICAgb25seSB1c2VkIGluc2lkZSB0aGUgUmFuZ2UgY2xhc3MncyBpbXBsZW1lbnRhdGlv
bi4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVSYW5nZTo6U2ltcGxlUmFuZ2UpOiBSZW1vdmVkIG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBS
YW5nZS4KKyAgICAgICAgKiBkb20vU2ltcGxlUmFuZ2UuaDogVXBkYXRlIGZvciB0aGUgYWJvdmUu
IFJlbW92ZWQgYm90aCBjb25zdHJ1Y3RvciBvdmVybG9hZHMKKyAgICAgICAgdGhhdCB0YWtlIGEg
UmFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJl
ZCk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCk6IFVzZQorICAgICAg
ICBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICBSZW1vdmUgY3Jl
YXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBSZW1v
dmUgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJh
bmdlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlUmFuZ2VGb3JT
cGVsbENoZWNraW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb3JyZWN0U3BlbGxjaGVj
a2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6IERpdHRvLgorICAgICAg
ICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
ZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okluc2Vy
dExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKTogQ2hhbmdlIG91dAorICAg
ICAgICBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcv
U3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6aXNDaGVj
a2FibGUgY29uc3QpOiBSZXdyaXRlIHF1ZXN0aW9uYWJsZSBsb2dpYworICAgICAgICB0byB1c2Ug
aW50ZXJzZWN0aW5nTm9kZXMgaW5zdGVhZCBvZiBmaXJzdE5vZGUuCisKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRVbmdyYW1tYXRpY2FsUGhyYXNlcyBjb25zdCk6IFJlbW92ZSBjcmVhdGVM
aXZlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dCk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRWRp
dG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxl
bWVudCk6IFVzZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMuCisKKyAgICAgICAgKiBw
YWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246OmFk
ZFJhbmdlKTogVXNlIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVj
dGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KTogUmVtb3ZlIGNyZWF0ZUxpdmVSYW5nZS4KKworICAg
ICAgICAqIHBhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZG9jdW1l
bnRGcmFnbWVudEZyb21EcmFnRGF0YSk6IFRha2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJD
b3JlOjpEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0RHJhZyk6IFJlbW92ZSBjcmVhdGVMaXZl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKTogRGl0
dG8uCisKKyAgICAgICAgKiBwYWdlL1RleHRJbmRpY2F0b3IuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2VsZWN0aW9uUmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6aW5pdGlhbGl6
ZUluZGljYXRvcik6IENhbGwgY29sbGVjdFNlbGVjdGlvblJlY3RzIGRpcmVjdGx5IGhlcmUsCisg
ICAgICAgIGF2b2lkaW5nIGNyZWF0ZUxpdmVSYW5nZSBhbmQgdXNpbmcgbWFwIHRvIGNvbnZlcnQg
ZnJvbSBWZWN0b3I8U2VsZWN0aW9uUmVjdD4KKyAgICAgICAgdG8gVmVjdG9yPEZsb2F0UmVjdD4u
CisKKyAgICAgICAgKiBwYWdlL2lvcy9GcmFtZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9vdCBjb25zdCk6IFVzZSBtYWtlU2ltcGxl
UmFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAg
ICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5oOiBVcGRhdGUgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2Ug
dG8gdGFrZSBTaW1wbGVSYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDog
VXBkYXRlZCBXaW5kb3dzLW9ubHkgbGF5ZXJpbmctdmlvbGF0aW5nIGZ1bmN0aW9ucworICAgICAg
ICB0byB0YWtlIFNpbXBsZVJhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vaW9zL0RyYWdJbWFn
ZUlPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKTogVGFr
ZSBTaW1wbGVSYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlUmFuZ2VUb0RhdGFPYmplY3Qp
OiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVT
ZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50
RnJhZ21lbnQpOiBEaXR0by4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6aW50ZXJ2YWxzU3VmZmljaWVudGx5T3ZlcmxhcCk6IEFkZGVk
LiBNb3ZlZCBmcm9tIFJhbmdlLiBNb3N0bHkgdW5jaGFuZ2VkCisgICAgICAgIGJ1dCB1c2VzIFNp
bXBsZVJhbmdlIG5vdyBpbnN0ZWFkIG9mIGEgbGl2ZSByYW5nZSwgYW5kIGludGVyc2VjdGluZ05v
ZGVzIGluc3RlYWQgb2YKKyAgICAgICAgYSBsb29wIHVzaW5nIGZpcnN0Tm9kZSBhbmQgcGFzdExh
c3ROb2RlLgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0TGluZUhlaWdodE9mU2VsZWN0aW9uUmVj
dHMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvYWxlc2NlU2VsZWN0aW9uUmVjdHMpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJl
Y3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNJbnRlcm5hbCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHMpOiBEaXR0
by4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6IFVwZGF0ZSBmb3IgYWJvdmUu
CisKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6Om1hcmtlclJhbmdlRm9yTm9kZSk6IFVzZSBtYWtlU2ltcGxSYW5nZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6bG9jYXRpb25Gcm9tUmFuZ2UpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkludGVybmFsczo6bGVuZ3RoRnJvbVJhbmdlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0
b3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c3VicmFuZ2UpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlv
bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjp0ZXh0SW5kaWNhdG9yRm9y
UmFuZ2UpOiBEaXR0by4KKwogMjAyMC0wOC0wMSAgSm9vbmdodW4gUGFyayAgPGpoNzE4LnBhcmtA
c2Ftc3VuZy5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUmVtb3ZlIHRoZSBidWlsZCB3YXJu
aW5ncyBiZWxvdyBzaW5jZSByMjY1MTUwLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCBkZmVkNjRhOTdkNTBlNWI0YmU1
NTIyNTkxNjU5NmViYjk4MTExZTgyLi5mY2E5ZmU0MTQ5YzlhMmU1ZWVmNDgwZjg0N2U5YzUzMGVi
YzdmNTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDIwLTA4LTAxICBEYXJpbiBBZGxl
ciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgc29tZSBtZW1iZXIgZnVuY3Rp
b25zIG9mIFJhbmdlIGFuZCBtYW55IGNhbGxzIHRvIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDcwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZS5tbToKKyAg
ICAgICAgKC1bV0tXZWJQcm9jZXNzUGx1Z0luUmFuZ2VIYW5kbGUgZGV0ZWN0RGF0YVdpdGhUeXBl
czpjb250ZXh0Ol0pOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAqIFdlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHA6CisgICAgICAgIChB
UEk6OlBhZ2VPdmVybGF5Q2xpZW50SW1wbDo6YWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQp
OiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tE
T01SYW5nZS5tbToKKyAgICAgICAgKC1bV0tET01SYW5nZSB0ZXh0UmVjdHNdKTogRGl0dG8uCisg
ICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NVGV4dEl0ZXJh
dG9yLm1tOgorICAgICAgICAoLVtXS0RPTVRleHRJdGVyYXRvciBpbml0V2l0aFJhbmdlOl0pOiBE
aXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1
bmRsZVJhbmdlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6cmVuZGVyZWRJbWFnZSk6IERpdHRvLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
cGVyZm9ybURpY3Rpb25hcnlMb29rdXBBdExvY2F0aW9uKTogUmVtb3ZlIGNyZWF0ZUxpdmVSYW5n
ZS4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JT
ZWxlY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJ
QWZ0ZXJQYWdlU2Nyb2xsKTogRGl0dG8uCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL2lv
cy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRQbGF0Zm9ybUVk
aXRvclN0YXRlIGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmNvbXB1
dGVBbmRTZW5kRWRpdERyYWdTbmFwc2hvdCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQ
YWdlOjpnZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9mZnNldCk6IERpdHRvLgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRl
eHQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVxdWVzdEF1dG9jb3JyZWN0
aW9uRGF0YSk6IERpdHRvLgorCiAyMDIwLTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggYW5kIGZ1cnRoZXIgcmVmaW5lIG1ha2VmaWxlIHJ1bGUgZm9y
IFdlYktpdCBtZXNzYWdlcyBnZW5lcmF0ZWQgZmlsZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvaW9zL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxv
ZwppbmRleCAzMmUwOTU4MTcyYzQwZmE0YTUyYTEyNDUxMTYxNTI2ZWE4Zjk5MWNlLi45YzBiN2Y4
YmY2MWJmNjJlNjE4Nzk3NGE1YjczMWU0NTU5Yzg0NTZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzb21lIG1lbWJlciBmdW5jdGlvbnMgb2YgUmFu
Z2UgYW5kIG1hbnkgY2FsbHMgdG8gY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9T
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTpdKTog
UmVtb3ZlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uUmVj
dHNGb3JSYW5nZTpdKTogVXNlIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW06CisgICAgICAgICgtW1dlYlZpc2libGVQb3NpdGlv
biBlbmNsb3NpbmdSYW5nZVdpdGhEaWN0YXRpb25QaHJhc2VBbHRlcm5hdGl2ZXM6XSk6IERpdHRv
LgorICAgICAgICAoLVtXZWJWaXNpYmxlUG9zaXRpb24gZW5jbG9zaW5nUmFuZ2VXaXRoQ29ycmVj
dGlvbkluZGljYXRvcl0pOiBEaXR0by4KKyAgICAgICAgKCtbRE9NUmFuZ2UgcmFuZ2VGb3JGaXJz
dFBvc2l0aW9uOnNlY29uZDpdKTogUmVuYW1lIGZpcnN0VlAvc2Vjb25kVlAKKyAgICAgICAgdG8g
Zmlyc3RQb3NpdGlvbi9zZWNvbmRQb3NpdGlvbi4KKwogMjAyMC0wOC0wMSAgRGFyaW4gQWRsZXIg
IDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFJhbmdlOjpjcmVhdGUgYW5kIG1h
bnkgbW9yZSB1c2VzIG9mIGxpdmUgcmFuZ2VzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5k
ZXggZTMxNmY0MTM1ZjA5ZDM4ZWIwNmI5NmUxZjI3NTMxNzI4YTc4YzliMy4uZWU0ZGQ5NDMwMmVk
ZDExM2E4YzNlY2M1NjFlMTRhZjQwMmFlODRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDU0IEBACisyMDIwLTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KKworICAgICAgICBSZW1vdmUgc29tZSBtZW1iZXIgZnVuY3Rpb25zIG9mIFJhbmdlIGFu
ZCBtYW55IGNhbGxzIHRvIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDcwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBET00vRE9NLm1tOgorICAgICAgICAoLVtET01SYW5n
ZSByZW5kZXJlZEltYWdlRm9yY2luZ0JsYWNrVGV4dDpyZW5kZXJlZEltYWdlRm9yY2luZ0JsYWNr
VGV4dDpdKToKKyAgICAgICAgVXNlIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKC1bRE9NUmFu
Z2UgdGV4dFJlY3RzXSk6IERpdHRvLgorCisgICAgICAgICogRE9NL0RPTURvY3VtZW50Lm1tOiBV
cGRhdGUgaW5jbHVkZXMuCisgICAgICAgICogRE9NL0RPTVJhbmdlLm1tOiBEaXR0by4KKyAgICAg
ICAgKiBET00vRE9NUmFuZ2VJbnRlcm5hbC5oOiBEaXR0by4KKyAgICAgICAgKiBET00vRE9NVUlL
aXRFeHRlbnNpb25zLm1tOiBEaXR0by4KKyAgICAgICAgKiBET00vRE9NVXRpbGl0eS5tbTogRGl0
dG8uCisKKyAgICAgICAgKiBET00vV2ViRE9NT3BlcmF0aW9ucy5tbToKKyAgICAgICAgKC1bRE9N
UmFuZ2Ugd2ViQXJjaGl2ZV0pOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAoLVtET01S
YW5nZSBtYXJrdXBTdHJpbmddKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkZyYW1l
Lm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBfc3RyaW5nRm9yUmFuZ2U6XSk6IFVzZSBtYWtlU2lt
cGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIF9jb252ZXJ0VG9ET01SYW5nZTpdKTogUmV0
dXJuIGEgU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIF9jb252ZXJ0VG9ET01SYW5n
ZTpyYW5nZUlzUmVsYXRpdmVUbzpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIF9jb252
ZXJ0TlNSYW5nZVRvRE9NUmFuZ2U6XSk6IFVwZGF0ZSBmb3IgYWJvdmUuCisgICAgICAgICgtW1dl
YkZyYW1lIF9jb252ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6XSk6IFVzZSBtYWtlU2ltcGxlUmFuZ2Uu
CisgICAgICAgICgtW1dlYkZyYW1lIF9zZWxlY3ROU1JhbmdlOl0pOiBVcGRhdGUgZm9yIGFib3Zl
LgorICAgICAgICAoLVtXZWJGcmFtZSBzZWxlY3RXaXRob3V0Q2xvc2luZ1R5cGluZ05TUmFuZ2U6
XSk6IERpdHRvLgorICAgICAgICAoLVtXZWJGcmFtZSBnZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6
YW5kTWV0YWRhdGFzOl0pOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFt
ZSBkaWN0YXRpb25SZXN1bHRNZXRhZGF0YUZvclJhbmdlOl0pOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAq
IFdlYlZpZXcvV2ViSFRNTFZpZXcubW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9kb2N1bWVu
dEZyYWdtZW50RnJvbVBhc3RlYm9hcmQ6Zm9yVHlwZTppbkNvbnRleHQ6c3VicmVzb3VyY2VzOl0p
OgorICAgICAgICBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBh
dHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOl0pOiBVc2UgYXV0by4KKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6XSk6IERlbGV0ZWQuCisgICAg
ICAgICgtW1dlYkhUTUxWaWV3IGF0dHJpYnV0ZWRTdHJpbmddKTogUmV3cm90ZSB0byB1c2UgU2lt
cGxlUmFuZ2UgY29uc2lzdGVudGx5LgorICAgICAgICAoLVtXZWJIVE1MVmlldyBzZWxlY3RlZEF0
dHJpYnV0ZWRTdHJpbmddKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYkltbWVkaWF0
ZUFjdGlvbkNvbnRyb2xsZXIubW06CisgICAgICAgICgtW1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIgX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWRUZXh0XSk6CisgICAgICAg
IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICogV2ViVmlldy9XZWJUZXh0SXRlcmF0b3Iu
bW06CisgICAgICAgICgtW1dlYlRleHRJdGVyYXRvciBpbml0V2l0aFJhbmdlOl0pOiBEaXR0by4K
KworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfZGlk
Q29uY2x1ZGVFZGl0RHJhZ10pOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdlLgorCiAyMDIwLTA4LTAx
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmFuZ2U6
OmNyZWF0ZSBhbmQgbWFueSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IGJlYjcyMTJjNzUzMTc2
NjgwM2FhYWVlYzY5ZTI5NGIyNmI4MDAxMDEuLmM3ZmZmY2ZjMjczOGRmMWJmNTZhNmFmZTRkNDVi
M2UwMDFjNGJkYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVj
dENhY2hlLmNwcApAQCAtMjYyMiw3ICsyNjIyLDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0
Q2FjaGU6Om5leHRCb3VuZGFyeShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnMK
ICAgICAgICAgYXV0byBiYWNrd2FyZHNTY2FuUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoYm91bmRhcnktPmRvY3VtZW50KCkpOwogICAgICAgICBpZiAoIXNldFJhbmdlU3Rh
cnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZzZXQoYmFja3dhcmRzU2NhblJhbmdlLCBjaGFyYWN0ZXJP
ZmZzZXQsIGZhbHNlKSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHByZWZpeExl
bmd0aCA9IHByZWZpeExlbmd0aEZvclJhbmdlKGNyZWF0ZUxpdmVSYW5nZShiYWNrd2FyZHNTY2Fu
UmFuZ2UpLCBzdHJpbmcpOworICAgICAgICBwcmVmaXhMZW5ndGggPSBwcmVmaXhMZW5ndGhGb3JS
YW5nZShiYWNrd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CiAgICAgfQogICAgIAogICAgIGlmICgh
c2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChzZWFyY2hSYW5nZSwgY2hhcmFj
dGVyT2Zmc2V0LCB0cnVlKSkKQEAgLTI2ODEsNyArMjY4MSw3IEBAIENoYXJhY3Rlck9mZnNldCBB
WE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hh
cmFjdGVyCiAgICAgICAgIGZvcndhcmRzU2NhblJhbmdlLnN0YXJ0ID0gKmFmdGVyQm91bmRhcnk7
CiAgICAgICAgIGlmICghc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChmb3J3
YXJkc1NjYW5SYW5nZSwgY2hhcmFjdGVyT2Zmc2V0LCB0cnVlKSkKICAgICAgICAgICAgIHJldHVy
biB7IH07Ci0gICAgICAgIHN1ZmZpeExlbmd0aCA9IHN1ZmZpeExlbmd0aEZvclJhbmdlKGNyZWF0
ZUxpdmVSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSksIHN0cmluZyk7CisgICAgICAgIHN1ZmZpeExl
bmd0aCA9IHN1ZmZpeExlbmd0aEZvclJhbmdlKGZvcndhcmRzU2NhblJhbmdlLCBzdHJpbmcpOwog
ICAgIH0KICAgICAKICAgICBpZiAoIXNldFJhbmdlU3RhcnRPckVuZFdpdGhDaGFyYWN0ZXJPZmZz
ZXQoc2VhcmNoUmFuZ2UsIGNoYXJhY3Rlck9mZnNldCwgZmFsc2UpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCBlOGIzNzc0ZTcxODViNjE1YmEzZGRhM2FkMmQw
NDk1MzllOTFhZDAzLi5kODQxOGIwNDVhYTAwMGU4M2Q4YmRkOTI0ODY3MTgxYzE0NDMzMWI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMjMzOCwxMyArMjMz
OCw5IEBAIC0gKE5TQXJyYXkgKilhcnJheU9mVGV4dEZvclRleHRNYXJrZXJzOihOU0FycmF5ICop
bWFya2VycyBhdHRyaWJ1dGVkOihCT09MKWF0dHJpCiAgICAgcmV0dXJuIFthcnJheSBhdXRvcmVs
ZWFzZV07CiB9CiAKLS0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlICopbGl2ZVJh
bmdlCisvLyBGSVhNRTogTm8gcmVhc29uIGZvciB0aGlzIHRvIGJlIGEgbWV0aG9kIGluc3RlYWQg
b2YgYSBmdW5jdGlvbi4KKy0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KGNvbnN0IFNpbXBs
ZVJhbmdlJilyYW5nZQogewotICAgIGlmICghbGl2ZVJhbmdlKQotICAgICAgICByZXR1cm4gTlNN
YWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0KLSAgICBhdXRvIHJhbmdlID0gU2ltcGxlUmFuZ2Ug
eyAqbGl2ZVJhbmdlIH07Ci0KICAgICBhdXRvJiBkb2N1bWVudCA9IHJhbmdlLnN0YXJ0LmRvY3Vt
ZW50KCk7CiAgICAgYXV0byogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwogICAgIGlmICghZnJh
bWUpCkBAIC0yMzk4LDcgKzIzOTQsOSBAQCAtIChOU0ludGVnZXIpcG9zaXRpb25Gb3JUZXh0TWFy
a2VyOihXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKW1hcmtlcgogICAgICAgICBDaGFyYWN0
ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW21hcmtlciBjaGFyYWN0ZXJPZmZzZXRdOwogICAg
ICAgICAvLyBDcmVhdGUgYSBjb2xsYXBzZWQgcmFuZ2UgZnJvbSB0aGUgQ2hhcmFjdGVyT2Zmc2V0
IG9iamVjdC4KICAgICAgICAgYXV0byByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENo
YXJhY3Rlck9mZnNldHMoY2hhcmFjdGVyT2Zmc2V0LCBjaGFyYWN0ZXJPZmZzZXQpOwotICAgICAg
ICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS5n
ZXQoKV0ubG9jYXRpb247CisgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICByZXR1cm4g
TlNOb3RGb3VuZDsKKyAgICAgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipyYW5n
ZV0ubG9jYXRpb247CiAgICAgfQogICAgIHJldHVybiBOU05vdEZvdW5kOwogfQpAQCAtMjc1Niw4
ICsyNzU0LDcgQEAgLSAoTlNBcnJheSAqKXRleHRSZWN0c0Zyb21NYXJrZXJzOihOU0FycmF5ICop
bWFya2VycyB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiAgICAgaWYgKCFyYW5nZSB8fCByYW5n
ZS0+Y29sbGFwc2VkKCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBWZWN0b3I8V2ViQ29y
ZTo6U2VsZWN0aW9uUmVjdD4gcmVjdHM7Ci0gICAgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+Y29s
bGVjdFNlbGVjdGlvblJlY3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyhyZWN0cyk7CisgICAg
YXV0byByZWN0cyA9IFJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzV2l0aG91dFVu
aW9uSW50ZXJpb3JMaW5lcygqcmFuZ2UpOwogICAgIGlmIChyZWN0cy5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocmVjdHMsIFsmXSAoYXV0
byYgcmVjdCkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQppbmRleCBh
Zjg0NmMxN2Y2NjY5ZWFhNzk4NTcyMWFhMDIyM2Q0ZGRjZmYxYzRlLi5iZGM3ZDQ4MDgwNjE1YzQ2
ODFlNzg5YzhiZjdmYzc5ZWQ0ZGRjYjk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlck1hYy5tbQpAQCAtMzYyMSwxMyArMzYyMSwxMSBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcg
Kilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclJhbmdlOihOU1JhbmdlKXJhbmdlCiAgICAgcmV0dXJu
IFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOltzZWxmIHRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZTp3ZWJSYW5nZV0gc3BlbGxDaGVjazpZRVNdOwogfQogCi0tIChO
U1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSopcmFuZ2UKKy8vIEZJWE1FOiBObyByZWFz
b24gZm9yIHRoaXMgdG8gYmUgYSBtZXRob2QgaW5zdGVhZCBvZiBhIGZ1bmN0aW9uOyBjYW4gZ2V0
IGRvY3VtZW50IGZyb20gcmFuZ2UuCistIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihjb25z
dCBTaW1wbGVSYW5nZSYpcmFuZ2UKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IAotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5k
LCAwKTsKLSAgICAKICAgICBhdXRvIGRvY3VtZW50ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmRv
Y3VtZW50KCk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdl
KE5TTm90Rm91bmQsIDApOwpAQCAtMzYzNiw3ICszNjM0LDcgQEAgLSAoTlNSYW5nZSlfY29udmVy
dFRvTlNSYW5nZTooUmFuZ2UqKXJhbmdlCiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCiAgICAg
ICAgIHJldHVybiBOU01ha2VSYW5nZShOU05vdEZvdW5kLCAwKTsKIAotICAgIHJldHVybiBjaGFy
YWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZG9jdW1lbnRF
bGVtZW50KSwgKnJhbmdlKTsKKyAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5
UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmRvY3VtZW50RWxlbWVudCksIHJhbmdlKTsKIH0KIAog
LSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6KGlkKW1hcmtlcgpAQCAtMzY0Niw5ICsz
NjQ0LDEwIEBAIC0gKE5TSW50ZWdlcilfaW5kZXhGb3JUZXh0TWFya2VyOihpZCltYXJrZXIKICAg
ICAKICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+
YXhPYmplY3RDYWNoZSgpKSB7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZz
ZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOm1hcmtlcl07Ci0gICAgICAg
IC8vIENyZWF0ZSBhIGNvbGxhcHNlZCByYW5nZSBmcm9tIHRoZSBDaGFyYWN0ZXJPZmZzZXQgb2Jq
ZWN0LgogICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFj
dGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgICAgIHJl
dHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgp
XS5sb2NhdGlvbjsKKyAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgIHJldHVybiBOU05v
dEZvdW5kOworICAgICAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6KnJhbmdlXS5s
b2NhdGlvbjsKICAgICB9CiAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiB9CkBAIC0zNjcwLDcgKzM2
NjksNyBAQCAtIChpZClfdGV4dE1hcmtlckZvckluZGV4OihOU0ludGVnZXIpdGV4dEluZGV4CiAg
ICAgICAgIHJldHVybiBuaWw7CiAKICAgICBhdXRvIGJvdW5kYXJ5ID0gcmVzb2x2ZUNoYXJhY3Rl
ckxvY2F0aW9uKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqZG9jdW1lbnRFbGVtZW50
KSwgdGV4dEluZGV4KTsKLSAgICBhdXRvIGNoYXJhY3Rlck9mZnNldCA9IGNhY2hlLT5zdGFydE9y
RW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKHsgYm91bmRhcnksIGJv
dW5kYXJ5IH0pLCB0cnVlKTsKKyAgICBhdXRvIGNoYXJhY3Rlck9mZnNldCA9IGNhY2hlLT5zdGFy
dE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UobWFrZVNpbXBsZVJhbmdlKGJvdW5kYXJ5KSwg
dHJ1ZSk7CiAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6Y2hh
cmFjdGVyT2Zmc2V0XTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50TWFya2VyQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmNwcAppbmRleCA2OGNjNzY1ZjAzMDY3ZTJhNzhmNmRhNTE0Y2VjN2JmZDJj
ZDYyNjViLi5iYjJiNzdlOGE4ZjRmNjc2MmNiZWUxNWRiZWFmZjE4MWE5ZDY1ZTc4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcApAQCAtMTA1
LDcgKzEwNSw3IEBAIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpmaWx0ZXJNYXJrZXJz
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgY29uc3QgRnVuCiBzdGF0aWMgdm9pZCB1cGRhdGVS
ZW5kZXJlZFJlY3RzRm9yTWFya2VyKFJlbmRlcmVkRG9jdW1lbnRNYXJrZXImIG1hcmtlciwgTm9k
ZSYgbm9kZSkKIHsKICAgICBBU1NFUlQoIW5vZGUuZG9jdW1lbnQoKS52aWV3KCkgfHwgIW5vZGUu
ZG9jdW1lbnQoKS52aWV3KCktPm5lZWRzTGF5b3V0KCkpOwotICAgIG1hcmtlci5zZXRVbmNsaXBw
ZWRBYnNvbHV0ZVJlY3RzKGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRR
dWFkcyhyYW5nZShub2RlLCBtYXJrZXIpLCB0cnVlKSkpOworICAgIG1hcmtlci5zZXRVbmNsaXBw
ZWRBYnNvbHV0ZVJlY3RzKGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRR
dWFkcyhtYWtlU2ltcGxlUmFuZ2Uobm9kZSwgbWFya2VyKSwgdHJ1ZSkpKTsKIH0KIAogdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmludmFsaWRhdGVSZWN0c0ZvckFsbE1hcmtlcnMoKQpA
QCAtNjYyLDcgKzY2Miw3IEBAIHZvaWQgcmVtb3ZlTWFya2Vycyhjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwCiAgICAgcmFuZ2Uuc3Rh
cnQuY29udGFpbmVyLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHJhbmdlLCB0
eXBlcywgcG9saWN5KTsKIH0KIAotU2ltcGxlUmFuZ2UgcmFuZ2UoTm9kZSYgbm9kZSwgY29uc3Qg
RG9jdW1lbnRNYXJrZXImIG1hcmtlcikKK1NpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShOb2Rl
JiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKQogewogICAgIHVuc2lnbmVkIHN0
YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0KCk7CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0
ID0gbWFya2VyLmVuZE9mZnNldCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5oCmluZGV4IDBiNDRlMmMyZWQzYmVlNTM0M2ViNzY0ODdkZTJiNWY2MjA0
MGNkNzIuLmY3MzRkNzMyYmYxMDc1Y2YwMjdjOTdjMWVkOThlZDRmZTRmYzI4ZTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTExNSw3ICsx
MTUsNyBAQCB2b2lkIGFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYsIERvY3VtZW50TWFya2Vy
OjpNYXJrZXJUeXBlLCBjb25zdCBEb2N1bWVudE1hcgogdm9pZCBhZGRNYXJrZXIoVGV4dCYsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpNYXJr
ZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmID0geyB9KTsKIHZvaWQgcmVtb3ZlTWFya2Vy
cyhjb25zdCBTaW1wbGVSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVybGFw
cGluZ01hcmtlciA9IFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyOjpObyk7CiAKLVdF
QkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIHJhbmdlKE5vZGUmLCBjb25zdCBEb2N1bWVudE1hcmtl
ciYpOworV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKE5vZGUmLCBj
b25zdCBEb2N1bWVudE1hcmtlciYpOwogCiBpbmxpbmUgYm9vbCBEb2N1bWVudE1hcmtlckNvbnRy
b2xsZXI6Omhhc01hcmtlcnMoKSBjb25zdAogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggMjY2MTg1
ZWJkNzk1MmRjMjJhNWNhN2U0NDI1YmU5NTUxMmQ0ZjFiYy4uNzAwODFiZTIwY2IxYjczYjZiNGE3
OTRmYWI5YTdhMWU5Y2IyY2U0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC04ODgsNyArODg4LDcg
QEAgU3RyaW5nIFJhbmdlOjp0ZXh0KCkgY29uc3QKICAgICAvLyBGSVhNRTogQXMgd2l0aCBpbm5l
clRleHQsIHdlJ2QgbGlrZSB0aGlzIHRvIHdvcmsgZXZlbiBpZiB0aGVyZSBhcmUgbm8gcmVuZGVy
IG9iamVjdHMuCiAgICAgc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgp
OwogCi0gICAgcmV0dXJuIHBsYWluVGV4dCgqdGhpcyk7CisgICAgcmV0dXJuIHBsYWluVGV4dCht
YWtlU2ltcGxlUmFuZ2UoKnRoaXMpKTsKIH0KIAogLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0RP
TS1QYXJzaW5nLyN3aWRsLVJhbmdlLWNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudC1Eb2N1bWVudEZy
YWdtZW50LURPTVN0cmluZy1mcmFnbWVudApAQCAtMTA2OSwxMSArMTA2OSw2IEBAIE5vZGUqIFJh
bmdlOjpmaXJzdE5vZGUoKSBjb25zdAogICAgIHJldHVybiBOb2RlVHJhdmVyc2FsOjpuZXh0U2tp
cHBpbmdDaGlsZHJlbihzdGFydENvbnRhaW5lcigpKTsKIH0KIAotU2hhZG93Um9vdCogUmFuZ2U6
OnNoYWRvd1Jvb3QoKSBjb25zdAotewotICAgIHJldHVybiBzdGFydENvbnRhaW5lcigpLmNvbnRh
aW5pbmdTaGFkb3dSb290KCk7Ci19Ci0KIE5vZGUqIFJhbmdlOjpwYXN0TGFzdE5vZGUoKSBjb25z
dAogewogICAgIGlmIChlbmRDb250YWluZXIoKS5pc0NoYXJhY3RlckRhdGFOb2RlKCkpCkBAIC0x
MTQ0LDI3MyArMTEzOSw2IEBAIHZvaWQgUmFuZ2U6OmFic29sdXRlVGV4dFJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYgcmVjdHMsIGJvb2wgdXNlU2VsZWN0aW9uSGVpZ2h0LCBPCiAgICAgfQogfQogCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLXN0YXRpYyBib29sIGludGVydmFsc1N1ZmZpY2llbnRs
eU92ZXJsYXAoaW50IHN0YXJ0QSwgaW50IGVuZEEsIGludCBzdGFydEIsIGludCBlbmRCKQotewot
ICAgIGlmIChlbmRBIDw9IHN0YXJ0QSB8fCBlbmRCIDw9IHN0YXJ0QikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgY29uc3QgZmxvYXQgc3VmZmljaWVudE92ZXJsYXAgPSAuNzU7Ci0KLSAg
ICBpbnQgbGVuZ3RoQSA9IGVuZEEgLSBzdGFydEE7Ci0gICAgaW50IGxlbmd0aEIgPSBlbmRCIC0g
c3RhcnRCOwotCi0gICAgaW50IG1heFN0YXJ0ID0gc3RkOjptYXgoc3RhcnRBLCBzdGFydEIpOwot
ICAgIGludCBtaW5FbmQgPSBzdGQ6Om1pbihlbmRBLCBlbmRCKTsKLQotICAgIGlmIChtYXhTdGFy
dCA+IG1pbkVuZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIG1pbkVuZCAt
IG1heFN0YXJ0ID49IHN1ZmZpY2llbnRPdmVybGFwICogc3RkOjptaW4obGVuZ3RoQSwgbGVuZ3Ro
Qik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RMaW5lSGVpZ2h0T2ZTZWxlY3Rpb25S
ZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mIHJlY3RzLCBzaXplX3QgbnVtYmVyT2ZSZWN0cywg
aW50IGxpbmVOdW1iZXIsIGludCBsaW5lVG9wLCBpbnQgbGluZUhlaWdodCkKLXsKLSAgICBBU1NF
UlQocmVjdHMuc2l6ZSgpID49IG51bWJlck9mUmVjdHMpOwotICAgIGZvciAoc2l6ZV90IGkgPSBu
dW1iZXJPZlJlY3RzOyBpOyApIHsKLSAgICAgICAgLS1pOwotICAgICAgICBpZiAocmVjdHNbaV0u
bGluZU51bWJlcigpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHJlY3RzW2ldLnNldExp
bmVOdW1iZXIobGluZU51bWJlcik7Ci0gICAgICAgIHJlY3RzW2ldLnNldExvZ2ljYWxUb3AobGlu
ZVRvcCk7Ci0gICAgICAgIHJlY3RzW2ldLnNldExvZ2ljYWxIZWlnaHQobGluZUhlaWdodCk7Ci0g
ICAgfQotfQotCi1zdGF0aWMgU2VsZWN0aW9uUmVjdCBjb2FsZXNjZVNlbGVjdGlvblJlY3RzKGNv
bnN0IFNlbGVjdGlvblJlY3QmIG9yaWdpbmFsLCBjb25zdCBTZWxlY3Rpb25SZWN0JiBwcmV2aW91
cykKLXsKLSAgICBTZWxlY3Rpb25SZWN0IHJlc3VsdCh1bmlvblJlY3QocHJldmlvdXMucmVjdCgp
LCBvcmlnaW5hbC5yZWN0KCkpLCBvcmlnaW5hbC5pc0hvcml6b250YWwoKSwgb3JpZ2luYWwucGFn
ZU51bWJlcigpKTsKLSAgICByZXN1bHQuc2V0RGlyZWN0aW9uKG9yaWdpbmFsLmNvbnRhaW5zU3Rh
cnQoKSB8fCBvcmlnaW5hbC5jb250YWluc0VuZCgpID8gb3JpZ2luYWwuZGlyZWN0aW9uKCkgOiBw
cmV2aW91cy5kaXJlY3Rpb24oKSk7Ci0gICAgcmVzdWx0LnNldENvbnRhaW5zU3RhcnQocHJldmlv
dXMuY29udGFpbnNTdGFydCgpIHx8IG9yaWdpbmFsLmNvbnRhaW5zU3RhcnQoKSk7Ci0gICAgcmVz
dWx0LnNldENvbnRhaW5zRW5kKHByZXZpb3VzLmNvbnRhaW5zRW5kKCkgfHwgb3JpZ2luYWwuY29u
dGFpbnNFbmQoKSk7Ci0gICAgcmVzdWx0LnNldElzRmlyc3RPbkxpbmUocHJldmlvdXMuaXNGaXJz
dE9uTGluZSgpIHx8IG9yaWdpbmFsLmlzRmlyc3RPbkxpbmUoKSk7Ci0gICAgcmVzdWx0LnNldElz
TGFzdE9uTGluZShwcmV2aW91cy5pc0xhc3RPbkxpbmUoKSB8fCBvcmlnaW5hbC5pc0xhc3RPbkxp
bmUoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gVGhpcyBmdW5jdGlvbiBpcyBzaW1p
bGFyIGluIHNwaXJpdCB0byBhZGRMaW5lQm94UmVjdHMsIGJ1dCBhbm5vdGF0ZXMgdGhlIHJldHVy
bmVkIHJlY3RhbmdsZXMKLS8vIHdpdGggYWRkaXRpb25hbCBzdGF0ZSB3aGljaCBoZWxwcyBpT1Mg
ZHJhdyBzZWxlY3Rpb25zIGluIGl0cyB1bmlxdWUgd2F5LgotaW50IFJhbmdlOjpjb2xsZWN0U2Vs
ZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKFZlY3RvcjxTZWxlY3Rpb25SZWN0
PiYgcmVjdHMpIGNvbnN0Ci17Ci0gICAgYXV0byYgc3RhcnRDb250YWluZXIgPSB0aGlzLT5zdGFy
dENvbnRhaW5lcigpOwotICAgIGF1dG8mIGVuZENvbnRhaW5lciA9IHRoaXMtPmVuZENvbnRhaW5l
cigpOwotICAgIGludCBzdGFydE9mZnNldCA9IG1fc3RhcnQub2Zmc2V0KCk7Ci0gICAgaW50IGVu
ZE9mZnNldCA9IG1fZW5kLm9mZnNldCgpOwotCi0gICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IG5l
d1JlY3RzOwotICAgIE5vZGUqIHN0b3BOb2RlID0gcGFzdExhc3ROb2RlKCk7Ci0gICAgYm9vbCBo
YXNGbGlwcGVkV3JpdGluZ01vZGUgPSBzdGFydENvbnRhaW5lci5yZW5kZXJlcigpICYmIHN0YXJ0
Q29udGFpbmVyLnJlbmRlcmVyKCktPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KTsKLSAgICBib29sIGNvbnRhaW5zRGlmZmVyZW50V3JpdGluZ01vZGVzID0gZmFsc2U7Ci0gICAg
Zm9yIChOb2RlKiBub2RlID0gZmlyc3ROb2RlKCk7IG5vZGUgJiYgbm9kZSAhPSBzdG9wTm9kZTsg
bm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyZXIgPSBub2RlLT5yZW5kZXJlcigpOwotICAgICAgICAvLyBPbmx5IGFzayBsZWFm
IHJlbmRlciBvYmplY3RzIGZvciB0aGVpciBsaW5lIGJveCByZWN0cy4KLSAgICAgICAgaWYgKHJl
bmRlcmVyICYmICFyZW5kZXJlci0+Zmlyc3RDaGlsZFNsb3coKSAmJiByZW5kZXJlci0+c3R5bGUo
KS51c2VyU2VsZWN0KCkgIT0gVXNlclNlbGVjdDo6Tm9uZSkgewotICAgICAgICAgICAgYm9vbCBp
c1N0YXJ0Tm9kZSA9IHJlbmRlcmVyLT5ub2RlKCkgPT0gJnN0YXJ0Q29udGFpbmVyOwotICAgICAg
ICAgICAgYm9vbCBpc0VuZE5vZGUgPSByZW5kZXJlci0+bm9kZSgpID09ICZlbmRDb250YWluZXI7
Ci0gICAgICAgICAgICBpZiAoaGFzRmxpcHBlZFdyaXRpbmdNb2RlICE9IHJlbmRlcmVyLT5zdHls
ZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICAgICAgY29udGFp
bnNEaWZmZXJlbnRXcml0aW5nTW9kZXMgPSB0cnVlOwotICAgICAgICAgICAgLy8gRklYTUU6IFNl
bmRpbmcgMCBmb3IgdGhlIHN0YXJ0T2Zmc2V0IGlzIGEgd2VpcmQgd2F5IG9mIHRlbGxpbmcgdGhl
IHJlbmRlcmVyIHRoYXQgdGhlIHNlbGVjdGlvbgotICAgICAgICAgICAgLy8gZG9lc24ndCBzdGFy
dCBpbnNpZGUgaXQsIHNpbmNlIHdlJ2xsIGFsc28gc2VuZCAwIGlmIHRoZSBzZWxlY3Rpb24gKmRv
ZXMqIHN0YXJ0IGluIGl0LCBhdCBvZmZzZXQgMC4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBGSVhNRTogU2VsZWN0aW9uIGVuZHBvaW50cyBhcmVuJ3QgYWx3YXlzIGluc2lkZSBsZWF2
ZXMsIGFuZCB3ZSBvbmx5IGJ1aWxkIFNlbGVjdGlvblJlY3RzIGZvciBsZWF2ZXMsCi0gICAgICAg
ICAgICAvLyBzbyB3ZSBjYW4ndCBhY2N1cmF0ZWx5IGRldGVybWluZSB3aGljaCBTZWxlY3Rpb25S
ZWN0cyBjb250YWluIHRoZSBzZWxlY3Rpb24gc3RhcnQgYW5kIGVuZCB1c2luZwotICAgICAgICAg
ICAgLy8gb25seSB0aGUgb2Zmc2V0cyBvZiB0aGUgc3RhcnQgYW5kIGVuZC4gV2UgbmVlZCB0byBw
YXNzIHRoZSB3aG9sZSBSYW5nZS4KLSAgICAgICAgICAgIGludCBiZWdpblNlbGVjdGlvbk9mZnNl
dCA9IGlzU3RhcnROb2RlID8gc3RhcnRPZmZzZXQgOiAwOwotICAgICAgICAgICAgaW50IGVuZFNl
bGVjdGlvbk9mZnNldCA9IGlzRW5kTm9kZSA/IGVuZE9mZnNldCA6IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCk7Ci0gICAgICAgICAgICByZW5kZXJlci0+Y29sbGVjdFNlbGVjdGlvblJl
Y3RzKG5ld1JlY3RzLCBiZWdpblNlbGVjdGlvbk9mZnNldCwgZW5kU2VsZWN0aW9uT2Zmc2V0KTsK
LSAgICAgICAgICAgIGZvciAoYXV0byYgc2VsZWN0aW9uUmVjdCA6IG5ld1JlY3RzKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJlY3QuY29udGFpbnNTdGFydCgpICYmICFpc1N0YXJ0
Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVjdC5zZXRDb250YWluc1N0YXJ0
KGZhbHNlKTsKLSAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5jb250YWluc0VuZCgp
ICYmICFpc0VuZE5vZGUpCi0gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0Q29u
dGFpbnNFbmQoZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SZWN0LmxvZ2lj
YWxXaWR0aCgpIHx8IHNlbGVjdGlvblJlY3QubG9naWNhbEhlaWdodCgpKQotICAgICAgICAgICAg
ICAgICAgICByZWN0cy5hcHBlbmQoc2VsZWN0aW9uUmVjdCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBuZXdSZWN0cy5zaHJpbmsoMCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBU
aGUgcmFuZ2UgY291bGQgc3BhbiBub2RlcyB3aXRoIGRpZmZlcmVudCB3cml0aW5nIG1vZGVzLgot
ICAgIC8vIElmIHRoaXMgaXMgdGhlIGNhc2UsIHdlIHVzZSB0aGUgd3JpdGluZyBtb2RlIG9mIHRo
ZSBjb21tb24gYW5jZXN0b3IuCi0gICAgaWYgKGNvbnRhaW5zRGlmZmVyZW50V3JpdGluZ01vZGVz
KSB7Ci0gICAgICAgIGlmIChhdXRvIGFuY2VzdG9yID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3Io
c3RhcnRDb250YWluZXIsIGVuZENvbnRhaW5lcikpCi0gICAgICAgICAgICBoYXNGbGlwcGVkV3Jp
dGluZ01vZGUgPSBhbmNlc3Rvci0+cmVuZGVyZXIoKS0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NX
cml0aW5nTW9kZSgpOwotICAgIH0KLQotICAgIGNvbnN0IHNpemVfdCBudW1iZXJPZlJlY3RzID0g
cmVjdHMuc2l6ZSgpOwotCi0gICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBlbmRzIGluIGEgQlIsIHRo
ZW4gYWRkIHRoZSBsaW5lIGJyZWFrIGJpdCB0byB0aGUgbGFzdAotICAgIC8vIHJlY3Qgd2UgaGF2
ZS4gVGhpcyB3aWxsIGNhdXNlIGl0cyBzZWxlY3Rpb24gcmVjdCB0byBleHRlbmQgdG8gdGhlCi0g
ICAgLy8gZW5kIG9mIHRoZSBsaW5lLgotICAgIGlmIChzdG9wTm9kZSAmJiBzdG9wTm9kZS0+aGFz
VGFnTmFtZShIVE1MTmFtZXM6OmJyVGFnKSAmJiBudW1iZXJPZlJlY3RzKSB7Ci0gICAgICAgIC8v
IE9ubHkgc2V0IHRoZSBsaW5lIGJyZWFrIGJpdCBpZiB0aGUgZW5kIG9mIHRoZSByYW5nZSBhY3R1
YWxseQotICAgICAgICAvLyBleHRlbmRzIGFsbCB0aGUgd2F5IHRvIGluY2x1ZGUgdGhlIDxicj4u
IFZpc2libGVQb3NpdGlvbiBoZWxwcyB0bwotICAgICAgICAvLyBmaWd1cmUgdGhpcyBvdXQuCi0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiBlbmRQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24oJmVuZENvbnRhaW5lciwgZW5kT2Zmc2V0KSwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiBiclBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihzdG9wTm9kZSwgMCksIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgICAgICBpZiAoZW5k
UG9zaXRpb24gPT0gYnJQb3NpdGlvbikKLSAgICAgICAgICAgIHJlY3RzLmxhc3QoKS5zZXRJc0xp
bmVCcmVhayh0cnVlKTsKLSAgICB9Ci0KLSAgICBpbnQgbGluZVRvcCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgaW50IGxpbmVCb3R0b20gPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1pbigpOwotICAgIGludCBsYXN0TGluZVRvcCA9IGxpbmVUb3A7Ci0gICAgaW50
IGxhc3RMaW5lQm90dG9tID0gbGluZUJvdHRvbTsKLSAgICBpbnQgbGluZU51bWJlciA9IDA7Ci0K
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mUmVjdHM7ICsraSkgewotICAgICAg
ICBpbnQgY3VycmVudFJlY3RUb3AgPSByZWN0c1tpXS5sb2dpY2FsVG9wKCk7Ci0gICAgICAgIGlu
dCBjdXJyZW50UmVjdEJvdHRvbSA9IGN1cnJlbnRSZWN0VG9wICsgcmVjdHNbaV0ubG9naWNhbEhl
aWdodCgpOwotCi0gICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY291bnQgdGhlIHJ1YnkgdGV4
dCBhcyBhIHNlcGFyYXRlIGxpbmUuCi0gICAgICAgIGlmIChpbnRlcnZhbHNTdWZmaWNpZW50bHlP
dmVybGFwKGN1cnJlbnRSZWN0VG9wLCBjdXJyZW50UmVjdEJvdHRvbSwgbGluZVRvcCwgbGluZUJv
dHRvbSkgfHwgKGkgJiYgcmVjdHNbaV0uaXNSdWJ5VGV4dCgpKSkgewotICAgICAgICAgICAgLy8g
R3JvdyB0aGUgY3VycmVudCBsaW5lIGJvdW5kcy4KLSAgICAgICAgICAgIGxpbmVUb3AgPSBzdGQ6
Om1pbihsaW5lVG9wLCBjdXJyZW50UmVjdFRvcCk7Ci0gICAgICAgICAgICBsaW5lQm90dG9tID0g
c3RkOjptYXgobGluZUJvdHRvbSwgY3VycmVudFJlY3RCb3R0b20pOwotICAgICAgICAgICAgLy8g
QXZvaWQgb3ZlcmxhcCB3aXRoIHRoZSBwcmV2aW91cyBsaW5lLgotICAgICAgICAgICAgaWYgKCFo
YXNGbGlwcGVkV3JpdGluZ01vZGUpCi0gICAgICAgICAgICAgICAgbGluZVRvcCA9IHN0ZDo6bWF4
KGxhc3RMaW5lQm90dG9tLCBsaW5lVG9wKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBsaW5lQm90dG9tID0gc3RkOjptaW4obGFzdExpbmVUb3AsIGxpbmVCb3R0b20pOwotICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgYWRqdXN0TGluZUhlaWdodE9mU2VsZWN0aW9uUmVj
dHMocmVjdHMsIGksIGxpbmVOdW1iZXIsIGxpbmVUb3AsIGxpbmVCb3R0b20gLSBsaW5lVG9wKTsK
LSAgICAgICAgICAgIGlmICghaGFzRmxpcHBlZFdyaXRpbmdNb2RlKSB7Ci0gICAgICAgICAgICAg
ICAgbGFzdExpbmVUb3AgPSBsaW5lVG9wOwotICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVj
dEJvdHRvbSA+PSBsYXN0TGluZVRvcCkgewotICAgICAgICAgICAgICAgICAgICBsYXN0TGluZUJv
dHRvbSA9IGxpbmVCb3R0b207Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVUb3AgPSBsYXN0TGlu
ZUJvdHRvbTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBs
aW5lVG9wID0gY3VycmVudFJlY3RUb3A7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lQm90
dG9tID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgbGluZUJvdHRvbSA9IGN1cnJlbnRSZWN0Qm90dG9tOwotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBsYXN0TGluZUJvdHRvbSA9IGxpbmVCb3R0
b207Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWN0VG9wIDw9IGxhc3RMaW5lQm90dG9t
ICYmIGkgJiYgcmVjdHNbaV0ucGFnZU51bWJlcigpID09IHJlY3RzW2kgLSAxXS5wYWdlTnVtYmVy
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbGFzdExpbmVUb3AgPSBsaW5lVG9wOwotICAgICAg
ICAgICAgICAgICAgICBsaW5lQm90dG9tID0gbGFzdExpbmVUb3A7Ci0gICAgICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbGFzdExpbmVUb3AgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOwotICAgICAgICAgICAgICAgICAgICBsaW5lQm90dG9tID0gY3Vy
cmVudFJlY3RCb3R0b207Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGxpbmVU
b3AgPSBjdXJyZW50UmVjdFRvcDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICsrbGluZU51
bWJlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFkanVzdCBsaW5lIGhlaWdodC4KLSAg
ICBhZGp1c3RMaW5lSGVpZ2h0T2ZTZWxlY3Rpb25SZWN0cyhyZWN0cywgbnVtYmVyT2ZSZWN0cywg
bGluZU51bWJlciwgbGluZVRvcCwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOwotCi0gICAgLy8gU29y
dCB0aGUgcmVjdGFuZ2xlcyBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBnYXBzLiBUaGUgcmVj
dGFuZ2xlcyBjb3VsZCBiZSB1bnNvcnRlZCB3aGVuCi0gICAgLy8gdGhlcmUgaXMgcnVieSB0ZXh0
IGFuZCB3ZSBjb3VsZCBoYXZlIGdhcHMgb24gdGhlIGxpbmUgd2hlbiBhZGphY2VudCBlbGVtZW50
cyBvbiB0aGUgbGluZQotICAgIC8vIGhhdmUgYSBkaWZmZXJlbnQgb3JpZW50YXRpb24uCi0gICAg
c2l6ZV90IGZpcnN0UmVjdFdpdGhDdXJyZW50TGluZU51bWJlciA9IDA7Ci0gICAgZm9yIChzaXpl
X3QgY3VycmVudFJlY3QgPSAxOyBjdXJyZW50UmVjdCA8IG51bWJlck9mUmVjdHM7ICsrY3VycmVu
dFJlY3QpIHsKLSAgICAgICAgaWYgKHJlY3RzW2N1cnJlbnRSZWN0XS5saW5lTnVtYmVyKCkgIT0g
cmVjdHNbY3VycmVudFJlY3QgLSAxXS5saW5lTnVtYmVyKCkpIHsKLSAgICAgICAgICAgIGZpcnN0
UmVjdFdpdGhDdXJyZW50TGluZU51bWJlciA9IGN1cnJlbnRSZWN0OwotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlY3RzW2N1cnJlbnRSZWN0XS5sb2dpY2Fs
TGVmdCgpID49IHJlY3RzW2N1cnJlbnRSZWN0IC0gMV0ubG9naWNhbExlZnQoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIFNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdCA9IHJl
Y3RzW2N1cnJlbnRSZWN0XTsKLSAgICAgICAgc2l6ZV90IGk7Ci0gICAgICAgIGZvciAoaSA9IGN1
cnJlbnRSZWN0OyBpID4gZmlyc3RSZWN0V2l0aEN1cnJlbnRMaW5lTnVtYmVyICYmIHNlbGVjdGlv
blJlY3QubG9naWNhbExlZnQoKSA8IHJlY3RzW2kgLSAxXS5sb2dpY2FsTGVmdCgpOyAtLWkpCi0g
ICAgICAgICAgICByZWN0c1tpXSA9IHJlY3RzW2kgLSAxXTsKLSAgICAgICAgcmVjdHNbaV0gPSBz
ZWxlY3Rpb25SZWN0OwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGogPSAxOyBqIDwgbnVtYmVy
T2ZSZWN0czsgKytqKSB7Ci0gICAgICAgIGlmIChyZWN0c1tqXS5saW5lTnVtYmVyKCkgIT0gcmVj
dHNbaiAtIDFdLmxpbmVOdW1iZXIoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBT
ZWxlY3Rpb25SZWN0JiBwcmV2aW91c1JlY3QgPSByZWN0c1tqIC0gMV07Ci0gICAgICAgIGJvb2wg
cHJldmlvdXNSZWN0TWF5Tm90UmVhY2hSaWdodEVkZ2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OkxUUiAmJiBwcmV2aW91c1JlY3QuY29udGFpbnNFbmQoKSkg
fHwgKHByZXZpb3VzUmVjdC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYgcHJl
dmlvdXNSZWN0LmNvbnRhaW5zU3RhcnQoKSk7Ci0gICAgICAgIGlmIChwcmV2aW91c1JlY3RNYXlO
b3RSZWFjaFJpZ2h0RWRnZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpbnQgYWRq
dXN0ZWRXaWR0aCA9IHJlY3RzW2pdLmxvZ2ljYWxMZWZ0KCkgLSBwcmV2aW91c1JlY3QubG9naWNh
bExlZnQoKTsKLSAgICAgICAgaWYgKGFkanVzdGVkV2lkdGggPiBwcmV2aW91c1JlY3QubG9naWNh
bFdpZHRoKCkpCi0gICAgICAgICAgICBwcmV2aW91c1JlY3Quc2V0TG9naWNhbFdpZHRoKGFkanVz
dGVkV2lkdGgpOwotICAgIH0KLQotICAgIGludCBtYXhMaW5lTnVtYmVyID0gbGluZU51bWJlcjsK
LQotICAgIC8vIEV4dGVuZCByZWN0cyBvdXQgdG8gZWRnZXMgYXMgbmVlZGVkLgotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWN0czsgKytpKSB7Ci0gICAgICAgIFNlbGVjdGlv
blJlY3QmIHNlbGVjdGlvblJlY3QgPSByZWN0c1tpXTsKLSAgICAgICAgaWYgKCFzZWxlY3Rpb25S
ZWN0LmlzTGluZUJyZWFrKCkgJiYgc2VsZWN0aW9uUmVjdC5saW5lTnVtYmVyKCkgPj0gbWF4TGlu
ZU51bWJlcikKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoc2VsZWN0aW9uUmVj
dC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYgc2VsZWN0aW9uUmVjdC5pc0Zp
cnN0T25MaW5lKCkpIHsKLSAgICAgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0TG9naWNhbFdpZHRo
KHNlbGVjdGlvblJlY3QubG9naWNhbFdpZHRoKCkgKyBzZWxlY3Rpb25SZWN0LmxvZ2ljYWxMZWZ0
KCkgLSBzZWxlY3Rpb25SZWN0Lm1pblgoKSk7Ci0gICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNl
dExvZ2ljYWxMZWZ0KHNlbGVjdGlvblJlY3QubWluWCgpKTsKLSAgICAgICAgfSBlbHNlIGlmIChz
ZWxlY3Rpb25SZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiAmJiBzZWxlY3Rp
b25SZWN0LmlzTGFzdE9uTGluZSgpKQotICAgICAgICAgICAgc2VsZWN0aW9uUmVjdC5zZXRMb2dp
Y2FsV2lkdGgoc2VsZWN0aW9uUmVjdC5tYXhYKCkgLSBzZWxlY3Rpb25SZWN0LmxvZ2ljYWxMZWZ0
KCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbWF4TGluZU51bWJlcjsKLX0KLQotdm9pZCBS
YW5nZTo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYgcmVjdHMp
IGNvbnN0Ci17Ci0gICAgaW50IG1heExpbmVOdW1iZXIgPSBjb2xsZWN0U2VsZWN0aW9uUmVjdHNX
aXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHJlY3RzKTsKLSAgICBjb25zdCBzaXplX3QgbnVtYmVy
T2ZSZWN0cyA9IHJlY3RzLnNpemUoKTsKLSAgICAKLSAgICAvLyBVbmlvbiBhbGwgdGhlIHJlY3Rh
bmdsZXMgb24gaW50ZXJpb3IgbGluZXMgKGkuZS4gbm90IGZpcnN0IG9yIGxhc3QpLgotICAgIC8v
IE9uIGZpcnN0IGFuZCBsYXN0IGxpbmVzLCBqdXN0IGF2b2lkIGhhdmluZyBvdmVybGFwcyBieSBt
ZXJnaW5nIGludGVyc2VjdGluZyByZWN0YW5nbGVzLgotICAgIFZlY3RvcjxTZWxlY3Rpb25SZWN0
PiB1bmlvbmVkUmVjdHM7Ci0gICAgSW50UmVjdCBpbnRlcmlvclVuaW9uUmVjdDsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mUmVjdHM7ICsraSkgewotICAgICAgICBTZWxlY3Rp
b25SZWN0JiBjdXJyZW50UmVjdCA9IHJlY3RzW2ldOwotICAgICAgICBpZiAoY3VycmVudFJlY3Qu
bGluZU51bWJlcigpID09IDEpIHsKLSAgICAgICAgICAgIEFTU0VSVChpbnRlcmlvclVuaW9uUmVj
dC5pc0VtcHR5KCkpOwotICAgICAgICAgICAgaWYgKCF1bmlvbmVkUmVjdHMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICAgICAgU2VsZWN0aW9uUmVjdCYgcHJldmlvdXNSZWN0ID0gdW5pb25lZFJl
Y3RzLmxhc3QoKTsKLSAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNSZWN0LnJlY3QoKS5pbnRl
cnNlY3RzKGN1cnJlbnRSZWN0LnJlY3QoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJldmlv
dXNSZWN0ID0gY29hbGVzY2VTZWxlY3Rpb25SZWN0cyhjdXJyZW50UmVjdCwgcHJldmlvdXNSZWN0
KTsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgLy8gQ291bGRuJ3QgbWVyZ2Ugd2l0aCBwcmV2aW91cyBy
ZWN0LCBzbyBqdXN0IGFwcGVuZGluZy4KLSAgICAgICAgICAgIHVuaW9uZWRSZWN0cy5hcHBlbmQo
Y3VycmVudFJlY3QpOwotICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRSZWN0LmxpbmVOdW1iZXIo
KSA8IG1heExpbmVOdW1iZXIpIHsKLSAgICAgICAgICAgIGlmIChpbnRlcmlvclVuaW9uUmVjdC5p
c0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBTdGFydCBjb2xsZWN0aW5nIGludGVyaW9y
IHJlY3RzLgotICAgICAgICAgICAgICAgIGludGVyaW9yVW5pb25SZWN0ID0gY3VycmVudFJlY3Qu
cmVjdCgpOyAgICAgICAgIAotICAgICAgICAgICAgfSBlbHNlIGlmIChpbnRlcmlvclVuaW9uUmVj
dC5pbnRlcnNlY3RzKGN1cnJlbnRSZWN0LnJlY3QoKSkKLSAgICAgICAgICAgICAgICB8fCBpbnRl
cmlvclVuaW9uUmVjdC5tYXhYKCkgPT0gY3VycmVudFJlY3QucmVjdCgpLngoKQotICAgICAgICAg
ICAgICAgIHx8IGludGVyaW9yVW5pb25SZWN0Lm1heFkoKSA9PSBjdXJyZW50UmVjdC5yZWN0KCku
eSgpCi0gICAgICAgICAgICAgICAgfHwgaW50ZXJpb3JVbmlvblJlY3QueCgpID09IGN1cnJlbnRS
ZWN0LnJlY3QoKS5tYXhYKCkKLSAgICAgICAgICAgICAgICB8fCBpbnRlcmlvclVuaW9uUmVjdC55
KCkgPT0gY3VycmVudFJlY3QucmVjdCgpLm1heFkoKSkgewotICAgICAgICAgICAgICAgIC8vIE9u
bHkgdW5pb24gdGhlIGxpbmVzIHRoYXQgYXJlIGF0dGFjaGVkLgotICAgICAgICAgICAgICAgIC8v
IEZvciBpQm9va3MsIHRoZSBpbnRlcmlvciBsaW5lcyBtYXkgY3Jvc3MgbXVsdGlwbGUgaG9yaXpv
bnRhbCBwYWdlcy4KLSAgICAgICAgICAgICAgICBpbnRlcmlvclVuaW9uUmVjdC51bml0ZShjdXJy
ZW50UmVjdC5yZWN0KCkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB1
bmlvbmVkUmVjdHMuYXBwZW5kKFNlbGVjdGlvblJlY3QoaW50ZXJpb3JVbmlvblJlY3QsIGN1cnJl
bnRSZWN0LmlzSG9yaXpvbnRhbCgpLCBjdXJyZW50UmVjdC5wYWdlTnVtYmVyKCkpKTsKLSAgICAg
ICAgICAgICAgICBpbnRlcmlvclVuaW9uUmVjdCA9IGN1cnJlbnRSZWN0LnJlY3QoKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8vIFByb2Nlc3NpbmcgbGFz
dCBsaW5lLgotICAgICAgICAgICAgaWYgKCFpbnRlcmlvclVuaW9uUmVjdC5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgICAgICB1bmlvbmVkUmVjdHMuYXBwZW5kKFNlbGVjdGlvblJlY3QoaW50ZXJp
b3JVbmlvblJlY3QsIGN1cnJlbnRSZWN0LmlzSG9yaXpvbnRhbCgpLCBjdXJyZW50UmVjdC5wYWdl
TnVtYmVyKCkpKTsKLSAgICAgICAgICAgICAgICBpbnRlcmlvclVuaW9uUmVjdCA9IEludFJlY3Qo
KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKCF1bmlvbmVkUmVjdHMuaXNF
bXB0eSgpKTsKLSAgICAgICAgICAgIFNlbGVjdGlvblJlY3QmIHByZXZpb3VzUmVjdCA9IHVuaW9u
ZWRSZWN0cy5sYXN0KCk7Ci0gICAgICAgICAgICBpZiAocHJldmlvdXNSZWN0LmxvZ2ljYWxUb3Ao
KSA9PSBjdXJyZW50UmVjdC5sb2dpY2FsVG9wKCkgJiYgcHJldmlvdXNSZWN0LnJlY3QoKS5pbnRl
cnNlY3RzKGN1cnJlbnRSZWN0LnJlY3QoKSkpIHsKLSAgICAgICAgICAgICAgICAvLyBwcmV2aW91
c1JlY3QgaXMgYWxzbyBvbiB0aGUgbGFzdCBsaW5lLCBhbmQgaW50ZXJzZWN0cyB0aGUgY3VycmVu
dCBvbmUuCi0gICAgICAgICAgICAgICAgcHJldmlvdXNSZWN0ID0gY29hbGVzY2VTZWxlY3Rpb25S
ZWN0cyhjdXJyZW50UmVjdCwgcHJldmlvdXNSZWN0KTsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIENvdWxkbid0IG1lcmdlIHdpdGggcHJl
dmlvdXMgcmVjdCwgc28ganVzdCBhcHBlbmRpbmcuCi0gICAgICAgICAgICB1bmlvbmVkUmVjdHMu
YXBwZW5kKGN1cnJlbnRSZWN0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJlY3RzLnN3YXAo
dW5pb25lZFJlY3RzKTsKLX0KLSNlbmRpZgotCiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQog
dm9pZCBSYW5nZTo6Zm9ybWF0Rm9yRGVidWdnZXIoY2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5n
dGgpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IDNiZWNmZGQwZTIyNDY1ODRjMDRkNzU5NGQ4
MDM2NTIwY2UzOThjNDYuLmZhYjhmODJiYWZmOGIzNTljODIwMWI2MjFjMDFmZjk2MDkyMjMxMjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5oCkBAIC05Nyw5ICs5Nyw2IEBAIHB1YmxpYzoKICAgICBQb3NpdGlvbiBl
bmRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLnRvUG9zaXRpb24oKTsgfQogCiAgICAg
V0VCQ09SRV9FWFBPUlQgTm9kZSogZmlyc3ROb2RlKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgTm9kZSogcGFzdExhc3ROb2RlKCkgY29uc3Q7Ci0KLSAgICBTaGFkb3dSb290KiBzaGFkb3dS
b290KCkgY29uc3Q7CiAKICAgICBlbnVtIGNsYXNzIEJvdW5kaW5nUmVjdEJlaGF2aW9yIDogdWlu
dDhfdCB7CiAgICAgICAgIFJlc3BlY3RDbGlwcGluZyA9IDEgPDwgMCwKQEAgLTExNCwxMCArMTEx
LDYgQEAgcHVibGljOgogCiAgICAgLy8gVHJhbnNmb3JtLWZyaWVuZGx5CiAgICAgV0VCQ09SRV9F
WFBPUlQgRmxvYXRSZWN0IGFic29sdXRlQm91bmRpbmdSZWN0KE9wdGlvblNldDxCb3VuZGluZ1Jl
Y3RCZWhhdmlvcj4gPSB7IH0pIGNvbnN0OwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
V0VCQ09SRV9FWFBPUlQgdm9pZCBjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlv
blJlY3Q+JikgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgaW50IGNvbGxlY3RTZWxlY3Rpb25S
ZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JikgY29u
c3Q7Ci0jZW5kaWYKIAogICAgIHZvaWQgbm9kZUNoaWxkcmVuQ2hhbmdlZChDb250YWluZXJOb2Rl
Jik7CiAgICAgdm9pZCBub2RlQ2hpbGRyZW5XaWxsQmVSZW1vdmVkKENvbnRhaW5lck5vZGUmKTsK
QEAgLTE2MCw2ICsxNTMsOCBAQCBwcml2YXRlOgogCiAgICAgVmVjdG9yPEZsb2F0UmVjdD4gYWJz
b2x1dGVSZWN0c0ZvclJhbmdlSW5UZXh0KE5vZGUqLCBSZW5kZXJUZXh0JiwgYm9vbCB1c2VTZWxl
Y3Rpb25IZWlnaHQsIGJvb2wmIGlzRml4ZWQsIE9wdGlvblNldDxCb3VuZGluZ1JlY3RCZWhhdmlv
cj4pIGNvbnN0OwogCisgICAgTm9kZSogcGFzdExhc3ROb2RlKCkgY29uc3Q7CisKICAgICBSZWY8
RG9jdW1lbnQ+IG1fb3duZXJEb2N1bWVudDsKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgbV9zdGFy
dDsKICAgICBSYW5nZUJvdW5kYXJ5UG9pbnQgbV9lbmQ7CkBAIC0xNjksNyArMTY0LDcgQEAgV0VC
Q09SRV9FWFBPUlQgYm9vbCBhcmVSYW5nZXNFcXVhbChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdl
Kik7CiBXRUJDT1JFX0VYUE9SVCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqLCBjb25z
dCBSYW5nZSopOwogCiBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2Uo
Y29uc3QgUmFuZ2UmKTsKLVNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWY8UmFu
Z2U+Jik7CitXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoY29uc3Qg
UmVmPFJhbmdlPiYpOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VT
aW1wbGVSYW5nZShjb25zdCBSYW5nZSopOwogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxl
UmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWZQdHI8UmFuZ2U+Jik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU2ltcGxlUmFuZ2UuY3BwCmluZGV4IDZjYTU5ZmIwNmVhMDllYjU5ZDA1ZTU1YTFkMmQ4Njlk
MDE3MmY3NjQuLjUzMGM3MDUyZTAzODBjZWQwNDYzMDYwOTZmMWY5OGRmZmU3M2Q4ZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAi
Q2hhcmFjdGVyRGF0YS5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKLSNpbmNsdWRlICJS
YW5nZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ0LDEyICs0Myw2IEBAIFNpbXBs
ZVJhbmdlOjpTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50JiYgc3RhcnQsIEJvdW5kYXJ5UG9pbnQm
JiBlbmQpCiB7CiB9CiAKLVNpbXBsZVJhbmdlOjpTaW1wbGVSYW5nZShjb25zdCBSYW5nZSYgb3Ro
ZXIpCi0gICAgOiBzdGFydChvdGhlci5zdGFydENvbnRhaW5lcigpLCBvdGhlci5zdGFydE9mZnNl
dCgpKQotICAgICwgZW5kKG90aGVyLmVuZENvbnRhaW5lcigpLCBvdGhlci5lbmRPZmZzZXQoKSkK
LXsKLX0KLQogYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNpbXBsZVJhbmdlJiBhLCBjb25zdCBTaW1w
bGVSYW5nZSYgYikKIHsKICAgICByZXR1cm4gYS5zdGFydCA9PSBiLnN0YXJ0ICYmIGEuZW5kID09
IGIuZW5kOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9T
b3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAppbmRleCA2MjgzNzA5NmI2MTg3NDNhY2Q2
NzlhNGRmNjgxN2MzZmRkZWQ1NDkxLi5mOTUzMDEzNzAyZTFkYzY1MjY1YmE3MTI0YWVlNDAzN2Ix
YTY3M2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaApAQCAtMjksOCArMjksNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJhbmdlOwotCiBzdHJ1Y3QgU2ltcGxlUmFuZ2Ug
ewogICAgIEJvdW5kYXJ5UG9pbnQgc3RhcnQ7CiAgICAgQm91bmRhcnlQb2ludCBlbmQ7CkBAIC00
NCwxMSArNDIsNiBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2UgewogCiAgICAgV0VCQ09SRV9FWFBPUlQg
U2ltcGxlUmFuZ2UoY29uc3QgQm91bmRhcnlQb2ludCYsIGNvbnN0IEJvdW5kYXJ5UG9pbnQmKTsK
ICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50JiYsIEJvdW5kYXJ5
UG9pbnQmJik7Ci0KLSAgICAvLyBDb252ZW5pZW5jZSBvdmVybG9hZHMgdG8gaGVscCB3aXRoIHRy
YW5zaXRpb24gZnJvbSB1c2luZyBhIGxvdCBvZiBsaXZlIHJhbmdlcy4KLSAgICAvLyBGSVhNRTog
T25jZSB0cmFuc2l0aW9uIGlzIG92ZXIsIHJlbW92ZSBhbmQgY2hhbmdlIGNhbGxlcnMgdG8gdXNl
IG1ha2VTaW1wbGVSYW5nZSBpbnN0ZWFkLgotICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdl
KGNvbnN0IFJhbmdlJik7Ci0gICAgU2ltcGxlUmFuZ2UoY29uc3QgUmVmPFJhbmdlPiYpOwogfTsK
IAogU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlSGVscGVyKEJvdW5kYXJ5UG9pbnQmJiwgQm91
bmRhcnlQb2ludCYmKTsKQEAgLTEyMiwxMSArMTE1LDYgQEAgaW5saW5lIEludGVyc2VjdGluZ05v
ZGVSYW5nZSBpbnRlcnNlY3RpbmdOb2Rlcyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCiAgICAg
cmV0dXJuIHsgcmFuZ2UgfTsKIH0KIAotaW5saW5lIFNpbXBsZVJhbmdlOjpTaW1wbGVSYW5nZShj
b25zdCBSZWY8UmFuZ2U+JiByYW5nZSkKLSAgICA6IFNpbXBsZVJhbmdlKHJhbmdlLmdldCgpKQot
ewotfQotCiBpbmxpbmUgU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlSGVscGVyKEJvdW5kYXJ5
UG9pbnQmJiBzdGFydCwgQm91bmRhcnlQb2ludCYmIGVuZCkKIHsKICAgICByZXR1cm4geyBXVEZN
b3ZlKHN0YXJ0KSwgV1RGTW92ZShlbmQpIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAppbmRleCA5MzNiMDk1M2VlN2JiNWNl
MmU4ZjQ3ODUzZTMyNWZlYTZmM2U3ZDBkLi4yNWFhY2NmY2Y0MGNhZmE4ZTczYjkyYjkyZmM0YTg4
ZjU5MmE4MjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIEFsdGVybmF0aXZl
VGV4dENvbnRyb2xsZXI6OnRpbWVyRmlyZWQoKQogICAgIGNhc2UgQWx0ZXJuYXRpdmVUZXh0VHlw
ZVNwZWxsaW5nU3VnZ2VzdGlvbnM6IHsKICAgICAgICAgaWYgKCFtX3JhbmdlV2l0aEFsdGVybmF0
aXZlIHx8IHBsYWluVGV4dCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSkgIT0gbV9vcmlnaW5hbFRl
eHQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgU3RyaW5nIHBhcmFncmFwaFRleHQgPSBw
bGFpblRleHQoVGV4dENoZWNraW5nUGFyYWdyYXBoKGNyZWF0ZUxpdmVSYW5nZSgqbV9yYW5nZVdp
dGhBbHRlcm5hdGl2ZSkpLnBhcmFncmFwaFJhbmdlKCkpOworICAgICAgICBTdHJpbmcgcGFyYWdy
YXBoVGV4dCA9IHBsYWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoKm1fcmFuZ2VXaXRoQWx0
ZXJuYXRpdmUpLnBhcmFncmFwaFJhbmdlKCkpOwogICAgICAgICBWZWN0b3I8U3RyaW5nPiBzdWdn
ZXN0aW9uczsKICAgICAgICAgdGV4dENoZWNrZXIoKS0+Z2V0R3Vlc3Nlc0ZvcldvcmQobV9vcmln
aW5hbFRleHQsIHBhcmFncmFwaFRleHQsIG1fZG9jdW1lbnQuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCksIHN1Z2dlc3Rpb25zKTsKICAgICAgICAgaWYgKHN1Z2dlc3Rpb25zLmlzRW1wdHkoKSkgewpA
QCAtNTIzLDcgKzUyMyw3IEBAIGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9u
ZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgaWYgKCFzaG91
bGRTdGFydFRpbWVyRm9yKG1hcmtlciwgZW5kT2ZXb3JkUG9zaXRpb24ub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVuZE9m
V29yZFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAgICBhdXRvIHdvcmRSYW5nZSA9IHJhbmdl
KCpub2RlLCBtYXJrZXIpOworICAgIGF1dG8gd29yZFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKCpu
b2RlLCBtYXJrZXIpOwogICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFu
Z2UpOwogICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKQEAgLTU5MSw3ICs1OTEsNyBAQCB2b2lkIEFsdGVybmF0aXZlVGV4dENvbnRyb2xsZXI6OmFw
cGx5QWx0ZXJuYXRpdmVUZXh0VG9SYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgcgogICAgIGF1dG8g
Y29ycmVjdGlvbk9mZnNldEluUGFyYWdyYXBoID0gY2hhcmFjdGVyQ291bnQoeyAqcGFyYWdyYXBo
U3RhcnQsIHJhbmdlLnN0YXJ0IH0pOwogICAgIGF1dG8gcGFyYWdyYXBoT2Zmc2V0SW5UcmVlU2Nv
cGUgPSBjaGFyYWN0ZXJDb3VudCh7IHRyZWVTY29wZVN0YXJ0LCAqcGFyYWdyYXBoU3RhcnQgfSk7
CiAKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdl
KHJhbmdlKSwgYWx0ZXJuYXRpdmUpLT5hcHBseSgpOworICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNv
bW1hbmQ6OmNyZWF0ZShyYW5nZSwgYWx0ZXJuYXRpdmUpLT5hcHBseSgpOwogCiAgICAgLy8gUmVj
YWxjdWxhdGUgcHJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uLCBzaW5jZSBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kIG1vZGlmaWVkIHRoZSBET00sIHN1Y2ggdGhhdCB0aGUgb3JpZ2lu
YWwgcGFyYWdyYXBoUmFuZ2VDb250YWluaW5nQ29ycmVjdGlvbiBpcyBubyBsb25nZXIgdmFsaWQu
IFJhZGFyOiAxMDMwNTMxNSBCdWd6aWxsYTogODk1MjYKICAgICBhdXRvIHVwZGF0ZWRQYXJhZ3Jh
cGhTdGFydENvbnRhaW5pbmdDb3JyZWN0aW9uID0gcmVzb2x2ZUNoYXJhY3RlckxvY2F0aW9uKG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyh0cmVlU2NvcGVSb290KSwgcGFyYWdyYXBoT2Zm
c2V0SW5UcmVlU2NvcGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0
aW5nU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCmlu
ZGV4IGVmZmFmNDk3OWQyYzQ0ZjUyZGY1OTE2MDE5NmI3MjMxNDZiNDA1ZWIuLmI3ZDcyZTVjNGU2
NWU2MTk1OGI5ZTFmZTRmOTI2ZTI2YmNhZjM2MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5jcHAKQEAgLTE1MTQsNyArMTUxNCw3IEBAIFJlZlB0cjxFZGl0aW5nU3R5bGU+
IEVkaXRpbmdTdHlsZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mCiAgICAgLy8gYW5kIGZpbmQgdGhlIGJhY2tncm91bmQgY29sb3Igb2YgdGhlIGNvbW1vbiBh
bmNlc3Rvci4KICAgICBpZiAoc2hvdWxkVXNlQmFja2dyb3VuZENvbG9ySW5FZmZlY3QgJiYgKHNl
bGVjdGlvbi5pc1JhbmdlKCkgfHwgaGFzVHJhbnNwYXJlbnRCYWNrZ3JvdW5kQ29sb3Ioc3R5bGUt
Pm1fbXV0YWJsZVN0eWxlLmdldCgpKSkpIHsKICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBzZWxl
Y3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUg
PSBiYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKS0+Y29tbW9u
QW5jZXN0b3JDb250YWluZXIoKSkpCisgICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGJhY2tn
cm91bmRDb2xvckluRWZmZWN0KGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKCpyYW5nZSkuZ2V0KCkp
KQogICAgICAgICAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciwgdmFsdWUtPmNzc1RleHQoKSk7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKaW5kZXggYzRhN2JjOTI2NmI4MzM4ZDdkMDE3MWNiOWYyOGUzMjMwY2Rl
YmIyOS4uNzA3ZmFlYTM3ZGNlMWY3ZTcwMDNkYzhmYzQ2OTZjNGU3N2M0NjI2MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjY3Nyw3ICsyNjc3LDcgQEAgdm9pZCBFZGl0b3I6Om1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVj
a2luZ1R5cGUKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byYgcmFuZ2VUb0NoZWNrID0gc2hv
dWxkTWFya0dyYW1tYXIgPyAqZ3JhbW1hclJhbmdlIDogKnNwZWxsaW5nUmFuZ2U7Ci0gICAgVGV4
dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaFRvQ2hlY2soY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
VG9DaGVjaykpOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGhUb0NoZWNrKHJh
bmdlVG9DaGVjayk7CiAgICAgaWYgKHBhcmFncmFwaFRvQ2hlY2suaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTI3MjMsNyArMjcyMyw3IEBAIHN0YXRpYyBib29sIGlzQXV0b21hdGlj
VGV4dFJlcGxhY2VtZW50VHlwZShUZXh0Q2hlY2tpbmdUeXBlIHR5cGUpCiAKIHZvaWQgRWRpdG9y
OjpyZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRv
UmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCkKIHsKLSAgICBTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKSwgcmVw
bGFjZW1lbnQpLT5hcHBseSgpOworICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0
ZShyYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwogfQogCiBzdGF0aWMgdm9p
ZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4
dENoZWNraW5nUGFyYWdyYXBoJiBwYXJhZ3JhcGgsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRv
UmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0
Q2hhcmFjdGVyUmFuZ2UpCkBAIC0yNzMxLDcgKzI3MzEsNyBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0
U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5n
UGFyYQogICAgIGF1dG8gc2NvcGVOb2RlID0gbWFrZVJlZihkb3duY2FzdDxDb250YWluZXJOb2Rl
PihwYXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2UoKS5zdGFydENvbnRhaW5lcigpLnJvb3ROb2RlKCkp
KTsKICAgICBhdXRvIHBhcmFncmFwaENoYXJhY3RlclJhbmdlID0gY2hhcmFjdGVyUmFuZ2UobWFr
ZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGVOb2RlKSwgcGFyYWdyYXBoLnBh
cmFncmFwaFJhbmdlKCkpOwogCi0gICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRl
KGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFjZSksIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsK
KyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUocmFuZ2VUb1JlcGxhY2UsIHJl
cGxhY2VtZW50KS0+YXBwbHkoKTsKIAogICAgIC8vIFRleHRDaGVja2luZ1BhcmFncmFwaCBtYXkg
YmUgb3JwaGFuZWQgYWZ0ZXIgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCBtdXRhdGVkIERPTS4K
ICAgICAvLyBTZWUgPHJkYXI6Ly8xMDMwNTMxNT4sIGh0dHA6Ly93ZWJraXQub3JnL2IvODk1MjYu
CkBAIC0yOTIxLDcgKzI5MjEsNyBAQCB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRT
dHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKICAgICAgICAgcmV0dXJuOwogICAg
IAogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25S
ZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNlOjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcs
ICpzZWxlY3Rpb24pOwotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRl
TGl2ZVJhbmdlKCpzZWxlY3Rpb24pKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdy
YXBoKCpzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0
cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBTbWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9u
OjpJbnNlcnQpOwogICAgIGF1dG8gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKENo
YXJhY3RlclJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxl
bmd0aCgpKSk7CiAgICAgYWRkTWFya2VyKGNoYW5nZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJl
cGxhY2VtZW50LCBTdHJpbmcoKSk7CkBAIC0zNTc3LDcgKzM1NzcsNyBAQCB1bnNpZ25lZCBFZGl0
b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlv
bmFsPFNpbXBsZQogCiAgICAgICAgICsrbWF0Y2hDb3VudDsKICAgICAgICAgaWYgKG1hdGNoZXMp
Ci0gICAgICAgICAgICBtYXRjaGVzLT5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdl
KSk7CisgICAgICAgICAgICBtYXRjaGVzLT5hcHBlbmQocmVzdWx0UmFuZ2UpOwogCiAgICAgICAg
IGlmIChtYXJrTWF0Y2hlcykKICAgICAgICAgICAgIGFkZE1hcmtlcihyZXN1bHRSYW5nZSwgRG9j
dW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
TGlzdENvbW1hbmQuY3BwCmluZGV4IDJlN2M4ZDZiNjUwM2JkZjJlNDA0M2Y0MjUxNzFhOTM5Zjc0
OGUzM2IuLjRiYTU1ZDJkNjYyMzEyNTZiYmJhZGM5NWJlMDQ1MWIxN2FiODQyNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCkBAIC0xNDMsNyArMTQz
LDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICBpZiAo
c3RhcnRPZkxhc3RQYXJhZ3JhcGguaXNOb3ROdWxsKCkgJiYgc3RhcnRPZlBhcmFncmFwaChzdGFy
dE9mU2VsZWN0aW9uLCBDYW5Ta2lwT3ZlckVkaXRpbmdCb3VuZGFyeSkgIT0gc3RhcnRPZkxhc3RQ
YXJhZ3JhcGgpIHsKICAgICAgICAgICAgICAgICBib29sIGZvcmNlQ3JlYXRlTGlzdCA9ICFzZWxl
Y3Rpb25IYXNMaXN0T2ZUeXBlKHNlbGVjdGlvbiwgbGlzdFRhZyk7CiAKLSAgICAgICAgICAgICAg
ICBhdXRvIGN1cnJlbnRTZWxlY3Rpb24gPSBjcmVhdGVMaXZlUmFuZ2UoZW5kaW5nU2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRTZWxlY3Rpb24g
PSAqZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwogICAgICAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydE9mQ3VycmVudFBhcmFncmFwaCA9IHN0YXJ0T2ZTZWxlY3Rpb247CiAg
ICAgICAgICAgICAgICAgd2hpbGUgKHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoLmlzTm90TnVsbCgp
ICYmICFpblNhbWVQYXJhZ3JhcGgoc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGgsIHN0YXJ0T2ZMYXN0
UGFyYWdyYXBoLCBDYW5Dcm9zc0VkaXRpbmdCb3VuZGFyeSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgLy8gZG9BcHBseSgpIG1heSBvcGVyYXRlIG9uIGFuZCByZW1vdmUgdGhlIGxhc3QgcGFyYWdy
YXBoIG9mIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgZG9jdW1lbnQKQEAgLTE2Miw3ICsxNjIsNyBA
QCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICAgICAg
Ly8gQnV0IG5vdCB1c2luZyBpbmRleCBpcyBoYXJkIGJlY2F1c2UgdGhlcmUgYXJlIHNvIG1hbnkg
d2F5cyB3ZSBjYW4gbG9zZSBzZWxlY3Rpb24gaW5zaWRlIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3Jh
cGguCiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDb250YWluZXJOb2RlPiBzY29wZTsKICAg
ICAgICAgICAgICAgICAgICAgaW50IGluZGV4Rm9yRW5kT2ZTZWxlY3Rpb24gPSBpbmRleEZvclZp
c2libGVQb3NpdGlvbihlbmRPZlNlbGVjdGlvbiwgc2NvcGUpOwotICAgICAgICAgICAgICAgICAg
ICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRlTGlzdCwgbGlzdFRhZywgY3Vy
cmVudFNlbGVjdGlvbi5nZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JTaW5n
bGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBjdXJyZW50U2VsZWN0aW9uKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE9mU2VsZWN0aW9uLmlzTnVsbCgpIHx8IGVuZE9m
U2VsZWN0aW9uLmlzT3JwaGFuKCkgfHwgc3RhcnRPZkxhc3RQYXJhZ3JhcGguaXNOdWxsKCkgfHwg
c3RhcnRPZkxhc3RQYXJhZ3JhcGguaXNPcnBoYW4oKSkgewogICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kT2ZTZWxlY3Rpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JJbmRleChpbmRleEZvckVuZE9m
U2VsZWN0aW9uLCBzY29wZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBl
bmRPZlNlbGVjdGlvbiBpcyBudWxsLCB0aGVuIHNvbWUgY29udGVudHMgaGF2ZSBiZWVuIGRlbGV0
ZWQgZnJvbSB0aGUgZG9jdW1lbnQuCkBAIC0xODMsNyArMTgzLDcgQEAgdm9pZCBJbnNlcnRMaXN0
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFy
YWdyYXBoID0gc3RhcnRPZk5leHRQYXJhZ3JhcGgoZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0
YXJ0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oZW5kT2ZTZWxlY3Rpb24pOwotICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQ
YXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBjdXJyZW50U2VsZWN0aW9uLmdldCgp
KTsKKyAgICAgICAgICAgICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRl
TGlzdCwgbGlzdFRhZywgY3VycmVudFNlbGVjdGlvbik7CiAgICAgICAgICAgICAgICAgLy8gRmV0
Y2ggdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCBmb3IgdGhlIHJlYXNvbiBtZW50aW9uZWQgYWJv
dmUuCiAgICAgICAgICAgICAgICAgZW5kT2ZTZWxlY3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS52
aXNpYmxlRW5kKCk7CiAgICAgICAgICAgICAgICAgc2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVT
ZWxlY3Rpb24oc3RhcnRPZlNlbGVjdGlvbiwgZW5kT2ZTZWxlY3Rpb24sIGVuZGluZ1NlbGVjdGlv
bigpLmlzRGlyZWN0aW9uYWwoKSkpOwpAQCAtMTkyLDcgKzE5Miw4IEBAIHZvaWQgSW5zZXJ0TGlz
dENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgZG9BcHBseUZvclNp
bmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywgY3JlYXRlTGl2ZVJhbmdlKGVuZGluZ1NlbGVj
dGlvbigpLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOworICAgIGF1dG8gcmFuZ2UgPSBlbmRpbmdTZWxl
Y3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmYWxz
ZSwgbGlzdFRhZywgKnJhbmdlKTsKIH0KIAogRWRpdEFjdGlvbiBJbnNlcnRMaXN0Q29tbWFuZDo6
ZWRpdGluZ0FjdGlvbigpIGNvbnN0CkBAIC0yMDAsNyArMjAxLDcgQEAgRWRpdEFjdGlvbiBJbnNl
cnRMaXN0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CiAgICAgcmV0dXJuIG1fdHlwZSA9
PSBUeXBlOjpPcmRlcmVkTGlzdCA/IEVkaXRBY3Rpb246Okluc2VydE9yZGVyZWRMaXN0IDogRWRp
dEFjdGlvbjo6SW5zZXJ0VW5vcmRlcmVkTGlzdDsKIH0KIAotdm9pZCBJbnNlcnRMaXN0Q29tbWFu
ZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3Qg
SFRNTFF1YWxpZmllZE5hbWUmIGxpc3RUYWcsIFJhbmdlKiBjdXJyZW50U2VsZWN0aW9uKQordm9p
ZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNl
Q3JlYXRlTGlzdCwgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUmIGxpc3RUYWcsIFNpbXBsZVJhbmdl
JiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgcHJvZHVjZSB1
bmV4cGVjdGVkIHJlc3VsdHMgZm9yIGEgc2VsZWN0aW9uIHRoYXQgc3RhcnRzIGp1c3QgYmVmb3Jl
IGEKICAgICAvLyB0YWJsZSBhbmQgZW5kcyBpbnNpZGUgdGhlIGZpcnN0IGNlbGwsIHNlbGVjdGlv
bkZvclBhcmFncmFwaEl0ZXJhdGlvbiBzaG91bGQgcHJvYmFibHkKQEAgLTIyOSw5ICsyMzAsOSBA
QCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wg
Zm9yY2VDcmVhdGVMaXN0LCBjb25zdCBIVAogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAg
IC8vIElmIHRoZSBlbnRpcmUgbGlzdCBpcyBzZWxlY3RlZCwgdGhlbiBjb252ZXJ0IHRoZSB3aG9s
ZSBsaXN0LgotICAgICAgICBpZiAoc3dpdGNoTGlzdFR5cGUgJiYgaXNOb2RlVmlzaWJseUNvbnRh
aW5lZFdpdGhpbigqbGlzdE5vZGUsICpjdXJyZW50U2VsZWN0aW9uKSkgewotICAgICAgICAgICAg
Ym9vbCByYW5nZVN0YXJ0SXNJbkxpc3QgPSB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKCpsaXN0
Tm9kZSkgPT0gY3VycmVudFNlbGVjdGlvbi0+c3RhcnRQb3NpdGlvbigpOwotICAgICAgICAgICAg
Ym9vbCByYW5nZUVuZElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKCpsaXN0Tm9k
ZSkgPT0gY3VycmVudFNlbGVjdGlvbi0+ZW5kUG9zaXRpb24oKTsKKyAgICAgICAgaWYgKHN3aXRj
aExpc3RUeXBlICYmIGlzTm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oKmxpc3ROb2RlLCBjdXJy
ZW50U2VsZWN0aW9uKSkgeworICAgICAgICAgICAgYm9vbCByYW5nZVN0YXJ0SXNJbkxpc3QgPSB2
aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKCpsaXN0Tm9kZSkgPT0gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQpOworICAgICAgICAgICAgYm9vbCByYW5n
ZUVuZElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9uQWZ0ZXJOb2RlKCpsaXN0Tm9kZSkgPT0gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnRTZWxlY3Rpb24uZW5kKTsKIAogICAgICAg
ICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBuZXdMaXN0ID0gY3JlYXRlSFRNTEVsZW1lbnQoZG9j
dW1lbnQoKSwgbGlzdFRhZyk7CiAgICAgICAgICAgICBpbnNlcnROb2RlQmVmb3JlKCpuZXdMaXN0
LCAqbGlzdE5vZGUpOwpAQCAtMjU0LDkgKzI1NSw5IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6
OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhU
CiAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBzdGFydCBhbmQgdGhlIGVuZCBvZiBjdXJyZW50
IHNlbGVjdGlvbiBpZiB0aGV5IHN0YXJ0ZWQgaW5zaWRlIGxpc3ROb2RlCiAgICAgICAgICAgICAv
LyBiZWNhdXNlIG1vdmVQYXJhZ3JhcGhXaXRoQ2xvbmVzIGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGVt
LgogICAgICAgICAgICAgaWYgKHJhbmdlU3RhcnRJc0luTGlzdCAmJiBuZXdMaXN0KQotICAgICAg
ICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldFN0YXJ0KCpuZXdMaXN0LCAwKTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLnN0YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRCZWZv
cmVOb2RlQ29udGVudHMoKm5ld0xpc3QpOwogICAgICAgICAgICAgaWYgKHJhbmdlRW5kSXNJbkxp
c3QgJiYgbmV3TGlzdCkKLSAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLT5zZXRFbmQo
Km5ld0xpc3QsIG5ld0xpc3QtPmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U2Vs
ZWN0aW9uLmVuZCA9IG1ha2VCb3VuZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKm5ld0xpc3Qp
OwogCiAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVBvc2l0aW9uKGZpcnN0
UG9zaXRpb25Jbk5vZGUobmV3TGlzdC5nZXQoKSkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9JbnNlcnRMaXN0Q29tbWFuZC5oCmluZGV4IGFiODJhMjc5NzNkNDE3MzMwYTc5ZTJkYzE4M2I3
NzVkMjRkZmY4ZWQuLjQxOTlmNjk5MjZiOWIzZTAwYjMyODI0N2I5NDc0NTc1MWUxOGJjNjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmgKQEAgLTU0LDcgKzU0
LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MRWxlbWVudCogZml4T3JwaGFuZWRMaXN0Q2hpbGQoTm9k
ZSYpOwogICAgIGJvb2wgc2VsZWN0aW9uSGFzTGlzdE9mVHlwZShjb25zdCBWaXNpYmxlU2VsZWN0
aW9uJiBzZWxlY3Rpb24sIGNvbnN0IFF1YWxpZmllZE5hbWUmKTsKICAgICBSZWY8SFRNTEVsZW1l
bnQ+IG1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMoSFRNTEVsZW1lbnQmKTsKLSAgICB2b2lkIGRv
QXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUTUxR
dWFsaWZpZWROYW1lJiwgUmFuZ2UqIGN1cnJlbnRTZWxlY3Rpb24pOworICAgIHZvaWQgZG9BcHBs
eUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFRNTFF1YWxp
ZmllZE5hbWUmLCBTaW1wbGVSYW5nZSYgY3VycmVudFNlbGVjdGlvbik7CiAgICAgdm9pZCB1bmxp
c3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBvcmlnaW5hbFN0YXJ0LCBIVE1M
RWxlbWVudCogbGlzdE5vZGUsIE5vZGUqIGxpc3RDaGlsZE5vZGUpOwogICAgIFJlZlB0cjxIVE1M
RWxlbWVudD4gbGlzdGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFs
U3RhcnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxpc3RUYWcpOwogICAgIFJlZlB0cjxIVE1MRWxl
bWVudD4gbV9saXN0RWxlbWVudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNw
cAppbmRleCA1MDYwOGFiOTYxMTJjYzgwYjRhZDhjNzE5OTg2MmVjNTJiMDFkOGQxLi4xNDg5M2Yx
ZjQ5ZGE0ZWQ5NjRlMGFjMzZjZmY0NjFiZWVmMTRjMTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9TcGVsbENoZWNrZXIuY3BwCkBAIC0xNDMsOCArMTQzLDE0IEBAIGJvb2wgU3BlbGxDaGVja2Vy
OjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QK
IAogYm9vbCBTcGVsbENoZWNrZXI6OmlzQ2hlY2thYmxlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5n
ZSkgY29uc3QKIHsKLSAgICBhdXRvIGZpcnN0Tm9kZSA9IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSkt
PmZpcnN0Tm9kZSgpOwotICAgIGlmICghZmlyc3ROb2RlIHx8ICFmaXJzdE5vZGUtPnJlbmRlcmVy
KCkpCisgICAgYm9vbCBmb3VuZFJlbmRlcmVyID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBub2Rl
IDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGlmIChub2RlLnJlbmRlcmVy
KCkpIHsKKyAgICAgICAgICAgIGZvdW5kUmVuZGVyZXIgPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFmb3VuZFJlbmRlcmVyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgbm9kZSA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5nZXQo
KTsKICAgICByZXR1cm4gIWlzPEVsZW1lbnQ+KG5vZGUpIHx8IGRvd25jYXN0PEVsZW1lbnQ+KG5v
ZGUpLmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCAyNTQ2MDIzZjY0MDU3ZjgzZDkyMTY5YTU4YWU0
NTFhMzYzMzA4NWVkLi42Y2U2YWI3OGQ2YjA4ZWUyNzc1YTQ4MDE2N2E5YWI2ZWU5YTc4M2ViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC00
NTUsNyArNDU1LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRVbmdyYW1tYXRpY2Fs
UGhyYXNlcyhPcGVyYXRpb24gb3BlcmF0aW9uKSBjb25zdCAtPgogICAgIC8vIEV4cGFuZCB0aGUg
c2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1h
ciBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KICAgICAvLyBEZXRlcm1pbmUgdGhl
IGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUg
c3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3aWxs
IHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgIFRleHRDaGVja2luZ1Bh
cmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKG1fcmFuZ2UpKTsKKyAgICBUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFuZ2UpOwogICAgIAogICAgIC8vIFN0YXJ0IGNo
ZWNraW5nIGZyb20gYmVnaW5uaW5nIG9mIHBhcmFncmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRz
IHRoYXQgb2NjdXIgYmVmb3JlIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdl
LgogICAgIGZvciAodWludDY0X3Qgc3RhcnRPZmZzZXQgPSAwOyBzdGFydE9mZnNldCA8IHBhcmFn
cmFwaC5jaGVja2luZ0VuZCgpOyApIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1h
bmQuY3BwCmluZGV4IGZjOTc1Nzc0ODMxMWNkMTJmYmRkNzJlMWIyNGZlNGJiMGYwNzA5YWMuLmUx
NmU1MmVhOWZiYWQ3MTE4YmY4MGEyZWQzMmNjOTczMDIyOGZhNmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAtNzM1LDcgKzczNSw3IEBAIHZvaWQgVHlwaW5n
Q29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJv
b2wgc2hvdWxkQWRkCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxS
aW5nKQotICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVh
dGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0
b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQpOworICAgICAgICBkb2N1bWVu
dCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3Jt
YWxpemVkUmFuZ2UoKSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OlByZXBlbmRUZXh0
KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2liaWxpdHkgbm90aWZpY2F0aW9uIGJlZm9yZSBh
Y3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3aGlsZSBzZWxlY3Rpb25Ub0RlbGV0ZSBpcyBz
dGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlv
bihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC04NDYsNyArODQ2LDcgQEAgdm9pZCBUeXBpbmdDb21t
YW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHks
IGJvb2wgc2gKICAgICBwb3N0VGV4dFN0YXRlQ2hhbmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24o
c2VsZWN0aW9uVG9EZWxldGUpOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAg
ICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKGNyZWF0ZUxpdmVSYW5n
ZSgqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSksIEVkaXRvcjo6S2lsbFJp
bmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKKyAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3Io
KS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlvblRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdl
KCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsKICAgICAvLyBt
YWtlIHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0ZWQKICAgICBzZXRTdGFydGluZ1NlbGVjdGlv
bihzZWxlY3Rpb25BZnRlclVuZG8pOwogICAgIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVT
ZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUsIG1fc21hcnREZWxldGUsIC8qIG1lcmdlQmxvY2tz
QWZ0ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBsYWNlKi8gZmFsc2UsIGV4cGFuZEZvclNwZWNpYWxF
bGVtZW50cywgLypzYW5pdGl6ZU1hcmt1cCovIHRydWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9p
b3MvRWRpdG9ySU9TLm1tCmluZGV4IDE3OGQyNzRmZjUwNDBhNzExOWIyMjUwMDUzMGRlMGZkNzAx
ODVjOTkuLjcyMTBkM2Y5YzBhZTFlNWE3MWIzZjIwY2M4ZjExMGFjMzg1YzYwMTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KQEAgLTM1MSw5ICszNTEsNyBAQCB2b2lk
IEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1lbnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVt
ZW50JiBlbGVtZW50KQogICAgICAgICBpZiAocGFyZW50KQogICAgICAgICAgICAgZWxlbWVudC5y
ZW1vdmUoKTsKIAotICAgICAgICBhdXRvIGNvbnRleHQgPSBkb2N1bWVudCgpLmNyZWF0ZVJhbmdl
KCk7Ci0gICAgICAgIGNvbnRleHQtPnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTsKLSAgICAg
ICAgZWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnRleHQsIHRl
eHQpKTsKKyAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVGcmFnbWVudEZyb21UZXh0
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhlbGVtZW50KSwgdGV4dCkpOwogCiAgICAg
ICAgIC8vIHJlc3RvcmUgZWxlbWVudCB0byBkb2N1bWVudAogICAgICAgICBpZiAocGFyZW50KSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5kZXggZWMyZDliNDc4YWZjMmI5NjI1NDM3MjVl
NmIxOGE4Yjk1YzM4ZjkxNC4uZTVlNmZjOWQzNTc0YTgwYTcyMzI2NDdiMGRiNGViMDhjMDA2ODkz
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcApAQCAtMTE1NywxNCArMTE1NywxMyBAQCBS
ZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb25zdCBTaW1wbGVS
YW5nZSYgY29udGV4dCwgY29uc3QgUwogICAgIH0KIAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRv
IHBhcmFncmFwaHMuIEV4dHJhIGxpbmUgYnJlYWtzIHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhz
LgotICAgIE5vZGUqIGJsb2NrTm9kZSA9IGVuY2xvc2luZ0Jsb2NrKGNyZWF0ZUxpdmVSYW5nZShj
b250ZXh0KS0+Zmlyc3ROb2RlKCkpOwotICAgIEVsZW1lbnQqIGJsb2NrID0gZG93bmNhc3Q8RWxl
bWVudD4oYmxvY2tOb2RlKTsKLSAgICBib29sIHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBi
bG9ja05vZGUKLSAgICAgICAgJiYgYmxvY2tOb2RlLT5pc0VsZW1lbnROb2RlKCkKKyAgICBhdXRv
IHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbnRleHQuc3RhcnQpOworICAg
IGF1dG8gYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydC5maXJzdE5vZGUoKS5nZXQoKSk7Cisg
ICAgYm9vbCB1c2VDbG9uZXNPZkVuY2xvc2luZ0Jsb2NrID0gYmxvY2sKICAgICAgICAgJiYgIWJs
b2NrLT5oYXNUYWdOYW1lKGJvZHlUYWcpCiAgICAgICAgICYmICFibG9jay0+aGFzVGFnTmFtZSho
dG1sVGFnKQotICAgICAgICAmJiBibG9jayAhPSBlZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29udGV4dC5zdGFydCkpOwotICAgIGJvb2wgdXNlTGlu
ZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihjb250ZXh0LnN0YXJ0KSk7CisgICAgICAgICYmIGJsb2NrICE9IGVkaXRhYmxlUm9vdEZv
clBvc2l0aW9uKHN0YXJ0KTsKKyAgICBib29sIHVzZUxpbmVCcmVhayA9IGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChzdGFydCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiBsaXN0ID0gc3RyaW5nLnNw
bGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJ1xuJyk7CiAgICAgc2l6ZV90IG51bUxpbmVzID0gbGlz
dC5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggM2IxNjIzYTli
MGVhMDg5NzE4ZDQ4MmVjNmY2ODE5NjEyNWI1MWE3OC4uM2VmNjZlNTk5YTlhZjZhZWRmYWRkYTEw
NTVkMWIxNzdjMGU0MmEzYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAt
MzM3LDcgKzMzNyw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2Up
CiAKICAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKHNl
bGVjdGlvbi5pc05vbmUoKSkgewotICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBs
ZVJhbmdlIHsgcmFuZ2UgfSk7CisgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNp
bXBsZVJhbmdlKHJhbmdlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTM1Niw3ICsz
NTYsNyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8ocmFuZ2Uuc3RhcnRQb3NpdGlvbigpLCBub3JtYWxp
emVkUmFuZ2UtPmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICAvLyBUaGUgbmV3IHJhbmdlIGNvbnRhaW5zIHRoZSBvcmlnaW5h
bCByYW5nZS4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNpbXBsZVJh
bmdlIHsgcmFuZ2UgfSk7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbiht
YWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0g
ZWxzZSB7CkBAIC0zNjYsNyArMzY2LDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJh
bmdlJiByYW5nZSkKICAgICAgICAgICAgIHJlc3VsdCA9IHJhbmdlLmNvbXBhcmVCb3VuZGFyeVBv
aW50cyhSYW5nZTo6RU5EX1RPX0VORCwgKm5vcm1hbGl6ZWRSYW5nZSk7CiAgICAgICAgICAgICBp
ZiAoIXJlc3VsdC5oYXNFeGNlcHRpb24oKSAmJiByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkg
PT0gLTEpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgcmFuZ2UgY29udGFpbnMg
dGhlIG5ldyByYW5nZS4KLSAgICAgICAgICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKFNp
bXBsZVJhbmdlIHsgKm5vcm1hbGl6ZWRSYW5nZSB9KTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rp
b24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZSgqbm9ybWFsaXplZFJhbmdlKSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSByYW5nZXMgaW50ZXJzZWN0
LgogICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5tb3ZlVG8obm9ybWFsaXplZFJhbmdlLT5zdGFy
dFBvc2l0aW9uKCksIHJhbmdlLmVuZFBvc2l0aW9uKCksIERPV05TVFJFQU0pOwpAQCAtMzgxLDEy
ICszODEsOCBAQCB2b2lkIERPTVNlbGVjdGlvbjo6ZGVsZXRlRnJvbURvY3VtZW50KCkKICAgICBp
ZiAoIWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzZWxlY3Rpb24gPSBmcmFt
ZS0+c2VsZWN0aW9uKCk7Ci0gICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgaWYgKCFzZWxlY3RlZFJhbmdlIHx8IGNyZWF0ZUxpdmVS
YW5nZSgqc2VsZWN0ZWRSYW5nZSktPnNoYWRvd1Jvb3QoKSkKKyAgICBhdXRvIHNlbGVjdGVkUmFu
Z2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
KyAgICBpZiAoIXNlbGVjdGVkUmFuZ2UgfHwgc2VsZWN0ZWRSYW5nZS0+c3RhcnQuY29udGFpbmVy
LT5jb250YWluaW5nU2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm47CiAKICAgICBSZWY8RnJh
bWU+IHByb3RlY3RvcigqZnJhbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAppbmRleCA2NWI1MzgwMGNlYWEzZDg1ZTc1NmJhYmJkZTA2NDk0OTdiMDc5Yjg2Li4yMGViM2I2
YjJiMTdmMWE2ZTcyNWRhNzBlNTEyMmFlYjVlOTVjMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcApAQCAtMTQyLDExICsxNDIsMTAgQEAgRHJhZ0NvbnRyb2xsZXI6OkRy
YWdDb250cm9sbGVyKFBhZ2UmIHBhZ2UsIHN0ZDo6dW5pcXVlX3B0cjxEcmFnQ2xpZW50PiYmIGNs
aWVudCkKIAogRHJhZ0NvbnRyb2xsZXI6On5EcmFnQ29udHJvbGxlcigpID0gZGVmYXVsdDsKIAot
c3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdE
YXRhKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgRnJhbWUmIGZyYW1lLCBSYW5nZSYgY29udGV4
dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCitzdGF0aWMgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoY29uc3Qg
RHJhZ0RhdGEmIGRyYWdEYXRhLCBGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiBjb250
ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKIHsKICAgICBj
aG9zZVBsYWluVGV4dCA9IGZhbHNlOwogCi0gICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY29udGV4
dC5vd25lckRvY3VtZW50KCk7CiAgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zQ29tcGF0aWJsZUNv
bnRlbnQoKSkgewogICAgICAgICBpZiAoYXV0byBmcmFnbWVudCA9IGZyYW1lLmVkaXRvcigpLndl
YkNvbnRlbnRGcm9tUGFzdGVib2FyZCgqUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3Ao
ZHJhZ0RhdGEpLCBjb250ZXh0LCBhbGxvd1BsYWluVGV4dCwgY2hvc2VQbGFpblRleHQpKQogICAg
ICAgICAgICAgcmV0dXJuIGZyYWdtZW50OwpAQCAtMTU1LDEwICsxNTQsMTEgQEAgc3RhdGljIFJl
ZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGNvbnN0
IERyYWdEYXRhJiBkcmEKICAgICAgICAgICAgIFN0cmluZyB0aXRsZTsKICAgICAgICAgICAgIFN0
cmluZyB1cmwgPSBkcmFnRGF0YS5hc1VSTChEcmFnRGF0YTo6RG9Ob3RDb252ZXJ0RmlsZW5hbWVz
LCAmdGl0bGUpOwogICAgICAgICAgICAgaWYgKCF1cmwuaXNFbXB0eSgpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgZG9jdW1lbnQgPSBjb250ZXh0LnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQo
KTsKICAgICAgICAgICAgICAgICBhdXRvIGFuY2hvciA9IEhUTUxBbmNob3JFbGVtZW50OjpjcmVh
dGUoZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgIGFuY2hvci0+c2V0SHJlZih1cmwpOwogICAg
ICAgICAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gVHJ5IHRoZSBwbGFpbiB0ZXh0IGZpcnN0IGJlY2F1c2UgdGhlIHVybCBtaWdodCBiZSBub3Jt
YWxpemVkIG9yIGVzY2FwZWQuCisgICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0aGUgcGxhaW4g
dGV4dCBmaXJzdCBiZWNhdXNlIHRoZSBVUkwgbWlnaHQgYmUgbm9ybWFsaXplZCBvciBlc2NhcGVk
LgogICAgICAgICAgICAgICAgICAgICBpZiAoZHJhZ0RhdGEuY29udGFpbnNQbGFpblRleHQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gZHJhZ0RhdGEuYXNQbGFpblRleHQoKTsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkKQEAgLTYwMywxMyArNjAz
LDEzIEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcoY29uc3QgRHJhZ0Rh
dGEmIGRyYWdEYXRhKQogICAgIGJvb2wgaXNNb3ZlID0gZHJhZ0lzTW92ZShpbm5lckZyYW1lLT5z
ZWxlY3Rpb24oKSwgZHJhZ0RhdGEpOwogICAgIGlmIChpc01vdmUgfHwgZHJhZ0NhcmV0LmlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkpIHsKICAgICAgICAgYm9vbCBjaG9zZVBsYWluVGV4dCA9IGZh
bHNlOwotICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBkb2N1bWVu
dEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwgY3JlYXRlTGl2ZVJh
bmdlKCpyYW5nZSksIHRydWUsIGNob3NlUGxhaW5UZXh0KTsKKyAgICAgICAgYXV0byBmcmFnbWVu
dCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZyYW1lLCAq
cmFuZ2UsIHRydWUsIGNob3NlUGxhaW5UZXh0KTsKICAgICAgICAgaWYgKCFmcmFnbWVudCB8fCAh
ZWRpdG9yLnNob3VsZEluc2VydEZyYWdtZW50KCpmcmFnbWVudCwgcmFuZ2UsIEVkaXRvckluc2Vy
dEFjdGlvbjo6RHJvcHBlZCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
Y2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7CiAKLSAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAm
JiBlZGl0b3IuY2xpZW50KCktPnBlcmZvcm1Ud29TdGVwRHJvcCgqZnJhZ21lbnQsIGNyZWF0ZUxp
dmVSYW5nZSgqcmFuZ2UpLCBpc01vdmUpKQorICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYm
IGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpmcmFnbWVudCwgKnJhbmdlLCBp
c01vdmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKGlzTW92ZSkg
ewpAQCAtNjM1LDcgKzYzNSw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERy
YWcoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhKQogCiAgICAgICAgIGNsaWVudCgpLndpbGxQZXJm
b3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRpdCwgZHJh
Z0RhdGEpOwogICAgICAgICBhdXRvIGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgq
cmFuZ2UsIHRleHQpOwotICAgICAgICBpZiAoZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGll
bnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKGZyYWdtZW50LmdldCgpLCBjcmVhdGVMaXZlUmFuZ2Uo
KnJhbmdlKSwgaXNNb3ZlKSkKKyAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3Iu
Y2xpZW50KCktPnBlcmZvcm1Ud29TdGVwRHJvcChmcmFnbWVudC5nZXQoKSwgKnJhbmdlLCBpc01v
dmUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICAgICAgaWYgKHNldFNlbGVjdGlv
blRvRHJhZ0NhcmV0KGlubmVyRnJhbWUuZ2V0KCksIGRyYWdDYXJldCwgcG9pbnQpKQpAQCAtMTA0
MSw3ICsxMDQxLDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcmMs
IGNvbnN0IERyYWdTdGF0ZSYgc3RhdGUsIE9wdGlvblNldDxEcmEKICAgICAgICAgICAgICAgICAg
ICAgc3JjLmVkaXRvcigpLndyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJkKGRhdGFUcmFuc2Zlci5w
YXN0ZWJvYXJkKCkpOwogI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbnZl
cnQgV2luZG93cyB0byBtYXRjaCB0aGUgb3RoZXIgcGxhdGZvcm1zIGFuZCBkZWxldGUgdGhpcy4K
LSAgICAgICAgICAgICAgICAgICAgZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKS53cml0ZVNlbGVj
dGlvbihjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKSwgc3JjLmVkaXRvcigpLmNhblNt
YXJ0Q29weU9yRGVsZXRlKCksIHNyYywgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zl
cik7CisgICAgICAgICAgICAgICAgICAgIGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkud3JpdGVT
ZWxlY3Rpb24oKnNlbGVjdGlvblJhbmdlLCBzcmMuZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JEZWxl
dGUoKSwgc3JjLCBJbmNsdWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKICNlbmRpZgog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAjaWYgUExBVEZPUk0oQ09DT0EpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9UZXh0SW5kaWNhdG9yLmNwcAppbmRleCA5ZTYyMTA5NmRhMmUyZjdiZjVhZTcwZThhM2Vk
ZmI0YzZkODUyYTBjLi44ZTBlMDc5ZWFkNDNkNmY4NGJlNGZhZGNiNzdkNDNmMWZjOWJhMzNjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAKQEAgLTE3NywyMCArMTc3LDYgQEAg
c3RhdGljIGJvb2wgdGFrZVNuYXBzaG90cyhUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUm
IGZyYW1lLCBJbnRSZWN0IHNuYXBzaG8KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0KLXN0YXRpYyBWZWN0b3I8RmxvYXRSZWN0PiBzZWxlY3Rpb25SZWN0
cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCi17Ci0gICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+
IHNlbGVjdGlvblJlY3RzOwotICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxl
Y3Rpb25SZWN0cyhzZWxlY3Rpb25SZWN0cyk7Ci0gICAgVmVjdG9yPEZsb2F0UmVjdD4gcmVjdHM7
Ci0gICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogc2VsZWN0aW9uUmVjdHMpCi0gICAgICAg
IHJlY3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0LnJlY3QoKSk7Ci0gICAgcmV0dXJuIHJlY3RzOwot
fQotCi0jZW5kaWYKLQogc3RhdGljIGJvb2wgc3R5bGVDb250YWluc0NvbXBsZXhCYWNrZ3JvdW5k
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICByZXR1cm4gc3R5bGUuaGFzQmxlbmRN
b2RlKCkgfHwgc3R5bGUuaGFzQmFja2dyb3VuZEltYWdlKCkgfHwgc3R5bGUuaGFzQmFja2Ryb3BG
aWx0ZXIoKTsKQEAgLTMxNiw4ICszMDIsMTEgQEAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZUluZGlj
YXRvcihUZXh0SW5kaWNhdG9yRGF0YSYgZGF0YSwgRnJhbWUmIGZyYW1lLCBjb25zdCBTaW0KICAg
ICB9IGVsc2UgaWYgKHVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhS
YW5nZXMgJiYgKHRyZWF0UmFuZ2VBc0NvbXBsZXhEdWVUb0lsbGVnaWJsZVRleHRDb2xvcnMgfHwg
aGFzTm9uSW5saW5lT3JSZXBsYWNlZEVsZW1lbnRzKHJhbmdlKSkpCiAgICAgICAgIGRhdGEub3B0
aW9ucy5hZGQoVGV4dEluZGljYXRvck9wdGlvbjo6UGFpbnRBbGxDb250ZW50KTsKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQotICAgIGVsc2UgaWYgKGRhdGEub3B0aW9ucy5jb250YWlucyhUZXh0
SW5kaWNhdG9yT3B0aW9uOjpVc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5nKSkKLSAgICAgICAgdGV4
dFJlY3RzID0gc2VsZWN0aW9uUmVjdHMocmFuZ2UpOworICAgIGVsc2UgaWYgKGRhdGEub3B0aW9u
cy5jb250YWlucyhUZXh0SW5kaWNhdG9yT3B0aW9uOjpVc2VTZWxlY3Rpb25SZWN0Rm9yU2l6aW5n
KSkgeworICAgICAgICB0ZXh0UmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25S
ZWN0cyhyYW5nZSkubWFwKFsmXShjb25zdCBhdXRvJiByZWN0KSAtPiBGbG9hdFJlY3QgeworICAg
ICAgICAgICAgcmV0dXJuIHJlY3QucmVjdCgpOworICAgICAgICB9KTsKKyAgICB9CiAjZW5kaWYK
ICAgICBlbHNlIHsKICAgICAgICAgYXV0byB0ZXh0UmVjdEhlaWdodCA9IGRhdGEub3B0aW9ucy5j
b250YWlucyhUZXh0SW5kaWNhdG9yT3B0aW9uOjpUaWdodGx5Rml0Q29udGVudCkgPyBGcmFtZVNl
bGVjdGlvbjo6VGV4dFJlY3RhbmdsZUhlaWdodDo6VGV4dEhlaWdodCA6IEZyYW1lU2VsZWN0aW9u
OjpUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpTZWxlY3Rpb25IZWlnaHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9z
L0ZyYW1lSU9TLm1tCmluZGV4IGY2OGNhYzQyODFlNjU3NzcwNDlmYzk4ZGIyODJlOWI1MzI2NDE1
MTQuLjliYjhlOTJjYWFjNWNmNTMyYjc5YjkwZWVhYjNjZjIxNTQwYWZmNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC03NDgsNyArNzQ4LDcgQEAgTlNBcnJheSAqRnJhbWU6
OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKICAgICAgICAgZm9yIChhdXRv
KiBtYXJrZXIgOiBkb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykpIHsKICAgICAgICAgICAg
IGF1dG8mIGFsdGVybmF0aXZlcyA9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRh
dGEoKSk7CiAKLSAgICAgICAgICAgIGF1dG8gcmFuZ2VGb3JNYXJrZXIgPSByYW5nZShub2RlLCAq
bWFya2VyKTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2VGb3JNYXJrZXIgPSBtYWtlU2ltcGxlUmFu
Z2Uobm9kZSwgKm1hcmtlcik7CiAKICAgICAgICAgICAgIGlmIChhdXRvIHByZWNlZGluZ1RleHRS
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiwgcmFuZ2VG
b3JNYXJrZXIuc3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgU3RyaW5nIHByZWNlZGluZ1RleHQg
PSBwbGFpblRleHQoKnByZWNlZGluZ1RleHRSYW5nZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0ltYWdlLmNwcAppbmRleCA0NjYwY2Y2YzU2OTMxNTRhYjMyZTkxZDBmOTRjMGNlNTg2NDUwNTIx
Li42OGY4Mzk3OGZjN2Y3N2ZhNWExOGU2NGIwODUyOWM3OWMyOWZhNThjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAgLTMxLDEwICszMSw5IEBACiAjaW5jbHVkZSAiRnJh
bWVWaWV3LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgot
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNs
dWRlICJTaW1wbGVSYW5nZS5oIgogI2luY2x1ZGUgIlRleHRJbmRpY2F0b3IuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtMTUzLDcgKzE1Miw3IEBAIHN0cnVjdCBTY29wZWRGcmFtZVNlbGVj
dGlvblN0YXRlIHsKIAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQogCi1EcmFnSW1hZ2VSZWYg
Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIGJvb2wg
Zm9yY2VCbGFja1RleHQpCitEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJh
bWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFja1RleHQp
CiB7CiAgICAgZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlTGF5b3V0KCk7CiAgICAgUmVuZGVyVmll
dyogdmlldyA9IGZyYW1lLmNvbnRlbnRSZW5kZXJlcigpOwpAQCAtMTYxLDEyICsxNjAsMTIgQEAg
RHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2Um
IHJhbmdlLCBib29sIGZvcmNlQmxhY2sKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAv
LyBUbyBzbmFwc2hvdCB0aGUgcmFuZ2UsIHRlbXBvcmFyaWx5IHNlbGVjdCBpdCBhbmQgdGFrZSBz
ZWxlY3Rpb24gc25hcHNob3QuCi0gICAgUG9zaXRpb24gc3RhcnQgPSByYW5nZS5zdGFydFBvc2l0
aW9uKCk7CisgICAgUG9zaXRpb24gc3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
cmFuZ2Uuc3RhcnQpOwogICAgIFBvc2l0aW9uIGNhbmRpZGF0ZSA9IHN0YXJ0LmRvd25zdHJlYW0o
KTsKICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2RlKCkgJiYgY2FuZGlkYXRlLmRlcHJl
Y2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpCiAgICAgICAgIHN0YXJ0ID0gY2FuZGlkYXRlOwogCi0g
ICAgUG9zaXRpb24gZW5kID0gcmFuZ2UuZW5kUG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBlbmQg
PSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKTsKICAgICBjYW5kaWRhdGUg
PSBlbmQudXBzdHJlYW0oKTsKICAgICBpZiAoY2FuZGlkYXRlLmRlcHJlY2F0ZWROb2RlKCkgJiYg
Y2FuZGlkYXRlLmRlcHJlY2F0ZWROb2RlKCktPnJlbmRlcmVyKCkpCiAgICAgICAgIGVuZCA9IGNh
bmRpZGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgKaW5kZXggZDA1MDg3NTgyZGQx
YzYwYjQ0ZTZkYzFhMzBlMWViYmZlZjRkNGE2ZC4uMjgzYTY3OTFkNzJiNTlmODQ3ZjIxNzJlZGMz
YTc4M2Q4ZTE2YjRiMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0lt
YWdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmgKQEAgLTU2LDcg
KzU2LDYgQEAgY2xhc3MgRnJhbWU7CiBjbGFzcyBJbWFnZTsKIGNsYXNzIEludFJlY3Q7CiBjbGFz
cyBOb2RlOwotY2xhc3MgUmFuZ2U7CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogdHlwZWRl
ZiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gRHJhZ0ltYWdlUmVmOwpAQCAtODksNyArODgsNyBAQCBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlSWNvbkZvckNhY2hlZEltYWdlRmlsZW5hbWUoY29u
c3QgU3RyaW5nJik7CiAKIFdFQkNPUkVfRVhQT1JUIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2VGb3JOb2RlKEZyYW1lJiwgTm9kZSYpOwogV0VCQ09SRV9FWFBPUlQgRHJhZ0ltYWdlUmVmIGNy
ZWF0ZURyYWdJbWFnZUZvclNlbGVjdGlvbihGcmFtZSYsIFRleHRJbmRpY2F0b3JEYXRhJiwgYm9v
bCBmb3JjZUJsYWNrVGV4dCA9IGZhbHNlKTsKLVdFQkNPUkVfRVhQT1JUIERyYWdJbWFnZVJlZiBj
cmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYsIFJhbmdlJiwgYm9vbCBmb3JjZUJsYWNrVGV4
dCA9IGZhbHNlKTsKK1dFQkNPUkVfRVhQT1JUIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VG
b3JSYW5nZShGcmFtZSYsIGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCBmb3JjZUJsYWNrVGV4dCA9
IGZhbHNlKTsKIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JDb2xvcihjb25zdCBDb2xv
ciYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBQYXRoJik7CiBEcmFnSW1hZ2VSZWYgY3JlYXRl
RHJhZ0ltYWdlRm9ySW1hZ2UoRnJhbWUmLCBOb2RlJiwgSW50UmVjdCYgaW1hZ2VSZWN0LCBJbnRS
ZWN0JiBlbGVtZW50UmVjdCk7CiBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTGluayhF
bGVtZW50JiwgVVJMJiwgY29uc3QgU3RyaW5nJiBsYWJlbCwgVGV4dEluZGljYXRvckRhdGEmLCBG
b250UmVuZGVyaW5nTW9kZSwgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZC5oCmluZGV4IDllMmIzNThhZGIwZjY5MDdlYTZjMTZjYjk0NDIyYTJi
YTY4Y2E3ZTYuLmFhZGM0NjY5OGRmNzk1NjQzNjJhMDNmNWRmZTg5YjBlYjc4MTFjZTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKQEAgLTY1LDkgKzY1LDEwIEBAIGNsYXNzIERy
YWdEYXRhOwogY2xhc3MgRWxlbWVudDsKIGNsYXNzIEZyYW1lOwogY2xhc3MgUGFzdGVib2FyZFN0
cmF0ZWd5OwotY2xhc3MgUmFuZ2U7CiBjbGFzcyBTaGFyZWRCdWZmZXI7CiAKK3N0cnVjdCBTaW1w
bGVSYW5nZTsKKwogZW51bSBjbGFzcyBQbGFpblRleHRVUkxSZWFkaW5nUG9saWN5IDogYm9vbCB7
IElnbm9yZVVSTCwgQWxsb3dVUkwgfTsKIGVudW0gY2xhc3MgV2ViQ29udGVudFJlYWRpbmdQb2xp
Y3kgOiBib29sIHsgQW55VHlwZSwgT25seVJpY2hUZXh0VHlwZXMgfTsKIGVudW0gU2hvdWxkU2Vy
aWFsaXplU2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyIHsgRGVmYXVsdFNlbGVjdGVkVGV4dFR5
cGUsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIgfTsKQEAgLTI0MSw5ICsyNDIs
OSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFdJTikKLSAgICBSZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudChGcmFtZSYsIFJhbmdlJiwgYm9vbCBhbGxv
d1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlv
bGF0aW9uLgorICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50KEZy
YW1lJiwgY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9z
ZVBsYWluVGV4dCk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCiAgICAgdm9pZCB3cml0
ZUltYWdlKEVsZW1lbnQmLCBjb25zdCBVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKTsgLy8gRklY
TUU6IExheWVyaW5nIHZpb2xhdGlvbi4KLSAgICB2b2lkIHdyaXRlU2VsZWN0aW9uKFJhbmdlJiwg
Ym9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJhbWUmLCBTaG91bGRTZXJpYWxpemVTZWxlY3Rl
ZFRleHRGb3JEYXRhVHJhbnNmZXIgPSBEZWZhdWx0U2VsZWN0ZWRUZXh0VHlwZSk7IC8vIEZJWE1F
OiBMYXllcmluZyB2aW9sYXRpb24uCisgICAgdm9pZCB3cml0ZVNlbGVjdGlvbihjb25zdCBTaW1w
bGVSYW5nZSYsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lJiwgU2hvdWxkU2VyaWFs
aXplU2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyID0gRGVmYXVsdFNlbGVjdGVkVGV4dFR5cGUp
OyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgogI2VuZGlmCiAKICNpZiBQTEFURk9STShH
VEspCkBAIC0zMTIsNyArMzEzLDcgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKFdJTikKICAg
ICB2b2lkIGZpbmlzaENyZWF0aW5nUGFzdGVib2FyZCgpOwotICAgIHZvaWQgd3JpdGVSYW5nZVRv
RGF0YU9iamVjdChSYW5nZSYsIEZyYW1lJik7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24u
CisgICAgdm9pZCB3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KGNvbnN0IFNpbXBsZVJhbmdlJiwgRnJh
bWUmKTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KICAgICB2b2lkIHdyaXRlVVJMVG9E
YXRhT2JqZWN0KGNvbnN0IFVSTCYsIGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgd3JpdGVQbGFp
blRleHRUb0RhdGFPYmplY3QoY29uc3QgU3RyaW5nJiwgU21hcnRSZXBsYWNlT3B0aW9uKTsKICAg
ICBPcHRpb25hbDxQYXN0ZWJvYXJkQ3VzdG9tRGF0YT4gcmVhZFBhc3RlYm9hcmRDdXN0b21EYXRh
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdlSU9T
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQppbmRleCBj
YjVhZWY5MmYyMzgwODY4ZGE4YTNhZTYzNjUyZTUzZjU1NGYwMzhiLi41ZDgwOTJmZmM5ZjRhYzI3
MzRjYjMwODQyNjUyMTAwMjFmMjFhZjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvRHJhZ0ltYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9EcmFnSW1hZ2VJT1MubW0KQEAgLTIxOSw3ICsyMTksNyBAQCBEcmFnSW1hZ2VSZWYgZGlzc29s
dmVEcmFnSW1hZ2VUb0ZyYWN0aW9uKERyYWdJbWFnZVJlZiBpbWFnZSwgZmxvYXQpCiAgICAgcmV0
dXJuIGltYWdlOwogfQogCi1EcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJh
bWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFja1RleHQpCitEcmFnSW1hZ2VS
ZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5n
ZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFja1RleHQpCiB7CiAgICAgaWYgKGF1dG8gZG9jdW1lbnQg
PSBmcmFtZS5kb2N1bWVudCgpKQogICAgICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKaW5kZXggNjg3
NTdlYWE4YzhmMTA0MDQ4MTU1ZmVkODE0ZjJjMGMyMGFjMWYzNi4uMjFiOTdmNThiMGVlMzllNDQ3
MjFlNmYyN2QwN2U2MjkxMmViMDRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcApAQCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6
c2V0RHJhZ0ltYWdlKERyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmKQogfQogI2VuZGlmCiAKLXZv
aWQgUGFzdGVib2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdChSYW5nZSYgc2VsZWN0ZWRSYW5n
ZSwgRnJhbWUmIGZyYW1lKQordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVJhbmdlVG9EYXRhT2JqZWN0
KGNvbnN0IFNpbXBsZVJhbmdlJiBzZWxlY3RlZFJhbmdlLCBGcmFtZSYgZnJhbWUpCiB7CiAgICAg
aWYgKCFtX3dyaXRhYmxlRGF0YU9iamVjdCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDg4LDcgKzQ4
OCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdChSYW5nZSYgc2Vs
ZWN0ZWRSYW5nZSwgRnJhbWUmIGZyYW1lKQogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAg
bWFya3VwVG9DRkhUTUwoc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2Uoc2VsZWN0
ZWRSYW5nZSwgbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKSwKLSAgICAgICAg
c2VsZWN0ZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkudXJsKCkuc3RyaW5nKCks
IGRhdGEpOworICAgICAgICBzZWxlY3RlZFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQo
KS51cmwoKS5zdHJpbmcoKSwgZGF0YSk7CiAgICAgbWVkaXVtLmhHbG9iYWwgPSBjcmVhdGVHbG9i
YWxEYXRhKGRhdGEpOwogICAgIGlmIChtZWRpdW0uaEdsb2JhbCAmJiBGQUlMRUQobV93cml0YWJs
ZURhdGFPYmplY3QtPlNldERhdGEoaHRtbEZvcm1hdCgpLCAmbWVkaXVtLCBUUlVFKSkpCiAgICAg
ICAgIDo6R2xvYmFsRnJlZShtZWRpdW0uaEdsb2JhbCk7CkBAIC01MDUsNyArNTA1LDcgQEAgdm9p
ZCBQYXN0ZWJvYXJkOjp3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KFJhbmdlJiBzZWxlY3RlZFJhbmdl
LCBGcmFtZSYgZnJhbWUpCiAgICAgICAgIG1fd3JpdGFibGVEYXRhT2JqZWN0LT5TZXREYXRhKHNt
YXJ0UGFzdGVGb3JtYXQoKSwgJm1lZGl1bSwgVFJVRSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6
d3JpdGVTZWxlY3Rpb24oUmFuZ2UmIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JE
ZWxldGUsIEZyYW1lJiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yRGF0YVRy
YW5zZmVyIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcikKK3ZvaWQg
UGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oY29uc3QgU2ltcGxlUmFuZ2UmIHNlbGVjdGVkUmFu
Z2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lJiBmcmFtZSwgU2hvdWxkU2VyaWFs
aXplU2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4
dEZvckRhdGFUcmFuc2ZlcikKIHsKICAgICBjbGVhcigpOwogCkBAIC01MTQsNyArNTE0LDcgQEAg
dm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSYgc2VsZWN0ZWRSYW5nZSwgYm9v
bCBjYW5TbWFydENvcHlPckRlbGV0ZSwKICAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAg
ICAgIC8vIEZJWE1FOiBVc2UgUmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNG
b3JQcml2YWN5LgogICAgICAgICBtYXJrdXBUb0NGSFRNTChzZXJpYWxpemVQcmVzZXJ2aW5nVmlz
dWFsQXBwZWFyYW5jZShmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSksCi0gICAgICAgICAg
ICBzZWxlY3RlZFJhbmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS51cmwoKS5zdHJpbmco
KSwgZGF0YSk7CisgICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9j
dW1lbnQoKS51cmwoKS5zdHJpbmcoKSwgZGF0YSk7CiAgICAgICAgIEhHTE9CQUwgY2JEYXRhID0g
Y3JlYXRlR2xvYmFsRGF0YShkYXRhKTsKICAgICAgICAgaWYgKCE6OlNldENsaXBib2FyZERhdGEo
SFRNTENsaXBib2FyZEZvcm1hdCwgY2JEYXRhKSkKICAgICAgICAgICAgIDo6R2xvYmFsRnJlZShj
YkRhdGEpOwpAQCAtODU0LDcgKzg1NCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJv
YXJkUGxhaW5UZXh0JiB0ZXh0LCBQbGFpblRleHRVUkxSZWFkaW5nUG9saWN5LCBPcHRpCiAgICAg
fQogfQogCi1SZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFn
bWVudChGcmFtZSYgZnJhbWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBi
b29sJiBjaG9zZVBsYWluVGV4dCkKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJk
Ojpkb2N1bWVudEZyYWdtZW50KEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRl
eHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewogICAgIGNo
b3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwCmluZGV4IDc5MzRlNTEzZDBmNTM4Y2UwNzg5MDVmNWRiY2Q4MWRhYWIyZDJm
ZTEuLmUwZjMzMzg3MGQ1Nzk4NTM1MWFlZDVhMDlhMjY3ODgxYWIxNTIzNzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxCUkVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJI
VE1MVGFibGVDZWxsRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKQEAg
LTE5MTcsNiArMTkxNywyNzAgQEAgVmVjdG9yPEludFJlY3Q+IFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UmVjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIHUKICAgICByZXR1cm4g
cmVjdHM7CiB9CiAKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQorCitzdGF0aWMgYm9vbCBpbnRl
cnZhbHNTdWZmaWNpZW50bHlPdmVybGFwKGludCBzdGFydEEsIGludCBlbmRBLCBpbnQgc3RhcnRC
LCBpbnQgZW5kQikKK3sKKyAgICBpZiAoZW5kQSA8PSBzdGFydEEgfHwgZW5kQiA8PSBzdGFydEIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGZsb2F0IHN1ZmZpY2llbnRPdmVy
bGFwID0gLjc1OworCisgICAgaW50IGxlbmd0aEEgPSBlbmRBIC0gc3RhcnRBOworICAgIGludCBs
ZW5ndGhCID0gZW5kQiAtIHN0YXJ0QjsKKworICAgIGludCBtYXhTdGFydCA9IHN0ZDo6bWF4KHN0
YXJ0QSwgc3RhcnRCKTsKKyAgICBpbnQgbWluRW5kID0gc3RkOjptaW4oZW5kQSwgZW5kQik7CisK
KyAgICBpZiAobWF4U3RhcnQgPiBtaW5FbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBtaW5FbmQgLSBtYXhTdGFydCA+PSBzdWZmaWNpZW50T3ZlcmxhcCAqIHN0ZDo6bWlu
KGxlbmd0aEEsIGxlbmd0aEIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0TGluZUhl
aWdodE9mU2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0cywgc2l6ZV90
IG51bWJlck9mUmVjdHMsIGludCBsaW5lTnVtYmVyLCBpbnQgbGluZVRvcCwgaW50IGxpbmVIZWln
aHQpCit7CisgICAgQVNTRVJUKHJlY3RzLnNpemUoKSA+PSBudW1iZXJPZlJlY3RzKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gbnVtYmVyT2ZSZWN0czsgaTsgKSB7CisgICAgICAgIC0taTsKKyAgICAg
ICAgaWYgKHJlY3RzW2ldLmxpbmVOdW1iZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICByZWN0c1tpXS5zZXRMaW5lTnVtYmVyKGxpbmVOdW1iZXIpOworICAgICAgICByZWN0c1tpXS5z
ZXRMb2dpY2FsVG9wKGxpbmVUb3ApOworICAgICAgICByZWN0c1tpXS5zZXRMb2dpY2FsSGVpZ2h0
KGxpbmVIZWlnaHQpOworICAgIH0KK30KKworc3RhdGljIFNlbGVjdGlvblJlY3QgY29hbGVzY2VT
ZWxlY3Rpb25SZWN0cyhjb25zdCBTZWxlY3Rpb25SZWN0JiBvcmlnaW5hbCwgY29uc3QgU2VsZWN0
aW9uUmVjdCYgcHJldmlvdXMpCit7CisgICAgU2VsZWN0aW9uUmVjdCByZXN1bHQodW5pb25SZWN0
KHByZXZpb3VzLnJlY3QoKSwgb3JpZ2luYWwucmVjdCgpKSwgb3JpZ2luYWwuaXNIb3Jpem9udGFs
KCksIG9yaWdpbmFsLnBhZ2VOdW1iZXIoKSk7CisgICAgcmVzdWx0LnNldERpcmVjdGlvbihvcmln
aW5hbC5jb250YWluc1N0YXJ0KCkgfHwgb3JpZ2luYWwuY29udGFpbnNFbmQoKSA/IG9yaWdpbmFs
LmRpcmVjdGlvbigpIDogcHJldmlvdXMuZGlyZWN0aW9uKCkpOworICAgIHJlc3VsdC5zZXRDb250
YWluc1N0YXJ0KHByZXZpb3VzLmNvbnRhaW5zU3RhcnQoKSB8fCBvcmlnaW5hbC5jb250YWluc1N0
YXJ0KCkpOworICAgIHJlc3VsdC5zZXRDb250YWluc0VuZChwcmV2aW91cy5jb250YWluc0VuZCgp
IHx8IG9yaWdpbmFsLmNvbnRhaW5zRW5kKCkpOworICAgIHJlc3VsdC5zZXRJc0ZpcnN0T25MaW5l
KHByZXZpb3VzLmlzRmlyc3RPbkxpbmUoKSB8fCBvcmlnaW5hbC5pc0ZpcnN0T25MaW5lKCkpOwor
ICAgIHJlc3VsdC5zZXRJc0xhc3RPbkxpbmUocHJldmlvdXMuaXNMYXN0T25MaW5lKCkgfHwgb3Jp
Z2luYWwuaXNMYXN0T25MaW5lKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxT
ZWxlY3Rpb25SZWN0PiBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRV
bmlvbkludGVyaW9yTGluZXMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVy
biBjb2xsZWN0U2VsZWN0aW9uUmVjdHNJbnRlcm5hbChyYW5nZSkucmVjdHM7Cit9CisKK2F1dG8g
UmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNJbnRlcm5hbChjb25zdCBTaW1wbGVS
YW5nZSYgcmFuZ2UpIC0+IFNlbGVjdGlvblJlY3RzCit7CisgICAgVmVjdG9yPFNlbGVjdGlvblJl
Y3Q+IHJlY3RzOworICAgIFZlY3RvcjxTZWxlY3Rpb25SZWN0PiBuZXdSZWN0czsKKyAgICBib29s
IGhhc0ZsaXBwZWRXcml0aW5nTW9kZSA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+cmVuZGVyZXIo
KSAmJiByYW5nZS5zdGFydC5jb250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCkuaXNGbGlwcGVk
QmxvY2tzV3JpdGluZ01vZGUoKTsKKyAgICBib29sIGNvbnRhaW5zRGlmZmVyZW50V3JpdGluZ01v
ZGVzID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFu
Z2UpKSB7CisgICAgICAgIGF1dG8gcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCk7CisgICAgICAg
IC8vIE9ubHkgYXNrIGxlYWYgcmVuZGVyIG9iamVjdHMgZm9yIHRoZWlyIGxpbmUgYm94IHJlY3Rz
LgorICAgICAgICBpZiAocmVuZGVyZXIgJiYgIXJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpICYm
IHJlbmRlcmVyLT5zdHlsZSgpLnVzZXJTZWxlY3QoKSAhPSBVc2VyU2VsZWN0OjpOb25lKSB7Cisg
ICAgICAgICAgICBib29sIGlzU3RhcnROb2RlID0gcmVuZGVyZXItPm5vZGUoKSA9PSByYW5nZS5z
dGFydC5jb250YWluZXIucHRyKCk7CisgICAgICAgICAgICBib29sIGlzRW5kTm9kZSA9IHJlbmRl
cmVyLT5ub2RlKCkgPT0gcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKTsKKyAgICAgICAgICAgIGlm
IChoYXNGbGlwcGVkV3JpdGluZ01vZGUgIT0gcmVuZGVyZXItPnN0eWxlKCkuaXNGbGlwcGVkQmxv
Y2tzV3JpdGluZ01vZGUoKSkKKyAgICAgICAgICAgICAgICBjb250YWluc0RpZmZlcmVudFdyaXRp
bmdNb2RlcyA9IHRydWU7CisgICAgICAgICAgICAvLyBGSVhNRTogU2VuZGluZyAwIGZvciB0aGUg
c3RhcnRPZmZzZXQgaXMgYSB3ZWlyZCB3YXkgb2YgdGVsbGluZyB0aGUgcmVuZGVyZXIgdGhhdCB0
aGUgc2VsZWN0aW9uCisgICAgICAgICAgICAvLyBkb2Vzbid0IHN0YXJ0IGluc2lkZSBpdCwgc2lu
Y2Ugd2UnbGwgYWxzbyBzZW5kIDAgaWYgdGhlIHNlbGVjdGlvbiAqZG9lcyogc3RhcnQgaW4gaXQs
IGF0IG9mZnNldCAwLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEZJWE1FOiBTZWxl
Y3Rpb24gZW5kcG9pbnRzIGFyZW4ndCBhbHdheXMgaW5zaWRlIGxlYXZlcywgYW5kIHdlIG9ubHkg
YnVpbGQgU2VsZWN0aW9uUmVjdHMgZm9yIGxlYXZlcywKKyAgICAgICAgICAgIC8vIHNvIHdlIGNh
bid0IGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHdoaWNoIFNlbGVjdGlvblJlY3RzIGNvbnRhaW4gdGhl
IHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kIHVzaW5nCisgICAgICAgICAgICAvLyBvbmx5IHRoZSBv
ZmZzZXRzIG9mIHRoZSBzdGFydCBhbmQgZW5kLiBXZSBuZWVkIHRvIHBhc3MgdGhlIHdob2xlIFJh
bmdlLgorICAgICAgICAgICAgaW50IGJlZ2luU2VsZWN0aW9uT2Zmc2V0ID0gaXNTdGFydE5vZGUg
PyByYW5nZS5zdGFydC5vZmZzZXQgOiAwOworICAgICAgICAgICAgaW50IGVuZFNlbGVjdGlvbk9m
ZnNldCA9IGlzRW5kTm9kZSA/IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1heCgpOworICAgICAgICAgICAgcmVuZGVyZXItPmNvbGxlY3RTZWxlY3Rpb25SZWN0
cyhuZXdSZWN0cywgYmVnaW5TZWxlY3Rpb25PZmZzZXQsIGVuZFNlbGVjdGlvbk9mZnNldCk7Cisg
ICAgICAgICAgICBmb3IgKGF1dG8mIHNlbGVjdGlvblJlY3QgOiBuZXdSZWN0cykgeworICAgICAg
ICAgICAgICAgIGlmIChzZWxlY3Rpb25SZWN0LmNvbnRhaW5zU3RhcnQoKSAmJiAhaXNTdGFydE5v
ZGUpCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0Q29udGFpbnNTdGFydChm
YWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJlY3QuY29udGFpbnNFbmQoKSAm
JiAhaXNFbmROb2RlKQorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldENvbnRh
aW5zRW5kKGZhbHNlKTsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5sb2dpY2Fs
V2lkdGgoKSB8fCBzZWxlY3Rpb25SZWN0LmxvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVjdHMuYXBwZW5kKHNlbGVjdGlvblJlY3QpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbmV3UmVjdHMuc2hyaW5rKDApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhl
IHJhbmdlIGNvdWxkIHNwYW4gbm9kZXMgd2l0aCBkaWZmZXJlbnQgd3JpdGluZyBtb2Rlcy4KKyAg
ICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNlLCB3ZSB1c2UgdGhlIHdyaXRpbmcgbW9kZSBvZiB0aGUg
Y29tbW9uIGFuY2VzdG9yLgorICAgIGlmIChjb250YWluc0RpZmZlcmVudFdyaXRpbmdNb2Rlcykg
eworICAgICAgICBpZiAoYXV0byBhbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJh
bmdlKSkKKyAgICAgICAgICAgIGhhc0ZsaXBwZWRXcml0aW5nTW9kZSA9IGFuY2VzdG9yLT5yZW5k
ZXJlcigpLT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCk7CisgICAgfQorCisg
ICAgYXV0byBudW1iZXJPZlJlY3RzID0gcmVjdHMuc2l6ZSgpOworCisgICAgLy8gSWYgdGhlIHNl
bGVjdGlvbiBlbmRzIGluIGEgQlIsIHRoZW4gYWRkIHRoZSBsaW5lIGJyZWFrIGJpdCB0byB0aGUg
bGFzdCByZWN0IHdlIGhhdmUuCisgICAgLy8gVGhpcyB3aWxsIGNhdXNlIGl0cyBzZWxlY3Rpb24g
cmVjdCB0byBleHRlbmQgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgICBpZiAobnVtYmVyT2ZS
ZWN0cykgeworICAgICAgICAvLyBPbmx5IHNldCB0aGUgbGluZSBicmVhayBiaXQgaWYgdGhlIGVu
ZCBvZiB0aGUgcmFuZ2UgYWN0dWFsbHkKKyAgICAgICAgLy8gZXh0ZW5kcyBhbGwgdGhlIHdheSB0
byBpbmNsdWRlIHRoZSA8YnI+LiBWaXNpYmxlUG9zaXRpb24gaGVscHMgdG8KKyAgICAgICAgLy8g
ZmlndXJlIHRoaXMgb3V0LgorICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oVmlzaWJsZVBv
c2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpKS5kZWVwRXF1aXZh
bGVudCgpLmZpcnN0Tm9kZSgpKSkKKyAgICAgICAgICAgIHJlY3RzLmxhc3QoKS5zZXRJc0xpbmVC
cmVhayh0cnVlKTsKKyAgICB9CisKKyAgICBpbnQgbGluZVRvcCA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWF4KCk7CisgICAgaW50IGxpbmVCb3R0b20gPSBzdGQ6Om51bWVyaWNfbGltaXRz
PGludD46Om1pbigpOworICAgIGludCBsYXN0TGluZVRvcCA9IGxpbmVUb3A7CisgICAgaW50IGxh
c3RMaW5lQm90dG9tID0gbGluZUJvdHRvbTsKKyAgICBpbnQgbGluZU51bWJlciA9IDA7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mUmVjdHM7ICsraSkgeworICAgICAgICBp
bnQgY3VycmVudFJlY3RUb3AgPSByZWN0c1tpXS5sb2dpY2FsVG9wKCk7CisgICAgICAgIGludCBj
dXJyZW50UmVjdEJvdHRvbSA9IGN1cnJlbnRSZWN0VG9wICsgcmVjdHNbaV0ubG9naWNhbEhlaWdo
dCgpOworCisgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gY291bnQgdGhlIHJ1YnkgdGV4dCBh
cyBhIHNlcGFyYXRlIGxpbmUuCisgICAgICAgIGlmIChpbnRlcnZhbHNTdWZmaWNpZW50bHlPdmVy
bGFwKGN1cnJlbnRSZWN0VG9wLCBjdXJyZW50UmVjdEJvdHRvbSwgbGluZVRvcCwgbGluZUJvdHRv
bSkgfHwgKGkgJiYgcmVjdHNbaV0uaXNSdWJ5VGV4dCgpKSkgeworICAgICAgICAgICAgLy8gR3Jv
dyB0aGUgY3VycmVudCBsaW5lIGJvdW5kcy4KKyAgICAgICAgICAgIGxpbmVUb3AgPSBzdGQ6Om1p
bihsaW5lVG9wLCBjdXJyZW50UmVjdFRvcCk7CisgICAgICAgICAgICBsaW5lQm90dG9tID0gc3Rk
OjptYXgobGluZUJvdHRvbSwgY3VycmVudFJlY3RCb3R0b20pOworICAgICAgICAgICAgLy8gQXZv
aWQgb3ZlcmxhcCB3aXRoIHRoZSBwcmV2aW91cyBsaW5lLgorICAgICAgICAgICAgaWYgKCFoYXNG
bGlwcGVkV3JpdGluZ01vZGUpCisgICAgICAgICAgICAgICAgbGluZVRvcCA9IHN0ZDo6bWF4KGxh
c3RMaW5lQm90dG9tLCBsaW5lVG9wKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBsaW5lQm90dG9tID0gc3RkOjptaW4obGFzdExpbmVUb3AsIGxpbmVCb3R0b20pOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgYWRqdXN0TGluZUhlaWdodE9mU2VsZWN0aW9uUmVjdHMo
cmVjdHMsIGksIGxpbmVOdW1iZXIsIGxpbmVUb3AsIGxpbmVCb3R0b20gLSBsaW5lVG9wKTsKKyAg
ICAgICAgICAgIGlmICghaGFzRmxpcHBlZFdyaXRpbmdNb2RlKSB7CisgICAgICAgICAgICAgICAg
bGFzdExpbmVUb3AgPSBsaW5lVG9wOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVjdEJv
dHRvbSA+PSBsYXN0TGluZVRvcCkgeworICAgICAgICAgICAgICAgICAgICBsYXN0TGluZUJvdHRv
bSA9IGxpbmVCb3R0b207CisgICAgICAgICAgICAgICAgICAgIGxpbmVUb3AgPSBsYXN0TGluZUJv
dHRvbTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaW5l
VG9wID0gY3VycmVudFJlY3RUb3A7CisgICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lQm90dG9t
ID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgbGluZUJvdHRvbSA9IGN1cnJlbnRSZWN0Qm90dG9tOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXN0TGluZUJvdHRvbSA9IGxpbmVCb3R0b207
CisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWN0VG9wIDw9IGxhc3RMaW5lQm90dG9tICYm
IGkgJiYgcmVjdHNbaV0ucGFnZU51bWJlcigpID09IHJlY3RzW2kgLSAxXS5wYWdlTnVtYmVyKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdExpbmVUb3AgPSBsaW5lVG9wOworICAgICAgICAg
ICAgICAgICAgICBsaW5lQm90dG9tID0gbGFzdExpbmVUb3A7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdExpbmVUb3AgPSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGludD46Om1heCgpOworICAgICAgICAgICAgICAgICAgICBsaW5lQm90dG9tID0gY3VycmVu
dFJlY3RCb3R0b207CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVUb3Ag
PSBjdXJyZW50UmVjdFRvcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrbGluZU51bWJl
cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFkanVzdCBsaW5lIGhlaWdodC4KKyAgICBh
ZGp1c3RMaW5lSGVpZ2h0T2ZTZWxlY3Rpb25SZWN0cyhyZWN0cywgbnVtYmVyT2ZSZWN0cywgbGlu
ZU51bWJlciwgbGluZVRvcCwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOworCisgICAgLy8gU29ydCB0
aGUgcmVjdGFuZ2xlcyBhbmQgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBnYXBzLiBUaGUgcmVjdGFu
Z2xlcyBjb3VsZCBiZSB1bnNvcnRlZCB3aGVuCisgICAgLy8gdGhlcmUgaXMgcnVieSB0ZXh0IGFu
ZCB3ZSBjb3VsZCBoYXZlIGdhcHMgb24gdGhlIGxpbmUgd2hlbiBhZGphY2VudCBlbGVtZW50cyBv
biB0aGUgbGluZQorICAgIC8vIGhhdmUgYSBkaWZmZXJlbnQgb3JpZW50YXRpb24uCisgICAgc2l6
ZV90IGZpcnN0UmVjdFdpdGhDdXJyZW50TGluZU51bWJlciA9IDA7CisgICAgZm9yIChzaXplX3Qg
Y3VycmVudFJlY3QgPSAxOyBjdXJyZW50UmVjdCA8IG51bWJlck9mUmVjdHM7ICsrY3VycmVudFJl
Y3QpIHsKKyAgICAgICAgaWYgKHJlY3RzW2N1cnJlbnRSZWN0XS5saW5lTnVtYmVyKCkgIT0gcmVj
dHNbY3VycmVudFJlY3QgLSAxXS5saW5lTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGZpcnN0UmVj
dFdpdGhDdXJyZW50TGluZU51bWJlciA9IGN1cnJlbnRSZWN0OworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJlY3RzW2N1cnJlbnRSZWN0XS5sb2dpY2FsTGVm
dCgpID49IHJlY3RzW2N1cnJlbnRSZWN0IC0gMV0ubG9naWNhbExlZnQoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIFNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdCA9IHJlY3Rz
W2N1cnJlbnRSZWN0XTsKKyAgICAgICAgc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IGN1cnJl
bnRSZWN0OyBpID4gZmlyc3RSZWN0V2l0aEN1cnJlbnRMaW5lTnVtYmVyICYmIHNlbGVjdGlvblJl
Y3QubG9naWNhbExlZnQoKSA8IHJlY3RzW2kgLSAxXS5sb2dpY2FsTGVmdCgpOyAtLWkpCisgICAg
ICAgICAgICByZWN0c1tpXSA9IHJlY3RzW2kgLSAxXTsKKyAgICAgICAgcmVjdHNbaV0gPSBzZWxl
Y3Rpb25SZWN0OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGogPSAxOyBqIDwgbnVtYmVyT2ZS
ZWN0czsgKytqKSB7CisgICAgICAgIGlmIChyZWN0c1tqXS5saW5lTnVtYmVyKCkgIT0gcmVjdHNb
aiAtIDFdLmxpbmVOdW1iZXIoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTZWxl
Y3Rpb25SZWN0JiBwcmV2aW91c1JlY3QgPSByZWN0c1tqIC0gMV07CisgICAgICAgIGJvb2wgcHJl
dmlvdXNSZWN0TWF5Tm90UmVhY2hSaWdodEVkZ2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigp
ID09IFRleHREaXJlY3Rpb246OkxUUiAmJiBwcmV2aW91c1JlY3QuY29udGFpbnNFbmQoKSkgfHwg
KHByZXZpb3VzUmVjdC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYgcHJldmlv
dXNSZWN0LmNvbnRhaW5zU3RhcnQoKSk7CisgICAgICAgIGlmIChwcmV2aW91c1JlY3RNYXlOb3RS
ZWFjaFJpZ2h0RWRnZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnQgYWRqdXN0
ZWRXaWR0aCA9IHJlY3RzW2pdLmxvZ2ljYWxMZWZ0KCkgLSBwcmV2aW91c1JlY3QubG9naWNhbExl
ZnQoKTsKKyAgICAgICAgaWYgKGFkanVzdGVkV2lkdGggPiBwcmV2aW91c1JlY3QubG9naWNhbFdp
ZHRoKCkpCisgICAgICAgICAgICBwcmV2aW91c1JlY3Quc2V0TG9naWNhbFdpZHRoKGFkanVzdGVk
V2lkdGgpOworICAgIH0KKworICAgIGludCBtYXhMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKKwor
ICAgIC8vIEV4dGVuZCByZWN0cyBvdXQgdG8gZWRnZXMgYXMgbmVlZGVkLgorICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWN0czsgKytpKSB7CisgICAgICAgIFNlbGVjdGlvblJl
Y3QmIHNlbGVjdGlvblJlY3QgPSByZWN0c1tpXTsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb25SZWN0
LmlzTGluZUJyZWFrKCkgJiYgc2VsZWN0aW9uUmVjdC5saW5lTnVtYmVyKCkgPj0gbWF4TGluZU51
bWJlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5k
aXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYgc2VsZWN0aW9uUmVjdC5pc0ZpcnN0
T25MaW5lKCkpIHsKKyAgICAgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0TG9naWNhbFdpZHRoKHNl
bGVjdGlvblJlY3QubG9naWNhbFdpZHRoKCkgKyBzZWxlY3Rpb25SZWN0LmxvZ2ljYWxMZWZ0KCkg
LSBzZWxlY3Rpb25SZWN0Lm1pblgoKSk7CisgICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldExv
Z2ljYWxMZWZ0KHNlbGVjdGlvblJlY3QubWluWCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzZWxl
Y3Rpb25SZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiAmJiBzZWxlY3Rpb25S
ZWN0LmlzTGFzdE9uTGluZSgpKQorICAgICAgICAgICAgc2VsZWN0aW9uUmVjdC5zZXRMb2dpY2Fs
V2lkdGgoc2VsZWN0aW9uUmVjdC5tYXhYKCkgLSBzZWxlY3Rpb25SZWN0LmxvZ2ljYWxMZWZ0KCkp
OworICAgIH0KKworICAgIHJldHVybiB7IFdURk1vdmUocmVjdHMpLCBtYXhMaW5lTnVtYmVyIH07
Cit9CisKK1ZlY3RvcjxTZWxlY3Rpb25SZWN0PiBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpCit7CisgICAgYXV0byByZXN1bHQgPSBS
ZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ludGVybmFsKHJhbmdlKTsKKyAgICBh
dXRvIG51bWJlck9mUmVjdHMgPSByZXN1bHQucmVjdHMuc2l6ZSgpOworCisgICAgLy8gVW5pb24g
YWxsIHRoZSByZWN0YW5nbGVzIG9uIGludGVyaW9yIGxpbmVzIChpLmUuIG5vdCBmaXJzdCBvciBs
YXN0KS4KKyAgICAvLyBPbiBmaXJzdCBhbmQgbGFzdCBsaW5lcywganVzdCBhdm9pZCBoYXZpbmcg
b3ZlcmxhcHMgYnkgbWVyZ2luZyBpbnRlcnNlY3RpbmcgcmVjdGFuZ2xlcy4KKyAgICBWZWN0b3I8
U2VsZWN0aW9uUmVjdD4gdW5pb25lZFJlY3RzOworICAgIEludFJlY3QgaW50ZXJpb3JVbmlvblJl
Y3Q7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlJlY3RzOyArK2kpIHsKKyAg
ICAgICAgU2VsZWN0aW9uUmVjdCYgY3VycmVudFJlY3QgPSByZXN1bHQucmVjdHNbaV07CisgICAg
ICAgIGlmIChjdXJyZW50UmVjdC5saW5lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgQVNT
RVJUKGludGVyaW9yVW5pb25SZWN0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBpZiAoIXVuaW9u
ZWRSZWN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBTZWxlY3Rpb25SZWN0JiBwcmV2
aW91c1JlY3QgPSB1bmlvbmVkUmVjdHMubGFzdCgpOworICAgICAgICAgICAgICAgIGlmIChwcmV2
aW91c1JlY3QucmVjdCgpLmludGVyc2VjdHMoY3VycmVudFJlY3QucmVjdCgpKSkgeworICAgICAg
ICAgICAgICAgICAgICBwcmV2aW91c1JlY3QgPSBjb2FsZXNjZVNlbGVjdGlvblJlY3RzKGN1cnJl
bnRSZWN0LCBwcmV2aW91c1JlY3QpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDb3VsZG4ndCBt
ZXJnZSB3aXRoIHByZXZpb3VzIHJlY3QsIHNvIGp1c3QgYXBwZW5kaW5nLgorICAgICAgICAgICAg
dW5pb25lZFJlY3RzLmFwcGVuZChjdXJyZW50UmVjdCk7CisgICAgICAgIH0gZWxzZSBpZiAoY3Vy
cmVudFJlY3QubGluZU51bWJlcigpIDwgcmVzdWx0Lm1heExpbmVOdW1iZXIpIHsKKyAgICAgICAg
ICAgIGlmIChpbnRlcmlvclVuaW9uUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBTdGFydCBjb2xsZWN0aW5nIGludGVyaW9yIHJlY3RzLgorICAgICAgICAgICAgICAgIGludGVy
aW9yVW5pb25SZWN0ID0gY3VycmVudFJlY3QucmVjdCgpOworICAgICAgICAgICAgfSBlbHNlIGlm
IChpbnRlcmlvclVuaW9uUmVjdC5pbnRlcnNlY3RzKGN1cnJlbnRSZWN0LnJlY3QoKSkKKyAgICAg
ICAgICAgICAgICB8fCBpbnRlcmlvclVuaW9uUmVjdC5tYXhYKCkgPT0gY3VycmVudFJlY3QucmVj
dCgpLngoKQorICAgICAgICAgICAgICAgIHx8IGludGVyaW9yVW5pb25SZWN0Lm1heFkoKSA9PSBj
dXJyZW50UmVjdC5yZWN0KCkueSgpCisgICAgICAgICAgICAgICAgfHwgaW50ZXJpb3JVbmlvblJl
Y3QueCgpID09IGN1cnJlbnRSZWN0LnJlY3QoKS5tYXhYKCkKKyAgICAgICAgICAgICAgICB8fCBp
bnRlcmlvclVuaW9uUmVjdC55KCkgPT0gY3VycmVudFJlY3QucmVjdCgpLm1heFkoKSkgeworICAg
ICAgICAgICAgICAgIC8vIE9ubHkgdW5pb24gdGhlIGxpbmVzIHRoYXQgYXJlIGF0dGFjaGVkLgor
ICAgICAgICAgICAgICAgIC8vIEZvciBpQm9va3MsIHRoZSBpbnRlcmlvciBsaW5lcyBtYXkgY3Jv
c3MgbXVsdGlwbGUgaG9yaXpvbnRhbCBwYWdlcy4KKyAgICAgICAgICAgICAgICBpbnRlcmlvclVu
aW9uUmVjdC51bml0ZShjdXJyZW50UmVjdC5yZWN0KCkpOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICB1bmlvbmVkUmVjdHMuYXBwZW5kKFNlbGVjdGlvblJlY3QoaW50ZXJp
b3JVbmlvblJlY3QsIGN1cnJlbnRSZWN0LmlzSG9yaXpvbnRhbCgpLCBjdXJyZW50UmVjdC5wYWdl
TnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBpbnRlcmlvclVuaW9uUmVjdCA9IGN1cnJlbnRS
ZWN0LnJlY3QoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IC8vIFByb2Nlc3NpbmcgbGFzdCBsaW5lLgorICAgICAgICAgICAgaWYgKCFpbnRlcmlvclVuaW9u
UmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICB1bmlvbmVkUmVjdHMuYXBwZW5kKFNl
bGVjdGlvblJlY3QoaW50ZXJpb3JVbmlvblJlY3QsIGN1cnJlbnRSZWN0LmlzSG9yaXpvbnRhbCgp
LCBjdXJyZW50UmVjdC5wYWdlTnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBpbnRlcmlvclVu
aW9uUmVjdCA9IEludFJlY3QoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJU
KCF1bmlvbmVkUmVjdHMuaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIFNlbGVjdGlvblJlY3QmIHBy
ZXZpb3VzUmVjdCA9IHVuaW9uZWRSZWN0cy5sYXN0KCk7CisgICAgICAgICAgICBpZiAocHJldmlv
dXNSZWN0LmxvZ2ljYWxUb3AoKSA9PSBjdXJyZW50UmVjdC5sb2dpY2FsVG9wKCkgJiYgcHJldmlv
dXNSZWN0LnJlY3QoKS5pbnRlcnNlY3RzKGN1cnJlbnRSZWN0LnJlY3QoKSkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBwcmV2aW91c1JlY3QgaXMgYWxzbyBvbiB0aGUgbGFzdCBsaW5lLCBhbmQgaW50
ZXJzZWN0cyB0aGUgY3VycmVudCBvbmUuCisgICAgICAgICAgICAgICAgcHJldmlvdXNSZWN0ID0g
Y29hbGVzY2VTZWxlY3Rpb25SZWN0cyhjdXJyZW50UmVjdCwgcHJldmlvdXNSZWN0KTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvdWxk
bid0IG1lcmdlIHdpdGggcHJldmlvdXMgcmVjdCwgc28ganVzdCBhcHBlbmRpbmcuCisgICAgICAg
ICAgICB1bmlvbmVkUmVjdHMuYXBwZW5kKGN1cnJlbnRSZWN0KTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB1bmlvbmVkUmVjdHM7Cit9CisKKyNlbmRpZgorCiBTdHJpbmcgUmVuZGVy
T2JqZWN0OjpkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1
aWxkZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggY2JmYmIz
NTczYzlhMTJiOGYwODJhMDY5ZGVkMjgyZDZlZTkyZmFhMS4uNzExM2Y1YzMyOTAwZWQ3NjRiMzZl
NDQ3OWI5NjA3ZjA3NzliMTJmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuaApAQCAtNTQ3LDYgKzU0Nyw4IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShJT1NfRkFNSUxZ
KQogICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlv
blJlY3Q+JiwgdW5zaWduZWQgc3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBz
dGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpOwogICAgIHZpcnR1YWwgdm9pZCBh
YnNvbHV0ZVF1YWRzRm9yU2VsZWN0aW9uKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykgY29uc3Qg
eyBhYnNvbHV0ZVF1YWRzKHF1YWRzKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0
b3I8U2VsZWN0aW9uUmVjdD4gY29sbGVjdFNlbGVjdGlvblJlY3RzKGNvbnN0IFNpbXBsZVJhbmdl
Jik7CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFZlY3RvcjxTZWxlY3Rpb25SZWN0PiBjb2xs
ZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKGNvbnN0IFNpbXBsZVJh
bmdlJik7CiAjZW5kaWYKIAogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYsIGNvbnN0IExheW91dFBvaW50JikgY29uc3QgeyB9CkBAIC03NTgsNiArNzYwLDE0
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRMYXllck5lZWRzRnVsbFJlcGFpbnQoKTsKICAgICB2
b2lkIHNldExheWVyTmVlZHNGdWxsUmVwYWludEZvclBvc2l0aW9uZWRNb3ZlbWVudExheW91dCgp
OwogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICBzdHJ1Y3QgU2VsZWN0aW9uUmVjdHMg
eworICAgICAgICBWZWN0b3I8U2VsZWN0aW9uUmVjdD4gcmVjdHM7CisgICAgICAgIGludCBtYXhM
aW5lTnVtYmVyOworICAgIH07CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFNlbGVjdGlvblJl
Y3RzIGNvbGxlY3RTZWxlY3Rpb25SZWN0c0ludGVybmFsKGNvbnN0IFNpbXBsZVJhbmdlJik7Cisj
ZW5kaWYKKwogICAgIE5vZGUqIGdlbmVyYXRpbmdQc2V1ZG9Ib3N0RWxlbWVudCgpIGNvbnN0Owog
CiAgICAgdm9pZCBwcm9wYWdhdGVSZXBhaW50VG9QYXJlbnRXaXRoT3V0bGluZUF1dG9JZk5lZWRl
ZChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBM
YXlvdXRSZWN0JiByZXBhaW50UmVjdCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAKaW5kZXggZDQ3ZjI2MTdlYmQwZWI5N2JmMzEzZWQ2NmMzZDhkZTI0MjRlNDAwMi4uYWIy
MGYzMGQzZDFhZjEwMmI4NDc4OTRlMzlkNjhlMjk0ZDA4YjExZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcApAQCAtMTc3NSw3ICsxNzc1LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRy
PFJhbmdlPj4gSW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUoTm9kZSYgbm9kZSwgY29uc3Qg
U3RyaW4KICAgICBhdXRvIG1hcmtlciA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAg
ICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHsgY3Jl
YXRlTGl2ZVJhbmdlKHJhbmdlKG5vZGUsICptYXJrZXIpKSB9OworICAgIHJldHVybiB7IGNyZWF0
ZUxpdmVSYW5nZShtYWtlU2ltcGxlUmFuZ2Uobm9kZSwgKm1hcmtlcikpIH07CiB9CiAKIEV4Y2Vw
dGlvbk9yPFN0cmluZz4gSW50ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUoTm9kZSYg
bm9kZSwgY29uc3QgU3RyaW5nJiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCkKQEAgLTIxNTQs
MTIgKzIxNTQsMTIgQEAgUmVmUHRyPFJhbmdlPiBJbnRlcm5hbHM6OnJhbmdlRnJvbUxvY2F0aW9u
QW5kTGVuZ3RoKEVsZW1lbnQmIHNjb3BlLCB1bnNpZ25lZCByYW4KIAogdW5zaWduZWQgSW50ZXJu
YWxzOjpsb2NhdGlvbkZyb21SYW5nZShFbGVtZW50JiBzY29wZSwgY29uc3QgUmFuZ2UmIHJhbmdl
KQogewotICAgIHJldHVybiBjbGFtcFRvPHVuc2lnbmVkPihjaGFyYWN0ZXJSYW5nZShtYWtlQm91
bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhzY29wZSksIHJhbmdlKS5sb2NhdGlvbik7Cisg
ICAgcmV0dXJuIGNsYW1wVG88dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50QmVmb3JlTm9kZUNvbnRlbnRzKHNjb3BlKSwgbWFrZVNpbXBsZVJhbmdlKHJhbmdlKSkubG9j
YXRpb24pOwogfQogCiB1bnNpZ25lZCBJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZShFbGVtZW50
JiBzY29wZSwgY29uc3QgUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBjbGFtcFRvPHVuc2ln
bmVkPihjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhz
Y29wZSksIHJhbmdlKS5sZW5ndGgpOworICAgIHJldHVybiBjbGFtcFRvPHVuc2lnbmVkPihjaGFy
YWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhzY29wZSksIG1h
a2VTaW1wbGVSYW5nZShyYW5nZSkpLmxlbmd0aCk7CiB9CiAKIFN0cmluZyBJbnRlcm5hbHM6OnJh
bmdlQXNUZXh0KGNvbnN0IFJhbmdlJiByYW5nZSkKQEAgLTIxNzAsMTkgKzIxNzAsMTkgQEAgU3Ry
aW5nIEludGVybmFsczo6cmFuZ2VBc1RleHQoY29uc3QgUmFuZ2UmIHJhbmdlKQogU3RyaW5nIElu
dGVybmFsczo6cmFuZ2VBc1RleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5n
ZSYgcmFuZ2UpCiB7CiAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICBmb3IgKFNpbXBsaWZpZWRCYWNr
d2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3IocmFuZ2UpOyAhYmFja3dhcmRzSXRl
cmF0b3IuYXRFbmQoKTsgYmFja3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQorICAgIGZvciAoU2lt
cGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihtYWtlU2ltcGxl
UmFuZ2UocmFuZ2UpKTsgIWJhY2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJh
dG9yLmFkdmFuY2UoKSkKICAgICAgICAgcmVzdWx0Lmluc2VydChiYWNrd2FyZHNJdGVyYXRvci50
ZXh0KCkudG9TdHJpbmcoKSwgMCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUmVmPFJhbmdl
PiBJbnRlcm5hbHM6OnN1YnJhbmdlKFJhbmdlJiByYW5nZSwgdW5zaWduZWQgcmFuZ2VMb2NhdGlv
biwgdW5zaWduZWQgcmFuZ2VMZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UocmFuZ2UsIHsgcmFuZ2VMb2NhdGlvbiwgcmFuZ2VMZW5ndGgg
fSkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1h
a2VTaW1wbGVSYW5nZShyYW5nZSksIHsgcmFuZ2VMb2NhdGlvbiwgcmFuZ2VMZW5ndGggfSkpOwog
fQogCi1SZWZQdHI8UmFuZ2U+IEludGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlvbihj
b25zdCBSYW5nZSYgc2VhcmNoUmFuZ2UsIGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgdGFy
Z2V0T2Zmc2V0KQorUmVmUHRyPFJhbmdlPiBJbnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmdOZWFyTG9j
YXRpb24oY29uc3QgUmFuZ2UmIHJhbmdlLCBjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIHRh
cmdldE9mZnNldCkKIHsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGZpbmRDbG9zZXN0UGxh
aW5UZXh0KHNlYXJjaFJhbmdlLCB0ZXh0LCB7IH0sIHRhcmdldE9mZnNldCkpOworICAgIHJldHVy
biBjcmVhdGVMaXZlUmFuZ2UoZmluZENsb3Nlc3RQbGFpblRleHQobWFrZVNpbXBsZVJhbmdlKHJh
bmdlKSwgdGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpKTsKIH0KIAogI2lmICFQTEFURk9STShNQUMp
CkBAIC01NzU2LDcgKzU3NTYsNyBAQCBJbnRlcm5hbHM6OlRleHRJbmRpY2F0b3JJbmZvOjp+VGV4
dEluZGljYXRvckluZm8oKSA9IGRlZmF1bHQ7CiAKIEludGVybmFsczo6VGV4dEluZGljYXRvcklu
Zm8gSW50ZXJuYWxzOjp0ZXh0SW5kaWNhdG9yRm9yUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBU
ZXh0SW5kaWNhdG9yT3B0aW9ucyBvcHRpb25zKQogewotICAgIGF1dG8gaW5kaWNhdG9yID0gVGV4
dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKHJhbmdlLCBvcHRpb25zLmNvcmVPcHRpb25zKCks
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lKTsKKyAgICBhdXRvIGlu
ZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShtYWtlU2ltcGxlUmFuZ2Uo
cmFuZ2UpLCBvcHRpb25zLmNvcmVPcHRpb25zKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpOb25lKTsKICAgICByZXR1cm4gaW5kaWNhdG9yLT5kYXRhKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29j
b2EvV0tXZWJQcm9jZXNzUGx1Z0luUmFuZ2VIYW5kbGUubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFu
ZGxlLm1tCmluZGV4IDA3Njc2YTBlMzY2N2MxYjc1ODI4NDM0MmI2ZmJkZjM4YTllMTYzODguLjFl
Zjc4Y2IzNmM2MGE4OGJjNTFiYTUwNjRiYjMzYjliNGQ4NjVmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNz
UGx1Z0luUmFuZ2VIYW5kbGUubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZS5tbQpAQCAt
NjcsNyArNjcsNyBAQCAtIChOU1N0cmluZyAqKXRleHQKIC0gKE5TQXJyYXkgKilkZXRlY3REYXRh
V2l0aFR5cGVzOihXS0RhdGFEZXRlY3RvclR5cGVzKXR5cGVzIGNvbnRleHQ6KE5TRGljdGlvbmFy
eSAqKWNvbnRleHQKIHsKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0gICAgcmV0dXJuIFdl
YkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKF9yYW5nZUhhbmRsZS0+
Y29yZVJhbmdlKCksIGZyb21XS0RhdGFEZXRlY3RvclR5cGVzKHR5cGVzKSwgY29udGV4dCk7Cisg
ICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKG1h
a2VTaW1wbGVSYW5nZShfcmFuZ2VIYW5kbGUtPmNvcmVSYW5nZSgpKSwgZnJvbVdLRGF0YURldGVj
dG9yVHlwZXModHlwZXMpLCBjb250ZXh0KTsKICNlbHNlCiAgICAgcmV0dXJuIG5pbDsKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCmluZGV4IDM1YjY2NDcy
ZTc3MDU3Y2NlZmU5M2RmOGZkYTk1M2QwZDQxOTZhYzQuLjEyMDc4ZTIzOTc3YjY0MTIxZGMzZjM3
YmExZjEwMzQ1ZjBlMTgxYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3Zlcmxh
eS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4
dC5oPgogI2luY2x1ZGUgPFdlYkNvcmUvUGFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtTW91c2VFdmVudC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KIAogbmFt
ZXNwYWNlIEFQSSB7CiAKQEAgLTEzOCw3ICsxMzksNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAo
IWFjdGlvbkNvbnRleHQgfHwgIWFwaVJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKIAotICAgICAgICByZXR1cm4geyB7IGFjdGlvbkNvbnRleHQsIFdlYktpdDo6dG9JbXBs
KGFwaVJhbmdlKS0+Y29yZVJhbmdlKCkgfSB9OworICAgICAgICByZXR1cm4geyB7IGFjdGlvbkNv
bnRleHQsIG1ha2VTaW1wbGVSYW5nZShXZWJLaXQ6OnRvSW1wbChhcGlSYW5nZSktPmNvcmVSYW5n
ZSgpKSB9IH07CiAgICAgfQogCiAgICAgdm9pZCBkYXRhRGV0ZWN0b3JzRGlkUHJlc2VudFVJKFdl
YktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5KSBvdmVycmlkZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5n
ZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NUmFuZ2UubW0KaW5kZXggMWI2YmI3N2VjYTdlNmVjMGYxZjYxZTg3MjEyYzRjNDVmNjk2YjY2
NC4uMzAyMTFjOTc4N2Q2MzhjMWE2ZjVkOGRlMDU1NDgwYWQ0MzZmNTA5YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5n
ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21h
Yy9XS0RPTVJhbmdlLm1tCkBAIC0xMjksNyArMTI5LDcgQEAgLSAoQk9PTClpc0NvbGxhcHNlZAog
LSAoTlNBcnJheSAqKXRleHRSZWN0cwogewogICAgIF9pbXBsLT5vd25lckRvY3VtZW50KCkudXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cygqX2ltcGwpKS5h
dXRvcmVsZWFzZSgpOworICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UmVjdHMobWFrZVNpbXBsZVJhbmdlKCpfaW1wbCkpKS5hdXRvcmVs
ZWFzZSgpOwogfQogCiAtIChXS0RPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1RvV29yZEJvdW5k
YXJ5QnlDaGFyYWN0ZXJzOihOU1VJbnRlZ2VyKWNoYXJhY3RlcnMgaW5EaXJlY3Rpb246KFdLRE9N
UmFuZ2VEaXJlY3Rpb24pZGlyZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVRleHRJdGVyYXRvci5tbSBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NVGV4dEl0ZXJh
dG9yLm1tCmluZGV4IDVmNDZiMWY2MTg4Zjg1ZDEyZTBjOGM4M2QzNmRkMGRkMjRiYzI5YzMuLmIx
Yjg2MzA2ODlmMDlkYzgxYmJmMTcyYzMyMGU2MmU5M2ViN2NkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NVGV4dEl0ZXJh
dG9yLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLRE9NVGV4dEl0ZXJhdG9yLm1tCkBAIC00OCw3ICs0OCw3IEBAIC0gKGlkKWluaXRXaXRo
UmFuZ2U6KFdLRE9NUmFuZ2UgKilyYW5nZQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVy
biBzZWxmOwogCi0gICAgX3RleHRJdGVyYXRvciA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6VGV4dEl0
ZXJhdG9yPigqV2ViS2l0Ojp0b1dlYkNvcmVSYW5nZShyYW5nZSkpOworICAgIF90ZXh0SXRlcmF0
b3IgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlRleHRJdGVyYXRvcj4obWFrZVNpbXBsZVJhbmdlKCpX
ZWJLaXQ6OnRvV2ViQ29yZVJhbmdlKHJhbmdlKSkpOwogICAgIHJldHVybiBzZWxmOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0lu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCBhOTFm
N2Y3MDc4MTc4ZGZiZTQzYjU4NDZiYzAwYzQ0ZWJkOTZkNzQyLi5kMDdiZDk4YTE3MTZiZDgxY2Iw
YzhiZTU4YjVmNDE3NmExYjc5Y2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5k
bGVSYW5nZUhhbmRsZS5jcHAKQEAgLTEyNCw3ICsxMjQsNyBAQCBSZWZQdHI8V2ViSW1hZ2U+IElu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9w
dGlvbgogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIG9sZFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAg
ICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9yYW5n
ZSkpOworICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdl
KG1fcmFuZ2UpKTsKIAogICAgIGZsb2F0IHNjYWxlRmFjdG9yID0gKG9wdGlvbnMgJiBTbmFwc2hv
dE9wdGlvbnNFeGNsdWRlRGV2aWNlU2NhbGVGYWN0b3IpID8gMSA6IGZyYW1lLT5wYWdlKCktPmRl
dmljZVNjYWxlRmFjdG9yKCk7CiAgICAgSW50UmVjdCBwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KG1fcmFuZ2UtPmFic29sdXRlQm91bmRpbmdSZWN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDY2
YWE1YjgwMDQzNWI4YzU4Y2JlMmM4YzYyMWVmMDg2MjYzODlmYWIuLjA3ODY2ZDBjMmM0NmE4NDE4
ZDcwZWJmOGMxYTI2NzBkYTFhNjNiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTEyOSw3ICsxMjksNyBA
QCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBG
bG9hdFBvaW50JiBmbG9hdFBvaW50KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIFtyYW5n
ZSwgb3B0aW9uc10gPSBXVEZNb3ZlKCpyYW5nZVJlc3VsdCk7Ci0gICAgcGVyZm9ybURpY3Rpb25h
cnlMb29rdXBGb3JSYW5nZSgqZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIG9wdGlvbnMs
IFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOworICAgIHBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCByYW5nZSwgb3B0aW9ucywgVGV4dElu
ZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkJvdW5jZSk7CiB9CiAKIHZvaWQgV2ViUGFn
ZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uIHByZXNlbnRhdGlvblRyYW5zaXRpb24pCkBAIC0xMzksNyArMTM5LDcgQEAgdm9p
ZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYgZnJh
bWUsIGNvbnN0IFZpc2libGVTZWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBbcmFuZ2Us
IG9wdGlvbnNdID0gV1RGTW92ZSgqcmVzdWx0KTsKLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1
cEZvclJhbmdlKGZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBvcHRpb25zLCBwcmVzZW50
YXRpb25UcmFuc2l0aW9uKTsKKyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZy
YW1lLCByYW5nZSwgb3B0aW9ucywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CiB9CiAKIHZvaWQg
V2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3Bw
CmluZGV4IDUzMTg1NTM4YjllMDUxOTAzYTlkNmVkZTc1YjRlMGVjODM1MjY5MzEuLjJhNTdmZDIw
OWU2MzU3MGI3Mzg5MjNmMGI1OWZiM2NjZGIyZjRkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTIwNCw3ICsyMDQs
NyBAQCB2b2lkIEZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwoYm9v
bCBmb3VuZCwgY29uc3QgU3RyaW5nJiBzdHJpbgogICAgICAgICAgICAgVmVjdG9yPEludFJlY3Q+
IG1hdGNoUmVjdHM7CiAgICAgICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fd2ViUGFnZS0+Y29y
ZVBhZ2UoKS0+c2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgbWF0
Y2hSZWN0cyA9IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoKnJhbmdlKTsKLSAgICAg
ICAgICAgICAgICBtX2ZpbmRNYXRjaGVzLmFwcGVuZChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSk7
CisgICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5hcHBlbmQoKnJhbmdlKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5
OjpEaWRGaW5kU3RyaW5nKHN0cmluZywgbWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwgbV9mb3VuZFN0
cmluZ01hdGNoSW5kZXgsIGRpZFdyYXAgPT0gRGlkV3JhcDo6WWVzKSk7CiAgICAgICAgIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9T
Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0K
aW5kZXggMWU2Y2JkZDhjNDUxMjQ4MGFhMGFlMTA5NjQ2Mzg2NTFlYWVhODVlNi4uMDYyMDg1NjVh
NWEzYTI1ZDJmMTFjYWM4NjFkNDg2MGU3ODIzN2FkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTI2OCw3ICsyNjgsNyBA
QCB2b2lkIFdlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0
b3JTdGF0ZSYgcmVzdWx0KSBjb25zdAogCiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhhc0NvbXBv
c2l0aW9uKCkpIHsKICAgICAgICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVk
aXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKSkgewotICAgICAgICAgICAgY3JlYXRlTGl2ZVJhbmdl
KCpjb21wb3NpdGlvblJhbmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRh
Lm1hcmtlZFRleHRSZWN0cyk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0
UmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cygqY29tcG9zaXRpb25S
YW5nZSk7CiAgICAgICAgICAgICBjb252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0
cyh2aWV3LCBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0UmVjdHMpOwogCiAgICAgICAgICAgICBw
b3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dCgqY29tcG9zaXRp
b25SYW5nZSk7CkBAIC0yOTgsNyArMjk4LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVk
aXRvclN0YXRlKEZyYW1lJiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAg
ICAgYXV0byBzZWxlY3RlZFJhbmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAg
ICAgICAgIFN0cmluZyBzZWxlY3RlZFRleHQ7CiAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7
Ci0gICAgICAgICAgICBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb2xsZWN0U2Vs
ZWN0aW9uUmVjdHMocG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOworICAgICAgICAgICAg
cG9zdExheW91dERhdGEuc2VsZWN0aW9uUmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxl
Y3Rpb25SZWN0cygqc2VsZWN0ZWRSYW5nZSk7CiAgICAgICAgICAgICBjb252ZXJ0Q29udGVudFRv
Um9vdFZpZXdTZWxlY3Rpb25SZWN0cyh2aWV3LCBwb3N0TGF5b3V0RGF0YS5zZWxlY3Rpb25SZWN0
cyk7CiAgICAgICAgICAgICBzZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JEaXNwbGF5KCpzZWxl
Y3RlZFJhbmdlKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnNlbGVjdGVkVGV4dExlbmd0
aCA9IHNlbGVjdGVkVGV4dC5sZW5ndGgoKTsKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgV2Vi
UGFnZTo6Y29tcHV0ZUFuZFNlbmRFZGl0RHJhZ1NuYXBzaG90KCkKICAgICAgICAgVGV4dEluZGlj
YXRvck9wdGlvbjo6SW5jbHVkZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodAogICAgIH07
CiAgICAgaWYgKGF1dG8gcmFuZ2UgPSBzdGQ6OmV4Y2hhbmdlKG1fcmFuZ2VGb3JEcm9wU25hcHNo
b3QsIFdURjo6bnVsbG9wdCkpIHsKLSAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRl
eHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgZGVm
YXVsdFRleHRJbmRpY2F0b3JPcHRpb25zRm9yRWRpdERyYWcsIFRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpOb25lLCB7IH0pKQorICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNh
dG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCpyYW5nZSwgZGVmYXVsdFRleHRJ
bmRpY2F0b3JPcHRpb25zRm9yRWRpdERyYWcsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFu
c2l0aW9uOjpOb25lLCB7IH0pKQogICAgICAgICAgICAgdGV4dEluZGljYXRvckRhdGEgPSB0ZXh0
SW5kaWNhdG9yLT5kYXRhKCk7CiAgICAgfQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94
eTo6RGlkUmVjZWl2ZUVkaXREcmFnU25hcHNob3QoV1RGTW92ZSh0ZXh0SW5kaWNhdG9yRGF0YSkp
KTsKQEAgLTE5ODIsOCArMTk4Miw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNGb3JHcmFudWxh
cml0eVdpdGhTZWxlY3Rpb25PZmZzZXQoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gc2Vs
ZWN0aW9uUmVjdHM7Ci0gICAgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbGxlY3RTZWxlY3Rp
b25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoc2VsZWN0aW9uUmVjdHMpOworICAgIGF1
dG8gc2VsZWN0aW9uUmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dp
dGhvdXRVbmlvbkludGVyaW9yTGluZXMoKnJhbmdlKTsKICAgICBjb252ZXJ0Q29udGVudFRvUm9v
dFZpZXdTZWxlY3Rpb25SZWN0cygqZnJhbWUudmlldygpLCBzZWxlY3Rpb25SZWN0cyk7CiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25SZWN0c0NhbGxiYWNrKHNlbGVj
dGlvblJlY3RzLCBjYWxsYmFja0lEKSk7CiB9CkBAIC0yMDI5LDggKzIwMjgsNyBAQCB2b2lkIFdl
YlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwg
Y29uc3QgU3RyaW5nJiB0ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgVmVjdG9yPFdlYkNvcmU6
OlNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOwotICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoc2VsZWN0
aW9uUmVjdHMpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxl
Y3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoKnJhbmdlKTsKICAgICBj
b252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cygqZnJhbWUudmlldygpLCBzZWxl
Y3Rpb25SZWN0cyk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25S
ZWN0c0NhbGxiYWNrKHNlbGVjdGlvblJlY3RzLCBjYWxsYmFja0lEKSk7CiB9CkBAIC0yMzMyLDcg
KzIzMzAsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoY29uc3Qg
U3RyaW5nJiB0ZXh0Rm9yQXV0b2NvcnJlY3Rpb24sIENvbQogCiAgICAgVmVjdG9yPFNlbGVjdGlv
blJlY3Q+IHNlbGVjdGlvblJlY3RzOwogICAgIGlmICh0ZXh0Rm9yUmFuZ2UgPT0gdGV4dEZvckF1
dG9jb3JyZWN0aW9uKQotICAgICAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2Vs
ZWN0aW9uUmVjdHMoc2VsZWN0aW9uUmVjdHMpOworICAgICAgICBzZWxlY3Rpb25SZWN0cyA9IFJl
bmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKCpyYW5nZSk7CiAKICAgICBhdXRvIHJv
b3RWaWV3U2VsZWN0aW9uUmVjdHMgPSBzZWxlY3Rpb25SZWN0cy5tYXAoWyZdKGNvbnN0IGF1dG8m
IHNlbGVjdGlvblJlY3QpIC0+IEZsb2F0UmVjdCB7IHJldHVybiBmcmFtZS52aWV3KCktPmNvbnRl
bnRzVG9Sb290VmlldyhzZWxlY3Rpb25SZWN0LnJlY3QoKSk7IH0pOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCmluZGV4
IDQ3ZjMwY2FkMTRiZWVhMGU3NjM5YmY0Yjk3YTFmNTY4MGY0MmYwZGIuLjdjYWZjYmFiNzc0MjVl
ZDBiNWEwNTMwY2QxMDU3OTA0YTEwOWNlODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC0yMDYsMTAgKzIwNiw3
IEBAIC0gKHZvaWQpZXh0ZW5kU2VsZWN0aW9uOihCT09MKXN0YXJ0CiAKIC0gKE5TQXJyYXkgKilz
ZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZTooY29uc3QgU2ltcGxlUmFuZ2UmKXJhbmdlCiB7Ci0g
ICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHJlY3RzOwotICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5n
ZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhyZWN0cyk7Ci0KLSAgICByZXR1cm4gY3JlYXRlTlNB
cnJheShyZWN0cywgW10gKGF1dG8mIGNvcmVSZWN0KSB7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJy
YXkoUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHMocmFuZ2UpLCBbXSAoYXV0byYg
Y29yZVJlY3QpIHsKICAgICAgICAgYXV0byB3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2Vs
ZWN0aW9uUmVjdF07CiAgICAgICAgIHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsKICAg
ICAgICAgd2ViUmVjdC53cml0aW5nRGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0g
VGV4dERpcmVjdGlvbjo6TFRSID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dy
aXRpbmdEaXJlY3Rpb25SaWdodFRvTGVmdDsKQEAgLTIyNiw3ICsyMjMsNyBAQCAtIChOU0FycmF5
ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KGNvbnN0IFNpbXBsZVJhbmdlJilyYW5nZQog
CiAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JSYW5nZTooRE9NUmFuZ2UgKilkb21SYW5n
ZQogewotICAgIGF1dG8gcmFuZ2UgPSBjb3JlKGRvbVJhbmdlKTsKKyAgICBhdXRvIHJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKGNvcmUoZG9tUmFuZ2UpKTsKICAgICByZXR1cm4gcmFuZ2UgPyBbc2Vs
ZiBzZWxlY3Rpb25SZWN0c0ZvckNvcmVSYW5nZToqcmFuZ2VdIDogbmlsOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9z
aXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNp
YmxlUG9zaXRpb24ubW0KaW5kZXggZGU1ZGE0NGFmZDkyOGEzZjA5OTUwYjUyZTY0YzY1NDA1ZTVi
YjkyNC4uZTJjMTljZmQ1MjJmNzRlNmI3N2EyYmEyMzQyODMyMGYzMzMxMzhmOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZp
c2libGVQb3NpdGlvbi5tbQpAQCAtNDE2LDcgKzQxNiw3IEBAIC0gKERPTVJhbmdlICopZW5jbG9z
aW5nUmFuZ2VXaXRoRGljdGF0aW9uUGhyYXNlQWx0ZXJuYXRpdmVzOihOU0FycmF5ICoqKWFsdGVy
bmF0CiAgICAgZm9yIChhdXRvIG1hcmtlciA6IGRvY3VtZW50Lm1hcmtlcnMoKS5tYXJrZXJzRm9y
KCpub2RlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykp
IHsKICAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBvZmZzZXQgJiYgbWFya2Vy
LT5lbmRPZmZzZXQoKSA+PSBvZmZzZXQpIHsKICAgICAgICAgICAgICphbHRlcm5hdGl2ZXMgPSBj
cmVhdGVOU0FycmF5KFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSkpLmF1
dG9yZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4ga2l0KHJhbmdlKCpub2RlLCAqbWFya2Vy
KSk7CisgICAgICAgICAgICByZXR1cm4ga2l0KG1ha2VTaW1wbGVSYW5nZSgqbm9kZSwgKm1hcmtl
cikpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBuaWw7CkBAIC00MzMsNyArNDMzLDcg
QEAgLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdSYW5nZVdpdGhDb3JyZWN0aW9uSW5kaWNhdG9yCiAg
ICAgYXV0byYgZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwogICAgIGZvciAoYXV0byBtYXJr
ZXIgOiBkb2N1bWVudC5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKSkgewogICAgICAgICBpZiAobWFya2VyLT5zdGFydE9mZnNldCgpIDw9IG9mZnNl
dCAmJiBtYXJrZXItPmVuZE9mZnNldCgpID49IG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBr
aXQocmFuZ2UoKm5vZGUsICptYXJrZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBraXQobWFrZVNp
bXBsZVJhbmdlKCpub2RlLCAqbWFya2VyKSk7CiAgICAgfQogICAgIHJldHVybiBuaWw7CiB9CkBA
IC00NzUsMTEgKzQ3NSwxMSBAQCAtIChET01SYW5nZSAqKWVuY2xvc2luZ1dvcmRSYW5nZQogCiAr
IChET01SYW5nZSAqKXJhbmdlRm9yRmlyc3RQb3NpdGlvbjooV2ViVmlzaWJsZVBvc2l0aW9uICop
Zmlyc3Qgc2Vjb25kOihXZWJWaXNpYmxlUG9zaXRpb24gKilzZWNvbmQKIHsKLSAgICBhdXRvIGZp
cnN0VlAgPSBbZmlyc3QgX3Zpc2libGVQb3NpdGlvbl07Ci0gICAgYXV0byBzZWNvbmRWUCA9IFtz
ZWNvbmQgX3Zpc2libGVQb3NpdGlvbl07Ci0gICAgaWYgKGZpcnN0VlAgPCBzZWNvbmRWUCkKLSAg
ICAgICAgc3RkOjpzd2FwKGZpcnN0VlAsIHNlY29uZFZQKTsKLSAgICByZXR1cm4ga2l0KG1ha2VT
aW1wbGVSYW5nZShmaXJzdFZQLCBzZWNvbmRWUCkpOworICAgIGF1dG8gZmlyc3RQb3NpdGlvbiA9
IFtmaXJzdCBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBhdXRvIHNlY29uZFBvc2l0aW9uID0gW3Nl
Y29uZCBfdmlzaWJsZVBvc2l0aW9uXTsKKyAgICBpZiAoZmlyc3RQb3NpdGlvbiA8IHNlY29uZFBv
c2l0aW9uKQorICAgICAgICBzdGQ6OnN3YXAoZmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRpb24p
OworICAgIHJldHVybiBraXQobWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb24sIHNlY29uZFBv
c2l0aW9uKSk7CiB9CiAKIEBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET00ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCmluZGV4IDdh
ZTQ1NTg2NWI0NjUwZDk2ZmU2NDMyYTM4ZGU0MTcxYTBkNzk4NmEuLjE0M2YwOGQzNTkyYTMwNTY1
YzE1NzBjN2U2NzFjZmZjY2YyNDI0YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL0RPTS9ET00ubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpA
QCAtNTgxLDMxICs1ODEsMjcgQEAgLSAoTlNJbWFnZSAqKXJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxh
Y2tUZXh0OihCT09MKWZvcmNlQmxhY2tUZXh0CiAtIChDR0ltYWdlUmVmKXJlbmRlcmVkSW1hZ2VG
b3JjaW5nQmxhY2tUZXh0OihCT09MKWZvcmNlQmxhY2tUZXh0CiAjZW5kaWYKIHsKLSAgICBhdXRv
JiByYW5nZSA9ICpjb3JlKHNlbGYpOwotICAgIGF1dG8qIGZyYW1lID0gcmFuZ2Uub3duZXJEb2N1
bWVudCgpLmZyYW1lKCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShz
ZWxmKSk7CisgICAgYXV0byBmcmFtZSA9IG1ha2VSZWZQdHIocmFuZ2Uuc3RhcnQuY29udGFpbmVy
LT5kb2N1bWVudCgpLmZyYW1lKCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBu
aWw7CiAKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RlZEZyYW1lKCpmcmFtZSk7CisgICAgYXV0byBy
ZW5kZXJlZEltYWdlID0gY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoKmZyYW1lLCByYW5nZSwgZm9y
Y2VCbGFja1RleHQpOwogCi0gICAgLy8gaU9TIHVzZXMgQ0dJbWFnZVJlZiBmb3IgZHJhZyBpbWFn
ZXMsIHdoaWNoIGRvZXNuJ3Qgc3VwcG9ydCBzZXBhcmF0ZSBsb2dpY2FsL3BoeXNpY2FsIHNpemVz
LgogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBSZXRhaW5QdHI8TlNJbWFnZT4gcmVuZGVyZWRJbWFn
ZSA9IGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKCpmcmFtZSwgcmFuZ2UsIGZvcmNlQmxhY2tUZXh0
KTsKLQorICAgIC8vIGlPUyB1c2VzIENHSW1hZ2VSZWYgZm9yIGRyYWcgaW1hZ2VzLCB3aGljaCBk
b2Vzbid0IHN1cHBvcnQgc2VwYXJhdGUgbG9naWNhbC9waHlzaWNhbCBzaXplcy4KICAgICBJbnRT
aXplIHNpemUoW3JlbmRlcmVkSW1hZ2Ugc2l6ZV0pOwogICAgIHNpemUuc2NhbGUoMSAvIGZyYW1l
LT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgIFtyZW5kZXJlZEltYWdlIHNldFNp
emU6c2l6ZV07CisjZW5kaWYKIAogICAgIHJldHVybiByZW5kZXJlZEltYWdlLmF1dG9yZWxlYXNl
KCk7Ci0jZWxzZQotICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZSgqZnJhbWUsIHJh
bmdlLCBmb3JjZUJsYWNrVGV4dCkuYXV0b3JlbGVhc2UoKTsKLSNlbmRpZgogfQogCiAtIChOU0Fy
cmF5ICopdGV4dFJlY3RzCiB7Ci0gICAgYXV0byYgcmFuZ2UgPSAqY29yZShzZWxmKTsKLSAgICBy
YW5nZS5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7CisgICAg
cmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwogICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFJlbmRlck9iamVjdDo6
YWJzb2x1dGVUZXh0UmVjdHMocmFuZ2UpKS5hdXRvcmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NRG9jdW1lbnQubW0gYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NRG9jdW1lbnQubW0KaW5kZXggZGQ4NWY5Nzk3ODNkNzY2ZTFi
ZWZhN2ZkNTU2YmExYWM4ZDU4ZDNjNC4uMDhlYzJmYTA0ZWViZjMzM2E5NDA3YWIwZjc0NDE5ZDgy
YjdjMzExYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTURvY3Vt
ZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01Eb2N1bWVudC5tbQpA
QCAtNzYsNiArNzYsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24u
aD4KICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlP
cmlnaW4uaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNv
cmUvU3R5bGVQcm9wZXJ0aWVzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0eWxlU2hlZXRMaXN0Lmg+
CiAjaW1wb3J0IDxXZWJDb3JlL1RleHQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0RPTS9ET01SYW5nZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01S
YW5nZS5tbQppbmRleCBkMGQzMGNlOWE4MWI3MThiOWFjMjI4MDM0ZWIwNTcxNTk5ZWRkNzEwLi41
ZWUwYmNkZmQ5OTc0MzcyYTNlYmM0YWQyYTg3YWY4M2JkZjUzZjUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCkBAIC0zMSw4ICszMSw4IEBACiAjaW1wb3J0IDxXZWJD
b3JlL0RvY3VtZW50RnJhZ21lbnQuaD4KICNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCiAj
aW1wb3J0IDxXZWJDb3JlL0pTRXhlY1N0YXRlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL05vZGUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvUmFuZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2Uu
aD4KICNpbXBvcnQgPFdlYkNvcmUvVGhyZWFkQ2hlY2suaD4KICNpbXBvcnQgPFdlYkNvcmUvV2Vi
Q29yZU9iakNFeHRyYXMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViU2NyaXB0T2JqZWN0UHJpdmF0
ZS5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50
ZXJuYWwuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgK
aW5kZXggZTY4MTlhNWY4ZDU4OGQyZTliNjg3ZjBkOTc5ZjY3Y2IyM2E4OWExOS4uZjgwNGU3ZWM5
MmMyODUwYmQxYzMwNzNiMjZjNmJmM2ZjMmFlMzNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NUmFuZ2VJbnRlcm5hbC5oCkBAIC0yMyw4ICsyMywxMyBAQAogICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+Ci0jaW1wb3J0
IDxXZWJLaXRMZWdhY3kvRE9NUmFuZ2UuaD4KKyNpbXBvcnQgIkRPTVJhbmdlLmgiCisjaW1wb3J0
IDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSYW5nZTsKK3N0
cnVjdCBTaW1wbGVSYW5nZTsKK30KIAogV2ViQ29yZTo6UmFuZ2UqIGNvcmUoRE9NUmFuZ2UgKik7
CiBET01SYW5nZSAqa2l0KFdlYkNvcmU6OlJhbmdlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQppbmRleCAyOWZjMmM3NzA5YWI0ZGE5
ODQxNzlmM2NiYzhmNzRlMGI4MjkxYTc3Li5hZTVjNDliZjE0NzU4ZjMxNDA5NDIwZDlmNmQ1NWEy
ZTYzNjI2MWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlL
aXRFeHRlbnNpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtp
dEV4dGVuc2lvbnMubW0KQEAgLTYxLDYgKzYxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVy
VGV4dC5oPgogI2ltcG9ydCA8V2ViQ29yZS9Sb3VuZGVkUmVjdC5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9TaGFyZWRCdWZmZXIuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBv
cnQgPFdlYkNvcmUvVmlzaWJsZVBvc2l0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2libGVV
bml0cy5oPgogI2ltcG9ydCA8V2ViQ29yZS9XQUtBcHBLaXRTdHVicy5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVV0aWxpdHkubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9ET00vRE9NVXRpbGl0eS5tbQppbmRleCAxMDI4ZjA5NmJhMTQ1ZWI1NDc3Yjcx
MmEwZWI2NDYyNDdiMTU4YmJmLi40OTZjNzJlOWZmNmQ2MWM0N2M2YTkwOGRhOTBkYmYzZTBlNjY3
YzU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVXRpbGl0eS5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVXRpbGl0eS5tbQpAQCAtNzAs
NiArNzAsNyBAQAogI2ltcG9ydCA8V2ViQ29yZS9KU1dpbmRvd1Byb3h5Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0pTWFBhdGhFeHByZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTWFBhdGhSZXN1
bHQuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUv
V2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oPgogCiBzdGF0aWMgV2ViU2NyaXB0T2JqZWN0ICpjcmVh
dGVET01XcmFwcGVyKEpTQzo6SlNPYmplY3QmIGpzV3JhcHBlcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KaW5kZXggZDNhZTdmNmVmODNkMjA4
ZjI2OWI2ZTE2MmRiZTE0NTQ2MmRmYjk2Zi4uY2FkMzU5MWJlNjMzMjNlZTY3YWE2YWY4ZDEzZTQ1
ZmQ3MTYwZGFhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRP
TU9wZXJhdGlvbnMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9w
ZXJhdGlvbnMubW0KQEAgLTU2LDYgKzU2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxl
bWVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1NoYWRvd1Jvb3QuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNp
bXBvcnQgPFdlYkNvcmUvV2hlZWxFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4K
ICNpbXBvcnQgPFdlYktpdExlZ2FjeS9ET01FeHRlbnNpb25zLmg+CkBAIC0xODUsMTMgKzE4Niwx
MyBAQCBAaW1wbGVtZW50YXRpb24gRE9NUmFuZ2UgKFdlYkRPTVJhbmdlT3BlcmF0aW9ucykKIAog
LSAoV2ViQXJjaGl2ZSAqKXdlYkFyY2hpdmUKIHsKLSAgICByZXR1cm4gW1tbV2ViQXJjaGl2ZSBh
bGxvY10gX2luaXRXaXRoQ29yZUxlZ2FjeVdlYkFyY2hpdmU6TGVnYWN5V2ViQXJjaGl2ZTo6Y3Jl
YXRlKCpjb3JlKHNlbGYpKV0gYXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tXZWJBcmNoaXZl
IGFsbG9jXSBfaW5pdFdpdGhDb3JlTGVnYWN5V2ViQXJjaGl2ZTpMZWdhY3lXZWJBcmNoaXZlOjpj
cmVhdGUobWFrZVNpbXBsZVJhbmdlKCpjb3JlKHNlbGYpKSldIGF1dG9yZWxlYXNlXTsKIH0KIAog
LSAoTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcKIHsKICAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNl
bGYpOwotICAgIHJldHVybiBTdHJpbmcgeyBkb2N1bWVudFR5cGVTdHJpbmcocmFuZ2Uuc3RhcnRD
b250YWluZXIoKS5kb2N1bWVudCgpKSArIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJh
bmNlKHJhbmdlLCBudWxscHRyLCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpIH07CisgICAg
cmV0dXJuIFN0cmluZyB7IGRvY3VtZW50VHlwZVN0cmluZyhyYW5nZS5vd25lckRvY3VtZW50KCkp
ICsgc2VyaWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UobWFrZVNpbXBsZVJhbmdlKHJh
bmdlKSwgbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKSB9OwogfQogCiBAZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBmNzk0
MTk4MGY2NGEwYTQwYTUwNjU2Njc4NzFmNWIyODY2NzZmY2Q5Li5lZjczNTAwNGVhNmQwNWU5MTI4
NmVjZmE2ZjBmOGQ0MDEwNWU2NmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViRnJhbWUubW0KQEAgLTU4Miw3ICs1ODIsNyBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdG
b3JSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogewogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJl
dHVybiBAIiI7Ci0gICAgcmV0dXJuIHBsYWluVGV4dCgqY29yZShyYW5nZSksIFdlYkNvcmU6OlRl
eHRJdGVyYXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CisgICAgcmV0dXJuIHBsYWluVGV4dCht
YWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSwgV2ViQ29yZTo6VGV4dEl0ZXJhdG9yRGVmYXVs
dEJlaGF2aW9yLCB0cnVlKTsKIH0KIAogLSAoT3B0aW9uU2V0PFdlYkNvcmU6OlBhaW50QmVoYXZp
b3I+KV9wYWludEJlaGF2aW9yRm9yRGVzdGluYXRpb25Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dApAQCAtODA5LDE1ICs4MDksMTUgQEAgLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZToo
Y29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdlCiAgICAgcmV0dXJuIGNoYXJhY3RlclJh
bmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2Up
OwogfQogCi0tIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNS
YW5nZSluc3JhbmdlCistIChPcHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4pX2NvbnZlcnRU
b0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKIHsKICAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRU
b0RPTVJhbmdlOm5zcmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86V2ViUmFuZ2VJc1JlbGF0aXZlVG86
OkVkaXRhYmxlUm9vdF07CiB9CiAKLS0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRU
b0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVs
YXRpdmVUbylyYW5nZUlzUmVsYXRpdmVUbworLSAoT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFu
Z2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzoo
V2ViUmFuZ2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0aXZlVG8KIHsKICAgICBpZiAocmFuZ2Uu
bG9jYXRpb24gPT0gTlNOb3RGb3VuZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBpZiAocmFuZ2VJc1JlbGF0aXZlVG8gPT0gV2Vi
UmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9vdCkgewogICAgICAgICAvLyBPdXIgY3JpdGlj
YWwgYXNzdW1wdGlvbiBpcyB0aGF0IHRoaXMgY29kZSBwYXRoIGlzIG9ubHkgY2FsbGVkIGJ5IGlu
cHV0IG1ldGhvZHMgdGhhdApAQCAtODI4LDMwICs4MjgsMzAgQEAgLSAoUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgcmFuZ2VJc1JlbGF0aXZl
VG86KFcKICAgICAgICAgLy8gVGhhdCBmaXRzIHdpdGggQXBwS2l0J3MgaWRlYSBvZiBhbiBpbnB1
dCBjb250ZXh0LgogICAgICAgICBhdXRvKiBlbGVtZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCk7CiAgICAg
ICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSkpOworICAgICAgICAgICAgcmV0dXJu
IFdURjo6bnVsbG9wdDsKKyAgICAgICAgcmV0dXJuIHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmVsZW1lbnQpLCByYW5nZSk7CiAgICAgfQogCiAg
ICAgQVNTRVJUKHJhbmdlSXNSZWxhdGl2ZVRvID09IFdlYlJhbmdlSXNSZWxhdGl2ZVRvOjpQYXJh
Z3JhcGgpOwogCiAgICAgYXV0byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0
YXJ0T2ZQYXJhZ3JhcGgoX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkudmlzaWJsZVN0YXJ0KCkpKTsKICAgICBpZiAoIXBhcmFncmFwaFN0YXJ0KQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8g
c2NvcGVFbmQgPSBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0
YXJ0LT5jb250YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCkpOwotICAgIHJldHVybiBjcmVh
dGVMaXZlUmFuZ2UoV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFy
YWdyYXBoU3RhcnQpLCBXVEZNb3ZlKHNjb3BlRW5kKSB9LCByYW5nZSkpOworICAgIHJldHVybiBX
ZWJDb3JlOjpyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UoeyBXVEZNb3ZlKCpwYXJhZ3JhcGhTdGFydCks
IFdURk1vdmUoc2NvcGVFbmQpIH0sIHJhbmdlKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfY29udmVy
dE5TUmFuZ2VUb0RPTVJhbmdlOihOU1JhbmdlKW5zcmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KFtz
ZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpuc3JhbmdlXS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChb
c2VsZiBfY29udmVydFRvRE9NUmFuZ2U6bnNyYW5nZV0pOwogfQogCiAtIChOU1JhbmdlKV9jb252
ZXJ0RE9NUmFuZ2VUb05TUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBpZiAoIXJhbmdl
KQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgcmV0dXJu
IFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOipjb3JlKHJhbmdlKV07CisgICAgcmV0dXJuIFtzZWxm
IF9jb252ZXJ0VG9OU1JhbmdlOm1ha2VTaW1wbGVSYW5nZSgqY29yZShyYW5nZSkpXTsKIH0KIAog
LSAoRE9NUmFuZ2UgKilfbWFya0RPTVJhbmdlCkBAIC0xMTI5LDggKzExMjksNyBAQCAtIChOU1Jh
bmdlKV9zZWxlY3RlZE5TUmFuZ2UKIAogLSAodm9pZClfc2VsZWN0TlNSYW5nZTooTlNSYW5nZSly
YW5nZQogewotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gZG9tUmFuZ2UgPSBbc2VsZiBfY29u
dmVydFRvRE9NUmFuZ2U6cmFuZ2VdOwotICAgIGlmIChkb21SYW5nZSkKKyAgICBpZiAoYXV0byBk
b21SYW5nZSA9IFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpyYW5nZV0pCiAgICAgICAgIF9wcml2
YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihXZWJDb3JlOjpWaXNpYmxl
U2VsZWN0aW9uKCpkb21SYW5nZSwgV2ViQ29yZTo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKIH0K
IApAQCAtMTIxNywxMSArMTIxNiw4IEBAIC0gKHZvaWQpc2VsZWN0TlNSYW5nZTooTlNSYW5nZSly
YW5nZQogCiAtICh2b2lkKXNlbGVjdFdpdGhvdXRDbG9zaW5nVHlwaW5nTlNSYW5nZTooTlNSYW5n
ZSlyYW5nZQogewotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gZG9tUmFuZ2UgPSBbc2VsZiBf
Y29udmVydFRvRE9NUmFuZ2U6cmFuZ2VdOwotICAgIGlmIChkb21SYW5nZSkgewotICAgICAgICBj
b25zdCBhdXRvJiBuZXdTZWxlY3Rpb24gPSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKCpkb21S
YW5nZSwgV2ViQ29yZTo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpOwotICAgICAgICBfcHJpdmF0ZS0+
Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCB7IH0pOwot
ICAgICAgICAKKyAgICBpZiAoYXV0byBkb21SYW5nZSA9IFtzZWxmIF9jb252ZXJ0VG9ET01SYW5n
ZTpyYW5nZV0pIHsKKyAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0
U2VsZWN0aW9uKCpkb21SYW5nZSwgeyB9KTsKICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+
ZWRpdG9yKCkuZW5zdXJlTGFzdEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZv
ck1vcmVUeXBpbmcoKTsKICAgICB9CiB9CkBAIC0xNzQxLDcgKzE3MzcsNyBAQCAtICh2b2lkKWdl
dERpY3RhdGlvblJlc3VsdFJhbmdlczooTlNBcnJheSAqKilvdXRSYW5nZXMgYW5kTWV0YWRhdGFz
OihOU0FycmF5ICoqKQogICAgICAgICAgICAgaWYgKCFtZXRhZGF0YSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgRE9NUmFuZ2UgKmRvbVJhbmdl
ID0ga2l0KHJhbmdlKCpub2RlLCAqbWFya2VyKSk7CisgICAgICAgICAgICBET01SYW5nZSAqZG9t
UmFuZ2UgPSBraXQobWFrZVNpbXBsZVJhbmdlKCpub2RlLCAqbWFya2VyKSk7CiAKICAgICAgICAg
ICAgIGlmIChtZXRhZGF0YSAhPSBwcmV2aW91c01ldGFkYXRhKSB7CiAgICAgICAgICAgICAgICAg
W21ldGFkYXRhcyBhZGRPYmplY3Q6bWV0YWRhdGFdOwpAQCAtMTc3NCw3ICsxNzcwLDcgQEAgLSAo
aWQpZGljdGF0aW9uUmVzdWx0TWV0YWRhdGFGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogICAg
IGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBhdXRvIG1hcmtlcnMgPSBj
b3JlKHNlbGYpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoKmNvcmUocmFu
Z2UpLCBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KTsKKyAgICBhdXRv
IG1hcmtlcnMgPSBjb3JlKHNlbGYpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0luUmFu
Z2UobWFrZVNpbXBsZVJhbmdlKCpjb3JlKHJhbmdlKSksIFdlYkNvcmU6OkRvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25SZXN1bHQpOwogCiAgICAgLy8gVUlLaXQgc2hvdWxkIG9ubHkgZXZlciBnaXZl
IHVzIGEgRE9NUmFuZ2UgZm9yIGEgcGhyYXNlIHdpdGggYWx0ZXJuYXRpdmVzLCB3aGljaCBzaG91
bGQgbm90IGJlIHBhcnQgb2YgbW9yZSB0aGFuIG9uZSByZXN1bHQuCiAgICAgQVNTRVJUKG1hcmtl
cnMuc2l6ZSgpIDw9IDEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJGcmFtZUludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkZyYW1lSW50ZXJuYWwuaAppbmRleCBmMTU3MmJkNTZmMDI1YmYzOWY2ZDVmYzM4MWFkN2Jk
ZjVmNDA3Njg0Li4zMGM0OGQxNWU5ZjYxNzlhOTk1ZDE5YTkzZTdhMWIyMmQxYTMwMzEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwu
aApAQCAtMTY2LDggKzE2Niw4IEBAIFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZy
YW1lKTsKICNlbmRpZgogCiAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihjb25zdCBXZWJD
b3JlOjpTaW1wbGVSYW5nZSYpcmFuZ2U7Ci0tIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252
ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZTsKLS0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4p
X2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJS
YW5nZUlzUmVsYXRpdmVUbylyYW5nZUlzUmVsYXRpdmVUbzsKKy0gKE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2U7CistIChPcHRp
b25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJh
bmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5nZUlzUmVsYXRp
dmVUbzsKIAogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE1h
cmt1cFN0cmluZzooTlNTdHJpbmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJp
bmcgKiliYXNlVVJMU3RyaW5nOwogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZy
YWdtZW50V2l0aE5vZGVzQXNQYXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXM7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCA3MjExMWQ0YmZi
ZDE1YmZhZTRmN2YyZGEyNmQ0NjYyNGUxYTU5MzJlLi4zYWRmNjM0MGUwNzgwNzVjMWQ3YzMwYTM3
OTJhZWM0M2IyMmVhNmQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYkhUTUxWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViSFRNTFZpZXcubW0KQEAgLTIzNzYsNyArMjM3Niw4IEBAIC0gKERPTURvY3VtZW50RnJhZ21l
bnQgKilfZG9jdW1lbnRGcmFnbWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0
ZWJvCiAgICAgaWYgKFtwYm9hcmRUeXBlIGlzRXF1YWxUb1N0cmluZzpXZWJDb3JlOjpsZWdhY3lT
dHJpbmdQYXN0ZWJvYXJkVHlwZSgpXSkgewogICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAg
ICAgICByZXR1cm4gbmlsOwotICAgICAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQoKmNvcmUoY29udGV4dCksIFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOldlYkNvcmU6Omxl
Z2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBlKCldIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNh
bE1hcHBpbmddKS5wdHIoKSk7CisgICAgICAgIGF1dG8gc3RyaW5nID0gW1twYXN0ZWJvYXJkIHN0
cmluZ0ZvclR5cGU6V2ViQ29yZTo6bGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKV0gcHJlY29t
cG9zZWRTdHJpbmdXaXRoQ2Fub25pY2FsTWFwcGluZ107CisgICAgICAgIHJldHVybiBraXQoY3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dChtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoY29udGV4dCkpLCBzdHJp
bmcpLnB0cigpKTsKICAgICB9CiAKICAgICByZXR1cm4gbmlsOwpAQCAtNjQxMyw3ICs2NDE0LDcg
QEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIExPRyhUZXh0
SW5wdXQsICJhdHRyaWJ1dGVkU3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IG5pbCIsIG5z
UmFuZ2UubG9jYXRpb24sIG5zUmFuZ2UubGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAg
ICB9Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IFtmcmFtZSBfY29udmVydFRv
RE9NUmFuZ2U6bnNSYW5nZV07CisgICAgYXV0byByYW5nZSA9IFtmcmFtZSBfY29udmVydFRvRE9N
UmFuZ2U6bnNSYW5nZV07CiAgICAgaWYgKCFyYW5nZSkgewogICAgICAgICBMT0coVGV4dElucHV0
LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBuaWwiLCBuc1Jhbmdl
LmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCk7CiAgICAgICAgIHJldHVybiBuaWw7CkBAIC02OTgx
LDIxICs2OTgyLDYgQEAgLSAoTlNTdHJpbmcgKilzdHJpbmcKIAogI2lmIFBMQVRGT1JNKE1BQykK
IAotLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6
KERPTVJhbmdlICopcmFuZ2UKLXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gbmls
OwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdl
dEN1cnJlbnQoKTsKLSNlbmRpZgotICAgIGF1dG8gcmVzdWx0ID0gYXR0cmlidXRlZFN0cmluZygq
Y29yZShyYW5nZSkpLnN0cmluZy5hdXRvcmVsZWFzZSgpOwotI2lmICFMT0dfRElTQUJMRUQKLSAg
ICBkb3VibGUgZHVyYXRpb24gPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0Owot
ICAgIExPRyhUaW1pbmcsICJjcmVhdGluZyBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHNlbGVjdGlv
biB0b29rICVmIHNlY29uZHMuIiwgZHVyYXRpb24pOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3Vs
dDsKLX0KLQogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2xlZ2FjeUF0dHJpYnV0ZWRTdHJpbmdG
cm9tOihET01Ob2RlICopc3RhcnRDb250YWluZXIgb2Zmc2V0OihpbnQpc3RhcnRPZmZzZXQgdG86
KERPTU5vZGUgKillbmRDb250YWluZXIgb2Zmc2V0OihpbnQpZW5kT2Zmc2V0CiB7CiAgICAgaWYg
KCFzdGFydENvbnRhaW5lciB8fCAhZW5kQ29udGFpbmVyKQpAQCAtNzAwNiwyOCArNjk5MiwyNiBA
QCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilfbGVnYWN5QXR0cmlidXRlZFN0cmluZ0Zyb206KERP
TU5vZGUgKilzdGFydENvbnRhaW5lciBvZgogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRy
aWJ1dGVkU3RyaW5nCiB7Ci0gICAgRE9NRG9jdW1lbnQgKmRvY3VtZW50ID0gW1tzZWxmIF9mcmFt
ZV0gRE9NRG9jdW1lbnRdOworICAgIGF1dG8gZG9jdW1lbnQgPSBjb3JlKFtbc2VsZiBfZnJhbWVd
IERPTURvY3VtZW50XSk7CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIFtbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIGlmIChhdXRv
IGF0dHJpYnV0ZWRTdHJpbmcgPSBbc2VsZiBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpb
ZG9jdW1lbnQgX2RvY3VtZW50UmFuZ2VdXSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJp
bmc7Ci0gICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKG1ha2VSYW5nZVNlbGVjdGlu
Z05vZGVDb250ZW50cygqY29yZShkb2N1bWVudCkpKS5zdHJpbmcuYXV0b3JlbGVhc2UoKTsKKyAg
ICBhdXRvIHJhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudCk7
CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gYXR0cmlidXRlZFN0cmluZyhyYW5nZSkuc3RyaW5nKQor
ICAgICAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGVkaXRpbmdB
dHRyaWJ1dGVkU3RyaW5nKHJhbmdlKS5zdHJpbmcuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNB
dHRyaWJ1dGVkU3RyaW5nICopc2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nCiB7Ci0gICAgYXV0byBh
dHRyaWJ1dGVkU3RyaW5nID0gcmV0YWluUHRyKFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURP
TVJhbmdlOltzZWxmIF9zZWxlY3RlZFJhbmdlXV0pOwotICAgIGlmICghYXR0cmlidXRlZFN0cmlu
ZykgewotICAgICAgICBhdXRvKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAg
ICAgICBpZiAoY29yZUZyYW1lKSB7Ci0gICAgICAgICAgICBhdXRvIHJhbmdlID0gY29yZUZyYW1l
LT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICAg
ICAgaWYgKHJhbmdlKQotICAgICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5n
QXR0cmlidXRlZFN0cmluZygqcmFuZ2UpLnN0cmluZzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdF0pOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVk
U3RyaW5nLmF1dG9yZWxlYXNlKCk7CisgICAgYXV0byBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAg
ICAgIHJldHVybiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNl
XTsKKyAgICBpZiAoYXV0byByZXN1bHQgPSBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSkuc3RyaW5n
KQorICAgICAgICByZXR1cm4gcmVzdWx0LmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGVkaXRp
bmdBdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSkuc3RyaW5nLmF1dG9yZWxlYXNlKCk7CiB9CiAKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCmluZGV4IDllNzZkMmI0NzVkZTEwNTA4
ZWFhMzhmMmZiZWIzZTk1NTNhNzg4NTIuLmJmNGZmY2JhNTBmZGIyYzMyNjk3NTdkMDdiZWE2NGY2
YjFiOTAyMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
SW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KQEAgLTQyMiw3ICs0MjIs
NyBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilfYW5pbWF0
aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3RlZAogICAgICAgICAgICAgZGV0ZWN0ZWRJdGVtID0g
eyB7CiAgICAgICAgICAgICAgICAgYWN0aW9uQ29udGV4dCwKICAgICAgICAgICAgICAgICB7IH0s
IC8vIEZJWE1FOiBTZWVtcyBsaWtlIGFuIGVtcHR5IHJlY3QgaXNuJ3QgcmVhbGx5IE9LLgotICAg
ICAgICAgICAgICAgICpjb3JlKGN1c3RvbURhdGFEZXRlY3RvcnNSYW5nZSkKKyAgICAgICAgICAg
ICAgICBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoY3VzdG9tRGF0YURldGVjdG9yc1JhbmdlKSkKICAg
ICAgICAgICAgIH0gfTsKICAgICAgICAgfQogICAgIH0KQEAgLTQzOSw3ICs0MzksNyBAQCAtIChp
ZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilfYW5pbWF0aW9uQ29udHJv
bGxlckZvckRhdGFEZXRlY3RlZAogICAgIGlmICghW1tnZXREREFjdGlvbnNNYW5hZ2VyQ2xhc3Mo
KSBzaGFyZWRNYW5hZ2VyXSBoYXNBY3Rpb25zRm9yUmVzdWx0OltkZXRlY3RlZEl0ZW0tPmFjdGlv
bkNvbnRleHQgbWFpblJlc3VsdF0gYWN0aW9uQ29udGV4dDpkZXRlY3RlZEl0ZW0tPmFjdGlvbkNv
bnRleHQuZ2V0KCldKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgYXV0byBpbmRpY2F0b3Ig
PSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRlTGl2ZVJhbmdl
KGRldGVjdGVkSXRlbS0+cmFuZ2UpLCB7IH0sIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50
YXRpb25UcmFuc2l0aW9uOjpGYWRlSW4pOworICAgIGF1dG8gaW5kaWNhdG9yID0gV2ViQ29yZTo6
VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGRldGVjdGVkSXRlbS0+cmFuZ2UsIHsgfSwg
V2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAK
ICAgICBfY3VycmVudEFjdGlvbkNvbnRleHQgPSBbZGV0ZWN0ZWRJdGVtLT5hY3Rpb25Db250ZXh0
IGNvbnRleHRGb3JWaWV3Ol93ZWJWaWV3IGFsdE1vZGU6WUVTIGludGVyYWN0aW9uU3RhcnRlZEhh
bmRsZXI6XigpIHsKICAgICB9IGludGVyYWN0aW9uQ2hhbmdlZEhhbmRsZXI6XigpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1t
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KaW5k
ZXggOTNiODM0NzdmYzhhNDJhZDNmNzRkMzY5ZTgxNzk0YmJlZmRhMDNhZS4uZDNhZDkxOGRhN2Vl
M2Y2ZjU4ZjQwOTAzYzdlMTdkNmE2NmUzODdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KQEAgLTcyLDcgKzcyLDcgQEAgLSAo
aWQpaW5pdFdpdGhSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogICAgIGlmICghcmFuZ2UpCiAgICAg
ICAgIHJldHVybiBzZWxmOwogCi0gICAgX3ByaXZhdGUtPl90ZXh0SXRlcmF0b3IgPSBtYWtlVW5p
cXVlPFdlYkNvcmU6OlRleHRJdGVyYXRvcj4oKmNvcmUocmFuZ2UpKTsKKyAgICBfcHJpdmF0ZS0+
X3RleHRJdGVyYXRvciA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6VGV4dEl0ZXJhdG9yPihtYWtlU2lt
cGxlUmFuZ2UoKmNvcmUocmFuZ2UpKSk7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQppbmRleCBhMTg1NjhlZjViNWRmOGEw
YWQ5YTRjZTRjMmI2Y2VmNjdjNDg1ZWIzLi4wNjY2MTAyMDFlNmRiODU4OTQ4ZDBmMzIyZWNmMjQx
MDc3ZmNhMGUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1t
CkBAIC0yMTM3LDcgKzIxMzcsNyBAQCAtICh2b2lkKV9kaWRDb25jbHVkZUVkaXREcmFnCiAgICAg
fTsKICAgICBhdXRvJiBmcmFtZSA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogICAgIGlmIChhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKSkgewotICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNh
dG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVS
YW5nZSgqcmFuZ2UpLCBkZWZhdWx0RWRpdERyYWdUZXh0SW5kaWNhdG9yT3B0aW9ucywgV2ViQ29y
ZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIFdlYkNvcmU6OkZs
b2F0U2l6ZSgpKSkKKyAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqcmFuZ2UsIGRlZmF1bHRFZGl0RHJhZ1RleHRJ
bmRpY2F0b3JPcHRpb25zLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6Tm9uZSwgV2ViQ29yZTo6RmxvYXRTaXplKCkpKQogICAgICAgICAgICAgX3ByaXZhdGUt
PmRhdGFPcGVyYXRpb25UZXh0SW5kaWNhdG9yID0gYWRvcHROUyhbW1dlYlVJVGV4dEluZGljYXRv
ckRhdGEgYWxsb2NdIGluaXRXaXRoSW1hZ2U6bmlsIHRleHRJbmRpY2F0b3JEYXRhOnRleHRJbmRp
Y2F0b3ItPmRhdGEoKSBzY2FsZTpwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpXSk7CiAgICAgfQog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405804</attachid>
            <date>2020-08-01 21:05:10 -0700</date>
            <delta_ts>2020-08-01 23:20:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215070-20200801210510.patch</filename>
            <type>text/plain</type>
            <size>127322</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWE5MDg5ZDQ3MmMyYzZh
MzdhMTI0ZDhmMjYxNGUyY2Y1Y2UwMDlmOC4uNmY3NWExMTVhZDNlZDk1ZWNiN2NhYzY2NzExZGUx
NzE3MjU2MzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNyBAQAorMjAyMC0wOC0wMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbWVtYmVy
IGZ1bmN0aW9ucyBvZiBSYW5nZSBhbmQgbWFueSBjYWxscyB0byBjcmVhdGVMaXZlUmFuZ2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTA3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6
Om5leHRCb3VuZGFyeSk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KTogRGl0dG8uCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6
XSk6IFRha2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHBvc2l0aW9uRm9yVGV4dE1hcmtlcjpdKTogUmVtb3ZlIGNyZWF0ZUxpdmVSYW5nZS4K
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dFJlY3RzRnJvbU1h
cmtlcnM6d2l0aFRleHQ6XSk6IERpdHRvLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0VG9OU1JhbmdlOl0pOiBUYWtlIFNpbXBsZVJh
bmdlLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfaW5kZXhGb3JU
ZXh0TWFya2VyOl0pOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfdGV4dE1hcmtlckZvckluZGV4Ol0pOiBEaXR0by4KKwor
ICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcik6IFJlbmFtZWQgcmFuZ2UgdG8gbWFr
ZVNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZVJhbmdlKTogRGl0dG8u
CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oOiBVcGRhdGUgZm9yIHRo
ZSBhYm92ZS4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6dGV4dCBjb25zdCk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6c2hhZG93Um9vdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpp
bnRlcnZhbHNTdWZmaWNpZW50bHlPdmVybGFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmFkanVzdExpbmVIZWlnaHRPZlNlbGVjdGlvblJlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvYWxlc2NlU2VsZWN0aW9uUmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1JhbmdlLmg6IFVwZGF0ZSBm
b3IgdGhlIGFib3ZlLiBBbHNvIG1ha2UgcGFzdExhc3ROb2RlIHByaXZhdGUgc2luY2UgaXQgaXMK
KyAgICAgICAgb25seSB1c2VkIGluc2lkZSB0aGUgUmFuZ2UgY2xhc3MncyBpbXBsZW1lbnRhdGlv
bi4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVSYW5nZTo6U2ltcGxlUmFuZ2UpOiBSZW1vdmVkIG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBS
YW5nZS4KKyAgICAgICAgKiBkb20vU2ltcGxlUmFuZ2UuaDogVXBkYXRlIGZvciB0aGUgYWJvdmUu
IFJlbW92ZWQgYm90aCBjb25zdHJ1Y3RvciBvdmVybG9hZHMKKyAgICAgICAgdGhhdCB0YWtlIGEg
UmFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJl
ZCk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCk6IFVzZQorICAgICAg
ICBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICBSZW1vdmUgY3Jl
YXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBSZW1v
dmUgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJh
bmdlcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZXBsYWNlUmFuZ2VGb3JT
cGVsbENoZWNraW5nKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb3JyZWN0U3BlbGxjaGVj
a2luZ1ByZXNlcnZpbmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y291bnRNYXRjaGVzRm9yVGV4dCk6IERpdHRvLgorICAgICAg
ICAqIGVkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
ZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okluc2Vy
dExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKTogQ2hhbmdlIG91dAorICAg
ICAgICBhcmd1bWVudCB0eXBlIHRvIFNpbXBsZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcv
U3BlbGxDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNwZWxsQ2hlY2tlcjo6aXNDaGVj
a2FibGUgY29uc3QpOiBSZXdyaXRlIHF1ZXN0aW9uYWJsZSBsb2dpYworICAgICAgICB0byB1c2Ug
aW50ZXJzZWN0aW5nTm9kZXMgaW5zdGVhZCBvZiBmaXJzdE5vZGUuCisKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRVbmdyYW1tYXRpY2FsUGhyYXNlcyBjb25zdCk6IFJlbW92ZSBjcmVhdGVM
aXZlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9tYXJrdXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3Jl
YXRlRnJhZ21lbnRGcm9tVGV4dCk6IERpdHRvLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRWRp
dG9ySU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxl
bWVudCk6IFVzZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMuCisKKyAgICAgICAgKiBl
ZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpwYXN0
ZVdpdGhQYXN0ZWJvYXJkKTogUmVtb3ZlIGNyZWF0ZUxpdmVSYW5nZS4KKworICAgICAgICAqIHBh
Z2UvRE9NU2VsZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTVNlbGVjdGlvbjo6YWRk
UmFuZ2UpOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0
aW9uOjpkZWxldGVGcm9tRG9jdW1lbnQpOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAg
ICAgICogcGFnZS9EcmFnQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkb2N1bWVu
dEZyYWdtZW50RnJvbURyYWdEYXRhKTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNv
cmU6OkRyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKTogUmVtb3ZlIGNyZWF0ZUxpdmVS
YW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkRyYWdDb250cm9sbGVyOjpzdGFydERyYWcpOiBEaXR0
by4KKworICAgICAgICAqIHBhZ2UvVGV4dEluZGljYXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzZWxlY3Rpb25SZWN0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjppbml0aWFsaXpl
SW5kaWNhdG9yKTogQ2FsbCBjb2xsZWN0U2VsZWN0aW9uUmVjdHMgZGlyZWN0bHkgaGVyZSwKKyAg
ICAgICAgYXZvaWRpbmcgY3JlYXRlTGl2ZVJhbmdlIGFuZCB1c2luZyBtYXAgdG8gY29udmVydCBm
cm9tIFZlY3RvcjxTZWxlY3Rpb25SZWN0PgorICAgICAgICB0byBWZWN0b3I8RmxvYXRSZWN0Pi4K
KworICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290IGNvbnN0KTogVXNlIG1ha2VTaW1wbGVS
YW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL0RyYWdJbWFnZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZSk6IFRha2UgU2ltcGxlUmFuZ2UuCisgICAgICAg
ICogcGxhdGZvcm0vRHJhZ0ltYWdlLmg6IFVwZGF0ZSBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZSB0
byB0YWtlIFNpbXBsZVJhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOiBV
cGRhdGVkIFdpbmRvd3Mtb25seSBsYXllcmluZy12aW9sYXRpbmcgZnVuY3Rpb25zCisgICAgICAg
IHRvIHRha2UgU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvRHJhZ0ltYWdl
SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UpOiBUYWtl
IFNpbXBsZVJhbmdlLgorCisgICAgICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdCk6
IFRha2UgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNl
bGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRG
cmFnbWVudCk6IERpdHRvLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjppbnRlcnZhbHNTdWZmaWNpZW50bHlPdmVybGFwKTogQWRkZWQu
IE1vdmVkIGZyb20gUmFuZ2UuIE1vc3RseSB1bmNoYW5nZWQKKyAgICAgICAgYnV0IHVzZXMgU2lt
cGxlUmFuZ2Ugbm93IGluc3RlYWQgb2YgYSBsaXZlIHJhbmdlLCBhbmQgaW50ZXJzZWN0aW5nTm9k
ZXMgaW5zdGVhZCBvZgorICAgICAgICBhIGxvb3AgdXNpbmcgZmlyc3ROb2RlIGFuZCBwYXN0TGFz
dE5vZGUuCisgICAgICAgIChXZWJDb3JlOjphZGp1c3RMaW5lSGVpZ2h0T2ZTZWxlY3Rpb25SZWN0
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29hbGVzY2VTZWxlY3Rpb25SZWN0cyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVj
dHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ludGVybmFsKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cyk6IERpdHRv
LgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDogVXBkYXRlIGZvciBhYm92ZS4K
KworICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6bWFya2VyUmFuZ2VGb3JOb2RlKTogVXNlIG1ha2VTaW1wbFJhbmdlLgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpsb2NhdGlvbkZyb21SYW5nZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFuZ2UpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkludGVybmFsczo6cmFuZ2VBc1RleHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRv
cik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdWJyYW5nZSk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyYW5nZU9mU3RyaW5nTmVhckxvY2F0aW9u
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnRleHRJbmRpY2F0b3JGb3JS
YW5nZSk6IERpdHRvLgorCiAyMDIwLTA4LTAxICBKb29uZ2h1biBQYXJrICA8amg3MTgucGFya0Bz
YW1zdW5nLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBSZW1vdmUgdGhlIGJ1aWxkIHdhcm5p
bmdzIGJlbG93IHNpbmNlIHIyNjUxNTAuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5n
ZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRmZWQ2NGE5N2Q1MGU1YjRiZTU1
MjI1OTE2NTk2ZWJiOTgxMTFlODIuLmZjYTlmZTQxNDljOWEyZTVlZWY0ODBmODQ3ZTljNTMwZWJj
N2Y1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDgtMDEgIERhcmluIEFkbGVy
ICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzb21lIG1lbWJlciBmdW5jdGlv
bnMgb2YgUmFuZ2UgYW5kIG1hbnkgY2FsbHMgdG8gY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNzAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tOgorICAg
ICAgICAoLVtXS1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZSBkZXRlY3REYXRhV2l0aFR5cGVz
OmNvbnRleHQ6XSk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDoKKyAgICAgICAgKEFQ
STo6UGFnZU92ZXJsYXlDbGllbnRJbXBsOjphY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCk6
IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TVJhbmdlLm1tOgorICAgICAgICAoLVtXS0RPTVJhbmdlIHRleHRSZWN0c10pOiBEaXR0by4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01UZXh0SXRlcmF0
b3IubW06CisgICAgICAgICgtW1dLRE9NVGV4dEl0ZXJhdG9yIGluaXRXaXRoUmFuZ2U6XSk6IERp
dHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVu
ZGxlUmFuZ2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlOjpyZW5kZXJlZEltYWdlKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpw
ZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdl
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNl
bGVjdGlvbik6IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJv
bGxlci5jcHA6CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlB
ZnRlclBhZ2VTY3JvbGwpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9z
L1dlYlBhZ2VJT1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRp
dG9yU3RhdGUgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0
ZUFuZFNlbmRFZGl0RHJhZ1NuYXBzaG90KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBh
Z2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KTogRGl0dG8uCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4
dCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJlY3Rp
b25EYXRhKTogRGl0dG8uCisKIDIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIEZpeCBhbmQgZnVydGhlciByZWZpbmUgbWFrZWZpbGUgcnVsZSBmb3Ig
V2ViS2l0IG1lc3NhZ2VzIGdlbmVyYXRlZCBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9n
CmluZGV4IDMyZTA5NTgxNzJjNDBmYTRhNTJhMTI0NTExNjE1MjZlYThmOTkxY2UuLjljMGI3Zjhi
ZjYxYmY2MmU2MTg3OTc0YTViNzMxZTQ1NTljODQ1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAyMC0wOC0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbWVtYmVyIGZ1bmN0aW9ucyBvZiBSYW5n
ZSBhbmQgbWFueSBjYWxscyB0byBjcmVhdGVMaXZlUmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTA3MAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1Mu
bW06CisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOl0pOiBS
ZW1vdmUgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBzZWxlY3Rpb25SZWN0
c0ZvclJhbmdlOl0pOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbToKKyAgICAgICAgKC1bV2ViVmlzaWJsZVBvc2l0aW9u
IGVuY2xvc2luZ1JhbmdlV2l0aERpY3RhdGlvblBocmFzZUFsdGVybmF0aXZlczpdKTogRGl0dG8u
CisgICAgICAgICgtW1dlYlZpc2libGVQb3NpdGlvbiBlbmNsb3NpbmdSYW5nZVdpdGhDb3JyZWN0
aW9uSW5kaWNhdG9yXSk6IERpdHRvLgorICAgICAgICAoK1tET01SYW5nZSByYW5nZUZvckZpcnN0
UG9zaXRpb246c2Vjb25kOl0pOiBSZW5hbWUgZmlyc3RWUC9zZWNvbmRWUAorICAgICAgICB0byBm
aXJzdFBvc2l0aW9uL3NlY29uZFBvc2l0aW9uLgorCiAyMDIwLTA4LTAxICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmFuZ2U6OmNyZWF0ZSBhbmQgbWFu
eSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRl
eCBlMzE2ZjQxMzVmMDlkMzhlYjA2Yjk2ZTFmMjc1MzE3MjhhNzhjOWIzLi5lZTRkZDk0MzAyZWRk
MTEzYThjM2VjYzU2MWUxNGFmNDAyYWU4NGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTQgQEAKKzIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUu
Y29tPgorCisgICAgICAgIFJlbW92ZSBzb21lIG1lbWJlciBmdW5jdGlvbnMgb2YgUmFuZ2UgYW5k
IG1hbnkgY2FsbHMgdG8gY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIERPTS9ET00ubW06CisgICAgICAgICgtW0RPTVJhbmdl
IHJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tUZXh0OnJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tU
ZXh0Ol0pOgorICAgICAgICBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAoLVtET01SYW5n
ZSB0ZXh0UmVjdHNdKTogRGl0dG8uCisKKyAgICAgICAgKiBET00vRE9NRG9jdW1lbnQubW06IFVw
ZGF0ZSBpbmNsdWRlcy4KKyAgICAgICAgKiBET00vRE9NUmFuZ2UubW06IERpdHRvLgorICAgICAg
ICAqIERPTS9ET01SYW5nZUludGVybmFsLmg6IERpdHRvLgorICAgICAgICAqIERPTS9ET01VSUtp
dEV4dGVuc2lvbnMubW06IERpdHRvLgorICAgICAgICAqIERPTS9ET01VdGlsaXR5Lm1tOiBEaXR0
by4KKworICAgICAgICAqIERPTS9XZWJET01PcGVyYXRpb25zLm1tOgorICAgICAgICAoLVtET01S
YW5nZSB3ZWJBcmNoaXZlXSk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW0RPTVJh
bmdlIG1hcmt1cFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUu
bW06CisgICAgICAgICgtW1dlYkZyYW1lIF9zdHJpbmdGb3JSYW5nZTpdKTogVXNlIG1ha2VTaW1w
bGVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RPTVJhbmdlOl0pOiBSZXR1
cm4gYSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RPTVJhbmdl
OnJhbmdlSXNSZWxhdGl2ZVRvOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZl
cnROU1JhbmdlVG9ET01SYW5nZTpdKTogVXBkYXRlIGZvciBhYm92ZS4KKyAgICAgICAgKC1bV2Vi
RnJhbWUgX2NvbnZlcnRET01SYW5nZVRvTlNSYW5nZTpdKTogVXNlIG1ha2VTaW1wbGVSYW5nZS4K
KyAgICAgICAgKC1bV2ViRnJhbWUgX3NlbGVjdE5TUmFuZ2U6XSk6IFVwZGF0ZSBmb3IgYWJvdmUu
CisgICAgICAgICgtW1dlYkZyYW1lIHNlbGVjdFdpdGhvdXRDbG9zaW5nVHlwaW5nTlNSYW5nZTpd
KTogRGl0dG8uCisgICAgICAgICgtW1dlYkZyYW1lIGdldERpY3RhdGlvblJlc3VsdFJhbmdlczph
bmRNZXRhZGF0YXM6XSk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1l
IGRpY3RhdGlvblJlc3VsdE1ldGFkYXRhRm9yUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAqIFdl
YlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oOiBVcGRhdGUgZm9yIGFib3ZlLgorCisgICAgICAgICog
V2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2RvY3VtZW50
RnJhZ21lbnRGcm9tUGFzdGVib2FyZDpmb3JUeXBlOmluQ29udGV4dDpzdWJyZXNvdXJjZXM6XSk6
CisgICAgICAgIFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGF0
dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6XSk6IFVzZSBhdXRvLgorICAgICAgICAoLVtXZWJI
VE1MVmlldyBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV2ViSFRNTFZpZXcgYXR0cmlidXRlZFN0cmluZ10pOiBSZXdyb3RlIHRvIHVzZSBTaW1w
bGVSYW5nZSBjb25zaXN0ZW50bHkuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGVkQXR0
cmlidXRlZFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbToKKyAgICAgICAgKC1bV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJv
bGxlciBfYW5pbWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3RlZFRleHRdKToKKyAgICAgICAg
VXNlIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlRleHRJdGVyYXRvci5t
bToKKyAgICAgICAgKC1bV2ViVGV4dEl0ZXJhdG9yIGluaXRXaXRoUmFuZ2U6XSk6IERpdHRvLgor
CisgICAgICAgICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRD
b25jbHVkZUVkaXREcmFnXSk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisKIDIwMjAtMDgtMDEg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBSYW5nZTo6
Y3JlYXRlIGFuZCBtYW55IG1vcmUgdXNlcyBvZiBsaXZlIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggYmViNzIxMmM3NTMxNzY2
ODAzYWFhZWVjNjllMjk0YjI2YjgwMDEwMS4uYzdmZmZjZmMyNzM4ZGYxYmY1NmE2YWZlNGQ0NWIz
ZTAwMWM0YmRjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9i
amVjdENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0
Q2FjaGUuY3BwCkBAIC0yNjIyLDcgKzI2MjIsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RD
YWNoZTo6bmV4dEJvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmcwog
ICAgICAgICBhdXRvIGJhY2t3YXJkc1NjYW5SYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVD
b250ZW50cyhib3VuZGFyeS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmICghc2V0UmFuZ2VTdGFy
dE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChiYWNrd2FyZHNTY2FuUmFuZ2UsIGNoYXJhY3Rlck9m
ZnNldCwgZmFsc2UpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcHJlZml4TGVu
Z3RoID0gcHJlZml4TGVuZ3RoRm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGJhY2t3YXJkc1NjYW5S
YW5nZSksIHN0cmluZyk7CisgICAgICAgIHByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aEZvclJh
bmdlKGJhY2t3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFz
ZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KHNlYXJjaFJhbmdlLCBjaGFyYWN0
ZXJPZmZzZXQsIHRydWUpKQpAQCAtMjY4MSw3ICsyNjgxLDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6OnByZXZpb3VzQm91bmRhcnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFy
YWN0ZXIKICAgICAgICAgZm9yd2FyZHNTY2FuUmFuZ2Uuc3RhcnQgPSAqYWZ0ZXJCb3VuZGFyeTsK
ICAgICAgICAgaWYgKCFzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KGZvcndh
cmRzU2NhblJhbmdlLCBjaGFyYWN0ZXJPZmZzZXQsIHRydWUpKQogICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgc3VmZml4TGVuZ3RoID0gc3VmZml4TGVuZ3RoRm9yUmFuZ2UoY3JlYXRl
TGl2ZVJhbmdlKGZvcndhcmRzU2NhblJhbmdlKSwgc3RyaW5nKTsKKyAgICAgICAgc3VmZml4TGVu
Z3RoID0gc3VmZml4TGVuZ3RoRm9yUmFuZ2UoZm9yd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CiAg
ICAgfQogICAgIAogICAgIGlmICghc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rlck9mZnNl
dChzZWFyY2hSYW5nZSwgY2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IGU4YjM3NzRlNzE4NWI2MTViYTNkZGEzYWQyZDA0
OTUzOWU5MWFkMDMuLmQ4NDE4YjA0NWFhMDAwZTgzZDhiZGQ5MjQ4NjcxODFjMTQ0MzMxYjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
aW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yMzM4LDEzICsyMzM4
LDkgQEAgLSAoTlNBcnJheSAqKWFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKilt
YXJrZXJzIGF0dHJpYnV0ZWQ6KEJPT0wpYXR0cmkKICAgICByZXR1cm4gW2FycmF5IGF1dG9yZWxl
YXNlXTsKIH0KIAotLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UgKilsaXZlUmFu
Z2UKKy8vIEZJWE1FOiBObyByZWFzb24gZm9yIHRoaXMgdG8gYmUgYSBtZXRob2QgaW5zdGVhZCBv
ZiBhIGZ1bmN0aW9uLgorLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooY29uc3QgU2ltcGxl
UmFuZ2UmKXJhbmdlCiB7Ci0gICAgaWYgKCFsaXZlUmFuZ2UpCi0gICAgICAgIHJldHVybiBOU01h
a2VSYW5nZShOU05vdEZvdW5kLCAwKTsKLQotICAgIGF1dG8gcmFuZ2UgPSBTaW1wbGVSYW5nZSB7
ICpsaXZlUmFuZ2UgfTsKLQogICAgIGF1dG8mIGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnQuZG9jdW1l
bnQoKTsKICAgICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFt
ZSkKQEAgLTIzOTgsNyArMjM5NCw5IEBAIC0gKE5TSW50ZWdlcilwb3NpdGlvbkZvclRleHRNYXJr
ZXI6KFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbWFya2VyCiAgICAgICAgIENoYXJhY3Rl
ck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbbWFya2VyIGNoYXJhY3Rlck9mZnNldF07CiAgICAg
ICAgIC8vIENyZWF0ZSBhIGNvbGxhcHNlZCByYW5nZSBmcm9tIHRoZSBDaGFyYWN0ZXJPZmZzZXQg
b2JqZWN0LgogICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hh
cmFjdGVyT2Zmc2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgICAg
IHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTpjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdl
dCgpXS5sb2NhdGlvbjsKKyAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgIHJldHVybiBO
U05vdEZvdW5kOworICAgICAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6KnJhbmdl
XS5sb2NhdGlvbjsKICAgICB9CiAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiB9CkBAIC0yNzU2LDgg
KzI3NTQsNyBAQCAtIChOU0FycmF5ICopdGV4dFJlY3RzRnJvbU1hcmtlcnM6KE5TQXJyYXkgKilt
YXJrZXJzIHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKICAgICBpZiAoIXJhbmdlIHx8IHJhbmdl
LT5jb2xsYXBzZWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFZlY3RvcjxXZWJDb3Jl
OjpTZWxlY3Rpb25SZWN0PiByZWN0czsKLSAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHJlY3RzKTsKKyAgICBh
dXRvIHJlY3RzID0gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5p
b25JbnRlcmlvckxpbmVzKCpyYW5nZSk7CiAgICAgaWYgKHJlY3RzLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyZWN0cywgWyZdIChhdXRv
JiByZWN0KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9X
ZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGFm
ODQ2YzE3ZjY2NjllYWE3OTg1NzIxYWEwMjIzZDRkZGNmZjFjNGUuLmJkYzdkNDgwODA2MTVjNDY4
MWU3ODljOGJmN2ZjNzllZDRkZGNiOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFw
cGVyTWFjLm1tCkBAIC0zNjIxLDEzICszNjIxLDExIEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAq
KWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKICAgICByZXR1cm4g
W3NlbGYgZG9BWEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6W3NlbGYgdGV4dE1h
cmtlclJhbmdlRnJvbVJhbmdlOndlYlJhbmdlXSBzcGVsbENoZWNrOllFU107CiB9CiAKLS0gKE5T
UmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlKilyYW5nZQorLy8gRklYTUU6IE5vIHJlYXNv
biBmb3IgdGhpcyB0byBiZSBhIG1ldGhvZCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb247IGNhbiBnZXQg
ZG9jdW1lbnQgZnJvbSByYW5nZS4KKy0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KGNvbnN0
IFNpbXBsZVJhbmdlJilyYW5nZQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAg
Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQs
IDApOwotICAgIAogICAgIGF1dG8gZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9j
dW1lbnQoKTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2Uo
TlNOb3RGb3VuZCwgMCk7CkBAIC0zNjM2LDcgKzM2MzQsNyBAQCAtIChOU1JhbmdlKV9jb252ZXJ0
VG9OU1JhbmdlOihSYW5nZSopcmFuZ2UKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAg
ICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCi0gICAgcmV0dXJuIGNoYXJh
Y3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCpkb2N1bWVudEVs
ZW1lbnQpLCAqcmFuZ2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQ
b2ludEJlZm9yZU5vZGVDb250ZW50cygqZG9jdW1lbnRFbGVtZW50KSwgcmFuZ2UpOwogfQogCiAt
IChOU0ludGVnZXIpX2luZGV4Rm9yVGV4dE1hcmtlcjooaWQpbWFya2VyCkBAIC0zNjQ2LDkgKzM2
NDQsMTAgQEAgLSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6KGlkKW1hcmtlcgogICAg
IAogICAgIGlmIChBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5h
eE9iamVjdENhY2hlKCkpIHsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNl
dCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6bWFya2VyXTsKLSAgICAgICAg
Ly8gQ3JlYXRlIGEgY29sbGFwc2VkIHJhbmdlIGZyb20gdGhlIENoYXJhY3Rlck9mZnNldCBvYmpl
Y3QuCiAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0
ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zmc2V0KTsKLSAgICAgICAgcmV0
dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1JhbmdlOmNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCld
LmxvY2F0aW9uOworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIE5TTm90
Rm91bmQ7CisgICAgICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZToqcmFuZ2VdLmxv
Y2F0aW9uOwogICAgIH0KICAgICByZXR1cm4gTlNOb3RGb3VuZDsKIH0KQEAgLTM2NzAsNyArMzY2
OSw3IEBAIC0gKGlkKV90ZXh0TWFya2VyRm9ySW5kZXg6KE5TSW50ZWdlcil0ZXh0SW5kZXgKICAg
ICAgICAgcmV0dXJuIG5pbDsKIAogICAgIGF1dG8gYm91bmRhcnkgPSByZXNvbHZlQ2hhcmFjdGVy
TG9jYXRpb24obWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQp
LCB0ZXh0SW5kZXgpOwotICAgIGF1dG8gY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPnN0YXJ0T3JF
bmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UoeyBib3VuZGFyeSwgYm91
bmRhcnkgfSksIHRydWUpOworICAgIGF1dG8gY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPnN0YXJ0
T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShtYWtlU2ltcGxlUmFuZ2UoYm91bmRhcnkpLCB0
cnVlKTsKICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFy
YWN0ZXJPZmZzZXRdOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuY3BwCmluZGV4IDY4Y2M3NjVmMDMwNjdlMmE3OGY2ZGE1MTRjZWM3YmZkMmNk
NjI2NWIuLmJiMmI3N2U4YThmNGY2NzYyY2JlZTE1ZGJlYWZmMTgxYTlkNjVlNzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC0xMDUs
NyArMTA1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZpbHRlck1hcmtlcnMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBGdW4KIHN0YXRpYyB2b2lkIHVwZGF0ZVJl
bmRlcmVkUmVjdHNGb3JNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBOb2Rl
JiBub2RlKQogewogICAgIEFTU0VSVCghbm9kZS5kb2N1bWVudCgpLnZpZXcoKSB8fCAhbm9kZS5k
b2N1bWVudCgpLnZpZXcoKS0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgbWFya2VyLnNldFVuY2xpcHBl
ZEFic29sdXRlUmVjdHMoYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1
YWRzKHJhbmdlKG5vZGUsIG1hcmtlciksIHRydWUpKSk7CisgICAgbWFya2VyLnNldFVuY2xpcHBl
ZEFic29sdXRlUmVjdHMoYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1
YWRzKG1ha2VTaW1wbGVSYW5nZShub2RlLCBtYXJrZXIpLCB0cnVlKSkpOwogfQogCiB2b2lkIERv
Y3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpCkBA
IC02NjIsNyArNjYyLDcgQEAgdm9pZCByZW1vdmVNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXAKICAgICByYW5nZS5zdGFy
dC5jb250YWluZXItPmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMocmFuZ2UsIHR5
cGVzLCBwb2xpY3kpOwogfQogCi1TaW1wbGVSYW5nZSByYW5nZShOb2RlJiBub2RlLCBjb25zdCBE
b2N1bWVudE1hcmtlciYgbWFya2VyKQorU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKE5vZGUm
IG5vZGUsIGNvbnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAgICAgdW5zaWduZWQgc3Rh
cnRPZmZzZXQgPSBtYXJrZXIuc3RhcnRPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQg
PSBtYXJrZXIuZW5kT2Zmc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9j
dW1lbnRNYXJrZXJDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmgKaW5kZXggMGI0NGUyYzJlZDNiZWU1MzQzZWI3NjQ4N2RlMmI1ZjYyMDQw
Y2Q3Mi4uZjczNGQ3MzJiZjEwNzVjZjAyN2M5N2MxZWQ5OGVkNGZlNGZjMjhlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaApAQCAtMTE1LDcgKzEx
NSw3IEBAIHZvaWQgYWRkTWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6
Ok1hcmtlclR5cGUsIGNvbnN0IERvY3VtZW50TWFyCiB2b2lkIGFkZE1hcmtlcihUZXh0JiwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtl
clR5cGUsIERvY3VtZW50TWFya2VyOjpEYXRhJiYgPSB7IH0pOwogdm9pZCByZW1vdmVNYXJrZXJz
KGNvbnN0IFNpbXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBl
PiA9IERvY3VtZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBw
aW5nTWFya2VyID0gUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXI6Ok5vKTsKIAotV0VC
Q09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgcmFuZ2UoTm9kZSYsIGNvbnN0IERvY3VtZW50TWFya2Vy
Jik7CitXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoTm9kZSYsIGNv
bnN0IERvY3VtZW50TWFya2VyJik7CiAKIGlubGluZSBib29sIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6aGFzTWFya2VycygpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vUmFuZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCAyNjYxODVl
YmQ3OTUyZGMyMmE1Y2E3ZTQ0MjViZTk1NTEyZDRmMWJjLi43MDA4MWJlMjBjYjFiNzNiNmI0YTc5
NGZhYjlhN2ExZTljYjJjZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTg4OCw3ICs4ODgsNyBA
QCBTdHJpbmcgUmFuZ2U6OnRleHQoKSBjb25zdAogICAgIC8vIEZJWE1FOiBBcyB3aXRoIGlubmVy
VGV4dCwgd2UnZCBsaWtlIHRoaXMgdG8gd29yayBldmVuIGlmIHRoZXJlIGFyZSBubyByZW5kZXIg
b2JqZWN0cy4KICAgICBzdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7
CiAKLSAgICByZXR1cm4gcGxhaW5UZXh0KCp0aGlzKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KG1h
a2VTaW1wbGVSYW5nZSgqdGhpcykpOwogfQogCiAvLyBodHRwczovL3czYy5naXRodWIuaW8vRE9N
LVBhcnNpbmcvI3dpZGwtUmFuZ2UtY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LURvY3VtZW50RnJh
Z21lbnQtRE9NU3RyaW5nLWZyYWdtZW50CkBAIC0xMDY5LDExICsxMDY5LDYgQEAgTm9kZSogUmFu
Z2U6OmZpcnN0Tm9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lw
cGluZ0NoaWxkcmVuKHN0YXJ0Q29udGFpbmVyKCkpOwogfQogCi1TaGFkb3dSb290KiBSYW5nZTo6
c2hhZG93Um9vdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXJ0Q29udGFpbmVyKCkuY29udGFp
bmluZ1NoYWRvd1Jvb3QoKTsKLX0KLQogTm9kZSogUmFuZ2U6OnBhc3RMYXN0Tm9kZSgpIGNvbnN0
CiB7CiAgICAgaWYgKGVuZENvbnRhaW5lcigpLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKQEAgLTEx
NDQsMjczICsxMTM5LDYgQEAgdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIE8KICAgICB9CiB9CiAKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotc3RhdGljIGJvb2wgaW50ZXJ2YWxzU3VmZmljaWVudGx5
T3ZlcmxhcChpbnQgc3RhcnRBLCBpbnQgZW5kQSwgaW50IHN0YXJ0QiwgaW50IGVuZEIpCi17Ci0g
ICAgaWYgKGVuZEEgPD0gc3RhcnRBIHx8IGVuZEIgPD0gc3RhcnRCKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBjb25zdCBmbG9hdCBzdWZmaWNpZW50T3ZlcmxhcCA9IC43NTsKLQotICAg
IGludCBsZW5ndGhBID0gZW5kQSAtIHN0YXJ0QTsKLSAgICBpbnQgbGVuZ3RoQiA9IGVuZEIgLSBz
dGFydEI7Ci0KLSAgICBpbnQgbWF4U3RhcnQgPSBzdGQ6Om1heChzdGFydEEsIHN0YXJ0Qik7Ci0g
ICAgaW50IG1pbkVuZCA9IHN0ZDo6bWluKGVuZEEsIGVuZEIpOwotCi0gICAgaWYgKG1heFN0YXJ0
ID4gbWluRW5kKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbWluRW5kIC0g
bWF4U3RhcnQgPj0gc3VmZmljaWVudE92ZXJsYXAgKiBzdGQ6Om1pbihsZW5ndGhBLCBsZW5ndGhC
KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGFkanVzdExpbmVIZWlnaHRPZlNlbGVjdGlvblJl
Y3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYgcmVjdHMsIHNpemVfdCBudW1iZXJPZlJlY3RzLCBp
bnQgbGluZU51bWJlciwgaW50IGxpbmVUb3AsIGludCBsaW5lSGVpZ2h0KQotewotICAgIEFTU0VS
VChyZWN0cy5zaXplKCkgPj0gbnVtYmVyT2ZSZWN0cyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IG51
bWJlck9mUmVjdHM7IGk7ICkgewotICAgICAgICAtLWk7Ci0gICAgICAgIGlmIChyZWN0c1tpXS5s
aW5lTnVtYmVyKCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmVjdHNbaV0uc2V0TGlu
ZU51bWJlcihsaW5lTnVtYmVyKTsKLSAgICAgICAgcmVjdHNbaV0uc2V0TG9naWNhbFRvcChsaW5l
VG9wKTsKLSAgICAgICAgcmVjdHNbaV0uc2V0TG9naWNhbEhlaWdodChsaW5lSGVpZ2h0KTsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBTZWxlY3Rpb25SZWN0IGNvYWxlc2NlU2VsZWN0aW9uUmVjdHMoY29u
c3QgU2VsZWN0aW9uUmVjdCYgb3JpZ2luYWwsIGNvbnN0IFNlbGVjdGlvblJlY3QmIHByZXZpb3Vz
KQotewotICAgIFNlbGVjdGlvblJlY3QgcmVzdWx0KHVuaW9uUmVjdChwcmV2aW91cy5yZWN0KCks
IG9yaWdpbmFsLnJlY3QoKSksIG9yaWdpbmFsLmlzSG9yaXpvbnRhbCgpLCBvcmlnaW5hbC5wYWdl
TnVtYmVyKCkpOwotICAgIHJlc3VsdC5zZXREaXJlY3Rpb24ob3JpZ2luYWwuY29udGFpbnNTdGFy
dCgpIHx8IG9yaWdpbmFsLmNvbnRhaW5zRW5kKCkgPyBvcmlnaW5hbC5kaXJlY3Rpb24oKSA6IHBy
ZXZpb3VzLmRpcmVjdGlvbigpKTsKLSAgICByZXN1bHQuc2V0Q29udGFpbnNTdGFydChwcmV2aW91
cy5jb250YWluc1N0YXJ0KCkgfHwgb3JpZ2luYWwuY29udGFpbnNTdGFydCgpKTsKLSAgICByZXN1
bHQuc2V0Q29udGFpbnNFbmQocHJldmlvdXMuY29udGFpbnNFbmQoKSB8fCBvcmlnaW5hbC5jb250
YWluc0VuZCgpKTsKLSAgICByZXN1bHQuc2V0SXNGaXJzdE9uTGluZShwcmV2aW91cy5pc0ZpcnN0
T25MaW5lKCkgfHwgb3JpZ2luYWwuaXNGaXJzdE9uTGluZSgpKTsKLSAgICByZXN1bHQuc2V0SXNM
YXN0T25MaW5lKHByZXZpb3VzLmlzTGFzdE9uTGluZSgpIHx8IG9yaWdpbmFsLmlzTGFzdE9uTGlu
ZSgpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIHNpbWls
YXIgaW4gc3Bpcml0IHRvIGFkZExpbmVCb3hSZWN0cywgYnV0IGFubm90YXRlcyB0aGUgcmV0dXJu
ZWQgcmVjdGFuZ2xlcwotLy8gd2l0aCBhZGRpdGlvbmFsIHN0YXRlIHdoaWNoIGhlbHBzIGlPUyBk
cmF3IHNlbGVjdGlvbnMgaW4gaXRzIHVuaXF1ZSB3YXkuCi1pbnQgUmFuZ2U6OmNvbGxlY3RTZWxl
Y3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+
JiByZWN0cykgY29uc3QKLXsKLSAgICBhdXRvJiBzdGFydENvbnRhaW5lciA9IHRoaXMtPnN0YXJ0
Q29udGFpbmVyKCk7Ci0gICAgYXV0byYgZW5kQ29udGFpbmVyID0gdGhpcy0+ZW5kQ29udGFpbmVy
KCk7Ci0gICAgaW50IHN0YXJ0T2Zmc2V0ID0gbV9zdGFydC5vZmZzZXQoKTsKLSAgICBpbnQgZW5k
T2Zmc2V0ID0gbV9lbmQub2Zmc2V0KCk7Ci0KLSAgICBWZWN0b3I8U2VsZWN0aW9uUmVjdD4gbmV3
UmVjdHM7Ci0gICAgTm9kZSogc3RvcE5vZGUgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBib29sIGhh
c0ZsaXBwZWRXcml0aW5nTW9kZSA9IHN0YXJ0Q29udGFpbmVyLnJlbmRlcmVyKCkgJiYgc3RhcnRD
b250YWluZXIucmVuZGVyZXIoKS0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgp
OwotICAgIGJvb2wgY29udGFpbnNEaWZmZXJlbnRXcml0aW5nTW9kZXMgPSBmYWxzZTsKLSAgICBm
b3IgKE5vZGUqIG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAmJiBub2RlICE9IHN0b3BOb2RlOyBu
b2RlID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0
KiByZW5kZXJlciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIC8vIE9ubHkgYXNrIGxlYWYg
cmVuZGVyIG9iamVjdHMgZm9yIHRoZWlyIGxpbmUgYm94IHJlY3RzLgotICAgICAgICBpZiAocmVu
ZGVyZXIgJiYgIXJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpICYmIHJlbmRlcmVyLT5zdHlsZSgp
LnVzZXJTZWxlY3QoKSAhPSBVc2VyU2VsZWN0OjpOb25lKSB7Ci0gICAgICAgICAgICBib29sIGlz
U3RhcnROb2RlID0gcmVuZGVyZXItPm5vZGUoKSA9PSAmc3RhcnRDb250YWluZXI7Ci0gICAgICAg
ICAgICBib29sIGlzRW5kTm9kZSA9IHJlbmRlcmVyLT5ub2RlKCkgPT0gJmVuZENvbnRhaW5lcjsK
LSAgICAgICAgICAgIGlmIChoYXNGbGlwcGVkV3JpdGluZ01vZGUgIT0gcmVuZGVyZXItPnN0eWxl
KCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250YWlu
c0RpZmZlcmVudFdyaXRpbmdNb2RlcyA9IHRydWU7Ci0gICAgICAgICAgICAvLyBGSVhNRTogU2Vu
ZGluZyAwIGZvciB0aGUgc3RhcnRPZmZzZXQgaXMgYSB3ZWlyZCB3YXkgb2YgdGVsbGluZyB0aGUg
cmVuZGVyZXIgdGhhdCB0aGUgc2VsZWN0aW9uCi0gICAgICAgICAgICAvLyBkb2Vzbid0IHN0YXJ0
IGluc2lkZSBpdCwgc2luY2Ugd2UnbGwgYWxzbyBzZW5kIDAgaWYgdGhlIHNlbGVjdGlvbiAqZG9l
cyogc3RhcnQgaW4gaXQsIGF0IG9mZnNldCAwLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
IC8vIEZJWE1FOiBTZWxlY3Rpb24gZW5kcG9pbnRzIGFyZW4ndCBhbHdheXMgaW5zaWRlIGxlYXZl
cywgYW5kIHdlIG9ubHkgYnVpbGQgU2VsZWN0aW9uUmVjdHMgZm9yIGxlYXZlcywKLSAgICAgICAg
ICAgIC8vIHNvIHdlIGNhbid0IGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHdoaWNoIFNlbGVjdGlvblJl
Y3RzIGNvbnRhaW4gdGhlIHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kIHVzaW5nCi0gICAgICAgICAg
ICAvLyBvbmx5IHRoZSBvZmZzZXRzIG9mIHRoZSBzdGFydCBhbmQgZW5kLiBXZSBuZWVkIHRvIHBh
c3MgdGhlIHdob2xlIFJhbmdlLgotICAgICAgICAgICAgaW50IGJlZ2luU2VsZWN0aW9uT2Zmc2V0
ID0gaXNTdGFydE5vZGUgPyBzdGFydE9mZnNldCA6IDA7Ci0gICAgICAgICAgICBpbnQgZW5kU2Vs
ZWN0aW9uT2Zmc2V0ID0gaXNFbmROb2RlID8gZW5kT2Zmc2V0IDogc3RkOjpudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKTsKLSAgICAgICAgICAgIHJlbmRlcmVyLT5jb2xsZWN0U2VsZWN0aW9uUmVj
dHMobmV3UmVjdHMsIGJlZ2luU2VsZWN0aW9uT2Zmc2V0LCBlbmRTZWxlY3Rpb25PZmZzZXQpOwot
ICAgICAgICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogbmV3UmVjdHMpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5jb250YWluc1N0YXJ0KCkgJiYgIWlzU3RhcnRO
b2RlKQotICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldENvbnRhaW5zU3RhcnQo
ZmFsc2UpOwotICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SZWN0LmNvbnRhaW5zRW5kKCkg
JiYgIWlzRW5kTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVjdC5zZXRDb250
YWluc0VuZChmYWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJlY3QubG9naWNh
bFdpZHRoKCkgfHwgc2VsZWN0aW9uUmVjdC5sb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJlY3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIG5ld1JlY3RzLnNocmluaygwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRo
ZSByYW5nZSBjb3VsZCBzcGFuIG5vZGVzIHdpdGggZGlmZmVyZW50IHdyaXRpbmcgbW9kZXMuCi0g
ICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgdXNlIHRoZSB3cml0aW5nIG1vZGUgb2YgdGhl
IGNvbW1vbiBhbmNlc3Rvci4KLSAgICBpZiAoY29udGFpbnNEaWZmZXJlbnRXcml0aW5nTW9kZXMp
IHsKLSAgICAgICAgaWYgKGF1dG8gYW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihz
dGFydENvbnRhaW5lciwgZW5kQ29udGFpbmVyKSkKLSAgICAgICAgICAgIGhhc0ZsaXBwZWRXcml0
aW5nTW9kZSA9IGFuY2VzdG9yLT5yZW5kZXJlcigpLT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCk7Ci0gICAgfQotCi0gICAgY29uc3Qgc2l6ZV90IG51bWJlck9mUmVjdHMgPSBy
ZWN0cy5zaXplKCk7Ci0KLSAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGVuZHMgaW4gYSBCUiwgdGhl
biBhZGQgdGhlIGxpbmUgYnJlYWsgYml0IHRvIHRoZSBsYXN0Ci0gICAgLy8gcmVjdCB3ZSBoYXZl
LiBUaGlzIHdpbGwgY2F1c2UgaXRzIHNlbGVjdGlvbiByZWN0IHRvIGV4dGVuZCB0byB0aGUKLSAg
ICAvLyBlbmQgb2YgdGhlIGxpbmUuCi0gICAgaWYgKHN0b3BOb2RlICYmIHN0b3BOb2RlLT5oYXNU
YWdOYW1lKEhUTUxOYW1lczo6YnJUYWcpICYmIG51bWJlck9mUmVjdHMpIHsKLSAgICAgICAgLy8g
T25seSBzZXQgdGhlIGxpbmUgYnJlYWsgYml0IGlmIHRoZSBlbmQgb2YgdGhlIHJhbmdlIGFjdHVh
bGx5Ci0gICAgICAgIC8vIGV4dGVuZHMgYWxsIHRoZSB3YXkgdG8gaW5jbHVkZSB0aGUgPGJyPi4g
VmlzaWJsZVBvc2l0aW9uIGhlbHBzIHRvCi0gICAgICAgIC8vIGZpZ3VyZSB0aGlzIG91dC4KLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbigmZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAg
ICAgICAgVmlzaWJsZVBvc2l0aW9uIGJyUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKHN0b3BOb2RlLCAwKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgICAgIGlmIChlbmRQ
b3NpdGlvbiA9PSBiclBvc2l0aW9uKQotICAgICAgICAgICAgcmVjdHMubGFzdCgpLnNldElzTGlu
ZUJyZWFrKHRydWUpOwotICAgIH0KLQotICAgIGludCBsaW5lVG9wID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKTsKLSAgICBpbnQgbGluZUJvdHRvbSA9IHN0ZDo6bnVtZXJpY19saW1p
dHM8aW50Pjo6bWluKCk7Ci0gICAgaW50IGxhc3RMaW5lVG9wID0gbGluZVRvcDsKLSAgICBpbnQg
bGFzdExpbmVCb3R0b20gPSBsaW5lQm90dG9tOwotICAgIGludCBsaW5lTnVtYmVyID0gMDsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWN0czsgKytpKSB7Ci0gICAgICAg
IGludCBjdXJyZW50UmVjdFRvcCA9IHJlY3RzW2ldLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgaW50
IGN1cnJlbnRSZWN0Qm90dG9tID0gY3VycmVudFJlY3RUb3AgKyByZWN0c1tpXS5sb2dpY2FsSGVp
Z2h0KCk7Ci0KLSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjb3VudCB0aGUgcnVieSB0ZXh0
IGFzIGEgc2VwYXJhdGUgbGluZS4KLSAgICAgICAgaWYgKGludGVydmFsc1N1ZmZpY2llbnRseU92
ZXJsYXAoY3VycmVudFJlY3RUb3AsIGN1cnJlbnRSZWN0Qm90dG9tLCBsaW5lVG9wLCBsaW5lQm90
dG9tKSB8fCAoaSAmJiByZWN0c1tpXS5pc1J1YnlUZXh0KCkpKSB7Ci0gICAgICAgICAgICAvLyBH
cm93IHRoZSBjdXJyZW50IGxpbmUgYm91bmRzLgotICAgICAgICAgICAgbGluZVRvcCA9IHN0ZDo6
bWluKGxpbmVUb3AsIGN1cnJlbnRSZWN0VG9wKTsKLSAgICAgICAgICAgIGxpbmVCb3R0b20gPSBz
dGQ6Om1heChsaW5lQm90dG9tLCBjdXJyZW50UmVjdEJvdHRvbSk7Ci0gICAgICAgICAgICAvLyBB
dm9pZCBvdmVybGFwIHdpdGggdGhlIHByZXZpb3VzIGxpbmUuCi0gICAgICAgICAgICBpZiAoIWhh
c0ZsaXBwZWRXcml0aW5nTW9kZSkKLSAgICAgICAgICAgICAgICBsaW5lVG9wID0gc3RkOjptYXgo
bGFzdExpbmVCb3R0b20sIGxpbmVUb3ApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ICAgIGxpbmVCb3R0b20gPSBzdGQ6Om1pbihsYXN0TGluZVRvcCwgbGluZUJvdHRvbSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGp1c3RMaW5lSGVpZ2h0T2ZTZWxlY3Rpb25SZWN0
cyhyZWN0cywgaSwgbGluZU51bWJlciwgbGluZVRvcCwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOwot
ICAgICAgICAgICAgaWYgKCFoYXNGbGlwcGVkV3JpdGluZ01vZGUpIHsKLSAgICAgICAgICAgICAg
ICBsYXN0TGluZVRvcCA9IGxpbmVUb3A7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWN0
Qm90dG9tID49IGxhc3RMaW5lVG9wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lQm90
dG9tID0gbGluZUJvdHRvbTsKLSAgICAgICAgICAgICAgICAgICAgbGluZVRvcCA9IGxhc3RMaW5l
Qm90dG9tOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxp
bmVUb3AgPSBjdXJyZW50UmVjdFRvcDsKLSAgICAgICAgICAgICAgICAgICAgbGFzdExpbmVCb3R0
b20gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBsaW5lQm90dG9tID0gY3VycmVudFJlY3RCb3R0b207Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGxhc3RMaW5lQm90dG9tID0gbGluZUJvdHRv
bTsKLSAgICAgICAgICAgICAgICBpZiAoY3VycmVudFJlY3RUb3AgPD0gbGFzdExpbmVCb3R0b20g
JiYgaSAmJiByZWN0c1tpXS5wYWdlTnVtYmVyKCkgPT0gcmVjdHNbaSAtIDFdLnBhZ2VOdW1iZXIo
KSkgewotICAgICAgICAgICAgICAgICAgICBsYXN0TGluZVRvcCA9IGxpbmVUb3A7Ci0gICAgICAg
ICAgICAgICAgICAgIGxpbmVCb3R0b20gPSBsYXN0TGluZVRvcDsKLSAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBsYXN0TGluZVRvcCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVCb3R0b20gPSBjdXJy
ZW50UmVjdEJvdHRvbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGluZVRv
cCA9IGN1cnJlbnRSZWN0VG9wOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytsaW5lTnVt
YmVyOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQWRqdXN0IGxpbmUgaGVpZ2h0LgotICAg
IGFkanVzdExpbmVIZWlnaHRPZlNlbGVjdGlvblJlY3RzKHJlY3RzLCBudW1iZXJPZlJlY3RzLCBs
aW5lTnVtYmVyLCBsaW5lVG9wLCBsaW5lQm90dG9tIC0gbGluZVRvcCk7Ci0KLSAgICAvLyBTb3J0
IHRoZSByZWN0YW5nbGVzIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGdhcHMuIFRoZSByZWN0
YW5nbGVzIGNvdWxkIGJlIHVuc29ydGVkIHdoZW4KLSAgICAvLyB0aGVyZSBpcyBydWJ5IHRleHQg
YW5kIHdlIGNvdWxkIGhhdmUgZ2FwcyBvbiB0aGUgbGluZSB3aGVuIGFkamFjZW50IGVsZW1lbnRz
IG9uIHRoZSBsaW5lCi0gICAgLy8gaGF2ZSBhIGRpZmZlcmVudCBvcmllbnRhdGlvbi4KLSAgICBz
aXplX3QgZmlyc3RSZWN0V2l0aEN1cnJlbnRMaW5lTnVtYmVyID0gMDsKLSAgICBmb3IgKHNpemVf
dCBjdXJyZW50UmVjdCA9IDE7IGN1cnJlbnRSZWN0IDwgbnVtYmVyT2ZSZWN0czsgKytjdXJyZW50
UmVjdCkgewotICAgICAgICBpZiAocmVjdHNbY3VycmVudFJlY3RdLmxpbmVOdW1iZXIoKSAhPSBy
ZWN0c1tjdXJyZW50UmVjdCAtIDFdLmxpbmVOdW1iZXIoKSkgewotICAgICAgICAgICAgZmlyc3RS
ZWN0V2l0aEN1cnJlbnRMaW5lTnVtYmVyID0gY3VycmVudFJlY3Q7Ci0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAocmVjdHNbY3VycmVudFJlY3RdLmxvZ2ljYWxM
ZWZ0KCkgPj0gcmVjdHNbY3VycmVudFJlY3QgLSAxXS5sb2dpY2FsTGVmdCgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0ID0gcmVj
dHNbY3VycmVudFJlY3RdOwotICAgICAgICBzaXplX3QgaTsKLSAgICAgICAgZm9yIChpID0gY3Vy
cmVudFJlY3Q7IGkgPiBmaXJzdFJlY3RXaXRoQ3VycmVudExpbmVOdW1iZXIgJiYgc2VsZWN0aW9u
UmVjdC5sb2dpY2FsTGVmdCgpIDwgcmVjdHNbaSAtIDFdLmxvZ2ljYWxMZWZ0KCk7IC0taSkKLSAg
ICAgICAgICAgIHJlY3RzW2ldID0gcmVjdHNbaSAtIDFdOwotICAgICAgICByZWN0c1tpXSA9IHNl
bGVjdGlvblJlY3Q7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaiA9IDE7IGogPCBudW1iZXJP
ZlJlY3RzOyArK2opIHsKLSAgICAgICAgaWYgKHJlY3RzW2pdLmxpbmVOdW1iZXIoKSAhPSByZWN0
c1tqIC0gMV0ubGluZU51bWJlcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNl
bGVjdGlvblJlY3QmIHByZXZpb3VzUmVjdCA9IHJlY3RzW2ogLSAxXTsKLSAgICAgICAgYm9vbCBw
cmV2aW91c1JlY3RNYXlOb3RSZWFjaFJpZ2h0RWRnZSA9IChwcmV2aW91c1JlY3QuZGlyZWN0aW9u
KCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSICYmIHByZXZpb3VzUmVjdC5jb250YWluc0VuZCgpKSB8
fCAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBwcmV2
aW91c1JlY3QuY29udGFpbnNTdGFydCgpKTsKLSAgICAgICAgaWYgKHByZXZpb3VzUmVjdE1heU5v
dFJlYWNoUmlnaHRFZGdlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGludCBhZGp1
c3RlZFdpZHRoID0gcmVjdHNbal0ubG9naWNhbExlZnQoKSAtIHByZXZpb3VzUmVjdC5sb2dpY2Fs
TGVmdCgpOwotICAgICAgICBpZiAoYWRqdXN0ZWRXaWR0aCA+IHByZXZpb3VzUmVjdC5sb2dpY2Fs
V2lkdGgoKSkKLSAgICAgICAgICAgIHByZXZpb3VzUmVjdC5zZXRMb2dpY2FsV2lkdGgoYWRqdXN0
ZWRXaWR0aCk7Ci0gICAgfQotCi0gICAgaW50IG1heExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwot
Ci0gICAgLy8gRXh0ZW5kIHJlY3RzIG91dCB0byBlZGdlcyBhcyBuZWVkZWQuCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlJlY3RzOyArK2kpIHsKLSAgICAgICAgU2VsZWN0aW9u
UmVjdCYgc2VsZWN0aW9uUmVjdCA9IHJlY3RzW2ldOwotICAgICAgICBpZiAoIXNlbGVjdGlvblJl
Y3QuaXNMaW5lQnJlYWsoKSAmJiBzZWxlY3Rpb25SZWN0LmxpbmVOdW1iZXIoKSA+PSBtYXhMaW5l
TnVtYmVyKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25SZWN0
LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBzZWxlY3Rpb25SZWN0LmlzRmly
c3RPbkxpbmUoKSkgewotICAgICAgICAgICAgc2VsZWN0aW9uUmVjdC5zZXRMb2dpY2FsV2lkdGgo
c2VsZWN0aW9uUmVjdC5sb2dpY2FsV2lkdGgoKSArIHNlbGVjdGlvblJlY3QubG9naWNhbExlZnQo
KSAtIHNlbGVjdGlvblJlY3QubWluWCgpKTsKLSAgICAgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0
TG9naWNhbExlZnQoc2VsZWN0aW9uUmVjdC5taW5YKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHNl
bGVjdGlvblJlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSICYmIHNlbGVjdGlv
blJlY3QuaXNMYXN0T25MaW5lKCkpCi0gICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldExvZ2lj
YWxXaWR0aChzZWxlY3Rpb25SZWN0Lm1heFgoKSAtIHNlbGVjdGlvblJlY3QubG9naWNhbExlZnQo
KSk7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtYXhMaW5lTnVtYmVyOwotfQotCi12b2lkIFJh
bmdlOjpjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0cykg
Y29uc3QKLXsKLSAgICBpbnQgbWF4TGluZU51bWJlciA9IGNvbGxlY3RTZWxlY3Rpb25SZWN0c1dp
dGhvdXRVbmlvbkludGVyaW9yTGluZXMocmVjdHMpOwotICAgIGNvbnN0IHNpemVfdCBudW1iZXJP
ZlJlY3RzID0gcmVjdHMuc2l6ZSgpOwotICAgIAotICAgIC8vIFVuaW9uIGFsbCB0aGUgcmVjdGFu
Z2xlcyBvbiBpbnRlcmlvciBsaW5lcyAoaS5lLiBub3QgZmlyc3Qgb3IgbGFzdCkuCi0gICAgLy8g
T24gZmlyc3QgYW5kIGxhc3QgbGluZXMsIGp1c3QgYXZvaWQgaGF2aW5nIG92ZXJsYXBzIGJ5IG1l
cmdpbmcgaW50ZXJzZWN0aW5nIHJlY3RhbmdsZXMuCi0gICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+
IHVuaW9uZWRSZWN0czsKLSAgICBJbnRSZWN0IGludGVyaW9yVW5pb25SZWN0OwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWN0czsgKytpKSB7Ci0gICAgICAgIFNlbGVjdGlv
blJlY3QmIGN1cnJlbnRSZWN0ID0gcmVjdHNbaV07Ci0gICAgICAgIGlmIChjdXJyZW50UmVjdC5s
aW5lTnVtYmVyKCkgPT0gMSkgewotICAgICAgICAgICAgQVNTRVJUKGludGVyaW9yVW5pb25SZWN0
LmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICBpZiAoIXVuaW9uZWRSZWN0cy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgICAgICAgICBTZWxlY3Rpb25SZWN0JiBwcmV2aW91c1JlY3QgPSB1bmlvbmVkUmVj
dHMubGFzdCgpOwotICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1JlY3QucmVjdCgpLmludGVy
c2VjdHMoY3VycmVudFJlY3QucmVjdCgpKSkgewotICAgICAgICAgICAgICAgICAgICBwcmV2aW91
c1JlY3QgPSBjb2FsZXNjZVNlbGVjdGlvblJlY3RzKGN1cnJlbnRSZWN0LCBwcmV2aW91c1JlY3Qp
OwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAvLyBDb3VsZG4ndCBtZXJnZSB3aXRoIHByZXZpb3VzIHJl
Y3QsIHNvIGp1c3QgYXBwZW5kaW5nLgotICAgICAgICAgICAgdW5pb25lZFJlY3RzLmFwcGVuZChj
dXJyZW50UmVjdCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3QubGluZU51bWJlcigp
IDwgbWF4TGluZU51bWJlcikgewotICAgICAgICAgICAgaWYgKGludGVyaW9yVW5pb25SZWN0Lmlz
RW1wdHkoKSkgewotICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGNvbGxlY3RpbmcgaW50ZXJpb3Ig
cmVjdHMuCi0gICAgICAgICAgICAgICAgaW50ZXJpb3JVbmlvblJlY3QgPSBjdXJyZW50UmVjdC5y
ZWN0KCk7ICAgICAgICAgCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGludGVyaW9yVW5pb25SZWN0
LmludGVyc2VjdHMoY3VycmVudFJlY3QucmVjdCgpKQotICAgICAgICAgICAgICAgIHx8IGludGVy
aW9yVW5pb25SZWN0Lm1heFgoKSA9PSBjdXJyZW50UmVjdC5yZWN0KCkueCgpCi0gICAgICAgICAg
ICAgICAgfHwgaW50ZXJpb3JVbmlvblJlY3QubWF4WSgpID09IGN1cnJlbnRSZWN0LnJlY3QoKS55
KCkKLSAgICAgICAgICAgICAgICB8fCBpbnRlcmlvclVuaW9uUmVjdC54KCkgPT0gY3VycmVudFJl
Y3QucmVjdCgpLm1heFgoKQotICAgICAgICAgICAgICAgIHx8IGludGVyaW9yVW5pb25SZWN0Lnko
KSA9PSBjdXJyZW50UmVjdC5yZWN0KCkubWF4WSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gT25s
eSB1bmlvbiB0aGUgbGluZXMgdGhhdCBhcmUgYXR0YWNoZWQuCi0gICAgICAgICAgICAgICAgLy8g
Rm9yIGlCb29rcywgdGhlIGludGVyaW9yIGxpbmVzIG1heSBjcm9zcyBtdWx0aXBsZSBob3Jpem9u
dGFsIHBhZ2VzLgotICAgICAgICAgICAgICAgIGludGVyaW9yVW5pb25SZWN0LnVuaXRlKGN1cnJl
bnRSZWN0LnJlY3QoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVu
aW9uZWRSZWN0cy5hcHBlbmQoU2VsZWN0aW9uUmVjdChpbnRlcmlvclVuaW9uUmVjdCwgY3VycmVu
dFJlY3QuaXNIb3Jpem9udGFsKCksIGN1cnJlbnRSZWN0LnBhZ2VOdW1iZXIoKSkpOwotICAgICAg
ICAgICAgICAgIGludGVyaW9yVW5pb25SZWN0ID0gY3VycmVudFJlY3QucmVjdCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBsYXN0
IGxpbmUuCi0gICAgICAgICAgICBpZiAoIWludGVyaW9yVW5pb25SZWN0LmlzRW1wdHkoKSkgewot
ICAgICAgICAgICAgICAgIHVuaW9uZWRSZWN0cy5hcHBlbmQoU2VsZWN0aW9uUmVjdChpbnRlcmlv
clVuaW9uUmVjdCwgY3VycmVudFJlY3QuaXNIb3Jpem9udGFsKCksIGN1cnJlbnRSZWN0LnBhZ2VO
dW1iZXIoKSkpOwotICAgICAgICAgICAgICAgIGludGVyaW9yVW5pb25SZWN0ID0gSW50UmVjdCgp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQoIXVuaW9uZWRSZWN0cy5pc0Vt
cHR5KCkpOwotICAgICAgICAgICAgU2VsZWN0aW9uUmVjdCYgcHJldmlvdXNSZWN0ID0gdW5pb25l
ZFJlY3RzLmxhc3QoKTsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c1JlY3QubG9naWNhbFRvcCgp
ID09IGN1cnJlbnRSZWN0LmxvZ2ljYWxUb3AoKSAmJiBwcmV2aW91c1JlY3QucmVjdCgpLmludGVy
c2VjdHMoY3VycmVudFJlY3QucmVjdCgpKSkgewotICAgICAgICAgICAgICAgIC8vIHByZXZpb3Vz
UmVjdCBpcyBhbHNvIG9uIHRoZSBsYXN0IGxpbmUsIGFuZCBpbnRlcnNlY3RzIHRoZSBjdXJyZW50
IG9uZS4KLSAgICAgICAgICAgICAgICBwcmV2aW91c1JlY3QgPSBjb2FsZXNjZVNlbGVjdGlvblJl
Y3RzKGN1cnJlbnRSZWN0LCBwcmV2aW91c1JlY3QpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gQ291bGRuJ3QgbWVyZ2Ugd2l0aCBwcmV2
aW91cyByZWN0LCBzbyBqdXN0IGFwcGVuZGluZy4KLSAgICAgICAgICAgIHVuaW9uZWRSZWN0cy5h
cHBlbmQoY3VycmVudFJlY3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVjdHMuc3dhcCh1
bmlvbmVkUmVjdHMpOwotfQotI2VuZGlmCi0KICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiB2
b2lkIFJhbmdlOjpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0
aCkgY29uc3QKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKaW5kZXggM2JlY2ZkZDBlMjI0NjU4NGMwNGQ3NTk0ZDgw
MzY1MjBjZTM5OGM0Ni4uZmFiOGY4MmJhZmY4YjM1OWM4MjAxYjYyMWMwMWZmOTYwOTIyMzEyNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmgKQEAgLTk3LDkgKzk3LDYgQEAgcHVibGljOgogICAgIFBvc2l0aW9uIGVu
ZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9CiAKICAgICBX
RUJDT1JFX0VYUE9SVCBOb2RlKiBmaXJzdE5vZGUoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCBOb2RlKiBwYXN0TGFzdE5vZGUoKSBjb25zdDsKLQotICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jv
b3QoKSBjb25zdDsKIAogICAgIGVudW0gY2xhc3MgQm91bmRpbmdSZWN0QmVoYXZpb3IgOiB1aW50
OF90IHsKICAgICAgICAgUmVzcGVjdENsaXBwaW5nID0gMSA8PCAwLApAQCAtMTE0LDEwICsxMTEs
NiBAQCBwdWJsaWM6CiAKICAgICAvLyBUcmFuc2Zvcm0tZnJpZW5kbHkKICAgICBXRUJDT1JFX0VY
UE9SVCBGbG9hdFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9uU2V0PEJvdW5kaW5nUmVj
dEJlaGF2aW9yPiA9IHsgfSkgY29uc3Q7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBX
RUJDT1JFX0VYUE9SVCB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8U2VsZWN0aW9u
UmVjdD4mKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBpbnQgY29sbGVjdFNlbGVjdGlvblJl
Y3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mKSBjb25z
dDsKLSNlbmRpZgogCiAgICAgdm9pZCBub2RlQ2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUm
KTsKICAgICB2b2lkIG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYpOwpA
QCAtMTYwLDYgKzE1Myw4IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8RmxvYXRSZWN0PiBhYnNv
bHV0ZVJlY3RzRm9yUmFuZ2VJblRleHQoTm9kZSosIFJlbmRlclRleHQmLCBib29sIHVzZVNlbGVj
dGlvbkhlaWdodCwgYm9vbCYgaXNGaXhlZCwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9y
PikgY29uc3Q7CiAKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUoKSBjb25zdDsKKwogICAgIFJlZjxE
b2N1bWVudD4gbV9vd25lckRvY3VtZW50OwogICAgIFJhbmdlQm91bmRhcnlQb2ludCBtX3N0YXJ0
OwogICAgIFJhbmdlQm91bmRhcnlQb2ludCBtX2VuZDsKQEAgLTE2OSw3ICsxNjQsNyBAQCBXRUJD
T1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2Uq
KTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0
IFJhbmdlKik7CiAKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShj
b25zdCBSYW5nZSYpOwotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5n
ZT4mKTsKK1dFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBS
ZWY8UmFuZ2U+Jik7CiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNp
bXBsZVJhbmdlKGNvbnN0IFJhbmdlKik7CiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVS
YW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4mKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TaW1wbGVSYW5nZS5jcHAKaW5kZXggNmNhNTlmYjA2ZWEwOWViNTlkMDVlNTVhMWQyZDg2OWQw
MTcyZjc2NC4uNTMwYzcwNTJlMDM4MGNlZDA0NjMwNjA5NmYxZjk4ZGZmZTczZDhlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2ltcGxlUmFuZ2UuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJD
aGFyYWN0ZXJEYXRhLmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgotI2luY2x1ZGUgIlJh
bmdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsMTIgKzQzLDYgQEAgU2ltcGxl
UmFuZ2U6OlNpbXBsZVJhbmdlKEJvdW5kYXJ5UG9pbnQmJiBzdGFydCwgQm91bmRhcnlQb2ludCYm
IGVuZCkKIHsKIH0KIAotU2ltcGxlUmFuZ2U6OlNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJiBvdGhl
cikKLSAgICA6IHN0YXJ0KG90aGVyLnN0YXJ0Q29udGFpbmVyKCksIG90aGVyLnN0YXJ0T2Zmc2V0
KCkpCi0gICAgLCBlbmQob3RoZXIuZW5kQ29udGFpbmVyKCksIG90aGVyLmVuZE9mZnNldCgpKQot
ewotfQotCiBib29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBs
ZVJhbmdlJiBiKQogewogICAgIHJldHVybiBhLnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0g
Yi5lbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDYyODM3MDk2YjYxODc0M2FjZDY3
OWE0ZGY2ODE3YzNmZGRlZDU0OTEuLmY5NTMwMTM3MDJlMWRjNjUyNjViYTcxMjRhZWU0MDM3YjFh
NjczZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmFuZ2U7Ci0KIHN0cnVjdCBTaW1wbGVSYW5nZSB7
CiAgICAgQm91bmRhcnlQb2ludCBzdGFydDsKICAgICBCb3VuZGFyeVBvaW50IGVuZDsKQEAgLTQ0
LDExICs0Miw2IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBT
aW1wbGVSYW5nZShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwog
ICAgIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlKEJvdW5kYXJ5UG9pbnQmJiwgQm91bmRhcnlQ
b2ludCYmKTsKLQotICAgIC8vIENvbnZlbmllbmNlIG92ZXJsb2FkcyB0byBoZWxwIHdpdGggdHJh
bnNpdGlvbiBmcm9tIHVzaW5nIGEgbG90IG9mIGxpdmUgcmFuZ2VzLgotICAgIC8vIEZJWE1FOiBP
bmNlIHRyYW5zaXRpb24gaXMgb3ZlciwgcmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byB1c2Ug
bWFrZVNpbXBsZVJhbmdlIGluc3RlYWQuCi0gICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2Uo
Y29uc3QgUmFuZ2UmKTsKLSAgICBTaW1wbGVSYW5nZShjb25zdCBSZWY8UmFuZ2U+Jik7CiB9Owog
CiBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIoQm91bmRhcnlQb2ludCYmLCBCb3Vu
ZGFyeVBvaW50JiYpOwpAQCAtMTIyLDExICsxMTUsNiBAQCBpbmxpbmUgSW50ZXJzZWN0aW5nTm9k
ZVJhbmdlIGludGVyc2VjdGluZ05vZGVzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICBy
ZXR1cm4geyByYW5nZSB9OwogfQogCi1pbmxpbmUgU2ltcGxlUmFuZ2U6OlNpbXBsZVJhbmdlKGNv
bnN0IFJlZjxSYW5nZT4mIHJhbmdlKQotICAgIDogU2ltcGxlUmFuZ2UocmFuZ2UuZ2V0KCkpCi17
Ci19Ci0KIGlubGluZSBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIoQm91bmRhcnlQ
b2ludCYmIHN0YXJ0LCBCb3VuZGFyeVBvaW50JiYgZW5kKQogewogICAgIHJldHVybiB7IFdURk1v
dmUoc3RhcnQpLCBXVEZNb3ZlKGVuZCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDkzM2IwOTUzZWU3YmI1Y2Uy
ZThmNDc4NTNlMzI1ZmVhNmYzZTdkMGQuLjI1YWFjY2ZjZjQwY2FmYThlNzNiOTJiOTJmYzRhODhm
NTkyYTgyOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyLmNwcApAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVU
ZXh0Q29udHJvbGxlcjo6dGltZXJGaXJlZCgpCiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBl
U3BlbGxpbmdTdWdnZXN0aW9uczogewogICAgICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRp
dmUgfHwgcGxhaW5UZXh0KCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKSAhPSBtX29yaWdpbmFsVGV4
dCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBs
YWluVGV4dChUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKCptX3JhbmdlV2l0
aEFsdGVybmF0aXZlKSkucGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgICAgIFN0cmluZyBwYXJhZ3Jh
cGhUZXh0ID0gcGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaCgqbV9yYW5nZVdpdGhBbHRl
cm5hdGl2ZSkucGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dl
c3Rpb25zOwogICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdp
bmFsVGV4dCwgcGFyYWdyYXBoVGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSwgc3VnZ2VzdGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CkBA
IC01MjMsNyArNTIzLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25k
VG9NYXJrZXJBdEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAgICBpZiAoIXNob3Vs
ZFN0YXJ0VGltZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5l
ck5vZGUoKSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBub2RlID0gZW5kT2ZX
b3JkUG9zaXRpb24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8gd29yZFJhbmdlID0gcmFuZ2Uo
Km5vZGUsIG1hcmtlcik7CisgICAgYXV0byB3b3JkUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKm5v
ZGUsIG1hcmtlcik7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5n
ZSk7CiAgICAgaWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNTkxLDcgKzU5MSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBw
bHlBbHRlcm5hdGl2ZVRleHRUb1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByCiAgICAgYXV0byBj
b3JyZWN0aW9uT2Zmc2V0SW5QYXJhZ3JhcGggPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhT
dGFydCwgcmFuZ2Uuc3RhcnQgfSk7CiAgICAgYXV0byBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29w
ZSA9IGNoYXJhY3RlckNvdW50KHsgdHJlZVNjb3BlU3RhcnQsICpwYXJhZ3JhcGhTdGFydCB9KTsK
IAotICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2Uo
cmFuZ2UpLCBhbHRlcm5hdGl2ZSktPmFwcGx5KCk7CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHJhbmdlLCBhbHRlcm5hdGl2ZSktPmFwcGx5KCk7CiAKICAgICAvLyBSZWNh
bGN1bGF0ZSBwcmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5h
bCBwYXJhZ3JhcGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4g
UmFkYXI6IDEwMzA1MzE1IEJ1Z3ppbGxhOiA4OTUyNgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFw
aFN0YXJ0Q29udGFpbmluZ0NvcnJlY3Rpb24gPSByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHRyZWVTY29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZz
ZXRJblRyZWVTY29wZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRp
bmdTdHlsZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5k
ZXggZWZmYWY0OTc5ZDJjNDRmNTJkZjU5MTYwMTk2YjcyMzE0NmI0MDVlYi4uYjdkNzJlNWM0ZTY1
ZTYxOTU4YjllMWZlNGY5MjZlMjZiY2FmMzYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmNwcApAQCAtMTUxNCw3ICsxNTE0LDcgQEAgUmVmUHRyPEVkaXRpbmdTdHlsZT4g
RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYKICAgICAvLyBhbmQgZmluZCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY29tbW9uIGFu
Y2VzdG9yLgogICAgIGlmIChzaG91bGRVc2VCYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdCAmJiAoc2Vs
ZWN0aW9uLmlzUmFuZ2UoKSB8fCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihzdHlsZS0+
bV9tdXRhYmxlU3R5bGUuZ2V0KCkpKSkgewogICAgICAgICBpZiAoYXV0byByYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9
IGJhY2tncm91bmRDb2xvckluRWZmZWN0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb21tb25B
bmNlc3RvckNvbnRhaW5lcigpKSkKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gYmFja2dy
b3VuZENvbG9ySW5FZmZlY3QoY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKS5nZXQoKSkp
CiAgICAgICAgICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yLCB2YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcAppbmRleCBjNGE3YmM5MjY2YjgzMzhkN2QwMTcxY2I5ZjI4ZTMyMzBjZGVi
YjI5Li43MDdmYWVhMzdkY2UxZjdlNzAwM2RjOGZjNDY5NmM0ZTc3YzQ2MjYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0yNjc3LDcgKzI2NzcsNyBAQCB2b2lkIEVkaXRvcjo6bWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhPcHRpb25TZXQ8VGV4dENoZWNr
aW5nVHlwZQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvJiByYW5nZVRvQ2hlY2sgPSBzaG91
bGRNYXJrR3JhbW1hciA/ICpncmFtbWFyUmFuZ2UgOiAqc3BlbGxpbmdSYW5nZTsKLSAgICBUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoVG9DaGVjayhjcmVhdGVMaXZlUmFuZ2UocmFuZ2VU
b0NoZWNrKSk7CisgICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaFRvQ2hlY2socmFu
Z2VUb0NoZWNrKTsKICAgICBpZiAocGFyYWdyYXBoVG9DaGVjay5pc0VtcHR5KCkpCiAgICAgICAg
IHJldHVybjsKIApAQCAtMjcyMyw3ICsyNzIzLDcgQEAgc3RhdGljIGJvb2wgaXNBdXRvbWF0aWNU
ZXh0UmVwbGFjZW1lbnRUeXBlKFRleHRDaGVja2luZ1R5cGUgdHlwZSkKIAogdm9pZCBFZGl0b3I6
OnJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9S
ZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50KQogewotICAgIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQ6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2VUb1JlcGxhY2UpLCByZXBs
YWNlbWVudCktPmFwcGx5KCk7CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRl
KHJhbmdlVG9SZXBsYWNlLCByZXBsYWNlbWVudCktPmFwcGx5KCk7CiB9CiAKIHN0YXRpYyB2b2lk
IGNvcnJlY3RTcGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0
Q2hlY2tpbmdQYXJhZ3JhcGgmIHBhcmFncmFwaCwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9S
ZXBsYWNlLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50LCBDaGFyYWN0ZXJSYW5nZSByZXN1bHRD
aGFyYWN0ZXJSYW5nZSkKQEAgLTI3MzEsNyArMjczMSw3IEBAIHN0YXRpYyB2b2lkIGNvcnJlY3RT
cGVsbGNoZWNraW5nUHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaChUZXh0Q2hlY2tpbmdQ
YXJhCiAgICAgYXV0byBzY29wZU5vZGUgPSBtYWtlUmVmKGRvd25jYXN0PENvbnRhaW5lck5vZGU+
KHBhcmFncmFwaC5wYXJhZ3JhcGhSYW5nZSgpLnN0YXJ0Q29udGFpbmVyKCkucm9vdE5vZGUoKSkp
OwogICAgIGF1dG8gcGFyYWdyYXBoQ2hhcmFjdGVyUmFuZ2UgPSBjaGFyYWN0ZXJSYW5nZShtYWtl
Qm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhzY29wZU5vZGUpLCBwYXJhZ3JhcGgucGFy
YWdyYXBoUmFuZ2UoKSk7CiAKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUo
Y3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOwor
ICAgIFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVw
bGFjZW1lbnQpLT5hcHBseSgpOwogCiAgICAgLy8gVGV4dENoZWNraW5nUGFyYWdyYXBoIG1heSBi
ZSBvcnBoYW5lZCBhZnRlciBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kIG11dGF0ZWQgRE9NLgog
ICAgIC8vIFNlZSA8cmRhcjovLzEwMzA1MzE1PiwgaHR0cDovL3dlYmtpdC5vcmcvYi84OTUyNi4K
QEAgLTI5MjEsNyArMjkyMSw3IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0
cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgICAgICByZXR1cm47CiAgICAg
CiAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZWNvcmRBdXRvY29ycmVjdGlvblJl
c3BvbnNlKEF1dG9jb3JyZWN0aW9uUmVzcG9uc2U6OlJldmVydGVkLCByZXBsYWNlZFN0cmluZywg
KnNlbGVjdGlvbik7Ci0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaChjcmVhdGVM
aXZlUmFuZ2UoKnNlbGVjdGlvbikpOworICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3Jh
cGgoKnNlbGVjdGlvbik7CiAgICAgcmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KHJlcGxhY2VkU3Ry
aW5nLCBTZWxlY3RSZXBsYWNlbWVudDo6Tm8sIFNtYXJ0UmVwbGFjZTo6Tm8sIEVkaXRBY3Rpb246
Okluc2VydCk7CiAgICAgYXV0byBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UoQ2hh
cmFjdGVyUmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVu
Z3RoKCkpKTsKICAgICBhZGRNYXJrZXIoY2hhbmdlZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6UmVw
bGFjZW1lbnQsIFN0cmluZygpKTsKQEAgLTM1NzcsNyArMzU3Nyw3IEBAIHVuc2lnbmVkIEVkaXRv
cjo6Y291bnRNYXRjaGVzRm9yVGV4dChjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgT3B0aW9u
YWw8U2ltcGxlCiAKICAgICAgICAgKyttYXRjaENvdW50OwogICAgICAgICBpZiAobWF0Y2hlcykK
LSAgICAgICAgICAgIG1hdGNoZXMtPmFwcGVuZChjcmVhdGVMaXZlUmFuZ2UocmVzdWx0UmFuZ2Up
KTsKKyAgICAgICAgICAgIG1hdGNoZXMtPmFwcGVuZChyZXN1bHRSYW5nZSk7CiAKICAgICAgICAg
aWYgKG1hcmtNYXRjaGVzKQogICAgICAgICAgICAgYWRkTWFya2VyKHJlc3VsdFJhbmdlLCBEb2N1
bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRM
aXN0Q29tbWFuZC5jcHAKaW5kZXggMmU3YzhkNmI2NTAzYmRmMmU0MDQzZjQyNTE3MWE5MzlmNzQ4
ZTMzYi4uNGJhNTVkMmQ2NjIzMTI1NmJiYmFkYzk1YmUwNDUxYjE3YWI4NDI0NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHAKQEAgLTE0Myw3ICsxNDMs
NyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgIGlmIChz
dGFydE9mTGFzdFBhcmFncmFwaC5pc05vdE51bGwoKSAmJiBzdGFydE9mUGFyYWdyYXBoKHN0YXJ0
T2ZTZWxlY3Rpb24sIENhblNraXBPdmVyRWRpdGluZ0JvdW5kYXJ5KSAhPSBzdGFydE9mTGFzdFBh
cmFncmFwaCkgewogICAgICAgICAgICAgICAgIGJvb2wgZm9yY2VDcmVhdGVMaXN0ID0gIXNlbGVj
dGlvbkhhc0xpc3RPZlR5cGUoc2VsZWN0aW9uLCBsaXN0VGFnKTsKIAotICAgICAgICAgICAgICAg
IGF1dG8gY3VycmVudFNlbGVjdGlvbiA9IGNyZWF0ZUxpdmVSYW5nZShlbmRpbmdTZWxlY3Rpb24o
KS5maXJzdFJhbmdlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gY3VycmVudFNlbGVjdGlvbiA9
ICplbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CiAgICAgICAgICAgICAgICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZlNlbGVjdGlvbjsKICAg
ICAgICAgICAgICAgICB3aGlsZSAoc3RhcnRPZkN1cnJlbnRQYXJhZ3JhcGguaXNOb3ROdWxsKCkg
JiYgIWluU2FtZVBhcmFncmFwaChzdGFydE9mQ3VycmVudFBhcmFncmFwaCwgc3RhcnRPZkxhc3RQ
YXJhZ3JhcGgsIENhbkNyb3NzRWRpdGluZ0JvdW5kYXJ5KSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBkb0FwcGx5KCkgbWF5IG9wZXJhdGUgb24gYW5kIHJlbW92ZSB0aGUgbGFzdCBwYXJhZ3Jh
cGggb2YgdGhlIHNlbGVjdGlvbiBmcm9tIHRoZSBkb2N1bWVudApAQCAtMTYyLDcgKzE2Miw3IEBA
IHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICAgICAgICAgICAgICAv
LyBCdXQgbm90IHVzaW5nIGluZGV4IGlzIGhhcmQgYmVjYXVzZSB0aGVyZSBhcmUgc28gbWFueSB3
YXlzIHdlIGNhbiBsb3NlIHNlbGVjdGlvbiBpbnNpZGUgZG9BcHBseUZvclNpbmdsZVBhcmFncmFw
aC4KICAgICAgICAgICAgICAgICAgICAgUmVmUHRyPENvbnRhaW5lck5vZGU+IHNjb3BlOwogICAg
ICAgICAgICAgICAgICAgICBpbnQgaW5kZXhGb3JFbmRPZlNlbGVjdGlvbiA9IGluZGV4Rm9yVmlz
aWJsZVBvc2l0aW9uKGVuZE9mU2VsZWN0aW9uLCBzY29wZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0VGFnLCBjdXJy
ZW50U2VsZWN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZG9BcHBseUZvclNpbmds
ZVBhcmFncmFwaChmb3JjZUNyZWF0ZUxpc3QsIGxpc3RUYWcsIGN1cnJlbnRTZWxlY3Rpb24pOwog
ICAgICAgICAgICAgICAgICAgICBpZiAoZW5kT2ZTZWxlY3Rpb24uaXNOdWxsKCkgfHwgZW5kT2ZT
ZWxlY3Rpb24uaXNPcnBoYW4oKSB8fCBzdGFydE9mTGFzdFBhcmFncmFwaC5pc051bGwoKSB8fCBz
dGFydE9mTGFzdFBhcmFncmFwaC5pc09ycGhhbigpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmRPZlNlbGVjdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvckluZGV4KGluZGV4Rm9yRW5kT2ZT
ZWxlY3Rpb24sIHNjb3BlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGVu
ZE9mU2VsZWN0aW9uIGlzIG51bGwsIHRoZW4gc29tZSBjb250ZW50cyBoYXZlIGJlZW4gZGVsZXRl
ZCBmcm9tIHRoZSBkb2N1bWVudC4KQEAgLTE4Myw3ICsxODMsNyBAQCB2b2lkIEluc2VydExpc3RD
b21tYW5kOjpkb0FwcGx5KCkKICAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkN1cnJlbnRQYXJh
Z3JhcGggPSBzdGFydE9mTmV4dFBhcmFncmFwaChlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlU3Rh
cnQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVj
dGlvbihlbmRPZlNlbGVjdGlvbik7Ci0gICAgICAgICAgICAgICAgZG9BcHBseUZvclNpbmdsZVBh
cmFncmFwaChmb3JjZUNyZWF0ZUxpc3QsIGxpc3RUYWcsIGN1cnJlbnRTZWxlY3Rpb24uZ2V0KCkp
OworICAgICAgICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVM
aXN0LCBsaXN0VGFnLCBjdXJyZW50U2VsZWN0aW9uKTsKICAgICAgICAgICAgICAgICAvLyBGZXRj
aCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24sIGZvciB0aGUgcmVhc29uIG1lbnRpb25lZCBhYm92
ZS4KICAgICAgICAgICAgICAgICBlbmRPZlNlbGVjdGlvbiA9IGVuZGluZ1NlbGVjdGlvbigpLnZp
c2libGVFbmQoKTsKICAgICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oVmlzaWJsZVNl
bGVjdGlvbihzdGFydE9mU2VsZWN0aW9uLCBlbmRPZlNlbGVjdGlvbiwgZW5kaW5nU2VsZWN0aW9u
KCkuaXNEaXJlY3Rpb25hbCgpKSk7CkBAIC0xOTIsNyArMTkyLDggQEAgdm9pZCBJbnNlcnRMaXN0
Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBkb0FwcGx5Rm9yU2lu
Z2xlUGFyYWdyYXBoKGZhbHNlLCBsaXN0VGFnLCBjcmVhdGVMaXZlUmFuZ2UoZW5kaW5nU2VsZWN0
aW9uKCkuZmlyc3RSYW5nZSgpKS5nZXQoKSk7CisgICAgYXV0byByYW5nZSA9IGVuZGluZ1NlbGVj
dGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZhbHNl
LCBsaXN0VGFnLCAqcmFuZ2UpOwogfQogCiBFZGl0QWN0aW9uIEluc2VydExpc3RDb21tYW5kOjpl
ZGl0aW5nQWN0aW9uKCkgY29uc3QKQEAgLTIwMCw3ICsyMDEsNyBAQCBFZGl0QWN0aW9uIEluc2Vy
dExpc3RDb21tYW5kOjplZGl0aW5nQWN0aW9uKCkgY29uc3QKICAgICByZXR1cm4gbV90eXBlID09
IFR5cGU6Ok9yZGVyZWRMaXN0ID8gRWRpdEFjdGlvbjo6SW5zZXJ0T3JkZXJlZExpc3QgOiBFZGl0
QWN0aW9uOjpJbnNlcnRVbm9yZGVyZWRMaXN0OwogfQogCi12b2lkIEluc2VydExpc3RDb21tYW5k
Ojpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBjb25zdCBI
VE1MUXVhbGlmaWVkTmFtZSYgbGlzdFRhZywgUmFuZ2UqIGN1cnJlbnRTZWxlY3Rpb24pCit2b2lk
IEluc2VydExpc3RDb21tYW5kOjpkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VD
cmVhdGVMaXN0LCBjb25zdCBIVE1MUXVhbGlmaWVkTmFtZSYgbGlzdFRhZywgU2ltcGxlUmFuZ2Um
IGN1cnJlbnRTZWxlY3Rpb24pCiB7CiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBwcm9kdWNlIHVu
ZXhwZWN0ZWQgcmVzdWx0cyBmb3IgYSBzZWxlY3Rpb24gdGhhdCBzdGFydHMganVzdCBiZWZvcmUg
YQogICAgIC8vIHRhYmxlIGFuZCBlbmRzIGluc2lkZSB0aGUgZmlyc3QgY2VsbCwgc2VsZWN0aW9u
Rm9yUGFyYWdyYXBoSXRlcmF0aW9uIHNob3VsZCBwcm9iYWJseQpAQCAtMjI5LDkgKzIzMCw5IEBA
IHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBm
b3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAg
Ly8gSWYgdGhlIGVudGlyZSBsaXN0IGlzIHNlbGVjdGVkLCB0aGVuIGNvbnZlcnQgdGhlIHdob2xl
IGxpc3QuCi0gICAgICAgIGlmIChzd2l0Y2hMaXN0VHlwZSAmJiBpc05vZGVWaXNpYmx5Q29udGFp
bmVkV2l0aGluKCpsaXN0Tm9kZSwgKmN1cnJlbnRTZWxlY3Rpb24pKSB7Ci0gICAgICAgICAgICBi
b29sIHJhbmdlU3RhcnRJc0luTGlzdCA9IHZpc2libGVQb3NpdGlvbkJlZm9yZU5vZGUoKmxpc3RO
b2RlKSA9PSBjdXJyZW50U2VsZWN0aW9uLT5zdGFydFBvc2l0aW9uKCk7Ci0gICAgICAgICAgICBi
b29sIHJhbmdlRW5kSXNJbkxpc3QgPSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoKmxpc3ROb2Rl
KSA9PSBjdXJyZW50U2VsZWN0aW9uLT5lbmRQb3NpdGlvbigpOworICAgICAgICBpZiAoc3dpdGNo
TGlzdFR5cGUgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqbGlzdE5vZGUsIGN1cnJl
bnRTZWxlY3Rpb24pKSB7CisgICAgICAgICAgICBib29sIHJhbmdlU3RhcnRJc0luTGlzdCA9IHZp
c2libGVQb3NpdGlvbkJlZm9yZU5vZGUoKmxpc3ROb2RlKSA9PSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oY3VycmVudFNlbGVjdGlvbi5zdGFydCk7CisgICAgICAgICAgICBib29sIHJhbmdl
RW5kSXNJbkxpc3QgPSB2aXNpYmxlUG9zaXRpb25BZnRlck5vZGUoKmxpc3ROb2RlKSA9PSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY3VycmVudFNlbGVjdGlvbi5lbmQpOwogCiAgICAgICAg
ICAgICBSZWZQdHI8SFRNTEVsZW1lbnQ+IG5ld0xpc3QgPSBjcmVhdGVIVE1MRWxlbWVudChkb2N1
bWVudCgpLCBsaXN0VGFnKTsKICAgICAgICAgICAgIGluc2VydE5vZGVCZWZvcmUoKm5ld0xpc3Qs
ICpsaXN0Tm9kZSk7CkBAIC0yNTQsOSArMjU1LDkgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6
ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFQK
ICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIHN0YXJ0IGFuZCB0aGUgZW5kIG9mIGN1cnJlbnQg
c2VsZWN0aW9uIGlmIHRoZXkgc3RhcnRlZCBpbnNpZGUgbGlzdE5vZGUKICAgICAgICAgICAgIC8v
IGJlY2F1c2UgbW92ZVBhcmFncmFwaFdpdGhDbG9uZXMgY291bGQgaGF2ZSByZW1vdmVkIHRoZW0u
CiAgICAgICAgICAgICBpZiAocmFuZ2VTdGFydElzSW5MaXN0ICYmIG5ld0xpc3QpCi0gICAgICAg
ICAgICAgICAgY3VycmVudFNlbGVjdGlvbi0+c2V0U3RhcnQoKm5ld0xpc3QsIDApOworICAgICAg
ICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24uc3RhcnQgPSBtYWtlQm91bmRhcnlQb2ludEJlZm9y
ZU5vZGVDb250ZW50cygqbmV3TGlzdCk7CiAgICAgICAgICAgICBpZiAocmFuZ2VFbmRJc0luTGlz
dCAmJiBuZXdMaXN0KQotICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNldEVuZCgq
bmV3TGlzdCwgbmV3TGlzdC0+bGVuZ3RoKCkpOworICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxl
Y3Rpb24uZW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqbmV3TGlzdCk7
CiAKICAgICAgICAgICAgIHNldEVuZGluZ1NlbGVjdGlvbihWaXNpYmxlUG9zaXRpb24oZmlyc3RQ
b3NpdGlvbkluTm9kZShuZXdMaXN0LmdldCgpKSkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0luc2VydExpc3RDb21tYW5kLmgKaW5kZXggYWI4MmEyNzk3M2Q0MTczMzBhNzllMmRjMTgzYjc3
NWQyNGRmZjhlZC4uNDE5OWY2OTkyNmI5YjNlMDBiMzI4MjQ3Yjk0NzQ1NzUxZTE4YmM2NSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuaApAQCAtNTQsNyArNTQs
NyBAQCBwcml2YXRlOgogICAgIEhUTUxFbGVtZW50KiBmaXhPcnBoYW5lZExpc3RDaGlsZChOb2Rl
Jik7CiAgICAgYm9vbCBzZWxlY3Rpb25IYXNMaXN0T2ZUeXBlKGNvbnN0IFZpc2libGVTZWxlY3Rp
b24mIHNlbGVjdGlvbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogICAgIFJlZjxIVE1MRWxlbWVu
dD4gbWVyZ2VXaXRoTmVpZ2hib3JpbmdMaXN0cyhIVE1MRWxlbWVudCYpOwotICAgIHZvaWQgZG9B
cHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFRNTFF1
YWxpZmllZE5hbWUmLCBSYW5nZSogY3VycmVudFNlbGVjdGlvbik7CisgICAgdm9pZCBkb0FwcGx5
Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBjb25zdCBIVE1MUXVhbGlm
aWVkTmFtZSYsIFNpbXBsZVJhbmdlJiBjdXJyZW50U2VsZWN0aW9uKTsKICAgICB2b2lkIHVubGlz
dGlmeVBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsIEhUTUxF
bGVtZW50KiBsaXN0Tm9kZSwgTm9kZSogbGlzdENoaWxkTm9kZSk7CiAgICAgUmVmUHRyPEhUTUxF
bGVtZW50PiBsaXN0aWZ5UGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgb3JpZ2luYWxT
dGFydCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbGlzdFRhZyk7CiAgICAgUmVmUHRyPEhUTUxFbGVt
ZW50PiBtX2xpc3RFbGVtZW50OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3Bw
CmluZGV4IDUwNjA4YWI5NjExMmNjODBiNGFkOGM3MTk5ODYyZWM1MmIwMWQ4ZDEuLjE0ODkzZjFm
NDlkYTRlZDk2NGUwYWMzNmNmZjQ2MWJlZWYxNGMxNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsQ2hlY2tlci5jcHAKQEAgLTE0Myw4ICsxNDMsMTQgQEAgYm9vbCBTcGVsbENoZWNrZXI6
OmNhbkNoZWNrQXN5bmNocm9ub3VzbHkoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdAog
CiBib29sIFNwZWxsQ2hlY2tlcjo6aXNDaGVja2FibGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdl
KSBjb25zdAogewotICAgIGF1dG8gZmlyc3ROb2RlID0gY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+
Zmlyc3ROb2RlKCk7Ci0gICAgaWYgKCFmaXJzdE5vZGUgfHwgIWZpcnN0Tm9kZS0+cmVuZGVyZXIo
KSkKKyAgICBib29sIGZvdW5kUmVuZGVyZXIgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIG5vZGUg
OiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZSkpIHsKKyAgICAgICAgaWYgKG5vZGUucmVuZGVyZXIo
KSkgeworICAgICAgICAgICAgZm91bmRSZW5kZXJlciA9IHRydWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIWZvdW5kUmVuZGVyZXIpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICBhdXRvJiBub2RlID0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLmdldCgp
OwogICAgIHJldHVybiAhaXM8RWxlbWVudD4obm9kZSkgfHwgZG93bmNhc3Q8RWxlbWVudD4obm9k
ZSkuaXNTcGVsbENoZWNraW5nRW5hYmxlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IDI1NDYwMjNmNjQwNTdmODNkOTIxNjlhNThhZTQ1
MWEzNjMzMDg1ZWQuLjZjZTZhYjc4ZDZiMDhlZTI3NzVhNDgwMTY3YTlhYjZlZTlhNzgzZWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTQ1
NSw3ICs0NTUsNyBAQCBhdXRvIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZFVuZ3JhbW1hdGljYWxQ
aHJhc2VzKE9wZXJhdGlvbiBvcGVyYXRpb24pIGNvbnN0IC0+CiAgICAgLy8gRXhwYW5kIHRoZSBz
ZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSBncmFtbWFy
IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBjb250ZXh0LgogICAgIC8vIERldGVybWluZSB0aGUg
Y2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBz
dGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdpbGwg
d2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCi0gICAgVGV4dENoZWNraW5nUGFy
YWdyYXBoIHBhcmFncmFwaChjcmVhdGVMaXZlUmFuZ2UobV9yYW5nZSkpOworICAgIFRleHRDaGVj
a2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgobV9yYW5nZSk7CiAgICAgCiAgICAgLy8gU3RhcnQgY2hl
Y2tpbmcgZnJvbSBiZWdpbm5pbmcgb2YgcGFyYWdyYXBoLCBidXQgc2tpcCBwYXN0IHJlc3VsdHMg
dGhhdCBvY2N1ciBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2Uu
CiAgICAgZm9yICh1aW50NjRfdCBzdGFydE9mZnNldCA9IDA7IHN0YXJ0T2Zmc2V0IDwgcGFyYWdy
YXBoLmNoZWNraW5nRW5kKCk7ICkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9UeXBpbmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHAKaW5kZXggZmM5NzU3NzQ4MzExY2QxMmZiZGQ3MmUxYjI0ZmU0YmIwZjA3MDlhYy4uZTE2
ZTUyZWE5ZmJhZDcxMThiZjgwYTJlZDMyY2M5NzMwMjI4ZmE2YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBAIC03MzUsNyArNzM1LDcgQEAgdm9pZCBUeXBpbmdD
b21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9v
bCBzaG91bGRBZGQKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJp
bmcpCi0gICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKGNyZWF0
ZUxpdmVSYW5nZSgqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSksIEVkaXRv
cjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpQcmVwZW5kVGV4dCk7CisgICAgICAgIGRvY3VtZW50
KCkuZWRpdG9yKCkuYWRkUmFuZ2VUb0tpbGxSaW5nKCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1h
bGl6ZWRSYW5nZSgpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJlcGVuZFRleHQp
OwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFj
dHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0
aWxsIHZhbGlkCiAgICAgcG9zdFRleHRTdGF0ZUNoYW5nZU5vdGlmaWNhdGlvbkZvckRlbGV0aW9u
KHNlbGVjdGlvblRvRGVsZXRlKTsKQEAgLTg0Niw3ICs4NDYsNyBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwg
Ym9vbCBzaAogICAgIHBvc3RUZXh0U3RhdGVDaGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlvbihz
ZWxlY3Rpb25Ub0RlbGV0ZSk7CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmluZykKLSAgICAg
ICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoY3JlYXRlTGl2ZVJhbmdl
KCpzZWxlY3Rpb25Ub0RlbGV0ZS50b05vcm1hbGl6ZWRSYW5nZSgpKSwgRWRpdG9yOjpLaWxsUmlu
Z0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigp
LmFkZFJhbmdlVG9LaWxsUmluZygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2Uo
KSwgRWRpdG9yOjpLaWxsUmluZ0luc2VydGlvbk1vZGU6OkFwcGVuZFRleHQpOwogICAgIC8vIG1h
a2UgdW5kbyBzZWxlY3Qgd2hhdCB3YXMgZGVsZXRlZAogICAgIHNldFN0YXJ0aW5nU2VsZWN0aW9u
KHNlbGVjdGlvbkFmdGVyVW5kbyk7CiAgICAgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmRlbGV0ZVNl
bGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSwgbV9zbWFydERlbGV0ZSwgLyogbWVyZ2VCbG9ja3NB
ZnRlckRlbGV0ZSovIHRydWUsIC8qIHJlcGxhY2UqLyBmYWxzZSwgZXhwYW5kRm9yU3BlY2lhbEVs
ZW1lbnRzLCAvKnNhbml0aXplTWFya3VwKi8gdHJ1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lv
cy9FZGl0b3JJT1MubW0KaW5kZXggMTc4ZDI3NGZmNTA0MGE3MTE5YjIyNTAwNTMwZGUwZmQ3MDE4
NWM5OS4uNzIxMGQzZjljMGFlMWU1YTcxYjNmMjBjYzhmMTEwYWMzODVjNjAxNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQpAQCAtMzUxLDkgKzM1MSw3IEBAIHZvaWQg
RWRpdG9yOjpzZXRUZXh0QXNDaGlsZE9mRWxlbWVudChjb25zdCBTdHJpbmcmIHRleHQsIEVsZW1l
bnQmIGVsZW1lbnQpCiAgICAgICAgIGlmIChwYXJlbnQpCiAgICAgICAgICAgICBlbGVtZW50LnJl
bW92ZSgpOwogCi0gICAgICAgIGF1dG8gY29udGV4dCA9IGRvY3VtZW50KCkuY3JlYXRlUmFuZ2Uo
KTsKLSAgICAgICAgY29udGV4dC0+c2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpOwotICAgICAg
ICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoY29udGV4dCwgdGV4
dCkpOworICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUZyYWdtZW50RnJvbVRleHQo
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGVsZW1lbnQpLCB0ZXh0KSk7CiAKICAgICAg
ICAgLy8gcmVzdG9yZSBlbGVtZW50IHRvIGRvY3VtZW50CiAgICAgICAgIGlmIChwYXJlbnQpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNwcAppbmRleCBlYzJkOWI0NzhhZmMyYjk2MjU0MzcyNWU2
YjE4YThiOTVjMzhmOTE0Li5lNWU2ZmM5ZDM1NzRhODBhNzIzMjY0N2IwZGI0ZWIwOGMwMDY4OTM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9tYXJrdXAuY3BwCkBAIC0xMTU3LDE0ICsxMTU3LDEzIEBAIFJl
ZjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFnbWVudEZyb21UZXh0KGNvbnN0IFNpbXBsZVJh
bmdlJiBjb250ZXh0LCBjb25zdCBTCiAgICAgfQogCiAgICAgLy8gQnJlYWsgc3RyaW5nIGludG8g
cGFyYWdyYXBocy4gRXh0cmEgbGluZSBicmVha3MgdHVybiBpbnRvIGVtcHR5IHBhcmFncmFwaHMu
Ci0gICAgTm9kZSogYmxvY2tOb2RlID0gZW5jbG9zaW5nQmxvY2soY3JlYXRlTGl2ZVJhbmdlKGNv
bnRleHQpLT5maXJzdE5vZGUoKSk7Ci0gICAgRWxlbWVudCogYmxvY2sgPSBkb3duY2FzdDxFbGVt
ZW50PihibG9ja05vZGUpOwotICAgIGJvb2wgdXNlQ2xvbmVzT2ZFbmNsb3NpbmdCbG9jayA9IGJs
b2NrTm9kZQotICAgICAgICAmJiBibG9ja05vZGUtPmlzRWxlbWVudE5vZGUoKQorICAgIGF1dG8g
c3RhcnQgPSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29udGV4dC5zdGFydCk7CisgICAg
YXV0byBibG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0LmZpcnN0Tm9kZSgpLmdldCgpKTsKKyAg
ICBib29sIHVzZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBibG9jawogICAgICAgICAmJiAhYmxv
Y2stPmhhc1RhZ05hbWUoYm9keVRhZykKICAgICAgICAgJiYgIWJsb2NrLT5oYXNUYWdOYW1lKGh0
bWxUYWcpCi0gICAgICAgICYmIGJsb2NrICE9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSk7Ci0gICAgYm9vbCB1c2VMaW5l
QnJlYWsgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKGNvbnRleHQuc3RhcnQpKTsKKyAgICAgICAgJiYgYmxvY2sgIT0gZWRpdGFibGVSb290Rm9y
UG9zaXRpb24oc3RhcnQpOworICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZv
cm1Db250cm9sKHN0YXJ0KTsKIAogICAgIFZlY3RvcjxTdHJpbmc+IGxpc3QgPSBzdHJpbmcuc3Bs
aXRBbGxvd2luZ0VtcHR5RW50cmllcygnXG4nKTsKICAgICBzaXplX3QgbnVtTGluZXMgPSBsaXN0
LnNpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCmluZGV4IGRm
ZjEyYzNiOGJkY2I4OWEyNTYyYTlhNzYzNDg1YWRkMTYwY2E5OWIuLjNiNDA1MmQ0OWU1NTQwMGFh
MzBiYmU3ZWE3MTgzYzdhNDZiOGM3YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvd2luL0VkaXRvcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy93aW4vRWRp
dG9yV2luLmNwcApAQCAtNDMsNyArNDMsNyBAQCB2b2lkIEVkaXRvcjo6cGFzdGVXaXRoUGFzdGVi
b2FyZChQYXN0ZWJvYXJkKiBwYXN0ZWJvYXJkLCBPcHRpb25TZXQ8UGFzdGVPcHRpb24+CiAgICAg
ICAgIHJldHVybjsKIAogICAgIGJvb2wgY2hvc2VQbGFpblRleHQ7Ci0gICAgYXV0byBmcmFnbWVu
dCA9IHBhc3RlYm9hcmQtPmRvY3VtZW50RnJhZ21lbnQoKm1fZG9jdW1lbnQuZnJhbWUoKSwgY3Jl
YXRlTGl2ZVJhbmdlKCpyYW5nZSksIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93
UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOworICAgIGF1dG8gZnJhZ21lbnQgPSBwYXN0ZWJv
YXJkLT5kb2N1bWVudEZyYWdtZW50KCptX2RvY3VtZW50LmZyYW1lKCksICpyYW5nZSwgb3B0aW9u
cy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QWxsb3dQbGFpblRleHQpLCBjaG9zZVBsYWluVGV4dCk7
CiAKICAgICBpZiAoZnJhZ21lbnQgJiYgb3B0aW9ucy5jb250YWlucyhQYXN0ZU9wdGlvbjo6QXNR
dW90YXRpb24pKQogICAgICAgICBxdW90ZUZyYWdtZW50Rm9yUGFzdGluZygqZnJhZ21lbnQpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCmluZGV4IDNiMTYyM2E5YjBlYTA4OTcxOGQ0
ODJlYzZmNjgxOTYxMjViNTFhNzguLjNlZjY2ZTU5OWE5YWY2YWVkZmFkZGExMDU1ZDFiMTc3YzBl
NDJhM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKQEAgLTMzNyw3ICszMzcs
NyBAQCB2b2lkIERPTVNlbGVjdGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogCiAgICAgYXV0
byYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNO
b25lKCkpIHsKLSAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihTaW1wbGVSYW5nZSB7IHJh
bmdlIH0pOworICAgICAgICBzZWxlY3Rpb24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShy
YW5nZSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zNTYsNyArMzU2LDcgQEAgdm9p
ZCBET01TZWxlY3Rpb246OmFkZFJhbmdlKFJhbmdlJiByYW5nZSkKICAgICAgICAgICAgICAgICBz
ZWxlY3Rpb24ubW92ZVRvKHJhbmdlLnN0YXJ0UG9zaXRpb24oKSwgbm9ybWFsaXplZFJhbmdlLT5l
bmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgLy8gVGhlIG5ldyByYW5nZSBjb250YWlucyB0aGUgb3JpZ2luYWwgcmFuZ2UuCi0g
ICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihTaW1wbGVSYW5nZSB7IHJhbmdl
IH0pOworICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJh
bmdlKHJhbmdlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAt
MzY2LDcgKzM2Niw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5nZSYgcmFuZ2Up
CiAgICAgICAgICAgICByZXN1bHQgPSByYW5nZS5jb21wYXJlQm91bmRhcnlQb2ludHMoUmFuZ2U6
OkVORF9UT19FTkQsICpub3JtYWxpemVkUmFuZ2UpOwogICAgICAgICAgICAgaWYgKCFyZXN1bHQu
aGFzRXhjZXB0aW9uKCkgJiYgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpID09IC0xKSB7CiAg
ICAgICAgICAgICAgICAgLy8gVGhlIG9yaWdpbmFsIHJhbmdlIGNvbnRhaW5zIHRoZSBuZXcgcmFu
Z2UuCi0gICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVjdGlvbihTaW1wbGVSYW5nZSB7
ICpub3JtYWxpemVkUmFuZ2UgfSk7CisgICAgICAgICAgICAgICAgc2VsZWN0aW9uLnNldFNlbGVj
dGlvbihtYWtlU2ltcGxlUmFuZ2UoKm5vcm1hbGl6ZWRSYW5nZSkpOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgcmFuZ2VzIGludGVyc2VjdC4KICAgICAgICAg
ICAgICAgICBzZWxlY3Rpb24ubW92ZVRvKG5vcm1hbGl6ZWRSYW5nZS0+c3RhcnRQb3NpdGlvbigp
LCByYW5nZS5lbmRQb3NpdGlvbigpLCBET1dOU1RSRUFNKTsKQEAgLTM4MSwxMiArMzgxLDggQEAg
dm9pZCBET01TZWxlY3Rpb246OmRlbGV0ZUZyb21Eb2N1bWVudCgpCiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlv
bigpOwotICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRS
YW5nZSgpOwotICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVj
dGVkUmFuZ2UpLT5zaGFkb3dSb290KCkpCisgICAgYXV0byBzZWxlY3RlZFJhbmdlID0gZnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgaWYgKCFz
ZWxlY3RlZFJhbmdlIHx8IHNlbGVjdGVkUmFuZ2UtPnN0YXJ0LmNvbnRhaW5lci0+Y29udGFpbmlu
Z1NoYWRvd1Jvb3QoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmPEZyYW1lPiBwcm90ZWN0
b3IoKmZyYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxlci5jcHAKaW5kZXggNjVi
NTM4MDBjZWFhM2Q4NWU3NTZiYWJiZGUwNjQ5NDk3YjA3OWI4Ni4uMjBlYjNiNmIyYjE3ZjFhNmU3
MjVkYTcwZTUxMjJhZWI1ZTk1YzFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHAKQEAgLTE0MiwxMSArMTQyLDEwIEBAIERyYWdDb250cm9sbGVyOjpEcmFnQ29udHJvbGxl
cihQYWdlJiBwYWdlLCBzdGQ6OnVuaXF1ZV9wdHI8RHJhZ0NsaWVudD4mJiBjbGllbnQpCiAKIERy
YWdDb250cm9sbGVyOjp+RHJhZ0NvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7CiAKLXN0YXRpYyBSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0YShjb25zdCBE
cmFnRGF0YSYgZHJhZ0RhdGEsIEZyYW1lJiBmcmFtZSwgUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxs
b3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQorc3RhdGljIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50RnJvbURyYWdEYXRhKGNvbnN0IERyYWdEYXRhJiBk
cmFnRGF0YSwgRnJhbWUmIGZyYW1lLCBjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCwgYm9vbCBh
bGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCiB7CiAgICAgY2hvc2VQbGFpblRl
eHQgPSBmYWxzZTsKIAotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNvbnRleHQub3duZXJEb2N1
bWVudCgpOwogICAgIGlmIChkcmFnRGF0YS5jb250YWluc0NvbXBhdGlibGVDb250ZW50KCkpIHsK
ICAgICAgICAgaWYgKGF1dG8gZnJhZ21lbnQgPSBmcmFtZS5lZGl0b3IoKS53ZWJDb250ZW50RnJv
bVBhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKGRyYWdEYXRhKSwg
Y29udGV4dCwgYWxsb3dQbGFpblRleHQsIGNob3NlUGxhaW5UZXh0KSkKICAgICAgICAgICAgIHJl
dHVybiBmcmFnbWVudDsKQEAgLTE1NSwxMCArMTU0LDExIEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0YShjb25zdCBEcmFnRGF0YSYg
ZHJhCiAgICAgICAgICAgICBTdHJpbmcgdGl0bGU7CiAgICAgICAgICAgICBTdHJpbmcgdXJsID0g
ZHJhZ0RhdGEuYXNVUkwoRHJhZ0RhdGE6OkRvTm90Q29udmVydEZpbGVuYW1lcywgJnRpdGxlKTsK
ICAgICAgICAgICAgIGlmICghdXJsLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIGF1dG8m
IGRvY3VtZW50ID0gY29udGV4dC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCk7CiAgICAgICAg
ICAgICAgICAgYXV0byBhbmNob3IgPSBIVE1MQW5jaG9yRWxlbWVudDo6Y3JlYXRlKGRvY3VtZW50
KTsKICAgICAgICAgICAgICAgICBhbmNob3ItPnNldEhyZWYodXJsKTsKICAgICAgICAgICAgICAg
ICBpZiAodGl0bGUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRyeSB0aGUg
cGxhaW4gdGV4dCBmaXJzdCBiZWNhdXNlIHRoZSB1cmwgbWlnaHQgYmUgbm9ybWFsaXplZCBvciBl
c2NhcGVkLgorICAgICAgICAgICAgICAgICAgICAvLyBUcnkgdGhlIHBsYWluIHRleHQgZmlyc3Qg
YmVjYXVzZSB0aGUgVVJMIG1pZ2h0IGJlIG5vcm1hbGl6ZWQgb3IgZXNjYXBlZC4KICAgICAgICAg
ICAgICAgICAgICAgaWYgKGRyYWdEYXRhLmNvbnRhaW5zUGxhaW5UZXh0KCkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICB0aXRsZSA9IGRyYWdEYXRhLmFzUGxhaW5UZXh0KCk7CiAgICAgICAgICAg
ICAgICAgICAgIGlmICh0aXRsZS5pc0VtcHR5KCkpCkBAIC02MDMsMTMgKzYwMywxMyBAQCBib29s
IERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0
YSkKICAgICBib29sIGlzTW92ZSA9IGRyYWdJc01vdmUoaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCks
IGRyYWdEYXRhKTsKICAgICBpZiAoaXNNb3ZlIHx8IGRyYWdDYXJldC5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpKSB7CiAgICAgICAgIGJvb2wgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKLSAgICAg
ICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudEZy
b21EcmFnRGF0YShkcmFnRGF0YSwgKmlubmVyRnJhbWUsIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2Up
LCB0cnVlLCBjaG9zZVBsYWluVGV4dCk7CisgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBkb2N1bWVu
dEZyYWdtZW50RnJvbURyYWdEYXRhKGRyYWdEYXRhLCAqaW5uZXJGcmFtZSwgKnJhbmdlLCB0cnVl
LCBjaG9zZVBsYWluVGV4dCk7CiAgICAgICAgIGlmICghZnJhZ21lbnQgfHwgIWVkaXRvci5zaG91
bGRJbnNlcnRGcmFnbWVudCgqZnJhZ21lbnQsIHJhbmdlLCBFZGl0b3JJbnNlcnRBY3Rpb246OkRy
b3BwZWQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgICAgIGNsaWVudCgpLndp
bGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbjo6RWRp
dCwgZHJhZ0RhdGEpOwogCi0gICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNs
aWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoKmZyYWdtZW50LCBjcmVhdGVMaXZlUmFuZ2UoKnJh
bmdlKSwgaXNNb3ZlKSkKKyAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xp
ZW50KCktPnBlcmZvcm1Ud29TdGVwRHJvcCgqZnJhZ21lbnQsICpyYW5nZSwgaXNNb3ZlKSkKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIGlmIChpc01vdmUpIHsKQEAgLTYzNSw3
ICs2MzUsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpjb25jbHVkZUVkaXREcmFnKGNvbnN0IERy
YWdEYXRhJiBkcmFnRGF0YSkKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0
aW5hdGlvbkFjdGlvbihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKICAg
ICAgICAgYXV0byBmcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKnJhbmdlLCB0ZXh0
KTsKLSAgICAgICAgaWYgKGVkaXRvci5jbGllbnQoKSAmJiBlZGl0b3IuY2xpZW50KCktPnBlcmZv
cm1Ud29TdGVwRHJvcChmcmFnbWVudC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGlz
TW92ZSkpCisgICAgICAgIGlmIChlZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5w
ZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0KCksICpyYW5nZSwgaXNNb3ZlKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgICAgIGlmIChzZXRTZWxlY3Rpb25Ub0RyYWdDYXJl
dChpbm5lckZyYW1lLmdldCgpLCBkcmFnQ2FyZXQsIHBvaW50KSkKQEAgLTEwNDEsNyArMTA0MSw3
IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3JjLCBjb25zdCBEcmFn
U3RhdGUmIHN0YXRlLCBPcHRpb25TZXQ8RHJhCiAgICAgICAgICAgICAgICAgICAgIHNyYy5lZGl0
b3IoKS53cml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgp
KTsKICNlbHNlCiAgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBDb252ZXJ0IFdpbmRvd3Mg
dG8gbWF0Y2ggdGhlIG90aGVyIHBsYXRmb3JtcyBhbmQgZGVsZXRlIHRoaXMuCi0gICAgICAgICAg
ICAgICAgICAgIGRhdGFUcmFuc2Zlci5wYXN0ZWJvYXJkKCkud3JpdGVTZWxlY3Rpb24oY3JlYXRl
TGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSksIHNyYy5lZGl0b3IoKS5jYW5TbWFydENvcHlPckRl
bGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJhbnNmZXIpOworICAgICAg
ICAgICAgICAgICAgICBkYXRhVHJhbnNmZXIucGFzdGVib2FyZCgpLndyaXRlU2VsZWN0aW9uKCpz
ZWxlY3Rpb25SYW5nZSwgc3JjLmVkaXRvcigpLmNhblNtYXJ0Q29weU9yRGVsZXRlKCksIHNyYywg
SW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2Zlcik7CiAjZW5kaWYKICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogI2lmIFBMQVRGT1JNKENPQ09BKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dElu
ZGljYXRvci5jcHAKaW5kZXggOWU2MjEwOTZkYTJlMmY3YmY1YWU3MGU4YTNlZGZiNGM2ZDg1MmEw
Yy4uOGUwZTA3OWVhZDQzZDZmODRiZTRmYWRjYjc3ZDQzZjFmYzliYTMzYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCkBAIC0xNzcsMjAgKzE3Nyw2IEBAIHN0YXRpYyBib29s
IHRha2VTbmFwc2hvdHMoVGV4dEluZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgSW50
UmVjdCBzbmFwc2hvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotCi1zdGF0aWMgVmVjdG9yPEZsb2F0UmVjdD4gc2VsZWN0aW9uUmVjdHMoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlKQotewotICAgIFZlY3RvcjxTZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25S
ZWN0czsKLSAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMo
c2VsZWN0aW9uUmVjdHMpOwotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IHJlY3RzOwotICAgIGZvciAo
YXV0byYgc2VsZWN0aW9uUmVjdCA6IHNlbGVjdGlvblJlY3RzKQotICAgICAgICByZWN0cy5hcHBl
bmQoc2VsZWN0aW9uUmVjdC5yZWN0KCkpOwotICAgIHJldHVybiByZWN0czsKLX0KLQotI2VuZGlm
Ci0KIHN0YXRpYyBib29sIHN0eWxlQ29udGFpbnNDb21wbGV4QmFja2dyb3VuZChjb25zdCBSZW5k
ZXJTdHlsZSYgc3R5bGUpCiB7CiAgICAgcmV0dXJuIHN0eWxlLmhhc0JsZW5kTW9kZSgpIHx8IHN0
eWxlLmhhc0JhY2tncm91bmRJbWFnZSgpIHx8IHN0eWxlLmhhc0JhY2tkcm9wRmlsdGVyKCk7CkBA
IC0zMTYsOCArMzAyLDExIEBAIHN0YXRpYyBib29sIGluaXRpYWxpemVJbmRpY2F0b3IoVGV4dElu
ZGljYXRvckRhdGEmIGRhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltCiAgICAgfSBlbHNlIGlm
ICh1c2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzICYmICh0
cmVhdFJhbmdlQXNDb21wbGV4RHVlVG9JbGxlZ2libGVUZXh0Q29sb3JzIHx8IGhhc05vbklubGlu
ZU9yUmVwbGFjZWRFbGVtZW50cyhyYW5nZSkpKQogICAgICAgICBkYXRhLm9wdGlvbnMuYWRkKFRl
eHRJbmRpY2F0b3JPcHRpb246OlBhaW50QWxsQ29udGVudCk7CiAjaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICBlbHNlIGlmIChkYXRhLm9wdGlvbnMuY29udGFpbnMoVGV4dEluZGljYXRvck9w
dGlvbjo6VXNlU2VsZWN0aW9uUmVjdEZvclNpemluZykpCi0gICAgICAgIHRleHRSZWN0cyA9IHNl
bGVjdGlvblJlY3RzKHJhbmdlKTsKKyAgICBlbHNlIGlmIChkYXRhLm9wdGlvbnMuY29udGFpbnMo
VGV4dEluZGljYXRvck9wdGlvbjo6VXNlU2VsZWN0aW9uUmVjdEZvclNpemluZykpIHsKKyAgICAg
ICAgdGV4dFJlY3RzID0gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHMocmFuZ2Up
Lm1hcChbJl0oY29uc3QgYXV0byYgcmVjdCkgLT4gRmxvYXRSZWN0IHsKKyAgICAgICAgICAgIHJl
dHVybiByZWN0LnJlY3QoKTsKKyAgICAgICAgfSk7CisgICAgfQogI2VuZGlmCiAgICAgZWxzZSB7
CiAgICAgICAgIGF1dG8gdGV4dFJlY3RIZWlnaHQgPSBkYXRhLm9wdGlvbnMuY29udGFpbnMoVGV4
dEluZGljYXRvck9wdGlvbjo6VGlnaHRseUZpdENvbnRlbnQpID8gRnJhbWVTZWxlY3Rpb246OlRl
eHRSZWN0YW5nbGVIZWlnaHQ6OlRleHRIZWlnaHQgOiBGcmFtZVNlbGVjdGlvbjo6VGV4dFJlY3Rh
bmdsZUhlaWdodDo6U2VsZWN0aW9uSGVpZ2h0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5t
bQppbmRleCBmNjhjYWM0MjgxZTY1Nzc3MDQ5ZmM5OGRiMjgyZTliNTMyNjQxNTE0Li45YmI4ZTky
Y2FhYzVjZjUzMmI3OWI5MGVlYWIzY2YyMTU0MGFmZjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9G
cmFtZUlPUy5tbQpAQCAtNzQ4LDcgKzc0OCw3IEBAIE5TQXJyYXkgKkZyYW1lOjppbnRlcnByZXRh
dGlvbnNGb3JDdXJyZW50Um9vdCgpIGNvbnN0CiAgICAgICAgIGZvciAoYXV0byogbWFya2VyIDog
ZG9jdW1lbnQoKS0+bWFya2VycygpLm1hcmtlcnNGb3Iobm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpKSB7CiAgICAgICAgICAgICBhdXRvJiBhbHRl
cm5hdGl2ZXMgPSBXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4obWFya2VyLT5kYXRhKCkpOwogCi0g
ICAgICAgICAgICBhdXRvIHJhbmdlRm9yTWFya2VyID0gcmFuZ2Uobm9kZSwgKm1hcmtlcik7Cisg
ICAgICAgICAgICBhdXRvIHJhbmdlRm9yTWFya2VyID0gbWFrZVNpbXBsZVJhbmdlKG5vZGUsICpt
YXJrZXIpOwogCiAgICAgICAgICAgICBpZiAoYXV0byBwcmVjZWRpbmdUZXh0UmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2UocHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24sIHJhbmdlRm9yTWFya2VyLnN0
YXJ0KSkgewogICAgICAgICAgICAgICAgIFN0cmluZyBwcmVjZWRpbmdUZXh0ID0gcGxhaW5UZXh0
KCpwcmVjZWRpbmdUZXh0UmFuZ2UpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRHJhZ0ltYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAK
aW5kZXggNDY2MGNmNmM1NjkzMTU0YWIzMmU5MWQwZjk0YzBjZTU4NjQ1MDUyMS4uNjhmODM5Nzhm
YzdmNzdmYTVhMThlNjRiMDg1MjljNzljMjlmYTU4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9E
cmFnSW1hZ2UuY3BwCkBAIC0zMSwxMCArMzEsOSBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNp
bmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiU2ltcGxl
UmFuZ2UuaCIKICNpbmNsdWRlICJUZXh0SW5kaWNhdG9yLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTE1Myw3ICsxNTIsNyBAQCBzdHJ1Y3QgU2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7
CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKIAotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJ
bWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGZvcmNlQmxhY2tU
ZXh0KQorRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwg
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIGZvcmNlQmxhY2tUZXh0KQogewogICAgIGZy
YW1lLmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogICAgIFJlbmRlclZpZXcqIHZpZXcgPSBm
cmFtZS5jb250ZW50UmVuZGVyZXIoKTsKQEAgLTE2MSwxMiArMTYwLDEyIEBAIERyYWdJbWFnZVJl
ZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9v
bCBmb3JjZUJsYWNrCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgLy8gVG8gc25hcHNo
b3QgdGhlIHJhbmdlLCB0ZW1wb3JhcmlseSBzZWxlY3QgaXQgYW5kIHRha2Ugc2VsZWN0aW9uIHNu
YXBzaG90LgotICAgIFBvc2l0aW9uIHN0YXJ0ID0gcmFuZ2Uuc3RhcnRQb3NpdGlvbigpOworICAg
IFBvc2l0aW9uIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLnN0YXJ0
KTsKICAgICBQb3NpdGlvbiBjYW5kaWRhdGUgPSBzdGFydC5kb3duc3RyZWFtKCk7CiAgICAgaWYg
KGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpICYmIGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgp
LT5yZW5kZXJlcigpKQogICAgICAgICBzdGFydCA9IGNhbmRpZGF0ZTsKIAotICAgIFBvc2l0aW9u
IGVuZCA9IHJhbmdlLmVuZFBvc2l0aW9uKCk7CisgICAgUG9zaXRpb24gZW5kID0gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHJhbmdlLmVuZCk7CiAgICAgY2FuZGlkYXRlID0gZW5kLnVwc3Ry
ZWFtKCk7CiAgICAgaWYgKGNhbmRpZGF0ZS5kZXByZWNhdGVkTm9kZSgpICYmIGNhbmRpZGF0ZS5k
ZXByZWNhdGVkTm9kZSgpLT5yZW5kZXJlcigpKQogICAgICAgICBlbmQgPSBjYW5kaWRhdGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCmluZGV4IGQwNTA4NzU4MmRkMWM2MGI0NGU2ZGMx
YTMwZTFlYmJmZWY0ZDRhNmQuLjI4M2E2NzkxZDcyYjU5Zjg0N2YyMTcyZWRjM2E3ODNkOGUxNmI0
YjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5oCkBAIC01Niw3ICs1Niw2IEBAIGNs
YXNzIEZyYW1lOwogY2xhc3MgSW1hZ2U7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgTm9kZTsKLWNs
YXNzIFJhbmdlOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIHR5cGVkZWYgUmV0YWluUHRy
PENHSW1hZ2VSZWY+IERyYWdJbWFnZVJlZjsKQEAgLTg5LDcgKzg4LDcgQEAgRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUljb25Gb3JDYWNoZWRJbWFnZUZpbGVuYW1lKGNvbnN0IFN0cmluZyYp
OwogCiBXRUJDT1JFX0VYUE9SVCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yTm9kZShG
cmFtZSYsIE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1h
Z2VGb3JTZWxlY3Rpb24oRnJhbWUmLCBUZXh0SW5kaWNhdG9yRGF0YSYsIGJvb2wgZm9yY2VCbGFj
a1RleHQgPSBmYWxzZSk7Ci1XRUJDT1JFX0VYUE9SVCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0lt
YWdlRm9yUmFuZ2UoRnJhbWUmLCBSYW5nZSYsIGJvb2wgZm9yY2VCbGFja1RleHQgPSBmYWxzZSk7
CitXRUJDT1JFX0VYUE9SVCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJh
bWUmLCBjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wgZm9yY2VCbGFja1RleHQgPSBmYWxzZSk7CiBE
cmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yQ29sb3IoY29uc3QgQ29sb3ImLCBjb25zdCBG
bG9hdFJlY3QmLCBmbG9hdCwgUGF0aCYpOwogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZv
ckltYWdlKEZyYW1lJiwgTm9kZSYsIEludFJlY3QmIGltYWdlUmVjdCwgSW50UmVjdCYgZWxlbWVu
dFJlY3QpOwogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvckxpbmsoRWxlbWVudCYsIFVS
TCYsIGNvbnN0IFN0cmluZyYgbGFiZWwsIFRleHRJbmRpY2F0b3JEYXRhJiwgRm9udFJlbmRlcmlu
Z01vZGUsIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3Rl
Ym9hcmQuaAppbmRleCA5ZTJiMzU4YWRiMGY2OTA3ZWE2YzE2Y2I5NDQyMmEyYmE2OGNhN2U2Li5h
YWRjNDY2OThkZjc5NTY0MzYyYTAzZjVkZmU4OWIwZWI3ODExY2U5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZC5oCkBAIC02NSw5ICs2NSwxMCBAQCBjbGFzcyBEcmFnRGF0YTsKIGNs
YXNzIEVsZW1lbnQ7CiBjbGFzcyBGcmFtZTsKIGNsYXNzIFBhc3RlYm9hcmRTdHJhdGVneTsKLWNs
YXNzIFJhbmdlOwogY2xhc3MgU2hhcmVkQnVmZmVyOwogCitzdHJ1Y3QgU2ltcGxlUmFuZ2U7CisK
IGVudW0gY2xhc3MgUGxhaW5UZXh0VVJMUmVhZGluZ1BvbGljeSA6IGJvb2wgeyBJZ25vcmVVUkws
IEFsbG93VVJMIH07CiBlbnVtIGNsYXNzIFdlYkNvbnRlbnRSZWFkaW5nUG9saWN5IDogYm9vbCB7
IEFueVR5cGUsIE9ubHlSaWNoVGV4dFR5cGVzIH07CiBlbnVtIFNob3VsZFNlcmlhbGl6ZVNlbGVj
dGVkVGV4dEZvckRhdGFUcmFuc2ZlciB7IERlZmF1bHRTZWxlY3RlZFRleHRUeXBlLCBJbmNsdWRl
SW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyIH07CkBAIC0yNDEsOSArMjQyLDkgQEAgcHVibGlj
OgogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCi0gICAgUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IGRvY3VtZW50RnJhZ21lbnQoRnJhbWUmLCBSYW5nZSYsIGJvb2wgYWxsb3dQbGFpblRleHQs
IGJvb2wmIGNob3NlUGxhaW5UZXh0KTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KKyAg
ICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudChGcmFtZSYsIGNvbnN0
IFNpbXBsZVJhbmdlJiwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQp
OyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgogICAgIHZvaWQgd3JpdGVJbWFnZShFbGVt
ZW50JiwgY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSk7IC8vIEZJWE1FOiBMYXllcmlu
ZyB2aW9sYXRpb24uCi0gICAgdm9pZCB3cml0ZVNlbGVjdGlvbihSYW5nZSYsIGJvb2wgY2FuU21h
cnRDb3B5T3JEZWxldGUsIEZyYW1lJiwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yRGF0
YVRyYW5zZmVyID0gRGVmYXVsdFNlbGVjdGVkVGV4dFR5cGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcg
dmlvbGF0aW9uLgorICAgIHZvaWQgd3JpdGVTZWxlY3Rpb24oY29uc3QgU2ltcGxlUmFuZ2UmLCBi
b29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSYsIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVk
VGV4dEZvckRhdGFUcmFuc2ZlciA9IERlZmF1bHRTZWxlY3RlZFRleHRUeXBlKTsgLy8gRklYTUU6
IExheWVyaW5nIHZpb2xhdGlvbi4KICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpAQCAtMzEy
LDcgKzMxMyw3IEBAIHByaXZhdGU6CiAKICNpZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBmaW5p
c2hDcmVhdGluZ1Bhc3RlYm9hcmQoKTsKLSAgICB2b2lkIHdyaXRlUmFuZ2VUb0RhdGFPYmplY3Qo
UmFuZ2UmLCBGcmFtZSYpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgorICAgIHZvaWQg
d3JpdGVSYW5nZVRvRGF0YU9iamVjdChjb25zdCBTaW1wbGVSYW5nZSYsIEZyYW1lJik7IC8vIEZJ
WE1FOiBMYXllcmluZyB2aW9sYXRpb24uCiAgICAgdm9pZCB3cml0ZVVSTFRvRGF0YU9iamVjdChj
b25zdCBVUkwmLCBjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHdyaXRlUGxhaW5UZXh0VG9EYXRh
T2JqZWN0KGNvbnN0IFN0cmluZyYsIFNtYXJ0UmVwbGFjZU9wdGlvbik7CiAgICAgT3B0aW9uYWw8
UGFzdGVib2FyZEN1c3RvbURhdGE+IHJlYWRQYXN0ZWJvYXJkQ3VzdG9tRGF0YSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KaW5kZXggY2I1YWVmOTJmMjM4
MDg2OGRhOGEzYWU2MzY1MmU1M2Y1NTRmMDM4Yi4uYzY0YTRiY2ExYWQ4ZTdiNzJhZjIyNjAzZmIx
Y2MwMWY5NzY5ZjYyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0Ry
YWdJbWFnZUlPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0ltYWdl
SU9TLm1tCkBAIC0yMTksNyArMjE5LDcgQEAgRHJhZ0ltYWdlUmVmIGRpc3NvbHZlRHJhZ0ltYWdl
VG9GcmFjdGlvbihEcmFnSW1hZ2VSZWYgaW1hZ2UsIGZsb2F0KQogICAgIHJldHVybiBpbWFnZTsK
IH0KIAotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwg
UmFuZ2UmIHJhbmdlLCBib29sIGZvcmNlQmxhY2tUZXh0KQorRHJhZ0ltYWdlUmVmIGNyZWF0ZURy
YWdJbWFnZUZvclJhbmdlKEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBi
b29sIGZvcmNlQmxhY2tUZXh0KQogewogICAgIGlmIChhdXRvIGRvY3VtZW50ID0gZnJhbWUuZG9j
dW1lbnQoKSkKICAgICAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dCgpOwpAQCAtMjg2LDcgKzI4
Niw3IEBAIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UoSW1h
Z2UqLCBJbWFnZU9yaWVudGF0aW9uKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1EcmFnSW1h
Z2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmLCBSYW5nZSYsIGJvb2wpCitEcmFn
SW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmLCBjb25zdCBTaW1wbGVSYW5n
ZSYsIGJvb2wpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKaW5kZXggNjg3NTdlYWE4YzhmMTA0MDQ4MTU1
ZmVkODE0ZjJjMGMyMGFjMWYzNi4uMjFiOTdmNThiMGVlMzllNDQ3MjFlNmYyN2QwN2U2MjkxMmVi
MDRkNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRX
aW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNw
cApAQCAtNDc4LDcgKzQ3OCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6c2V0RHJhZ0ltYWdlKERyYWdJ
bWFnZSwgY29uc3QgSW50UG9pbnQmKQogfQogI2VuZGlmCiAKLXZvaWQgUGFzdGVib2FyZDo6d3Jp
dGVSYW5nZVRvRGF0YU9iamVjdChSYW5nZSYgc2VsZWN0ZWRSYW5nZSwgRnJhbWUmIGZyYW1lKQor
dm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KGNvbnN0IFNpbXBsZVJhbmdl
JiBzZWxlY3RlZFJhbmdlLCBGcmFtZSYgZnJhbWUpCiB7CiAgICAgaWYgKCFtX3dyaXRhYmxlRGF0
YU9iamVjdCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDg4LDcgKzQ4OCw3IEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdChSYW5nZSYgc2VsZWN0ZWRSYW5nZSwgRnJhbWUm
IGZyYW1lKQogCiAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAgbWFya3VwVG9DRkhUTUwoc2Vy
aWFsaXplUHJlc2VydmluZ1Zpc3VhbEFwcGVhcmFuY2Uoc2VsZWN0ZWRSYW5nZSwgbnVsbHB0ciwg
QW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKSwKLSAgICAgICAgc2VsZWN0ZWRSYW5nZS5zdGFy
dENvbnRhaW5lcigpLmRvY3VtZW50KCkudXJsKCkuc3RyaW5nKCksIGRhdGEpOworICAgICAgICBz
ZWxlY3RlZFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS51cmwoKS5zdHJpbmcoKSwg
ZGF0YSk7CiAgICAgbWVkaXVtLmhHbG9iYWwgPSBjcmVhdGVHbG9iYWxEYXRhKGRhdGEpOwogICAg
IGlmIChtZWRpdW0uaEdsb2JhbCAmJiBGQUlMRUQobV93cml0YWJsZURhdGFPYmplY3QtPlNldERh
dGEoaHRtbEZvcm1hdCgpLCAmbWVkaXVtLCBUUlVFKSkpCiAgICAgICAgIDo6R2xvYmFsRnJlZSht
ZWRpdW0uaEdsb2JhbCk7CkBAIC01MDUsNyArNTA1LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZVJhbmdlVG9EYXRhT2JqZWN0KFJhbmdlJiBzZWxlY3RlZFJhbmdlLCBGcmFtZSYgZnJhbWUpCiAg
ICAgICAgIG1fd3JpdGFibGVEYXRhT2JqZWN0LT5TZXREYXRhKHNtYXJ0UGFzdGVGb3JtYXQoKSwg
Jm1lZGl1bSwgVFJVRSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFu
Z2UmIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsIEZyYW1lJiBmcmFt
ZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9yRGF0YVRyYW5zZmVyIHNob3VsZFNlcmlh
bGl6ZVNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcikKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVT
ZWxlY3Rpb24oY29uc3QgU2ltcGxlUmFuZ2UmIHNlbGVjdGVkUmFuZ2UsIGJvb2wgY2FuU21hcnRD
b3B5T3JEZWxldGUsIEZyYW1lJiBmcmFtZSwgU2hvdWxkU2VyaWFsaXplU2VsZWN0ZWRUZXh0Rm9y
RGF0YVRyYW5zZmVyIHNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlcikK
IHsKICAgICBjbGVhcigpOwogCkBAIC01MTQsNyArNTE0LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZVNlbGVjdGlvbihSYW5nZSYgc2VsZWN0ZWRSYW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRl
bGV0ZSwKICAgICAgICAgVmVjdG9yPGNoYXI+IGRhdGE7CiAgICAgICAgIC8vIEZJWE1FOiBVc2Ug
UmVzb2x2ZVVSTHM6Olllc0V4Y2x1ZGluZ0xvY2FsRmlsZVVSTHNGb3JQcml2YWN5LgogICAgICAg
ICBtYXJrdXBUb0NGSFRNTChzZXJpYWxpemVQcmVzZXJ2aW5nVmlzdWFsQXBwZWFyYW5jZShmcmFt
ZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSksCi0gICAgICAgICAgICBzZWxlY3RlZFJhbmdlLnN0
YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKS51cmwoKS5zdHJpbmcoKSwgZGF0YSk7CisgICAgICAg
ICAgICBzZWxlY3RlZFJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS51cmwoKS5zdHJp
bmcoKSwgZGF0YSk7CiAgICAgICAgIEhHTE9CQUwgY2JEYXRhID0gY3JlYXRlR2xvYmFsRGF0YShk
YXRhKTsKICAgICAgICAgaWYgKCE6OlNldENsaXBib2FyZERhdGEoSFRNTENsaXBib2FyZEZvcm1h
dCwgY2JEYXRhKSkKICAgICAgICAgICAgIDo6R2xvYmFsRnJlZShjYkRhdGEpOwpAQCAtODU0LDcg
Kzg1NCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkUGxhaW5UZXh0JiB0ZXh0
LCBQbGFpblRleHRVUkxSZWFkaW5nUG9saWN5LCBPcHRpCiAgICAgfQogfQogCi1SZWZQdHI8RG9j
dW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSYgZnJhbWUs
IFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4
dCkKK1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50
KEZyYW1lJiBmcmFtZSwgY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFp
blRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQogewogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFs
c2U7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4
IDc5MzRlNTEzZDBmNTM4Y2UwNzg5MDVmNWRiY2Q4MWRhYWIyZDJmZTEuLmUwZjMzMzg3MGQ1Nzk4
NTM1MWFlZDVhMDlhMjY3ODgxYWIxNTIzNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuY3BwCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
CiAjaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKLSNpbmNsdWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVu
dC5oIgogI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKQEAgLTE5MTcsNiArMTkxNywyNzAg
QEAgVmVjdG9yPEludFJlY3Q+IFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlLCBib29sIHUKICAgICByZXR1cm4gcmVjdHM7CiB9CiAKKyNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQorCitzdGF0aWMgYm9vbCBpbnRlcnZhbHNTdWZmaWNpZW50bHlP
dmVybGFwKGludCBzdGFydEEsIGludCBlbmRBLCBpbnQgc3RhcnRCLCBpbnQgZW5kQikKK3sKKyAg
ICBpZiAoZW5kQSA8PSBzdGFydEEgfHwgZW5kQiA8PSBzdGFydEIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGNvbnN0IGZsb2F0IHN1ZmZpY2llbnRPdmVybGFwID0gLjc1OworCisgICAg
aW50IGxlbmd0aEEgPSBlbmRBIC0gc3RhcnRBOworICAgIGludCBsZW5ndGhCID0gZW5kQiAtIHN0
YXJ0QjsKKworICAgIGludCBtYXhTdGFydCA9IHN0ZDo6bWF4KHN0YXJ0QSwgc3RhcnRCKTsKKyAg
ICBpbnQgbWluRW5kID0gc3RkOjptaW4oZW5kQSwgZW5kQik7CisKKyAgICBpZiAobWF4U3RhcnQg
PiBtaW5FbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBtaW5FbmQgLSBt
YXhTdGFydCA+PSBzdWZmaWNpZW50T3ZlcmxhcCAqIHN0ZDo6bWluKGxlbmd0aEEsIGxlbmd0aEIp
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRqdXN0TGluZUhlaWdodE9mU2VsZWN0aW9uUmVj
dHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0cywgc2l6ZV90IG51bWJlck9mUmVjdHMsIGlu
dCBsaW5lTnVtYmVyLCBpbnQgbGluZVRvcCwgaW50IGxpbmVIZWlnaHQpCit7CisgICAgQVNTRVJU
KHJlY3RzLnNpemUoKSA+PSBudW1iZXJPZlJlY3RzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gbnVt
YmVyT2ZSZWN0czsgaTsgKSB7CisgICAgICAgIC0taTsKKyAgICAgICAgaWYgKHJlY3RzW2ldLmxp
bmVOdW1iZXIoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZWN0c1tpXS5zZXRMaW5l
TnVtYmVyKGxpbmVOdW1iZXIpOworICAgICAgICByZWN0c1tpXS5zZXRMb2dpY2FsVG9wKGxpbmVU
b3ApOworICAgICAgICByZWN0c1tpXS5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVIZWlnaHQpOworICAg
IH0KK30KKworc3RhdGljIFNlbGVjdGlvblJlY3QgY29hbGVzY2VTZWxlY3Rpb25SZWN0cyhjb25z
dCBTZWxlY3Rpb25SZWN0JiBvcmlnaW5hbCwgY29uc3QgU2VsZWN0aW9uUmVjdCYgcHJldmlvdXMp
Cit7CisgICAgU2VsZWN0aW9uUmVjdCByZXN1bHQodW5pb25SZWN0KHByZXZpb3VzLnJlY3QoKSwg
b3JpZ2luYWwucmVjdCgpKSwgb3JpZ2luYWwuaXNIb3Jpem9udGFsKCksIG9yaWdpbmFsLnBhZ2VO
dW1iZXIoKSk7CisgICAgcmVzdWx0LnNldERpcmVjdGlvbihvcmlnaW5hbC5jb250YWluc1N0YXJ0
KCkgfHwgb3JpZ2luYWwuY29udGFpbnNFbmQoKSA/IG9yaWdpbmFsLmRpcmVjdGlvbigpIDogcHJl
dmlvdXMuZGlyZWN0aW9uKCkpOworICAgIHJlc3VsdC5zZXRDb250YWluc1N0YXJ0KHByZXZpb3Vz
LmNvbnRhaW5zU3RhcnQoKSB8fCBvcmlnaW5hbC5jb250YWluc1N0YXJ0KCkpOworICAgIHJlc3Vs
dC5zZXRDb250YWluc0VuZChwcmV2aW91cy5jb250YWluc0VuZCgpIHx8IG9yaWdpbmFsLmNvbnRh
aW5zRW5kKCkpOworICAgIHJlc3VsdC5zZXRJc0ZpcnN0T25MaW5lKHByZXZpb3VzLmlzRmlyc3RP
bkxpbmUoKSB8fCBvcmlnaW5hbC5pc0ZpcnN0T25MaW5lKCkpOworICAgIHJlc3VsdC5zZXRJc0xh
c3RPbkxpbmUocHJldmlvdXMuaXNMYXN0T25MaW5lKCkgfHwgb3JpZ2luYWwuaXNMYXN0T25MaW5l
KCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxTZWxlY3Rpb25SZWN0PiBSZW5k
ZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMo
Y29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQoreworICAgIHJldHVybiBjb2xsZWN0U2VsZWN0aW9u
UmVjdHNJbnRlcm5hbChyYW5nZSkucmVjdHM7Cit9CisKK2F1dG8gUmVuZGVyT2JqZWN0Ojpjb2xs
ZWN0U2VsZWN0aW9uUmVjdHNJbnRlcm5hbChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UpIC0+IFNl
bGVjdGlvblJlY3RzCit7CisgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHJlY3RzOworICAgIFZl
Y3RvcjxTZWxlY3Rpb25SZWN0PiBuZXdSZWN0czsKKyAgICBib29sIGhhc0ZsaXBwZWRXcml0aW5n
TW9kZSA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+cmVuZGVyZXIoKSAmJiByYW5nZS5zdGFydC5j
b250YWluZXItPnJlbmRlcmVyKCktPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUo
KTsKKyAgICBib29sIGNvbnRhaW5zRGlmZmVyZW50V3JpdGluZ01vZGVzID0gZmFsc2U7CisgICAg
Zm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7CisgICAgICAgIGF1
dG8gcmVuZGVyZXIgPSBub2RlLnJlbmRlcmVyKCk7CisgICAgICAgIC8vIE9ubHkgYXNrIGxlYWYg
cmVuZGVyIG9iamVjdHMgZm9yIHRoZWlyIGxpbmUgYm94IHJlY3RzLgorICAgICAgICBpZiAocmVu
ZGVyZXIgJiYgIXJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpICYmIHJlbmRlcmVyLT5zdHlsZSgp
LnVzZXJTZWxlY3QoKSAhPSBVc2VyU2VsZWN0OjpOb25lKSB7CisgICAgICAgICAgICBib29sIGlz
U3RhcnROb2RlID0gcmVuZGVyZXItPm5vZGUoKSA9PSByYW5nZS5zdGFydC5jb250YWluZXIucHRy
KCk7CisgICAgICAgICAgICBib29sIGlzRW5kTm9kZSA9IHJlbmRlcmVyLT5ub2RlKCkgPT0gcmFu
Z2UuZW5kLmNvbnRhaW5lci5wdHIoKTsKKyAgICAgICAgICAgIGlmIChoYXNGbGlwcGVkV3JpdGlu
Z01vZGUgIT0gcmVuZGVyZXItPnN0eWxlKCkuaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSkK
KyAgICAgICAgICAgICAgICBjb250YWluc0RpZmZlcmVudFdyaXRpbmdNb2RlcyA9IHRydWU7Cisg
ICAgICAgICAgICAvLyBGSVhNRTogU2VuZGluZyAwIGZvciB0aGUgc3RhcnRPZmZzZXQgaXMgYSB3
ZWlyZCB3YXkgb2YgdGVsbGluZyB0aGUgcmVuZGVyZXIgdGhhdCB0aGUgc2VsZWN0aW9uCisgICAg
ICAgICAgICAvLyBkb2Vzbid0IHN0YXJ0IGluc2lkZSBpdCwgc2luY2Ugd2UnbGwgYWxzbyBzZW5k
IDAgaWYgdGhlIHNlbGVjdGlvbiAqZG9lcyogc3RhcnQgaW4gaXQsIGF0IG9mZnNldCAwLgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEZJWE1FOiBTZWxlY3Rpb24gZW5kcG9pbnRzIGFy
ZW4ndCBhbHdheXMgaW5zaWRlIGxlYXZlcywgYW5kIHdlIG9ubHkgYnVpbGQgU2VsZWN0aW9uUmVj
dHMgZm9yIGxlYXZlcywKKyAgICAgICAgICAgIC8vIHNvIHdlIGNhbid0IGFjY3VyYXRlbHkgZGV0
ZXJtaW5lIHdoaWNoIFNlbGVjdGlvblJlY3RzIGNvbnRhaW4gdGhlIHNlbGVjdGlvbiBzdGFydCBh
bmQgZW5kIHVzaW5nCisgICAgICAgICAgICAvLyBvbmx5IHRoZSBvZmZzZXRzIG9mIHRoZSBzdGFy
dCBhbmQgZW5kLiBXZSBuZWVkIHRvIHBhc3MgdGhlIHdob2xlIFJhbmdlLgorICAgICAgICAgICAg
aW50IGJlZ2luU2VsZWN0aW9uT2Zmc2V0ID0gaXNTdGFydE5vZGUgPyByYW5nZS5zdGFydC5vZmZz
ZXQgOiAwOworICAgICAgICAgICAgaW50IGVuZFNlbGVjdGlvbk9mZnNldCA9IGlzRW5kTm9kZSA/
IHJhbmdlLmVuZC5vZmZzZXQgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAg
ICAgICAgICAgcmVuZGVyZXItPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhuZXdSZWN0cywgYmVnaW5T
ZWxlY3Rpb25PZmZzZXQsIGVuZFNlbGVjdGlvbk9mZnNldCk7CisgICAgICAgICAgICBmb3IgKGF1
dG8mIHNlbGVjdGlvblJlY3QgOiBuZXdSZWN0cykgeworICAgICAgICAgICAgICAgIGlmIChzZWxl
Y3Rpb25SZWN0LmNvbnRhaW5zU3RhcnQoKSAmJiAhaXNTdGFydE5vZGUpCisgICAgICAgICAgICAg
ICAgICAgIHNlbGVjdGlvblJlY3Quc2V0Q29udGFpbnNTdGFydChmYWxzZSk7CisgICAgICAgICAg
ICAgICAgaWYgKHNlbGVjdGlvblJlY3QuY29udGFpbnNFbmQoKSAmJiAhaXNFbmROb2RlKQorICAg
ICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldENvbnRhaW5zRW5kKGZhbHNlKTsKKyAg
ICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5sb2dpY2FsV2lkdGgoKSB8fCBzZWxlY3Rp
b25SZWN0LmxvZ2ljYWxIZWlnaHQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5k
KHNlbGVjdGlvblJlY3QpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbmV3UmVjdHMuc2hy
aW5rKDApOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhlIHJhbmdlIGNvdWxkIHNwYW4g
bm9kZXMgd2l0aCBkaWZmZXJlbnQgd3JpdGluZyBtb2Rlcy4KKyAgICAvLyBJZiB0aGlzIGlzIHRo
ZSBjYXNlLCB3ZSB1c2UgdGhlIHdyaXRpbmcgbW9kZSBvZiB0aGUgY29tbW9uIGFuY2VzdG9yLgor
ICAgIGlmIChjb250YWluc0RpZmZlcmVudFdyaXRpbmdNb2RlcykgeworICAgICAgICBpZiAoYXV0
byBhbmNlc3RvciA9IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKHJhbmdlKSkKKyAgICAgICAgICAg
IGhhc0ZsaXBwZWRXcml0aW5nTW9kZSA9IGFuY2VzdG9yLT5yZW5kZXJlcigpLT5zdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCk7CisgICAgfQorCisgICAgYXV0byBudW1iZXJPZlJl
Y3RzID0gcmVjdHMuc2l6ZSgpOworCisgICAgLy8gSWYgdGhlIHNlbGVjdGlvbiBlbmRzIGluIGEg
QlIsIHRoZW4gYWRkIHRoZSBsaW5lIGJyZWFrIGJpdCB0byB0aGUgbGFzdCByZWN0IHdlIGhhdmUu
CisgICAgLy8gVGhpcyB3aWxsIGNhdXNlIGl0cyBzZWxlY3Rpb24gcmVjdCB0byBleHRlbmQgdG8g
dGhlIGVuZCBvZiB0aGUgbGluZS4KKyAgICBpZiAobnVtYmVyT2ZSZWN0cykgeworICAgICAgICAv
LyBPbmx5IHNldCB0aGUgbGluZSBicmVhayBiaXQgaWYgdGhlIGVuZCBvZiB0aGUgcmFuZ2UgYWN0
dWFsbHkKKyAgICAgICAgLy8gZXh0ZW5kcyBhbGwgdGhlIHdheSB0byBpbmNsdWRlIHRoZSA8YnI+
LiBWaXNpYmxlUG9zaXRpb24gaGVscHMgdG8KKyAgICAgICAgLy8gZmlndXJlIHRoaXMgb3V0Lgor
ICAgICAgICBpZiAoaXM8SFRNTEJSRWxlbWVudD4oVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQpKS5kZWVwRXF1aXZhbGVudCgpLmZpcnN0Tm9kZSgp
KSkKKyAgICAgICAgICAgIHJlY3RzLmxhc3QoKS5zZXRJc0xpbmVCcmVhayh0cnVlKTsKKyAgICB9
CisKKyAgICBpbnQgbGluZVRvcCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7Cisg
ICAgaW50IGxpbmVCb3R0b20gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOworICAg
IGludCBsYXN0TGluZVRvcCA9IGxpbmVUb3A7CisgICAgaW50IGxhc3RMaW5lQm90dG9tID0gbGlu
ZUJvdHRvbTsKKyAgICBpbnQgbGluZU51bWJlciA9IDA7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG51bWJlck9mUmVjdHM7ICsraSkgeworICAgICAgICBpbnQgY3VycmVudFJlY3RUb3Ag
PSByZWN0c1tpXS5sb2dpY2FsVG9wKCk7CisgICAgICAgIGludCBjdXJyZW50UmVjdEJvdHRvbSA9
IGN1cnJlbnRSZWN0VG9wICsgcmVjdHNbaV0ubG9naWNhbEhlaWdodCgpOworCisgICAgICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gY291bnQgdGhlIHJ1YnkgdGV4dCBhcyBhIHNlcGFyYXRlIGxpbmUu
CisgICAgICAgIGlmIChpbnRlcnZhbHNTdWZmaWNpZW50bHlPdmVybGFwKGN1cnJlbnRSZWN0VG9w
LCBjdXJyZW50UmVjdEJvdHRvbSwgbGluZVRvcCwgbGluZUJvdHRvbSkgfHwgKGkgJiYgcmVjdHNb
aV0uaXNSdWJ5VGV4dCgpKSkgeworICAgICAgICAgICAgLy8gR3JvdyB0aGUgY3VycmVudCBsaW5l
IGJvdW5kcy4KKyAgICAgICAgICAgIGxpbmVUb3AgPSBzdGQ6Om1pbihsaW5lVG9wLCBjdXJyZW50
UmVjdFRvcCk7CisgICAgICAgICAgICBsaW5lQm90dG9tID0gc3RkOjptYXgobGluZUJvdHRvbSwg
Y3VycmVudFJlY3RCb3R0b20pOworICAgICAgICAgICAgLy8gQXZvaWQgb3ZlcmxhcCB3aXRoIHRo
ZSBwcmV2aW91cyBsaW5lLgorICAgICAgICAgICAgaWYgKCFoYXNGbGlwcGVkV3JpdGluZ01vZGUp
CisgICAgICAgICAgICAgICAgbGluZVRvcCA9IHN0ZDo6bWF4KGxhc3RMaW5lQm90dG9tLCBsaW5l
VG9wKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaW5lQm90dG9tID0gc3Rk
OjptaW4obGFzdExpbmVUb3AsIGxpbmVCb3R0b20pOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgYWRqdXN0TGluZUhlaWdodE9mU2VsZWN0aW9uUmVjdHMocmVjdHMsIGksIGxpbmVOdW1i
ZXIsIGxpbmVUb3AsIGxpbmVCb3R0b20gLSBsaW5lVG9wKTsKKyAgICAgICAgICAgIGlmICghaGFz
RmxpcHBlZFdyaXRpbmdNb2RlKSB7CisgICAgICAgICAgICAgICAgbGFzdExpbmVUb3AgPSBsaW5l
VG9wOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVjdEJvdHRvbSA+PSBsYXN0TGluZVRv
cCkgeworICAgICAgICAgICAgICAgICAgICBsYXN0TGluZUJvdHRvbSA9IGxpbmVCb3R0b207Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmVUb3AgPSBsYXN0TGluZUJvdHRvbTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsaW5lVG9wID0gY3VycmVudFJlY3RU
b3A7CisgICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lQm90dG9tID0gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptaW4oKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbGlu
ZUJvdHRvbSA9IGN1cnJlbnRSZWN0Qm90dG9tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBsYXN0TGluZUJvdHRvbSA9IGxpbmVCb3R0b207CisgICAgICAgICAgICAgICAg
aWYgKGN1cnJlbnRSZWN0VG9wIDw9IGxhc3RMaW5lQm90dG9tICYmIGkgJiYgcmVjdHNbaV0ucGFn
ZU51bWJlcigpID09IHJlY3RzW2kgLSAxXS5wYWdlTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGFzdExpbmVUb3AgPSBsaW5lVG9wOworICAgICAgICAgICAgICAgICAgICBsaW5lQm90
dG9tID0gbGFzdExpbmVUb3A7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgbGFzdExpbmVUb3AgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOwor
ICAgICAgICAgICAgICAgICAgICBsaW5lQm90dG9tID0gY3VycmVudFJlY3RCb3R0b207CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVUb3AgPSBjdXJyZW50UmVjdFRvcDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICsrbGluZU51bWJlcjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIEFkanVzdCBsaW5lIGhlaWdodC4KKyAgICBhZGp1c3RMaW5lSGVpZ2h0T2ZT
ZWxlY3Rpb25SZWN0cyhyZWN0cywgbnVtYmVyT2ZSZWN0cywgbGluZU51bWJlciwgbGluZVRvcCwg
bGluZUJvdHRvbSAtIGxpbmVUb3ApOworCisgICAgLy8gU29ydCB0aGUgcmVjdGFuZ2xlcyBhbmQg
bWFrZSBzdXJlIHRoZXJlIGFyZSBubyBnYXBzLiBUaGUgcmVjdGFuZ2xlcyBjb3VsZCBiZSB1bnNv
cnRlZCB3aGVuCisgICAgLy8gdGhlcmUgaXMgcnVieSB0ZXh0IGFuZCB3ZSBjb3VsZCBoYXZlIGdh
cHMgb24gdGhlIGxpbmUgd2hlbiBhZGphY2VudCBlbGVtZW50cyBvbiB0aGUgbGluZQorICAgIC8v
IGhhdmUgYSBkaWZmZXJlbnQgb3JpZW50YXRpb24uCisgICAgc2l6ZV90IGZpcnN0UmVjdFdpdGhD
dXJyZW50TGluZU51bWJlciA9IDA7CisgICAgZm9yIChzaXplX3QgY3VycmVudFJlY3QgPSAxOyBj
dXJyZW50UmVjdCA8IG51bWJlck9mUmVjdHM7ICsrY3VycmVudFJlY3QpIHsKKyAgICAgICAgaWYg
KHJlY3RzW2N1cnJlbnRSZWN0XS5saW5lTnVtYmVyKCkgIT0gcmVjdHNbY3VycmVudFJlY3QgLSAx
XS5saW5lTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGZpcnN0UmVjdFdpdGhDdXJyZW50TGluZU51
bWJlciA9IGN1cnJlbnRSZWN0OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHJlY3RzW2N1cnJlbnRSZWN0XS5sb2dpY2FsTGVmdCgpID49IHJlY3RzW2N1cnJl
bnRSZWN0IC0gMV0ubG9naWNhbExlZnQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIFNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdCA9IHJlY3RzW2N1cnJlbnRSZWN0XTsKKyAg
ICAgICAgc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IGN1cnJlbnRSZWN0OyBpID4gZmlyc3RS
ZWN0V2l0aEN1cnJlbnRMaW5lTnVtYmVyICYmIHNlbGVjdGlvblJlY3QubG9naWNhbExlZnQoKSA8
IHJlY3RzW2kgLSAxXS5sb2dpY2FsTGVmdCgpOyAtLWkpCisgICAgICAgICAgICByZWN0c1tpXSA9
IHJlY3RzW2kgLSAxXTsKKyAgICAgICAgcmVjdHNbaV0gPSBzZWxlY3Rpb25SZWN0OworICAgIH0K
KworICAgIGZvciAoc2l6ZV90IGogPSAxOyBqIDwgbnVtYmVyT2ZSZWN0czsgKytqKSB7CisgICAg
ICAgIGlmIChyZWN0c1tqXS5saW5lTnVtYmVyKCkgIT0gcmVjdHNbaiAtIDFdLmxpbmVOdW1iZXIo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBTZWxlY3Rpb25SZWN0JiBwcmV2aW91
c1JlY3QgPSByZWN0c1tqIC0gMV07CisgICAgICAgIGJvb2wgcHJldmlvdXNSZWN0TWF5Tm90UmVh
Y2hSaWdodEVkZ2UgPSAocHJldmlvdXNSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246
OkxUUiAmJiBwcmV2aW91c1JlY3QuY29udGFpbnNFbmQoKSkgfHwgKHByZXZpb3VzUmVjdC5kaXJl
Y3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpSVEwgJiYgcHJldmlvdXNSZWN0LmNvbnRhaW5zU3Rh
cnQoKSk7CisgICAgICAgIGlmIChwcmV2aW91c1JlY3RNYXlOb3RSZWFjaFJpZ2h0RWRnZSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpbnQgYWRqdXN0ZWRXaWR0aCA9IHJlY3RzW2pd
LmxvZ2ljYWxMZWZ0KCkgLSBwcmV2aW91c1JlY3QubG9naWNhbExlZnQoKTsKKyAgICAgICAgaWYg
KGFkanVzdGVkV2lkdGggPiBwcmV2aW91c1JlY3QubG9naWNhbFdpZHRoKCkpCisgICAgICAgICAg
ICBwcmV2aW91c1JlY3Quc2V0TG9naWNhbFdpZHRoKGFkanVzdGVkV2lkdGgpOworICAgIH0KKwor
ICAgIGludCBtYXhMaW5lTnVtYmVyID0gbGluZU51bWJlcjsKKworICAgIC8vIEV4dGVuZCByZWN0
cyBvdXQgdG8gZWRnZXMgYXMgbmVlZGVkLgorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVt
YmVyT2ZSZWN0czsgKytpKSB7CisgICAgICAgIFNlbGVjdGlvblJlY3QmIHNlbGVjdGlvblJlY3Qg
PSByZWN0c1tpXTsKKyAgICAgICAgaWYgKCFzZWxlY3Rpb25SZWN0LmlzTGluZUJyZWFrKCkgJiYg
c2VsZWN0aW9uUmVjdC5saW5lTnVtYmVyKCkgPj0gbWF4TGluZU51bWJlcikKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5kaXJlY3Rpb24oKSA9PSBUZXh0
RGlyZWN0aW9uOjpSVEwgJiYgc2VsZWN0aW9uUmVjdC5pc0ZpcnN0T25MaW5lKCkpIHsKKyAgICAg
ICAgICAgIHNlbGVjdGlvblJlY3Quc2V0TG9naWNhbFdpZHRoKHNlbGVjdGlvblJlY3QubG9naWNh
bFdpZHRoKCkgKyBzZWxlY3Rpb25SZWN0LmxvZ2ljYWxMZWZ0KCkgLSBzZWxlY3Rpb25SZWN0Lm1p
blgoKSk7CisgICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldExvZ2ljYWxMZWZ0KHNlbGVjdGlv
blJlY3QubWluWCgpKTsKKyAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb25SZWN0LmRpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OkxUUiAmJiBzZWxlY3Rpb25SZWN0LmlzTGFzdE9uTGluZSgp
KQorICAgICAgICAgICAgc2VsZWN0aW9uUmVjdC5zZXRMb2dpY2FsV2lkdGgoc2VsZWN0aW9uUmVj
dC5tYXhYKCkgLSBzZWxlY3Rpb25SZWN0LmxvZ2ljYWxMZWZ0KCkpOworICAgIH0KKworICAgIHJl
dHVybiB7IFdURk1vdmUocmVjdHMpLCBtYXhMaW5lTnVtYmVyIH07Cit9CisKK1ZlY3RvcjxTZWxl
Y3Rpb25SZWN0PiBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhjb25zdCBTaW1w
bGVSYW5nZSYgcmFuZ2UpCit7CisgICAgYXV0byByZXN1bHQgPSBSZW5kZXJPYmplY3Q6OmNvbGxl
Y3RTZWxlY3Rpb25SZWN0c0ludGVybmFsKHJhbmdlKTsKKyAgICBhdXRvIG51bWJlck9mUmVjdHMg
PSByZXN1bHQucmVjdHMuc2l6ZSgpOworCisgICAgLy8gVW5pb24gYWxsIHRoZSByZWN0YW5nbGVz
IG9uIGludGVyaW9yIGxpbmVzIChpLmUuIG5vdCBmaXJzdCBvciBsYXN0KS4KKyAgICAvLyBPbiBm
aXJzdCBhbmQgbGFzdCBsaW5lcywganVzdCBhdm9pZCBoYXZpbmcgb3ZlcmxhcHMgYnkgbWVyZ2lu
ZyBpbnRlcnNlY3RpbmcgcmVjdGFuZ2xlcy4KKyAgICBWZWN0b3I8U2VsZWN0aW9uUmVjdD4gdW5p
b25lZFJlY3RzOworICAgIEludFJlY3QgaW50ZXJpb3JVbmlvblJlY3Q7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBudW1iZXJPZlJlY3RzOyArK2kpIHsKKyAgICAgICAgU2VsZWN0aW9uUmVj
dCYgY3VycmVudFJlY3QgPSByZXN1bHQucmVjdHNbaV07CisgICAgICAgIGlmIChjdXJyZW50UmVj
dC5saW5lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgQVNTRVJUKGludGVyaW9yVW5pb25S
ZWN0LmlzRW1wdHkoKSk7CisgICAgICAgICAgICBpZiAoIXVuaW9uZWRSZWN0cy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICBTZWxlY3Rpb25SZWN0JiBwcmV2aW91c1JlY3QgPSB1bmlvbmVk
UmVjdHMubGFzdCgpOworICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1JlY3QucmVjdCgpLmlu
dGVyc2VjdHMoY3VycmVudFJlY3QucmVjdCgpKSkgeworICAgICAgICAgICAgICAgICAgICBwcmV2
aW91c1JlY3QgPSBjb2FsZXNjZVNlbGVjdGlvblJlY3RzKGN1cnJlbnRSZWN0LCBwcmV2aW91c1Jl
Y3QpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDb3VsZG4ndCBtZXJnZSB3aXRoIHByZXZpb3Vz
IHJlY3QsIHNvIGp1c3QgYXBwZW5kaW5nLgorICAgICAgICAgICAgdW5pb25lZFJlY3RzLmFwcGVu
ZChjdXJyZW50UmVjdCk7CisgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3QubGluZU51bWJl
cigpIDwgcmVzdWx0Lm1heExpbmVOdW1iZXIpIHsKKyAgICAgICAgICAgIGlmIChpbnRlcmlvclVu
aW9uUmVjdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTdGFydCBjb2xsZWN0aW5n
IGludGVyaW9yIHJlY3RzLgorICAgICAgICAgICAgICAgIGludGVyaW9yVW5pb25SZWN0ID0gY3Vy
cmVudFJlY3QucmVjdCgpOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbnRlcmlvclVuaW9uUmVj
dC5pbnRlcnNlY3RzKGN1cnJlbnRSZWN0LnJlY3QoKSkKKyAgICAgICAgICAgICAgICB8fCBpbnRl
cmlvclVuaW9uUmVjdC5tYXhYKCkgPT0gY3VycmVudFJlY3QucmVjdCgpLngoKQorICAgICAgICAg
ICAgICAgIHx8IGludGVyaW9yVW5pb25SZWN0Lm1heFkoKSA9PSBjdXJyZW50UmVjdC5yZWN0KCku
eSgpCisgICAgICAgICAgICAgICAgfHwgaW50ZXJpb3JVbmlvblJlY3QueCgpID09IGN1cnJlbnRS
ZWN0LnJlY3QoKS5tYXhYKCkKKyAgICAgICAgICAgICAgICB8fCBpbnRlcmlvclVuaW9uUmVjdC55
KCkgPT0gY3VycmVudFJlY3QucmVjdCgpLm1heFkoKSkgeworICAgICAgICAgICAgICAgIC8vIE9u
bHkgdW5pb24gdGhlIGxpbmVzIHRoYXQgYXJlIGF0dGFjaGVkLgorICAgICAgICAgICAgICAgIC8v
IEZvciBpQm9va3MsIHRoZSBpbnRlcmlvciBsaW5lcyBtYXkgY3Jvc3MgbXVsdGlwbGUgaG9yaXpv
bnRhbCBwYWdlcy4KKyAgICAgICAgICAgICAgICBpbnRlcmlvclVuaW9uUmVjdC51bml0ZShjdXJy
ZW50UmVjdC5yZWN0KCkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1
bmlvbmVkUmVjdHMuYXBwZW5kKFNlbGVjdGlvblJlY3QoaW50ZXJpb3JVbmlvblJlY3QsIGN1cnJl
bnRSZWN0LmlzSG9yaXpvbnRhbCgpLCBjdXJyZW50UmVjdC5wYWdlTnVtYmVyKCkpKTsKKyAgICAg
ICAgICAgICAgICBpbnRlcmlvclVuaW9uUmVjdCA9IGN1cnJlbnRSZWN0LnJlY3QoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFByb2Nlc3NpbmcgbGFz
dCBsaW5lLgorICAgICAgICAgICAgaWYgKCFpbnRlcmlvclVuaW9uUmVjdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgICAgICB1bmlvbmVkUmVjdHMuYXBwZW5kKFNlbGVjdGlvblJlY3QoaW50ZXJp
b3JVbmlvblJlY3QsIGN1cnJlbnRSZWN0LmlzSG9yaXpvbnRhbCgpLCBjdXJyZW50UmVjdC5wYWdl
TnVtYmVyKCkpKTsKKyAgICAgICAgICAgICAgICBpbnRlcmlvclVuaW9uUmVjdCA9IEludFJlY3Qo
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgQVNTRVJUKCF1bmlvbmVkUmVjdHMuaXNF
bXB0eSgpKTsKKyAgICAgICAgICAgIFNlbGVjdGlvblJlY3QmIHByZXZpb3VzUmVjdCA9IHVuaW9u
ZWRSZWN0cy5sYXN0KCk7CisgICAgICAgICAgICBpZiAocHJldmlvdXNSZWN0LmxvZ2ljYWxUb3Ao
KSA9PSBjdXJyZW50UmVjdC5sb2dpY2FsVG9wKCkgJiYgcHJldmlvdXNSZWN0LnJlY3QoKS5pbnRl
cnNlY3RzKGN1cnJlbnRSZWN0LnJlY3QoKSkpIHsKKyAgICAgICAgICAgICAgICAvLyBwcmV2aW91
c1JlY3QgaXMgYWxzbyBvbiB0aGUgbGFzdCBsaW5lLCBhbmQgaW50ZXJzZWN0cyB0aGUgY3VycmVu
dCBvbmUuCisgICAgICAgICAgICAgICAgcHJldmlvdXNSZWN0ID0gY29hbGVzY2VTZWxlY3Rpb25S
ZWN0cyhjdXJyZW50UmVjdCwgcHJldmlvdXNSZWN0KTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvdWxkbid0IG1lcmdlIHdpdGggcHJl
dmlvdXMgcmVjdCwgc28ganVzdCBhcHBlbmRpbmcuCisgICAgICAgICAgICB1bmlvbmVkUmVjdHMu
YXBwZW5kKGN1cnJlbnRSZWN0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB1bmlv
bmVkUmVjdHM7Cit9CisKKyNlbmRpZgorCiBTdHJpbmcgUmVuZGVyT2JqZWN0OjpkZWJ1Z0Rlc2Ny
aXB0aW9uKCkgY29uc3QKIHsKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggY2JmYmIzNTczYzlhMTJiOGYwODJhMDY5
ZGVkMjgyZDZlZTkyZmFhMS4uNzExM2Y1YzMyOTAwZWQ3NjRiMzZlNDQ3OWI5NjA3ZjA3NzliMTJm
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNTQ3LDYgKzU0
Nyw4IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQogICAgIHZpcnR1YWwgdm9p
ZCBjb2xsZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiwgdW5zaWduZWQg
c3RhcnRPZmZzZXQgPSAwLCB1bnNpZ25lZCBlbmRPZmZzZXQgPSBzdGQ6Om51bWVyaWNfbGltaXRz
PHVuc2lnbmVkPjo6bWF4KCkpOwogICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVF1YWRzRm9yU2Vs
ZWN0aW9uKFZlY3RvcjxGbG9hdFF1YWQ+JiBxdWFkcykgY29uc3QgeyBhYnNvbHV0ZVF1YWRzKHF1
YWRzKTsgfQorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8U2VsZWN0aW9uUmVjdD4g
Y29sbGVjdFNlbGVjdGlvblJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJik7CisgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIFZlY3RvcjxTZWxlY3Rpb25SZWN0PiBjb2xsZWN0U2VsZWN0aW9uUmVjdHNX
aXRob3V0VW5pb25JbnRlcmlvckxpbmVzKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAjZW5kaWYKIAog
ICAgIHZpcnR1YWwgdm9pZCBhYnNvbHV0ZVJlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IExh
eW91dFBvaW50JikgY29uc3QgeyB9CkBAIC03NTgsNiArNzYwLDE0IEBAIHByaXZhdGU6CiAgICAg
dm9pZCBzZXRMYXllck5lZWRzRnVsbFJlcGFpbnQoKTsKICAgICB2b2lkIHNldExheWVyTmVlZHNG
dWxsUmVwYWludEZvclBvc2l0aW9uZWRNb3ZlbWVudExheW91dCgpOwogCisjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKKyAgICBzdHJ1Y3QgU2VsZWN0aW9uUmVjdHMgeworICAgICAgICBWZWN0b3I8
U2VsZWN0aW9uUmVjdD4gcmVjdHM7CisgICAgICAgIGludCBtYXhMaW5lTnVtYmVyOworICAgIH07
CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFNlbGVjdGlvblJlY3RzIGNvbGxlY3RTZWxlY3Rp
b25SZWN0c0ludGVybmFsKGNvbnN0IFNpbXBsZVJhbmdlJik7CisjZW5kaWYKKwogICAgIE5vZGUq
IGdlbmVyYXRpbmdQc2V1ZG9Ib3N0RWxlbWVudCgpIGNvbnN0OwogCiAgICAgdm9pZCBwcm9wYWdh
dGVSZXBhaW50VG9QYXJlbnRXaXRoT3V0bGluZUF1dG9JZk5lZWRlZChjb25zdCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0JiByZXBhaW50Q29udGFpbmVyLCBjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50
UmVjdCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggZDQ3ZjI2
MTdlYmQwZWI5N2JmMzEzZWQ2NmMzZDhkZTI0MjRlNDAwMi4uYWIyMGYzMGQzZDFhZjEwMmI4NDc4
OTRlMzlkNjhlMjk0ZDA4YjExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApA
QCAtMTc3NSw3ICsxNzc1LDcgQEAgRXhjZXB0aW9uT3I8UmVmUHRyPFJhbmdlPj4gSW50ZXJuYWxz
OjptYXJrZXJSYW5nZUZvck5vZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW4KICAgICBhdXRvIG1h
cmtlciA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsKICAgICBpZiAoIW1hcmtlcikKICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIHsgY3JlYXRlTGl2ZVJhbmdlKHJhbmdl
KG5vZGUsICptYXJrZXIpKSB9OworICAgIHJldHVybiB7IGNyZWF0ZUxpdmVSYW5nZShtYWtlU2lt
cGxlUmFuZ2Uobm9kZSwgKm1hcmtlcikpIH07CiB9CiAKIEV4Y2VwdGlvbk9yPFN0cmluZz4gSW50
ZXJuYWxzOjptYXJrZXJEZXNjcmlwdGlvbkZvck5vZGUoTm9kZSYgbm9kZSwgY29uc3QgU3RyaW5n
JiBtYXJrZXJUeXBlLCB1bnNpZ25lZCBpbmRleCkKQEAgLTIxNTQsMTIgKzIxNTQsMTIgQEAgUmVm
UHRyPFJhbmdlPiBJbnRlcm5hbHM6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKEVsZW1lbnQm
IHNjb3BlLCB1bnNpZ25lZCByYW4KIAogdW5zaWduZWQgSW50ZXJuYWxzOjpsb2NhdGlvbkZyb21S
YW5nZShFbGVtZW50JiBzY29wZSwgY29uc3QgUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBj
bGFtcFRvPHVuc2lnbmVkPihjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5v
ZGVDb250ZW50cyhzY29wZSksIHJhbmdlKS5sb2NhdGlvbik7CisgICAgcmV0dXJuIGNsYW1wVG88
dW5zaWduZWQ+KGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRl
bnRzKHNjb3BlKSwgbWFrZVNpbXBsZVJhbmdlKHJhbmdlKSkubG9jYXRpb24pOwogfQogCiB1bnNp
Z25lZCBJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZShFbGVtZW50JiBzY29wZSwgY29uc3QgUmFu
Z2UmIHJhbmdlKQogewotICAgIHJldHVybiBjbGFtcFRvPHVuc2lnbmVkPihjaGFyYWN0ZXJSYW5n
ZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhzY29wZSksIHJhbmdlKS5sZW5n
dGgpOworICAgIHJldHVybiBjbGFtcFRvPHVuc2lnbmVkPihjaGFyYWN0ZXJSYW5nZShtYWtlQm91
bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhzY29wZSksIG1ha2VTaW1wbGVSYW5nZShyYW5n
ZSkpLmxlbmd0aCk7CiB9CiAKIFN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJh
bmdlJiByYW5nZSkKQEAgLTIxNzAsMTkgKzIxNzAsMTkgQEAgU3RyaW5nIEludGVybmFsczo6cmFu
Z2VBc1RleHQoY29uc3QgUmFuZ2UmIHJhbmdlKQogU3RyaW5nIEludGVybmFsczo6cmFuZ2VBc1Rl
eHRVc2luZ0JhY2t3YXJkc1RleHRJdGVyYXRvcihjb25zdCBSYW5nZSYgcmFuZ2UpCiB7CiAgICAg
U3RyaW5nIHJlc3VsdDsKLSAgICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3Ig
YmFja3dhcmRzSXRlcmF0b3IocmFuZ2UpOyAhYmFja3dhcmRzSXRlcmF0b3IuYXRFbmQoKTsgYmFj
a3dhcmRzSXRlcmF0b3IuYWR2YW5jZSgpKQorICAgIGZvciAoU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsgIWJh
Y2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKICAg
ICAgICAgcmVzdWx0Lmluc2VydChiYWNrd2FyZHNJdGVyYXRvci50ZXh0KCkudG9TdHJpbmcoKSwg
MCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogUmVmPFJhbmdlPiBJbnRlcm5hbHM6OnN1YnJh
bmdlKFJhbmdlJiByYW5nZSwgdW5zaWduZWQgcmFuZ2VMb2NhdGlvbiwgdW5zaWduZWQgcmFuZ2VM
ZW5ndGgpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFu
Z2UocmFuZ2UsIHsgcmFuZ2VMb2NhdGlvbiwgcmFuZ2VMZW5ndGggfSkpOworICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VTaW1wbGVSYW5nZShyYW5n
ZSksIHsgcmFuZ2VMb2NhdGlvbiwgcmFuZ2VMZW5ndGggfSkpOwogfQogCi1SZWZQdHI8UmFuZ2U+
IEludGVybmFsczo6cmFuZ2VPZlN0cmluZ05lYXJMb2NhdGlvbihjb25zdCBSYW5nZSYgc2VhcmNo
UmFuZ2UsIGNvbnN0IFN0cmluZyYgdGV4dCwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0KQorUmVmUHRy
PFJhbmdlPiBJbnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmdOZWFyTG9jYXRpb24oY29uc3QgUmFuZ2Um
IHJhbmdlLCBjb25zdCBTdHJpbmcmIHRleHQsIHVuc2lnbmVkIHRhcmdldE9mZnNldCkKIHsKLSAg
ICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGZpbmRDbG9zZXN0UGxhaW5UZXh0KHNlYXJjaFJhbmdl
LCB0ZXh0LCB7IH0sIHRhcmdldE9mZnNldCkpOworICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2Uo
ZmluZENsb3Nlc3RQbGFpblRleHQobWFrZVNpbXBsZVJhbmdlKHJhbmdlKSwgdGV4dCwgeyB9LCB0
YXJnZXRPZmZzZXQpKTsKIH0KIAogI2lmICFQTEFURk9STShNQUMpCkBAIC01NzU2LDcgKzU3NTYs
NyBAQCBJbnRlcm5hbHM6OlRleHRJbmRpY2F0b3JJbmZvOjp+VGV4dEluZGljYXRvckluZm8oKSA9
IGRlZmF1bHQ7CiAKIEludGVybmFsczo6VGV4dEluZGljYXRvckluZm8gSW50ZXJuYWxzOjp0ZXh0
SW5kaWNhdG9yRm9yUmFuZ2UoY29uc3QgUmFuZ2UmIHJhbmdlLCBUZXh0SW5kaWNhdG9yT3B0aW9u
cyBvcHRpb25zKQogewotICAgIGF1dG8gaW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRl
V2l0aFJhbmdlKHJhbmdlLCBvcHRpb25zLmNvcmVPcHRpb25zKCksIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uOjpOb25lKTsKKyAgICBhdXRvIGluZGljYXRvciA9IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpLCBvcHRpb25zLmNv
cmVPcHRpb25zKCksIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lKTsK
ICAgICByZXR1cm4gaW5kaWNhdG9yLT5kYXRhKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1
Z0luUmFuZ2VIYW5kbGUubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tCmluZGV4IDA3Njc2
YTBlMzY2N2MxYjc1ODI4NDM0MmI2ZmJkZjM4YTllMTYzODguLjFlZjc4Y2IzNmM2MGE4OGJjNTFi
YTUwNjRiYjMzYjliNGQ4NjVmYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luUmFuZ2VIYW5kbGUu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2Nv
YS9XS1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZS5tbQpAQCAtNjcsNyArNjcsNyBAQCAtIChO
U1N0cmluZyAqKXRleHQKIC0gKE5TQXJyYXkgKilkZXRlY3REYXRhV2l0aFR5cGVzOihXS0RhdGFE
ZXRlY3RvclR5cGVzKXR5cGVzIGNvbnRleHQ6KE5TRGljdGlvbmFyeSAqKWNvbnRleHQKIHsKICNp
ZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCi0gICAgcmV0dXJuIFdlYkNvcmU6OkRhdGFEZXRlY3Rp
b246OmRldGVjdENvbnRlbnRJblJhbmdlKF9yYW5nZUhhbmRsZS0+Y29yZVJhbmdlKCksIGZyb21X
S0RhdGFEZXRlY3RvclR5cGVzKHR5cGVzKSwgY29udGV4dCk7CisgICAgcmV0dXJuIFdlYkNvcmU6
OkRhdGFEZXRlY3Rpb246OmRldGVjdENvbnRlbnRJblJhbmdlKG1ha2VTaW1wbGVSYW5nZShfcmFu
Z2VIYW5kbGUtPmNvcmVSYW5nZSgpKSwgZnJvbVdLRGF0YURldGVjdG9yVHlwZXModHlwZXMpLCBj
b250ZXh0KTsKICNlbHNlCiAgICAgcmV0dXJuIG5pbDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92
ZXJsYXkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9j
L1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCmluZGV4IDM1YjY2NDcyZTc3MDU3Y2NlZmU5M2RmOGZk
YTk1M2QwZDQxOTZhYzQuLjEyMDc4ZTIzOTc3YjY0MTIxZGMzZjM3YmExZjEwMzQ1ZjBlMTgxYTgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
Yy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTQwLDYgKzQw
LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUGFnZU92ZXJsYXkuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtTW91c2VFdmVu
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KIAogbmFtZXNwYWNlIEFQSSB7CiAKQEAg
LTEzOCw3ICsxMzksNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoIWFjdGlvbkNvbnRleHQgfHwg
IWFwaVJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICBy
ZXR1cm4geyB7IGFjdGlvbkNvbnRleHQsIFdlYktpdDo6dG9JbXBsKGFwaVJhbmdlKS0+Y29yZVJh
bmdlKCkgfSB9OworICAgICAgICByZXR1cm4geyB7IGFjdGlvbkNvbnRleHQsIG1ha2VTaW1wbGVS
YW5nZShXZWJLaXQ6OnRvSW1wbChhcGlSYW5nZSktPmNvcmVSYW5nZSgpKSB9IH07CiAgICAgfQog
CiAgICAgdm9pZCBkYXRhRGV0ZWN0b3JzRGlkUHJlc2VudFVJKFdlYktpdDo6V2ViUGFnZU92ZXJs
YXkmIHBhZ2VPdmVybGF5KSBvdmVycmlkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbSBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KaW5kZXgg
MWI2YmI3N2VjYTdlNmVjMGYxZjYxZTg3MjEyYzRjNDVmNjk2YjY2NC4uMzAyMTFjOTc4N2Q2Mzhj
MWE2ZjVkOGRlMDU1NDgwYWQ0MzZmNTA5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCkBA
IC0xMjksNyArMTI5LDcgQEAgLSAoQk9PTClpc0NvbGxhcHNlZAogLSAoTlNBcnJheSAqKXRleHRS
ZWN0cwogewogICAgIF9pbXBsLT5vd25lckRvY3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVu
ZGluZ1N0eWxlc2hlZXRzKCk7Ci0gICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRSZWN0cygqX2ltcGwpKS5hdXRvcmVsZWFzZSgpOworICAg
IHJldHVybiBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0
UmVjdHMobWFrZVNpbXBsZVJhbmdlKCpfaW1wbCkpKS5hdXRvcmVsZWFzZSgpOwogfQogCiAtIChX
S0RPTVJhbmdlICopcmFuZ2VCeUV4cGFuZGluZ1RvV29yZEJvdW5kYXJ5QnlDaGFyYWN0ZXJzOihO
U1VJbnRlZ2VyKWNoYXJhY3RlcnMgaW5EaXJlY3Rpb246KFdLRE9NUmFuZ2VEaXJlY3Rpb24pZGly
ZWN0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL21hYy9XS0RPTVRleHRJdGVyYXRvci5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NVGV4dEl0ZXJhdG9yLm1tCmluZGV4IDVmNDZi
MWY2MTg4Zjg1ZDEyZTBjOGM4M2QzNmRkMGRkMjRiYzI5YzMuLmIxYjg2MzA2ODlmMDlkYzgxYmJm
MTcyYzMyMGU2MmU5M2ViN2NkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NVGV4dEl0ZXJhdG9yLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dLRE9NVGV4dEl0ZXJh
dG9yLm1tCkBAIC00OCw3ICs0OCw3IEBAIC0gKGlkKWluaXRXaXRoUmFuZ2U6KFdLRE9NUmFuZ2Ug
KilyYW5nZQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBzZWxmOwogCi0gICAgX3Rl
eHRJdGVyYXRvciA9IG1ha2VVbmlxdWU8V2ViQ29yZTo6VGV4dEl0ZXJhdG9yPigqV2ViS2l0Ojp0
b1dlYkNvcmVSYW5nZShyYW5nZSkpOworICAgIF90ZXh0SXRlcmF0b3IgPSBtYWtlVW5pcXVlPFdl
YkNvcmU6OlRleHRJdGVyYXRvcj4obWFrZVNpbXBsZVJhbmdlKCpXZWJLaXQ6OnRvV2ViQ29yZVJh
bmdlKHJhbmdlKSkpOwogICAgIHJldHVybiBzZWxmOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9J
bmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcAppbmRleCBhOTFmN2Y3MDc4MTc4ZGZiZTQzYjU4
NDZiYzAwYzQ0ZWJkOTZkNzQyLi5kMDdiZDk4YTE3MTZiZDgxY2IwYzhiZTU4YjVmNDE3NmExYjc5
Y2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
RE9NL0luamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAK
QEAgLTEyNCw3ICsxMjQsNyBAQCBSZWZQdHI8V2ViSW1hZ2U+IEluamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGU6OnJlbmRlcmVkSW1hZ2UoU25hcHNob3RPcHRpb25zIG9wdGlvbgogICAgIFJlZjxGcmFt
ZT4gcHJvdGVjdG9yKCpmcmFtZSk7CiAKICAgICBWaXNpYmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlv
biA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9u
KCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24obV9yYW5nZSkpOworICAgIGZyYW1lLT5z
ZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKG1fcmFuZ2UpKTsKIAogICAg
IGZsb2F0IHNjYWxlRmFjdG9yID0gKG9wdGlvbnMgJiBTbmFwc2hvdE9wdGlvbnNFeGNsdWRlRGV2
aWNlU2NhbGVGYWN0b3IpID8gMSA6IGZyYW1lLT5wYWdlKCktPmRldmljZVNjYWxlRmFjdG9yKCk7
CiAgICAgSW50UmVjdCBwYWludFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fcmFuZ2UtPmFic29s
dXRlQm91bmRpbmdSZWN0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCmluZGV4IDY2YWE1YjgwMDQzNWI4YzU4Y2Jl
MmM4YzYyMWVmMDg2MjYzODlmYWIuLjA3ODY2ZDBjMmM0NmE4NDE4ZDcwZWJmOGMxYTI2NzBkYTFh
NjNiYjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29h
L1dlYlBhZ2VDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9XZWJQYWdlQ29jb2EubW0KQEAgLTEyOSw3ICsxMjksNyBAQCB2b2lkIFdlYlBhZ2U6OnBl
cmZvcm1EaWN0aW9uYXJ5TG9va3VwQXRMb2NhdGlvbihjb25zdCBGbG9hdFBvaW50JiBmbG9hdFBv
aW50KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIFtyYW5nZSwgb3B0aW9uc10gPSBXVEZN
b3ZlKCpyYW5nZVJlc3VsdCk7Ci0gICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JSYW5nZSgq
ZnJhbWUsIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIG9wdGlvbnMsIFRleHRJbmRpY2F0b3JQcmVz
ZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOworICAgIHBlcmZvcm1EaWN0aW9uYXJ5TG9va3Vw
Rm9yUmFuZ2UoKmZyYW1lLCByYW5nZSwgb3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlv
blRyYW5zaXRpb246OkJvdW5jZSk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25h
cnlMb29rdXBGb3JTZWxlY3Rpb24oRnJhbWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24sIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uIHByZXNlbnRh
dGlvblRyYW5zaXRpb24pCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3Jt
RGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbihGcmFtZSYgZnJhbWUsIGNvbnN0IFZpc2libGVT
ZWwKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXV0byBbcmFuZ2UsIG9wdGlvbnNdID0gV1RGTW92
ZSgqcmVzdWx0KTsKLSAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCBj
cmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBvcHRpb25zLCBwcmVzZW50YXRpb25UcmFuc2l0aW9uKTsK
KyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKGZyYW1lLCByYW5nZSwgb3B0aW9u
cywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURp
Y3Rpb25hcnlMb29rdXBPZkN1cnJlbnRTZWxlY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCmluZGV4IDUzMTg1NTM4Yjll
MDUxOTAzYTlkNmVkZTc1YjRlMGVjODM1MjY5MzEuLjJhNTdmZDIwOWU2MzU3MGI3Mzg5MjNmMGI1
OWZiM2NjZGIyZjRkNDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0ZpbmRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9GaW5kQ29udHJvbGxlci5jcHAKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIEZpbmRDb250
cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VTY3JvbGwoYm9vbCBmb3VuZCwgY29uc3QgU3Ry
aW5nJiBzdHJpbgogICAgICAgICAgICAgVmVjdG9yPEludFJlY3Q+IG1hdGNoUmVjdHM7CiAgICAg
ICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1fd2ViUGFnZS0+Y29yZVBhZ2UoKS0+c2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpKSB7CiAgICAgICAgICAgICAgICAgbWF0Y2hSZWN0cyA9IFJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UmVjdHMoKnJhbmdlKTsKLSAgICAgICAgICAgICAgICBtX2ZpbmRN
YXRjaGVzLmFwcGVuZChjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSk7CisgICAgICAgICAgICAgICAg
bV9maW5kTWF0Y2hlcy5hcHBlbmQoKnJhbmdlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG1fd2ViUGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRGaW5kU3RyaW5nKHN0
cmluZywgbWF0Y2hSZWN0cywgbWF0Y2hDb3VudCwgbV9mb3VuZFN0cmluZ01hdGNoSW5kZXgsIGRp
ZFdyYXAgPT0gRGlkV3JhcDo6WWVzKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggMWU2Y2JkZDhjNDUx
MjQ4MGFhMGFlMTA5NjQ2Mzg2NTFlYWVhODVlNi4uMDYyMDg1NjVhNWEzYTI1ZDJmMTFjYWM4NjFk
NDg2MGU3ODIzN2FkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KQEAgLTI2OCw3ICsyNjgsNyBAQCB2b2lkIFdlYlBhZ2U6Omdl
dFBsYXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBj
b25zdAogCiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkpIHsKICAgICAg
ICAgaWYgKGF1dG8gY29tcG9zaXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9u
UmFuZ2UoKSkgewotICAgICAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdl
KS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLm1hcmtlZFRleHRSZWN0cyk7
CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJrZWRUZXh0UmVjdHMgPSBSZW5kZXJPYmpl
Y3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cygqY29tcG9zaXRpb25SYW5nZSk7CiAgICAgICAgICAg
ICBjb252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cyh2aWV3LCBwb3N0TGF5b3V0
RGF0YS5tYXJrZWRUZXh0UmVjdHMpOwogCiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5tYXJr
ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yQ29udGV4dCgqY29tcG9zaXRpb25SYW5nZSk7CkBAIC0yOTgs
NyArMjk4LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBm
cmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAgYXV0byBzZWxlY3RlZFJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIFN0cmluZyBzZWxl
Y3RlZFRleHQ7CiAgICAgICAgIGlmIChzZWxlY3RlZFJhbmdlKSB7Ci0gICAgICAgICAgICBjcmVh
dGVMaXZlUmFuZ2UoKnNlbGVjdGVkUmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocG9zdExh
eW91dERhdGEuc2VsZWN0aW9uUmVjdHMpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEuc2Vs
ZWN0aW9uUmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cygqc2VsZWN0
ZWRSYW5nZSk7CiAgICAgICAgICAgICBjb252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25S
ZWN0cyh2aWV3LCBwb3N0TGF5b3V0RGF0YS5zZWxlY3Rpb25SZWN0cyk7CiAgICAgICAgICAgICBz
ZWxlY3RlZFRleHQgPSBwbGFpblRleHRGb3JEaXNwbGF5KCpzZWxlY3RlZFJhbmdlKTsKICAgICAg
ICAgICAgIHBvc3RMYXlvdXREYXRhLnNlbGVjdGVkVGV4dExlbmd0aCA9IHNlbGVjdGVkVGV4dC5s
ZW5ndGgoKTsKQEAgLTEwMjQsNyArMTAyNCw3IEBAIHZvaWQgV2ViUGFnZTo6Y29tcHV0ZUFuZFNl
bmRFZGl0RHJhZ1NuYXBzaG90KCkKICAgICAgICAgVGV4dEluZGljYXRvck9wdGlvbjo6SW5jbHVk
ZVNuYXBzaG90V2l0aFNlbGVjdGlvbkhpZ2hsaWdodAogICAgIH07CiAgICAgaWYgKGF1dG8gcmFu
Z2UgPSBzdGQ6OmV4Y2hhbmdlKG1fcmFuZ2VGb3JEcm9wU25hcHNob3QsIFdURjo6bnVsbG9wdCkp
IHsKLSAgICAgICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhSYW5nZShjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgZGVmYXVsdFRleHRJbmRpY2F0b3JP
cHRpb25zRm9yRWRpdERyYWcsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpO
b25lLCB7IH0pKQorICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRv
cjo6Y3JlYXRlV2l0aFJhbmdlKCpyYW5nZSwgZGVmYXVsdFRleHRJbmRpY2F0b3JPcHRpb25zRm9y
RWRpdERyYWcsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCB7IH0p
KQogICAgICAgICAgICAgdGV4dEluZGljYXRvckRhdGEgPSB0ZXh0SW5kaWNhdG9yLT5kYXRhKCk7
CiAgICAgfQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUmVjZWl2ZUVkaXRE
cmFnU25hcHNob3QoV1RGTW92ZSh0ZXh0SW5kaWNhdG9yRGF0YSkpKTsKQEAgLTE5ODIsOCArMTk4
Miw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNGb3JHcmFudWxhcml0eVdpdGhTZWxlY3Rpb25P
ZmZzZXQoV2ViQ29yZTo6VGV4dEdyYW51bGFyaXR5CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVjdHM7Ci0gICAg
Y3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlv
bkludGVyaW9yTGluZXMoc2VsZWN0aW9uUmVjdHMpOworICAgIGF1dG8gc2VsZWN0aW9uUmVjdHMg
PSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9y
TGluZXMoKnJhbmdlKTsKICAgICBjb252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0
cygqZnJhbWUudmlldygpLCBzZWxlY3Rpb25SZWN0cyk7CiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTZWxlY3Rpb25SZWN0c0NhbGxiYWNrKHNlbGVjdGlvblJlY3RzLCBjYWxsYmFj
a0lEKSk7CiB9CkBAIC0yMDI5LDggKzIwMjgsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzQXRT
ZWxlY3Rpb25PZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNl
bGVjdGlvblJlY3RzOwotICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rp
b25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoc2VsZWN0aW9uUmVjdHMpOworICAgIGF1
dG8gc2VsZWN0aW9uUmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dp
dGhvdXRVbmlvbkludGVyaW9yTGluZXMoKnJhbmdlKTsKICAgICBjb252ZXJ0Q29udGVudFRvUm9v
dFZpZXdTZWxlY3Rpb25SZWN0cygqZnJhbWUudmlldygpLCBzZWxlY3Rpb25SZWN0cyk7CiAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25SZWN0c0NhbGxiYWNrKHNlbGVj
dGlvblJlY3RzLCBjYWxsYmFja0lEKSk7CiB9CkBAIC0yMzMyLDcgKzIzMzAsNyBAQCB2b2lkIFdl
YlBhZ2U6OnJlcXVlc3RBdXRvY29ycmVjdGlvbkRhdGEoY29uc3QgU3RyaW5nJiB0ZXh0Rm9yQXV0
b2NvcnJlY3Rpb24sIENvbQogCiAgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJl
Y3RzOwogICAgIGlmICh0ZXh0Rm9yUmFuZ2UgPT0gdGV4dEZvckF1dG9jb3JyZWN0aW9uKQotICAg
ICAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMoc2VsZWN0
aW9uUmVjdHMpOworICAgICAgICBzZWxlY3Rpb25SZWN0cyA9IFJlbmRlck9iamVjdDo6Y29sbGVj
dFNlbGVjdGlvblJlY3RzKCpyYW5nZSk7CiAKICAgICBhdXRvIHJvb3RWaWV3U2VsZWN0aW9uUmVj
dHMgPSBzZWxlY3Rpb25SZWN0cy5tYXAoWyZdKGNvbnN0IGF1dG8mIHNlbGVjdGlvblJlY3QpIC0+
IEZsb2F0UmVjdCB7IHJldHVybiBmcmFtZS52aWV3KCktPmNvbnRlbnRzVG9Sb290VmlldyhzZWxl
Y3Rpb25SZWN0LnJlY3QoKSk7IH0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCmluZGV4IDQ3ZjMwY2FkMTRiZWVhMGU3
NjM5YmY0Yjk3YTFmNTY4MGY0MmYwZGIuLjdjYWZjYmFiNzc0MjVlZDBiNWEwNTMwY2QxMDU3OTA0
YTEwOWNlODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC0yMDYsMTAgKzIwNiw3IEBAIC0gKHZvaWQpZXh0ZW5k
U2VsZWN0aW9uOihCT09MKXN0YXJ0CiAKIC0gKE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0c0ZvckNv
cmVSYW5nZTooY29uc3QgU2ltcGxlUmFuZ2UmKXJhbmdlCiB7Ci0gICAgVmVjdG9yPFNlbGVjdGlv
blJlY3Q+IHJlY3RzOwotICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rp
b25SZWN0cyhyZWN0cyk7Ci0KLSAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyZWN0cywgW10gKGF1
dG8mIGNvcmVSZWN0KSB7CisgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkoUmVuZGVyT2JqZWN0Ojpj
b2xsZWN0U2VsZWN0aW9uUmVjdHMocmFuZ2UpLCBbXSAoYXV0byYgY29yZVJlY3QpIHsKICAgICAg
ICAgYXV0byB3ZWJSZWN0ID0gW1dlYlNlbGVjdGlvblJlY3Qgc2VsZWN0aW9uUmVjdF07CiAgICAg
ICAgIHdlYlJlY3QucmVjdCA9IGNvcmVSZWN0LnJlY3QoKTsKICAgICAgICAgd2ViUmVjdC53cml0
aW5nRGlyZWN0aW9uID0gY29yZVJlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRS
ID8gV0tXcml0aW5nRGlyZWN0aW9uTGVmdFRvUmlnaHQgOiBXS1dyaXRpbmdEaXJlY3Rpb25SaWdo
dFRvTGVmdDsKQEAgLTIyNiw3ICsyMjMsNyBAQCAtIChOU0FycmF5ICopc2VsZWN0aW9uUmVjdHNG
b3JDb3JlUmFuZ2U6KGNvbnN0IFNpbXBsZVJhbmdlJilyYW5nZQogCiAtIChOU0FycmF5ICopc2Vs
ZWN0aW9uUmVjdHNGb3JSYW5nZTooRE9NUmFuZ2UgKilkb21SYW5nZQogewotICAgIGF1dG8gcmFu
Z2UgPSBjb3JlKGRvbVJhbmdlKTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGNv
cmUoZG9tUmFuZ2UpKTsKICAgICByZXR1cm4gcmFuZ2UgPyBbc2VsZiBzZWxlY3Rpb25SZWN0c0Zv
ckNvcmVSYW5nZToqcmFuZ2VdIDogbmlsOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0gYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KaW5k
ZXggZGU1ZGE0NGFmZDkyOGEzZjA5OTUwYjUyZTY0YzY1NDA1ZTViYjkyNC4uZTJjMTljZmQ1MjJm
NzRlNmI3N2EyYmEyMzQyODMyMGYzMzMxMzhmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQpA
QCAtNDE2LDcgKzQxNiw3IEBAIC0gKERPTVJhbmdlICopZW5jbG9zaW5nUmFuZ2VXaXRoRGljdGF0
aW9uUGhyYXNlQWx0ZXJuYXRpdmVzOihOU0FycmF5ICoqKWFsdGVybmF0CiAgICAgZm9yIChhdXRv
IG1hcmtlciA6IGRvY3VtZW50Lm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlLCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykpIHsKICAgICAgICAgaWYgKG1h
cmtlci0+c3RhcnRPZmZzZXQoKSA8PSBvZmZzZXQgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA+PSBv
ZmZzZXQpIHsKICAgICAgICAgICAgICphbHRlcm5hdGl2ZXMgPSBjcmVhdGVOU0FycmF5KFdURjo6
Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSkpLmF1dG9yZWxlYXNlKCk7Ci0gICAg
ICAgICAgICByZXR1cm4ga2l0KHJhbmdlKCpub2RlLCAqbWFya2VyKSk7CisgICAgICAgICAgICBy
ZXR1cm4ga2l0KG1ha2VTaW1wbGVSYW5nZSgqbm9kZSwgKm1hcmtlcikpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBuaWw7CkBAIC00MzMsNyArNDMzLDcgQEAgLSAoRE9NUmFuZ2UgKill
bmNsb3NpbmdSYW5nZVdpdGhDb3JyZWN0aW9uSW5kaWNhdG9yCiAgICAgYXV0byYgZG9jdW1lbnQg
PSBub2RlLT5kb2N1bWVudCgpOwogICAgIGZvciAoYXV0byBtYXJrZXIgOiBkb2N1bWVudC5tYXJr
ZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSkgewogICAg
ICAgICBpZiAobWFya2VyLT5zdGFydE9mZnNldCgpIDw9IG9mZnNldCAmJiBtYXJrZXItPmVuZE9m
ZnNldCgpID49IG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBraXQocmFuZ2UoKm5vZGUsICpt
YXJrZXIpKTsKKyAgICAgICAgICAgIHJldHVybiBraXQobWFrZVNpbXBsZVJhbmdlKCpub2RlLCAq
bWFya2VyKSk7CiAgICAgfQogICAgIHJldHVybiBuaWw7CiB9CkBAIC00NzUsMTEgKzQ3NSwxMSBA
QCAtIChET01SYW5nZSAqKWVuY2xvc2luZ1dvcmRSYW5nZQogCiArIChET01SYW5nZSAqKXJhbmdl
Rm9yRmlyc3RQb3NpdGlvbjooV2ViVmlzaWJsZVBvc2l0aW9uICopZmlyc3Qgc2Vjb25kOihXZWJW
aXNpYmxlUG9zaXRpb24gKilzZWNvbmQKIHsKLSAgICBhdXRvIGZpcnN0VlAgPSBbZmlyc3QgX3Zp
c2libGVQb3NpdGlvbl07Ci0gICAgYXV0byBzZWNvbmRWUCA9IFtzZWNvbmQgX3Zpc2libGVQb3Np
dGlvbl07Ci0gICAgaWYgKGZpcnN0VlAgPCBzZWNvbmRWUCkKLSAgICAgICAgc3RkOjpzd2FwKGZp
cnN0VlAsIHNlY29uZFZQKTsKLSAgICByZXR1cm4ga2l0KG1ha2VTaW1wbGVSYW5nZShmaXJzdFZQ
LCBzZWNvbmRWUCkpOworICAgIGF1dG8gZmlyc3RQb3NpdGlvbiA9IFtmaXJzdCBfdmlzaWJsZVBv
c2l0aW9uXTsKKyAgICBhdXRvIHNlY29uZFBvc2l0aW9uID0gW3NlY29uZCBfdmlzaWJsZVBvc2l0
aW9uXTsKKyAgICBpZiAoZmlyc3RQb3NpdGlvbiA8IHNlY29uZFBvc2l0aW9uKQorICAgICAgICBz
dGQ6OnN3YXAoZmlyc3RQb3NpdGlvbiwgc2Vjb25kUG9zaXRpb24pOworICAgIHJldHVybiBraXQo
bWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb24sIHNlY29uZFBvc2l0aW9uKSk7CiB9CiAKIEBl
bmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCmluZGV4IDdhZTQ1NTg2NWI0NjUwZDk2ZmU2
NDMyYTM4ZGU0MTcxYTBkNzk4NmEuLjE0M2YwOGQzNTkyYTMwNTY1YzE1NzBjN2U2NzFjZmZjY2Yy
NDI0YTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET00ubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5tbQpAQCAtNTgxLDMxICs1ODEsMjcg
QEAgLSAoTlNJbWFnZSAqKXJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tUZXh0OihCT09MKWZvcmNl
QmxhY2tUZXh0CiAtIChDR0ltYWdlUmVmKXJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tUZXh0OihC
T09MKWZvcmNlQmxhY2tUZXh0CiAjZW5kaWYKIHsKLSAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNl
bGYpOwotICAgIGF1dG8qIGZyYW1lID0gcmFuZ2Uub3duZXJEb2N1bWVudCgpLmZyYW1lKCk7Cisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7CisgICAgYXV0byBm
cmFtZSA9IG1ha2VSZWZQdHIocmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1l
KCkpOwogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBSZWY8RnJh
bWU+IHByb3RlY3RlZEZyYW1lKCpmcmFtZSk7CisgICAgYXV0byByZW5kZXJlZEltYWdlID0gY3Jl
YXRlRHJhZ0ltYWdlRm9yUmFuZ2UoKmZyYW1lLCByYW5nZSwgZm9yY2VCbGFja1RleHQpOwogCi0g
ICAgLy8gaU9TIHVzZXMgQ0dJbWFnZVJlZiBmb3IgZHJhZyBpbWFnZXMsIHdoaWNoIGRvZXNuJ3Qg
c3VwcG9ydCBzZXBhcmF0ZSBsb2dpY2FsL3BoeXNpY2FsIHNpemVzLgogI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBSZXRhaW5QdHI8TlNJbWFnZT4gcmVuZGVyZWRJbWFnZSA9IGNyZWF0ZURyYWdJbWFn
ZUZvclJhbmdlKCpmcmFtZSwgcmFuZ2UsIGZvcmNlQmxhY2tUZXh0KTsKLQorICAgIC8vIGlPUyB1
c2VzIENHSW1hZ2VSZWYgZm9yIGRyYWcgaW1hZ2VzLCB3aGljaCBkb2Vzbid0IHN1cHBvcnQgc2Vw
YXJhdGUgbG9naWNhbC9waHlzaWNhbCBzaXplcy4KICAgICBJbnRTaXplIHNpemUoW3JlbmRlcmVk
SW1hZ2Ugc2l6ZV0pOwogICAgIHNpemUuc2NhbGUoMSAvIGZyYW1lLT5wYWdlKCktPmRldmljZVNj
YWxlRmFjdG9yKCkpOwogICAgIFtyZW5kZXJlZEltYWdlIHNldFNpemU6c2l6ZV07CisjZW5kaWYK
IAogICAgIHJldHVybiByZW5kZXJlZEltYWdlLmF1dG9yZWxlYXNlKCk7Ci0jZWxzZQotICAgIHJl
dHVybiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZSgqZnJhbWUsIHJhbmdlLCBmb3JjZUJsYWNrVGV4
dCkuYXV0b3JlbGVhc2UoKTsKLSNlbmRpZgogfQogCiAtIChOU0FycmF5ICopdGV4dFJlY3RzCiB7
Ci0gICAgYXV0byYgcmFuZ2UgPSAqY29yZShzZWxmKTsKLSAgICByYW5nZS5vd25lckRvY3VtZW50
KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgYXV0byByYW5n
ZSA9IG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSk7CisgICAgcmFuZ2Uuc3RhcnQuY29udGFp
bmVyLT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwog
ICAgIHJldHVybiBjcmVhdGVOU0FycmF5KFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMo
cmFuZ2UpKS5hdXRvcmVsZWFzZSgpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NRG9jdW1lbnQubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NRG9jdW1lbnQubW0KaW5kZXggZGQ4NWY5Nzk3ODNkNzY2ZTFiZWZhN2ZkNTU2YmExYWM4ZDU4
ZDNjNC4uMDhlYzJmYTA0ZWViZjMzM2E5NDA3YWIwZjc0NDE5ZDgyYjdjMzExYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTURvY3VtZW50Lm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01Eb2N1bWVudC5tbQpAQCAtNzYsNiArNzYsNyBAQAog
I2ltcG9ydCA8V2ViQ29yZS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaD4KICNpbXBvcnQgPFdlYkNv
cmUvUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvU2VjdXJpdHlPcmlnaW4uaD4KKyNpbXBvcnQg
PFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvU3R5bGVQcm9wZXJ0aWVz
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1N0eWxlU2hlZXRMaXN0Lmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1RleHQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5n
ZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5tbQppbmRleCBkMGQz
MGNlOWE4MWI3MThiOWFjMjI4MDM0ZWIwNTcxNTk5ZWRkNzEwLi41ZWUwYmNkZmQ5OTc0MzcyYTNl
YmM0YWQyYTg3YWY4M2JkZjUzZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJh
bmdlLm1tCkBAIC0zMSw4ICszMSw4IEBACiAjaW1wb3J0IDxXZWJDb3JlL0RvY3VtZW50RnJhZ21l
bnQuaD4KICNpbXBvcnQgIkV4Y2VwdGlvbkhhbmRsZXJzLmgiCiAjaW1wb3J0IDxXZWJDb3JlL0pT
RXhlY1N0YXRlLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL05vZGUuaD4KICNpbXBvcnQgPFdlYkNvcmUv
UmFuZ2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNv
cmUvVGhyZWFkQ2hlY2suaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZU9iakNFeHRyYXMuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvV2ViU2NyaXB0T2JqZWN0UHJpdmF0ZS5oPgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaCBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKaW5kZXggZTY4MTlhNWY4ZDU4
OGQyZTliNjg3ZjBkOTc5ZjY3Y2IyM2E4OWExOS4uZjgwNGU3ZWM5MmMyODUwYmQxYzMwNzNiMjZj
NmJmM2ZjMmFlMzNhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVJhbmdlSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFu
Z2VJbnRlcm5hbC5oCkBAIC0yMyw4ICsyMywxMyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+Ci0jaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9N
UmFuZ2UuaD4KKyNpbXBvcnQgIkRPTVJhbmdlLmgiCisjaW1wb3J0IDx3dGYvRm9yd2FyZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBSYW5nZTsKK3N0cnVjdCBTaW1wbGVSYW5nZTsK
K30KIAogV2ViQ29yZTo6UmFuZ2UqIGNvcmUoRE9NUmFuZ2UgKik7CiBET01SYW5nZSAqa2l0KFdl
YkNvcmU6OlJhbmdlKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJ
S2l0RXh0ZW5zaW9ucy5tbQppbmRleCAyOWZjMmM3NzA5YWI0ZGE5ODQxNzlmM2NiYzhmNzRlMGI4
MjkxYTc3Li5hZTVjNDliZjE0NzU4ZjMxNDA5NDIwZDlmNmQ1NWEyZTYzNjI2MWM5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAg
LTYxLDYgKzYxLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVGV4dC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9Sb3VuZGVkUmVjdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9TaGFyZWRCdWZmZXIuaD4K
KyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvVmlzaWJs
ZVBvc2l0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2libGVVbml0cy5oPgogI2ltcG9ydCA8
V2ViQ29yZS9XQUtBcHBLaXRTdHVicy5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvRE9NL0RPTVV0aWxpdHkubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9N
VXRpbGl0eS5tbQppbmRleCAxMDI4ZjA5NmJhMTQ1ZWI1NDc3YjcxMmEwZWI2NDYyNDdiMTU4YmJm
Li40OTZjNzJlOWZmNmQ2MWM0N2M2YTkwOGRhOTBkYmYzZTBlNjY3YzU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVXRpbGl0eS5tbQorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NVXRpbGl0eS5tbQpAQCAtNzAsNiArNzAsNyBAQAogI2ltcG9y
dCA8V2ViQ29yZS9KU1dpbmRvd1Byb3h5Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTWFBhdGhFeHBy
ZXNzaW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTWFBhdGhSZXN1bHQuaD4KKyNpbXBvcnQgPFdl
YkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2ViU2NyaXB0T2JqZWN0UHJp
dmF0ZS5oPgogCiBzdGF0aWMgV2ViU2NyaXB0T2JqZWN0ICpjcmVhdGVET01XcmFwcGVyKEpTQzo6
SlNPYmplY3QmIGpzV3JhcHBlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9XZWJET01PcGVyYXRpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dl
YkRPTU9wZXJhdGlvbnMubW0KaW5kZXggZDNhZTdmNmVmODNkMjA4ZjI2OWI2ZTE2MmRiZTE0NTQ2
MmRmYjk2Zi4uY2FkMzU5MWJlNjMzMjNlZTY3YWE2YWY4ZDEzZTQ1ZmQ3MTYwZGFhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL1dlYkRPTU9wZXJhdGlvbnMubW0KQEAgLTU2
LDYgKzU2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyRWxlbWVudC5oPgogI2ltcG9ydCA8
V2ViQ29yZS9SZW5kZXJUcmVlQXNUZXh0Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NoYWRvd1Jvb3Qu
aD4KKyNpbXBvcnQgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvV2hl
ZWxFdmVudC5oPgogI2ltcG9ydCA8V2ViQ29yZS9tYXJrdXAuaD4KICNpbXBvcnQgPFdlYktpdExl
Z2FjeS9ET01FeHRlbnNpb25zLmg+CkBAIC0xODUsMTMgKzE4NiwxMyBAQCBAaW1wbGVtZW50YXRp
b24gRE9NUmFuZ2UgKFdlYkRPTVJhbmdlT3BlcmF0aW9ucykKIAogLSAoV2ViQXJjaGl2ZSAqKXdl
YkFyY2hpdmUKIHsKLSAgICByZXR1cm4gW1tbV2ViQXJjaGl2ZSBhbGxvY10gX2luaXRXaXRoQ29y
ZUxlZ2FjeVdlYkFyY2hpdmU6TGVnYWN5V2ViQXJjaGl2ZTo6Y3JlYXRlKCpjb3JlKHNlbGYpKV0g
YXV0b3JlbGVhc2VdOworICAgIHJldHVybiBbW1tXZWJBcmNoaXZlIGFsbG9jXSBfaW5pdFdpdGhD
b3JlTGVnYWN5V2ViQXJjaGl2ZTpMZWdhY3lXZWJBcmNoaXZlOjpjcmVhdGUobWFrZVNpbXBsZVJh
bmdlKCpjb3JlKHNlbGYpKSldIGF1dG9yZWxlYXNlXTsKIH0KIAogLSAoTlNTdHJpbmcgKiltYXJr
dXBTdHJpbmcKIHsKICAgICBhdXRvJiByYW5nZSA9ICpjb3JlKHNlbGYpOwotICAgIHJldHVybiBT
dHJpbmcgeyBkb2N1bWVudFR5cGVTdHJpbmcocmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVu
dCgpKSArIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKHJhbmdlLCBudWxscHRy
LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlOjpZZXMpIH07CisgICAgcmV0dXJuIFN0cmluZyB7IGRv
Y3VtZW50VHlwZVN0cmluZyhyYW5nZS5vd25lckRvY3VtZW50KCkpICsgc2VyaWFsaXplUHJlc2Vy
dmluZ1Zpc3VhbEFwcGVhcmFuY2UobWFrZVNpbXBsZVJhbmdlKHJhbmdlKSwgbnVsbHB0ciwgQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVzKSB9OwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCBmNzk0MTk4MGY2NGEwYTQwYTUwNjU2
Njc4NzFmNWIyODY2NzZmY2Q5Li5lZjczNTAwNGVhNmQwNWU5MTI4NmVjZmE2ZjBmOGQ0MDEwNWU2
NmRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1l
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAg
LTU4Miw3ICs1ODIsNyBAQCAtIChOU1N0cmluZyAqKV9zdHJpbmdGb3JSYW5nZTooRE9NUmFuZ2Ug
KilyYW5nZQogewogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBAIiI7Ci0gICAgcmV0
dXJuIHBsYWluVGV4dCgqY29yZShyYW5nZSksIFdlYkNvcmU6OlRleHRJdGVyYXRvckRlZmF1bHRC
ZWhhdmlvciwgdHJ1ZSk7CisgICAgcmV0dXJuIHBsYWluVGV4dChtYWtlU2ltcGxlUmFuZ2UoKmNv
cmUocmFuZ2UpKSwgV2ViQ29yZTo6VGV4dEl0ZXJhdG9yRGVmYXVsdEJlaGF2aW9yLCB0cnVlKTsK
IH0KIAogLSAoT3B0aW9uU2V0PFdlYkNvcmU6OlBhaW50QmVoYXZpb3I+KV9wYWludEJlaGF2aW9y
Rm9yRGVzdGluYXRpb25Db250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dApAQCAtODA5LDE1ICs4
MDksMTUgQEAgLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooY29uc3QgV2ViQ29yZTo6U2lt
cGxlUmFuZ2UmKXJhbmdlCiAgICAgcmV0dXJuIGNoYXJhY3RlclJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50QmVmb3JlTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpOwogfQogCi0tIChSZWZQdHI8
V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCistIChP
cHRpb25hbDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1Jhbmdl
KW5zcmFuZ2UKIHsKICAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb0RPTVJhbmdlOm5zcmFuZ2Ug
cmFuZ2VJc1JlbGF0aXZlVG86V2ViUmFuZ2VJc1JlbGF0aXZlVG86OkVkaXRhYmxlUm9vdF07CiB9
CiAKLS0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1Jhbmdl
KXJhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5nZUlzUmVs
YXRpdmVUbworLSAoT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+KV9jb252ZXJ0VG9ET01S
YW5nZTooTlNSYW5nZSlyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzooV2ViUmFuZ2VJc1JlbGF0aXZl
VG8pcmFuZ2VJc1JlbGF0aXZlVG8KIHsKICAgICBpZiAocmFuZ2UubG9jYXRpb24gPT0gTlNOb3RG
b3VuZCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CiAKICAgICBpZiAocmFuZ2VJc1JlbGF0aXZlVG8gPT0gV2ViUmFuZ2VJc1JlbGF0aXZlVG86
OkVkaXRhYmxlUm9vdCkgewogICAgICAgICAvLyBPdXIgY3JpdGljYWwgYXNzdW1wdGlvbiBpcyB0
aGF0IHRoaXMgY29kZSBwYXRoIGlzIG9ubHkgY2FsbGVkIGJ5IGlucHV0IG1ldGhvZHMgdGhhdApA
QCAtODI4LDMwICs4MjgsMzAgQEAgLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRv
RE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgcmFuZ2VJc1JlbGF0aXZlVG86KFcKICAgICAgICAgLy8g
VGhhdCBmaXRzIHdpdGggQXBwS2l0J3MgaWRlYSBvZiBhbiBpbnB1dCBjb250ZXh0LgogICAgICAg
ICBhdXRvKiBlbGVtZW50ID0gX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkucm9vdEVk
aXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCk7CiAgICAgICAgIGlmICghZWxlbWVudCkK
LSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJh
bmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
KmVsZW1lbnQpLCByYW5nZSkpOworICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAg
ICAgICAgcmV0dXJuIHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2Rl
Q29udGVudHMoKmVsZW1lbnQpLCByYW5nZSk7CiAgICAgfQogCiAgICAgQVNTRVJUKHJhbmdlSXNS
ZWxhdGl2ZVRvID09IFdlYlJhbmdlSXNSZWxhdGl2ZVRvOjpQYXJhZ3JhcGgpOwogCiAgICAgYXV0
byBwYXJhZ3JhcGhTdGFydCA9IG1ha2VCb3VuZGFyeVBvaW50KHN0YXJ0T2ZQYXJhZ3JhcGgoX3By
aXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkp
KTsKICAgICBpZiAoIXBhcmFncmFwaFN0YXJ0KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGF1dG8gc2NvcGVFbmQgPSBtYWtlQm91
bmRhcnlQb2ludEFmdGVyTm9kZUNvbnRlbnRzKHBhcmFncmFwaFN0YXJ0LT5jb250YWluZXItPnRy
ZWVTY29wZSgpLnJvb3ROb2RlKCkpOwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoV2ViQ29y
ZTo6cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFyYWdyYXBoU3RhcnQpLCBXVEZN
b3ZlKHNjb3BlRW5kKSB9LCByYW5nZSkpOworICAgIHJldHVybiBXZWJDb3JlOjpyZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UoeyBXVEZNb3ZlKCpwYXJhZ3JhcGhTdGFydCksIFdURk1vdmUoc2NvcGVFbmQp
IH0sIHJhbmdlKTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfY29udmVydE5TUmFuZ2VUb0RPTVJhbmdl
OihOU1JhbmdlKW5zcmFuZ2UKIHsKLSAgICByZXR1cm4ga2l0KFtzZWxmIF9jb252ZXJ0VG9ET01S
YW5nZTpuc3JhbmdlXS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChbc2VsZiBfY29udmVydFRvRE9N
UmFuZ2U6bnNyYW5nZV0pOwogfQogCiAtIChOU1JhbmdlKV9jb252ZXJ0RE9NUmFuZ2VUb05TUmFu
Z2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4g
TlNNYWtlUmFuZ2UoTlNOb3RGb3VuZCwgMCk7Ci0gICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9O
U1JhbmdlOipjb3JlKHJhbmdlKV07CisgICAgcmV0dXJuIFtzZWxmIF9jb252ZXJ0VG9OU1Jhbmdl
Om1ha2VTaW1wbGVSYW5nZSgqY29yZShyYW5nZSkpXTsKIH0KIAogLSAoRE9NUmFuZ2UgKilfbWFy
a0RPTVJhbmdlCkBAIC0xMTI5LDggKzExMjksNyBAQCAtIChOU1JhbmdlKV9zZWxlY3RlZE5TUmFu
Z2UKIAogLSAodm9pZClfc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5nZQogewotICAgIFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4gZG9tUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6cmFu
Z2VdOwotICAgIGlmIChkb21SYW5nZSkKKyAgICBpZiAoYXV0byBkb21SYW5nZSA9IFtzZWxmIF9j
b252ZXJ0VG9ET01SYW5nZTpyYW5nZV0pCiAgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNl
bGVjdGlvbigpLnNldFNlbGVjdGlvbihXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKCpkb21SYW5n
ZSwgV2ViQ29yZTo6U0VMX0RFRkFVTFRfQUZGSU5JVFkpKTsKIH0KIApAQCAtMTIxNywxMSArMTIx
Niw4IEBAIC0gKHZvaWQpc2VsZWN0TlNSYW5nZTooTlNSYW5nZSlyYW5nZQogCiAtICh2b2lkKXNl
bGVjdFdpdGhvdXRDbG9zaW5nVHlwaW5nTlNSYW5nZTooTlNSYW5nZSlyYW5nZQogewotICAgIFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gZG9tUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6
cmFuZ2VdOwotICAgIGlmIChkb21SYW5nZSkgewotICAgICAgICBjb25zdCBhdXRvJiBuZXdTZWxl
Y3Rpb24gPSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uKCpkb21SYW5nZSwgV2ViQ29yZTo6U0VM
X0RFRkFVTFRfQUZGSU5JVFkpOwotICAgICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uLCB7IH0pOwotICAgICAgICAKKyAgICBpZiAo
YXV0byBkb21SYW5nZSA9IFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpyYW5nZV0pIHsKKyAgICAg
ICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKCpkb21SYW5n
ZSwgeyB9KTsKICAgICAgICAgX3ByaXZhdGUtPmNvcmVGcmFtZS0+ZWRpdG9yKCkuZW5zdXJlTGFz
dEVkaXRDb21tYW5kSGFzQ3VycmVudFNlbGVjdGlvbklmT3BlbkZvck1vcmVUeXBpbmcoKTsKICAg
ICB9CiB9CkBAIC0xNzQxLDcgKzE3MzcsNyBAQCAtICh2b2lkKWdldERpY3RhdGlvblJlc3VsdFJh
bmdlczooTlNBcnJheSAqKilvdXRSYW5nZXMgYW5kTWV0YWRhdGFzOihOU0FycmF5ICoqKQogICAg
ICAgICAgICAgaWYgKCFtZXRhZGF0YSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgRE9NUmFuZ2UgKmRvbVJhbmdlID0ga2l0KHJhbmdlKCpub2Rl
LCAqbWFya2VyKSk7CisgICAgICAgICAgICBET01SYW5nZSAqZG9tUmFuZ2UgPSBraXQobWFrZVNp
bXBsZVJhbmdlKCpub2RlLCAqbWFya2VyKSk7CiAKICAgICAgICAgICAgIGlmIChtZXRhZGF0YSAh
PSBwcmV2aW91c01ldGFkYXRhKSB7CiAgICAgICAgICAgICAgICAgW21ldGFkYXRhcyBhZGRPYmpl
Y3Q6bWV0YWRhdGFdOwpAQCAtMTc3NCw3ICsxNzcwLDcgQEAgLSAoaWQpZGljdGF0aW9uUmVzdWx0
TWV0YWRhdGFGb3JSYW5nZTooRE9NUmFuZ2UgKilyYW5nZQogICAgIGlmICghcmFuZ2UpCiAgICAg
ICAgIHJldHVybiBuaWw7CiAKLSAgICBhdXRvIG1hcmtlcnMgPSBjb3JlKHNlbGYpLT5kb2N1bWVu
dCgpLT5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UoKmNvcmUocmFuZ2UpLCBXZWJDb3JlOjpEb2N1
bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KTsKKyAgICBhdXRvIG1hcmtlcnMgPSBjb3JlKHNl
bGYpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UobWFrZVNpbXBsZVJhbmdl
KCpjb3JlKHJhbmdlKSksIFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpEaWN0YXRpb25SZXN1bHQp
OwogCiAgICAgLy8gVUlLaXQgc2hvdWxkIG9ubHkgZXZlciBnaXZlIHVzIGEgRE9NUmFuZ2UgZm9y
IGEgcGhyYXNlIHdpdGggYWx0ZXJuYXRpdmVzLCB3aGljaCBzaG91bGQgbm90IGJlIHBhcnQgb2Yg
bW9yZSB0aGFuIG9uZSByZXN1bHQuCiAgICAgQVNTRVJUKG1hcmtlcnMuc2l6ZSgpIDw9IDEpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZUludGVy
bmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwu
aAppbmRleCBmMTU3MmJkNTZmMDI1YmYzOWY2ZDVmYzM4MWFkN2JkZjVmNDA3Njg0Li4zMGM0OGQx
NWU5ZjYxNzlhOTk1ZDE5YTkzZTdhMWIyMmQxYTMwMzEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lSW50ZXJuYWwuaApAQCAtMTY2LDggKzE2Niw4
IEBAIFdlYlZpZXcgKmdldFdlYlZpZXcoV2ViRnJhbWUgKndlYkZyYW1lKTsKICNlbmRpZgogCiAt
IChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihjb25zdCBXZWJDb3JlOjpTaW1wbGVSYW5nZSYp
cmFuZ2U7Ci0tIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNS
YW5nZSlyYW5nZTsKLS0gKFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdl
OihOU1JhbmdlKXJhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbyly
YW5nZUlzUmVsYXRpdmVUbzsKKy0gKE9wdGlvbmFsPFdlYkNvcmU6OlNpbXBsZVJhbmdlPilfY29u
dmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2U7CistIChPcHRpb25hbDxXZWJDb3JlOjpTaW1w
bGVSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlIHJhbmdlSXNSZWxhdGl2
ZVRvOihXZWJSYW5nZUlzUmVsYXRpdmVUbylyYW5nZUlzUmVsYXRpdmVUbzsKIAogLSAoRE9NRG9j
dW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE1hcmt1cFN0cmluZzooTlNTdHJp
bmcgKiltYXJrdXBTdHJpbmcgYmFzZVVSTFN0cmluZzooTlNTdHJpbmcgKiliYXNlVVJMU3RyaW5n
OwogLSAoRE9NRG9jdW1lbnRGcmFnbWVudCAqKV9kb2N1bWVudEZyYWdtZW50V2l0aE5vZGVzQXNQ
YXJhZ3JhcGhzOihOU0FycmF5ICopbm9kZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJIVE1MVmlldy5tbQppbmRleCA3MjExMWQ0YmZiZDE1YmZhZTRmN2YyZGEyNmQ0
NjYyNGUxYTU5MzJlLi4zYWRmNjM0MGUwNzgwNzVjMWQ3YzMwYTM3OTJhZWM0M2IyMmVhNmQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1t
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KQEAg
LTIzNzYsNyArMjM3Niw4IEBAIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFn
bWVudEZyb21QYXN0ZWJvYXJkOihOU1Bhc3RlYm9hcmQgKilwYXN0ZWJvCiAgICAgaWYgKFtwYm9h
cmRUeXBlIGlzRXF1YWxUb1N0cmluZzpXZWJDb3JlOjpsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlw
ZSgpXSkgewogICAgICAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwot
ICAgICAgICByZXR1cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvcmUoY29udGV4dCks
IFtbcGFzdGVib2FyZCBzdHJpbmdGb3JUeXBlOldlYkNvcmU6OmxlZ2FjeVN0cmluZ1Bhc3RlYm9h
cmRUeXBlKCldIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddKS5wdHIoKSk7
CisgICAgICAgIGF1dG8gc3RyaW5nID0gW1twYXN0ZWJvYXJkIHN0cmluZ0ZvclR5cGU6V2ViQ29y
ZTo6bGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKV0gcHJlY29tcG9zZWRTdHJpbmdXaXRoQ2Fu
b25pY2FsTWFwcGluZ107CisgICAgICAgIHJldHVybiBraXQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4
dChtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoY29udGV4dCkpLCBzdHJpbmcpLnB0cigpKTsKICAgICB9
CiAKICAgICByZXR1cm4gbmlsOwpAQCAtNjQxMyw3ICs2NDE0LDcgQEAgQUxMT1dfREVQUkVDQVRF
RF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgIExPRyhUZXh0SW5wdXQsICJhdHRyaWJ1dGVk
U3Vic3RyaW5nRnJvbVJhbmdlOigldSwgJXUpIC0+IG5pbCIsIG5zUmFuZ2UubG9jYXRpb24sIG5z
UmFuZ2UubGVuZ3RoKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9Ci0gICAgUmVmUHRyPFdl
YkNvcmU6OlJhbmdlPiByYW5nZSA9IFtmcmFtZSBfY29udmVydFRvRE9NUmFuZ2U6bnNSYW5nZV07
CisgICAgYXV0byByYW5nZSA9IFtmcmFtZSBfY29udmVydFRvRE9NUmFuZ2U6bnNSYW5nZV07CiAg
ICAgaWYgKCFyYW5nZSkgewogICAgICAgICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0
cmluZ0Zyb21SYW5nZTooJXUsICV1KSAtPiBuaWwiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1Jhbmdl
Lmxlbmd0aCk7CiAgICAgICAgIHJldHVybiBuaWw7CkBAIC02OTgxLDIxICs2OTgyLDYgQEAgLSAo
TlNTdHJpbmcgKilzdHJpbmcKIAogI2lmIFBMQVRGT1JNKE1BQykKIAotLSAoTlNBdHRyaWJ1dGVk
U3RyaW5nICopX2F0dHJpYnV0ZWRTdHJpbmdGcm9tRE9NUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UK
LXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gbmlsOwotI2lmICFMT0dfRElTQUJM
RUQKLSAgICBkb3VibGUgc3RhcnQgPSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKTsKLSNlbmRp
ZgotICAgIGF1dG8gcmVzdWx0ID0gYXR0cmlidXRlZFN0cmluZygqY29yZShyYW5nZSkpLnN0cmlu
Zy5hdXRvcmVsZWFzZSgpOwotI2lmICFMT0dfRElTQUJMRUQKLSAgICBkb3VibGUgZHVyYXRpb24g
PSBDRkFic29sdXRlVGltZUdldEN1cnJlbnQoKSAtIHN0YXJ0OwotICAgIExPRyhUaW1pbmcsICJj
cmVhdGluZyBhdHRyaWJ1dGVkIHN0cmluZyBmcm9tIHNlbGVjdGlvbiB0b29rICVmIHNlY29uZHMu
IiwgZHVyYXRpb24pOwotI2VuZGlmCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogLSAoTlNBdHRy
aWJ1dGVkU3RyaW5nICopX2xlZ2FjeUF0dHJpYnV0ZWRTdHJpbmdGcm9tOihET01Ob2RlICopc3Rh
cnRDb250YWluZXIgb2Zmc2V0OihpbnQpc3RhcnRPZmZzZXQgdG86KERPTU5vZGUgKillbmRDb250
YWluZXIgb2Zmc2V0OihpbnQpZW5kT2Zmc2V0CiB7CiAgICAgaWYgKCFzdGFydENvbnRhaW5lciB8
fCAhZW5kQ29udGFpbmVyKQpAQCAtNzAwNiwyOCArNjk5MiwyNiBAQCAtIChOU0F0dHJpYnV0ZWRT
dHJpbmcgKilfbGVnYWN5QXR0cmlidXRlZFN0cmluZ0Zyb206KERPTU5vZGUgKilzdGFydENvbnRh
aW5lciBvZgogCiAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nCiB7Ci0g
ICAgRE9NRG9jdW1lbnQgKmRvY3VtZW50ID0gW1tzZWxmIF9mcmFtZV0gRE9NRG9jdW1lbnRdOwor
ICAgIGF1dG8gZG9jdW1lbnQgPSBjb3JlKFtbc2VsZiBfZnJhbWVdIERPTURvY3VtZW50XSk7CiAg
ICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdF0gYXV0b3JlbGVhc2VdOwotICAgIGlmIChhdXRvIGF0dHJpYnV0ZWRTdHJpbmcg
PSBbc2VsZiBfYXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpbZG9jdW1lbnQgX2RvY3VtZW50
UmFuZ2VdXSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZWRTdHJpbmc7Ci0gICAgcmV0dXJuIGVk
aXRpbmdBdHRyaWJ1dGVkU3RyaW5nKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqY29y
ZShkb2N1bWVudCkpKS5zdHJpbmcuYXV0b3JlbGVhc2UoKTsKKyAgICBhdXRvIHJhbmdlID0gbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudCk7CisgICAgaWYgKGF1dG8gcmVz
dWx0ID0gYXR0cmlidXRlZFN0cmluZyhyYW5nZSkuc3RyaW5nKQorICAgICAgICByZXR1cm4gcmVz
dWx0LmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5nKHJh
bmdlKS5zdHJpbmcuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICop
c2VsZWN0ZWRBdHRyaWJ1dGVkU3RyaW5nCiB7Ci0gICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0g
cmV0YWluUHRyKFtzZWxmIF9hdHRyaWJ1dGVkU3RyaW5nRnJvbURPTVJhbmdlOltzZWxmIF9zZWxl
Y3RlZFJhbmdlXV0pOwotICAgIGlmICghYXR0cmlidXRlZFN0cmluZykgewotICAgICAgICBhdXRv
KiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0pOwotICAgICAgICBpZiAoY29yZUZyYW1l
KSB7Ci0gICAgICAgICAgICBhdXRvIHJhbmdlID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgICAgICAgICAgaWYgKHJhbmdlKQotICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZWRTdHJpbmcgPSBlZGl0aW5nQXR0cmlidXRlZFN0cmluZygq
cmFuZ2UpLnN0cmluZzsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBhdHRyaWJ1
dGVkU3RyaW5nID0gYWRvcHROUyhbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVkU3RyaW5nLmF1dG9yZWxlYXNl
KCk7CisgICAgYXV0byBmcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7CisgICAgaWYgKCFmcmFt
ZSkKKyAgICAgICAgcmV0dXJuIFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0gYXV0
b3JlbGVhc2VdOworICAgIGF1dG8gcmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOworICAgIGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybiBbW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBpZiAoYXV0byBy
ZXN1bHQgPSBhdHRyaWJ1dGVkU3RyaW5nKCpyYW5nZSkuc3RyaW5nKQorICAgICAgICByZXR1cm4g
cmVzdWx0LmF1dG9yZWxlYXNlKCk7CisgICAgcmV0dXJuIGVkaXRpbmdBdHRyaWJ1dGVkU3RyaW5n
KCpyYW5nZSkuc3RyaW5nLmF1dG9yZWxlYXNlKCk7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9s
bGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rp
b25Db250cm9sbGVyLm1tCmluZGV4IDllNzZkMmI0NzVkZTEwNTA4ZWFhMzhmMmZiZWIzZTk1NTNh
Nzg4NTIuLmJmNGZmY2JhNTBmZGIyYzMyNjk3NTdkMDdiZWE2NGY2YjFiOTAyMmYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29u
dHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVk
aWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KQEAgLTQyMiw3ICs0MjIsNyBAQCAtIChpZCA8TlNJbW1l
ZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilfYW5pbWF0aW9uQ29udHJvbGxlckZvckRh
dGFEZXRlY3RlZAogICAgICAgICAgICAgZGV0ZWN0ZWRJdGVtID0geyB7CiAgICAgICAgICAgICAg
ICAgYWN0aW9uQ29udGV4dCwKICAgICAgICAgICAgICAgICB7IH0sIC8vIEZJWE1FOiBTZWVtcyBs
aWtlIGFuIGVtcHR5IHJlY3QgaXNuJ3QgcmVhbGx5IE9LLgotICAgICAgICAgICAgICAgICpjb3Jl
KGN1c3RvbURhdGFEZXRlY3RvcnNSYW5nZSkKKyAgICAgICAgICAgICAgICBtYWtlU2ltcGxlUmFu
Z2UoKmNvcmUoY3VzdG9tRGF0YURldGVjdG9yc1JhbmdlKSkKICAgICAgICAgICAgIH0gfTsKICAg
ICAgICAgfQogICAgIH0KQEAgLTQzOSw3ICs0MzksNyBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbGVyPilfYW5pbWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3Rl
ZAogICAgIGlmICghW1tnZXREREFjdGlvbnNNYW5hZ2VyQ2xhc3MoKSBzaGFyZWRNYW5hZ2VyXSBo
YXNBY3Rpb25zRm9yUmVzdWx0OltkZXRlY3RlZEl0ZW0tPmFjdGlvbkNvbnRleHQgbWFpblJlc3Vs
dF0gYWN0aW9uQ29udGV4dDpkZXRlY3RlZEl0ZW0tPmFjdGlvbkNvbnRleHQuZ2V0KCldKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgYXV0byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGRldGVjdGVkSXRlbS0+cmFu
Z2UpLCB7IH0sIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpG
YWRlSW4pOworICAgIGF1dG8gaW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3Jl
YXRlV2l0aFJhbmdlKGRldGVjdGVkSXRlbS0+cmFuZ2UsIHsgfSwgV2ViQ29yZTo6VGV4dEluZGlj
YXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAKICAgICBfY3VycmVudEFjdGlv
bkNvbnRleHQgPSBbZGV0ZWN0ZWRJdGVtLT5hY3Rpb25Db250ZXh0IGNvbnRleHRGb3JWaWV3Ol93
ZWJWaWV3IGFsdE1vZGU6WUVTIGludGVyYWN0aW9uU3RhcnRlZEhhbmRsZXI6XigpIHsKICAgICB9
IGludGVyYWN0aW9uQ2hhbmdlZEhhbmRsZXI6XigpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJUZXh0SXRlcmF0b3IubW0KaW5kZXggOTNiODM0NzdmYzhhNDJh
ZDNmNzRkMzY5ZTgxNzk0YmJlZmRhMDNhZS4uZDNhZDkxOGRhN2VlM2Y2ZjU4ZjQwOTAzYzdlMTdk
NmE2NmUzODdhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJUZXh0SXRlcmF0b3IubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJUZXh0SXRlcmF0b3IubW0KQEAgLTcyLDcgKzcyLDcgQEAgLSAoaWQpaW5pdFdpdGhSYW5nZToo
RE9NUmFuZ2UgKilyYW5nZQogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBzZWxmOwog
Ci0gICAgX3ByaXZhdGUtPl90ZXh0SXRlcmF0b3IgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlRleHRJ
dGVyYXRvcj4oKmNvcmUocmFuZ2UpKTsKKyAgICBfcHJpdmF0ZS0+X3RleHRJdGVyYXRvciA9IG1h
a2VVbmlxdWU8V2ViQ29yZTo6VGV4dEl0ZXJhdG9yPihtYWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFu
Z2UpKSk7CiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQppbmRleCBhMTg1NjhlZjViNWRmOGEwYWQ5YTRjZTRjMmI2Y2VmNjdj
NDg1ZWIzLi4wNjY2MTAyMDFlNmRiODU4OTQ4ZDBmMzIyZWNmMjQxMDc3ZmNhMGUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0yMTM3LDcgKzIxMzcs
NyBAQCAtICh2b2lkKV9kaWRDb25jbHVkZUVkaXREcmFnCiAgICAgfTsKICAgICBhdXRvJiBmcmFt
ZSA9IHBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogICAgIGlm
IChhdXRvIHJhbmdlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVk
UmFuZ2UoKSkgewotICAgICAgICBpZiAoYXV0byB0ZXh0SW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4
dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBkZWZh
dWx0RWRpdERyYWdUZXh0SW5kaWNhdG9yT3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIFdlYkNvcmU6OkZsb2F0U2l6ZSgpKSkKKyAgICAg
ICAgaWYgKGF1dG8gdGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0
ZVdpdGhSYW5nZSgqcmFuZ2UsIGRlZmF1bHRFZGl0RHJhZ1RleHRJbmRpY2F0b3JPcHRpb25zLCBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgV2ViQ29y
ZTo6RmxvYXRTaXplKCkpKQogICAgICAgICAgICAgX3ByaXZhdGUtPmRhdGFPcGVyYXRpb25UZXh0
SW5kaWNhdG9yID0gYWRvcHROUyhbW1dlYlVJVGV4dEluZGljYXRvckRhdGEgYWxsb2NdIGluaXRX
aXRoSW1hZ2U6bmlsIHRleHRJbmRpY2F0b3JEYXRhOnRleHRJbmRpY2F0b3ItPmRhdGEoKSBzY2Fs
ZTpwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpXSk7CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405809</attachid>
            <date>2020-08-01 23:20:54 -0700</date>
            <delta_ts>2020-08-02 17:47:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215070-20200801232053.patch</filename>
            <type>text/plain</type>
            <size>127977</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWZiMDc3MzMwZDJmMTk0
ZGE4MjI4ZGM3YjVlMzRkNjAyNzM4NDE4ZC4uYjNiMjA0MTE5ODEzODUyMWIwYjlkNDYxYzU3ZDYw
ZjNiOTYyN2NhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOCBAQAorMjAyMC0wOC0wMSAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbWVtYmVy
IGZ1bmN0aW9ucyBvZiBSYW5nZSBhbmQgbWFueSBjYWxscyB0byBjcmVhdGVMaXZlUmFuZ2UKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTA3MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BWE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6
Om5leHRCb3VuZGFyeSk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpBWE9iamVjdENhY2hlOjpwcmV2aW91c0JvdW5kYXJ5KTogRGl0dG8uCisKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbToKKyAg
ICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgX2NvbnZlcnRUb05TUmFuZ2U6
XSk6IFRha2UgU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHBvc2l0aW9uRm9yVGV4dE1hcmtlcjpdKTogUmVtb3ZlIGNyZWF0ZUxpdmVSYW5nZS4K
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dFJlY3RzRnJvbU1h
cmtlcnM6d2l0aFRleHQ6XSk6IERpdHRvLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW06CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIF9jb252ZXJ0VG9OU1JhbmdlOl0pOiBUYWtlIFNpbXBsZVJh
bmdlLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfaW5kZXhGb3JU
ZXh0TWFya2VyOl0pOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfdGV4dE1hcmtlckZvckluZGV4Ol0pOiBEaXR0by4KKwor
ICAgICAgICAqIGRvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6dXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcik6IFJlbmFtZWQgcmFuZ2UgdG8gbWFr
ZVNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6bWFrZVNpbXBsZVJhbmdlKTogRGl0dG8u
CisgICAgICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oOiBVcGRhdGUgZm9yIHRo
ZSBhYm92ZS4KKworICAgICAgICAqIGRvbS9SYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
YW5nZTo6dGV4dCBjb25zdCk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpSYW5nZTo6c2hhZG93Um9vdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpp
bnRlcnZhbHNTdWZmaWNpZW50bHlPdmVybGFwKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OmFkanVzdExpbmVIZWlnaHRPZlNlbGVjdGlvblJlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OmNvYWxlc2NlU2VsZWN0aW9uUmVjdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmFuZ2U6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNvbGxlY3RTZWxlY3Rp
b25SZWN0cyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogZG9tL1JhbmdlLmg6IFVwZGF0ZSBm
b3IgdGhlIGFib3ZlLiBBbHNvIG1ha2UgcGFzdExhc3ROb2RlIHByaXZhdGUgc2luY2UgaXQgaXMK
KyAgICAgICAgb25seSB1c2VkIGluc2lkZSB0aGUgUmFuZ2UgY2xhc3MncyBpbXBsZW1lbnRhdGlv
bi4KKworICAgICAgICAqIGRvbS9TaW1wbGVSYW5nZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVSYW5nZTo6U2ltcGxlUmFuZ2UpOiBSZW1vdmVkIG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBS
YW5nZS4KKyAgICAgICAgKiBkb20vU2ltcGxlUmFuZ2UuaDogVXBkYXRlIGZvciB0aGUgYWJvdmUu
IFJlbW92ZWQgYm90aCBjb25zdHJ1Y3RvciBvdmVybG9hZHMKKyAgICAgICAgdGhhdCB0YWtlIGEg
UmFuZ2UuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6dGltZXJGaXJl
ZCk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2
ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVuZE9mV29yZCk6IFVzZQorICAgICAg
ICBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpBbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyOjphcHBseUFsdGVybmF0aXZlVGV4dFRvUmFuZ2UpOgorICAgICAgICBSZW1vdmUgY3Jl
YXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOiBSZW1v
dmUgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6cGVyZm9ybUN1dE9yQ29weSk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VSYW5nZUZvclNwZWxs
Q2hlY2tpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNvcnJlY3RTcGVsbGNoZWNraW5n
UHJlc2VydmluZ1RleHRDaGVja2luZ1BhcmFncmFwaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6RWRpdG9yOjpjb3VudE1hdGNoZXNGb3JUZXh0KTogRGl0dG8uCisgICAgICAgICog
ZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRM
aXN0Q29tbWFuZDo6ZG9BcHBseSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0TGlz
dENvbW1hbmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgpOiBDaGFuZ2Ugb3V0CisgICAgICAg
IGFyZ3VtZW50IHR5cGUgdG8gU2ltcGxlUmFuZ2UuCisgICAgICAgICogZWRpdGluZy9JbnNlcnRM
aXN0Q29tbWFuZC5oOiBVcGRhdGUgZm9yIGFib3ZlLgorCisgICAgICAgICogZWRpdGluZy9TcGVs
bENoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxDaGVja2VyOjppc0NoZWNrYWJs
ZSBjb25zdCk6IFJld3JpdGUgcXVlc3Rpb25hYmxlIGxvZ2ljCisgICAgICAgIHRvIHVzZSBpbnRl
cnNlY3RpbmdOb2RlcyBpbnN0ZWFkIG9mIGZpcnN0Tm9kZS4KKworICAgICAgICAqIGVkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hl
bHBlcjo6ZmluZFVuZ3JhbW1hdGljYWxQaHJhc2VzIGNvbnN0KTogUmVtb3ZlIGNyZWF0ZUxpdmVS
YW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQpOiBEaXR0by4K
KyAgICAgICAgKiBlZGl0aW5nL21hcmt1cC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVG
cmFnbWVudEZyb21UZXh0KTogRGl0dG8uCisKKyAgICAgICAgKiBlZGl0aW5nL2lvcy9FZGl0b3JJ
T1MubW06CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNldFRleHRBc0NoaWxkT2ZFbGVtZW50
KTogVXNlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cy4KKworICAgICAgICAqIGVkaXRp
bmcvd2luL0VkaXRvcldpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlV2l0
aFBhc3RlYm9hcmQpOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogcGFnZS9E
T01TZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NU2VsZWN0aW9uOjphZGRSYW5n
ZSk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246
OmRlbGV0ZUZyb21Eb2N1bWVudCk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisKKyAgICAgICAg
KiBwYWdlL0RyYWdDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRvY3VtZW50RnJh
Z21lbnRGcm9tRHJhZ0RhdGEpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViQ29yZTo6
RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6IERpdHRvLgor
CisgICAgICAgICogcGFnZS9UZXh0SW5kaWNhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNl
bGVjdGlvblJlY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVJbmRp
Y2F0b3IpOiBDYWxsIGNvbGxlY3RTZWxlY3Rpb25SZWN0cyBkaXJlY3RseSBoZXJlLAorICAgICAg
ICBhdm9pZGluZyBjcmVhdGVMaXZlUmFuZ2UgYW5kIHVzaW5nIG1hcCB0byBjb252ZXJ0IGZyb20g
VmVjdG9yPFNlbGVjdGlvblJlY3Q+CisgICAgICAgIHRvIFZlY3RvcjxGbG9hdFJlY3Q+LgorCisg
ICAgICAgICogcGFnZS9pb3MvRnJhbWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6
aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QgY29uc3QpOiBVc2UgbWFrZVNpbXBsZVJhbmdl
LgorCisgICAgICAgICogcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKTogVGFrZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9EcmFnSW1hZ2UuaDogVXBkYXRlIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlIHRvIHRh
a2UgU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXN0ZWJvYXJkLmg6IFVwZGF0
ZWQgV2luZG93cy1vbmx5IGxheWVyaW5nLXZpb2xhdGluZyBmdW5jdGlvbnMKKyAgICAgICAgdG8g
dGFrZSBTaW1wbGVSYW5nZS4KKworICAgICAgICAqIHBsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1Mu
bW06CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZSk6IFRha2UgU2lt
cGxlUmFuZ2UuCisKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KTogVGFr
ZSBTaW1wbGVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0
aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdt
ZW50KTogRGl0dG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmludGVydmFsc1N1ZmZpY2llbnRseU92ZXJsYXApOiBBZGRlZC4gTW92
ZWQgZnJvbSBSYW5nZS4gTW9zdGx5IHVuY2hhbmdlZAorICAgICAgICBidXQgdXNlcyBTaW1wbGVS
YW5nZSBub3cgaW5zdGVhZCBvZiBhIGxpdmUgcmFuZ2UsIGFuZCBpbnRlcnNlY3RpbmdOb2RlcyBp
bnN0ZWFkIG9mCisgICAgICAgIGEgbG9vcCB1c2luZyBmaXJzdE5vZGUgYW5kIHBhc3RMYXN0Tm9k
ZS4KKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdExpbmVIZWlnaHRPZlNlbGVjdGlvblJlY3RzKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpjb2FsZXNjZVNlbGVjdGlvblJlY3RzKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dp
dGhvdXRVbmlvbkludGVyaW9yTGluZXMpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzSW50ZXJuYWwpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKTogRGl0dG8uCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOiBVcGRhdGUgZm9yIGFib3ZlLgorCisg
ICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJu
YWxzOjptYXJrZXJSYW5nZUZvck5vZGUpOiBVc2UgbWFrZVNpbXBsUmFuZ2UuCisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcm5hbHM6OmxvY2F0aW9uRnJvbVJhbmdlKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcm5hbHM6Omxlbmd0aEZyb21SYW5nZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpyYW5nZUFzVGV4dFVzaW5nQmFja3dhcmRzVGV4dEl0ZXJhdG9yKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnN1YnJhbmdlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmdOZWFyTG9jYXRpb24pOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6dGV4dEluZGljYXRvckZvclJhbmdl
KTogRGl0dG8uCisKIDIwMjAtMDgtMDEgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29t
PgogCiAgICAgICAgIFNwZWNpYWwgSElEIG1hcHBpbmcgZm9yIHRoZSBMb2dpdGVjaCBGMzEwL0Y3
MTAgY29udHJvbGxlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGRmZWQ2NGE5N2Q1MGU1YjRiZTU1MjI1OTE2NTk2
ZWJiOTgxMTFlODIuLmZjYTlmZTQxNDljOWEyZTVlZWY0ODBmODQ3ZTljNTMwZWJjN2Y1N2YgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgorCisgICAgICAgIFJlbW92ZSBzb21lIG1lbWJlciBmdW5jdGlvbnMgb2YgUmFu
Z2UgYW5kIG1hbnkgY2FsbHMgdG8gY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwNzAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tOgorICAgICAgICAoLVtX
S1dlYlByb2Nlc3NQbHVnSW5SYW5nZUhhbmRsZSBkZXRlY3REYXRhV2l0aFR5cGVzOmNvbnRleHQ6
XSk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDoKKyAgICAgICAgKEFQSTo6UGFnZU92
ZXJsYXlDbGllbnRJbXBsOjphY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCk6IERpdHRvLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1t
OgorICAgICAgICAoLVtXS0RPTVJhbmdlIHRleHRSZWN0c10pOiBEaXR0by4KKyAgICAgICAgKiBX
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01UZXh0SXRlcmF0b3IubW06Cisg
ICAgICAgICgtW1dLRE9NVGV4dEl0ZXJhdG9yIGluaXRXaXRoUmFuZ2U6XSk6IERpdHRvLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlUmFuZ2VI
YW5kbGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpy
ZW5kZXJlZEltYWdlKTogRGl0dG8uCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29j
b2EvV2ViUGFnZUNvY29hLm1tOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGlj
dGlvbmFyeUxvb2t1cEF0TG9jYXRpb24pOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclNlbGVjdGlvbik6
IERpdHRvLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHA6
CisgICAgICAgIChXZWJLaXQ6OkZpbmRDb250cm9sbGVyOjp1cGRhdGVGaW5kVUlBZnRlclBhZ2VT
Y3JvbGwpOiBEaXR0by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJ
T1MubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3JtRWRpdG9yU3RhdGUg
Y29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6Y29tcHV0ZUFuZFNlbmRF
ZGl0RHJhZ1NuYXBzaG90KTogRGl0dG8uCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFJl
Y3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KTogRGl0dG8uCisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25PZmZzZXRXaXRoVGV4dCk6IERpdHRv
LgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25EYXRhKTog
RGl0dG8uCisKIDIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZpeCBhbmQgZnVydGhlciByZWZpbmUgbWFrZWZpbGUgcnVsZSBmb3IgV2ViS2l0IG1l
c3NhZ2VzIGdlbmVyYXRlZCBmaWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9p
b3MvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IDMy
ZTA5NTgxNzJjNDBmYTRhNTJhMTI0NTExNjE1MjZlYThmOTkxY2UuLjljMGI3ZjhiZjYxYmY2MmU2
MTg3OTc0YTViNzMxZTQ1NTljODQ1NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOSBAQAorMjAyMC0wOC0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+
CisKKyAgICAgICAgUmVtb3ZlIHNvbWUgbWVtYmVyIGZ1bmN0aW9ucyBvZiBSYW5nZSBhbmQgbWFu
eSBjYWxscyB0byBjcmVhdGVMaXZlUmFuZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxNTA3MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW06CisgICAg
ICAgICgtW1dlYkZyYW1lIHNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOl0pOiBSZW1vdmUgY3Jl
YXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJGcmFtZSBzZWxlY3Rpb25SZWN0c0ZvclJhbmdl
Ol0pOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZp
c2libGVQb3NpdGlvbi5tbToKKyAgICAgICAgKC1bV2ViVmlzaWJsZVBvc2l0aW9uIGVuY2xvc2lu
Z1JhbmdlV2l0aERpY3RhdGlvblBocmFzZUFsdGVybmF0aXZlczpdKTogRGl0dG8uCisgICAgICAg
ICgtW1dlYlZpc2libGVQb3NpdGlvbiBlbmNsb3NpbmdSYW5nZVdpdGhDb3JyZWN0aW9uSW5kaWNh
dG9yXSk6IERpdHRvLgorICAgICAgICAoK1tET01SYW5nZSByYW5nZUZvckZpcnN0UG9zaXRpb246
c2Vjb25kOl0pOiBSZW5hbWUgZmlyc3RWUC9zZWNvbmRWUAorICAgICAgICB0byBmaXJzdFBvc2l0
aW9uL3NlY29uZFBvc2l0aW9uLgorCiAyMDIwLTA4LTAxICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgUmFuZ2U6OmNyZWF0ZSBhbmQgbWFueSBtb3JlIHVz
ZXMgb2YgbGl2ZSByYW5nZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwppbmRleCBlMzE2ZjQx
MzVmMDlkMzhlYjA2Yjk2ZTFmMjc1MzE3MjhhNzhjOWIzLi5lZTRkZDk0MzAyZWRkMTEzYThjM2Vj
YzU2MWUxNGFmNDAyYWU4NGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTQgQEAKKzIwMjAtMDgtMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisg
ICAgICAgIFJlbW92ZSBzb21lIG1lbWJlciBmdW5jdGlvbnMgb2YgUmFuZ2UgYW5kIG1hbnkgY2Fs
bHMgdG8gY3JlYXRlTGl2ZVJhbmdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTUwNzAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIERPTS9ET00ubW06CisgICAgICAgICgtW0RPTVJhbmdlIHJlbmRlcmVk
SW1hZ2VGb3JjaW5nQmxhY2tUZXh0OnJlbmRlcmVkSW1hZ2VGb3JjaW5nQmxhY2tUZXh0Ol0pOgor
ICAgICAgICBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAoLVtET01SYW5nZSB0ZXh0UmVj
dHNdKTogRGl0dG8uCisKKyAgICAgICAgKiBET00vRE9NRG9jdW1lbnQubW06IFVwZGF0ZSBpbmNs
dWRlcy4KKyAgICAgICAgKiBET00vRE9NUmFuZ2UubW06IERpdHRvLgorICAgICAgICAqIERPTS9E
T01SYW5nZUludGVybmFsLmg6IERpdHRvLgorICAgICAgICAqIERPTS9ET01VSUtpdEV4dGVuc2lv
bnMubW06IERpdHRvLgorICAgICAgICAqIERPTS9ET01VdGlsaXR5Lm1tOiBEaXR0by4KKworICAg
ICAgICAqIERPTS9XZWJET01PcGVyYXRpb25zLm1tOgorICAgICAgICAoLVtET01SYW5nZSB3ZWJB
cmNoaXZlXSk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW0RPTVJhbmdlIG1hcmt1
cFN0cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06CisgICAg
ICAgICgtW1dlYkZyYW1lIF9zdHJpbmdGb3JSYW5nZTpdKTogVXNlIG1ha2VTaW1wbGVSYW5nZS4K
KyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RPTVJhbmdlOl0pOiBSZXR1cm4gYSBTaW1w
bGVSYW5nZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnRUb0RPTVJhbmdlOnJhbmdlSXNS
ZWxhdGl2ZVRvOl0pOiBEaXR0by4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2NvbnZlcnROU1Jhbmdl
VG9ET01SYW5nZTpdKTogVXBkYXRlIGZvciBhYm92ZS4KKyAgICAgICAgKC1bV2ViRnJhbWUgX2Nv
bnZlcnRET01SYW5nZVRvTlNSYW5nZTpdKTogVXNlIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAg
KC1bV2ViRnJhbWUgX3NlbGVjdE5TUmFuZ2U6XSk6IFVwZGF0ZSBmb3IgYWJvdmUuCisgICAgICAg
ICgtW1dlYkZyYW1lIHNlbGVjdFdpdGhvdXRDbG9zaW5nVHlwaW5nTlNSYW5nZTpdKTogRGl0dG8u
CisgICAgICAgICgtW1dlYkZyYW1lIGdldERpY3RhdGlvblJlc3VsdFJhbmdlczphbmRNZXRhZGF0
YXM6XSk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkZyYW1lIGRpY3RhdGlv
blJlc3VsdE1ldGFkYXRhRm9yUmFuZ2U6XSk6IERpdHRvLgorICAgICAgICAqIFdlYlZpZXcvV2Vi
RnJhbWVJbnRlcm5hbC5oOiBVcGRhdGUgZm9yIGFib3ZlLgorCisgICAgICAgICogV2ViVmlldy9X
ZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2RvY3VtZW50RnJhZ21lbnRG
cm9tUGFzdGVib2FyZDpmb3JUeXBlOmluQ29udGV4dDpzdWJyZXNvdXJjZXM6XSk6CisgICAgICAg
IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IGF0dHJpYnV0ZWRT
dWJzdHJpbmdGcm9tUmFuZ2U6XSk6IFVzZSBhdXRvLgorICAgICAgICAoLVtXZWJIVE1MVmlldyBf
YXR0cmlidXRlZFN0cmluZ0Zyb21ET01SYW5nZTpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2Vi
SFRNTFZpZXcgYXR0cmlidXRlZFN0cmluZ10pOiBSZXdyb3RlIHRvIHVzZSBTaW1wbGVSYW5nZSBj
b25zaXN0ZW50bHkuCisgICAgICAgICgtW1dlYkhUTUxWaWV3IHNlbGVjdGVkQXR0cmlidXRlZFN0
cmluZ10pOiBEaXR0by4KKworICAgICAgICAqIFdlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29u
dHJvbGxlci5tbToKKyAgICAgICAgKC1bV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlciBfYW5p
bWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3RlZFRleHRdKToKKyAgICAgICAgVXNlIG1ha2VT
aW1wbGVSYW5nZS4KKyAgICAgICAgKiBXZWJWaWV3L1dlYlRleHRJdGVyYXRvci5tbToKKyAgICAg
ICAgKC1bV2ViVGV4dEl0ZXJhdG9yIGluaXRXaXRoUmFuZ2U6XSk6IERpdHRvLgorCisgICAgICAg
ICogV2ViVmlldy9XZWJWaWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9kaWRDb25jbHVkZUVk
aXREcmFnXSk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisKIDIwMjAtMDgtMDEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBSYW5nZTo6Y3JlYXRlIGFu
ZCBtYW55IG1vcmUgdXNlcyBvZiBsaXZlIHJhbmdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKaW5kZXggYmViNzIxMmM3NTMxNzY2ODAzYWFhZWVj
NjllMjk0YjI2YjgwMDEwMS4uYzdmZmZjZmMyNzM4ZGYxYmY1NmE2YWZlNGQ0NWIzZTAwMWM0YmRj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CkBAIC0yNjIyLDcgKzI2MjIsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6bmV4
dEJvdW5kYXJ5KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2ZmcwogICAgICAgICBh
dXRvIGJhY2t3YXJkc1NjYW5SYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhi
b3VuZGFyeS0+ZG9jdW1lbnQoKSk7CiAgICAgICAgIGlmICghc2V0UmFuZ2VTdGFydE9yRW5kV2l0
aENoYXJhY3Rlck9mZnNldChiYWNrd2FyZHNTY2FuUmFuZ2UsIGNoYXJhY3Rlck9mZnNldCwgZmFs
c2UpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcHJlZml4TGVuZ3RoID0gcHJl
Zml4TGVuZ3RoRm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKGJhY2t3YXJkc1NjYW5SYW5nZSksIHN0
cmluZyk7CisgICAgICAgIHByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aEZvclJhbmdlKGJhY2t3
YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFzZXRSYW5nZVN0
YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KHNlYXJjaFJhbmdlLCBjaGFyYWN0ZXJPZmZzZXQs
IHRydWUpKQpAQCAtMjY4MSw3ICsyNjgxLDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2Fj
aGU6OnByZXZpb3VzQm91bmRhcnkoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXIKICAg
ICAgICAgZm9yd2FyZHNTY2FuUmFuZ2Uuc3RhcnQgPSAqYWZ0ZXJCb3VuZGFyeTsKICAgICAgICAg
aWYgKCFzZXRSYW5nZVN0YXJ0T3JFbmRXaXRoQ2hhcmFjdGVyT2Zmc2V0KGZvcndhcmRzU2NhblJh
bmdlLCBjaGFyYWN0ZXJPZmZzZXQsIHRydWUpKQogICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAg
ICAgICAgc3VmZml4TGVuZ3RoID0gc3VmZml4TGVuZ3RoRm9yUmFuZ2UoY3JlYXRlTGl2ZVJhbmdl
KGZvcndhcmRzU2NhblJhbmdlKSwgc3RyaW5nKTsKKyAgICAgICAgc3VmZml4TGVuZ3RoID0gc3Vm
Zml4TGVuZ3RoRm9yUmFuZ2UoZm9yd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CiAgICAgfQogICAg
IAogICAgIGlmICghc2V0UmFuZ2VTdGFydE9yRW5kV2l0aENoYXJhY3Rlck9mZnNldChzZWFyY2hS
YW5nZSwgY2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCmluZGV4IGU4YjM3NzRlNzE4NWI2MTViYTNkZGEzYWQyZDA0OTUzOWU5MWFk
MDMuLmQ4NDE4YjA0NWFhMDAwZTgzZDhiZGQ5MjQ4NjcxODFjMTQ0MzMxYjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0yMzM4LDEzICsyMzM4LDkgQEAgLSAo
TlNBcnJheSAqKWFycmF5T2ZUZXh0Rm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzIGF0
dHJpYnV0ZWQ6KEJPT0wpYXR0cmkKICAgICByZXR1cm4gW2FycmF5IGF1dG9yZWxlYXNlXTsKIH0K
IAotLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UgKilsaXZlUmFuZ2UKKy8vIEZJ
WE1FOiBObyByZWFzb24gZm9yIHRoaXMgdG8gYmUgYSBtZXRob2QgaW5zdGVhZCBvZiBhIGZ1bmN0
aW9uLgorLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooY29uc3QgU2ltcGxlUmFuZ2UmKXJh
bmdlCiB7Ci0gICAgaWYgKCFsaXZlUmFuZ2UpCi0gICAgICAgIHJldHVybiBOU01ha2VSYW5nZShO
U05vdEZvdW5kLCAwKTsKLQotICAgIGF1dG8gcmFuZ2UgPSBTaW1wbGVSYW5nZSB7ICpsaXZlUmFu
Z2UgfTsKLQogICAgIGF1dG8mIGRvY3VtZW50ID0gcmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKTsKICAg
ICBhdXRvKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTIz
OTgsNyArMjM5NCw5IEBAIC0gKE5TSW50ZWdlcilwb3NpdGlvbkZvclRleHRNYXJrZXI6KFdlYkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyICopbWFya2VyCiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBj
aGFyYWN0ZXJPZmZzZXQgPSBbbWFya2VyIGNoYXJhY3Rlck9mZnNldF07CiAgICAgICAgIC8vIENy
ZWF0ZSBhIGNvbGxhcHNlZCByYW5nZSBmcm9tIHRoZSBDaGFyYWN0ZXJPZmZzZXQgb2JqZWN0Lgog
ICAgICAgICBhdXRvIHJhbmdlID0gY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zm
c2V0cyhjaGFyYWN0ZXJPZmZzZXQsIGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgICAgIHJldHVybiBb
c2VsZiBfY29udmVydFRvTlNSYW5nZTpjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLmdldCgpXS5sb2Nh
dGlvbjsKKyAgICAgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgICAgIHJldHVybiBOU05vdEZvdW5k
OworICAgICAgICByZXR1cm4gW3NlbGYgX2NvbnZlcnRUb05TUmFuZ2U6KnJhbmdlXS5sb2NhdGlv
bjsKICAgICB9CiAgICAgcmV0dXJuIE5TTm90Rm91bmQ7CiB9CkBAIC0yNzU2LDggKzI3NTQsNyBA
QCAtIChOU0FycmF5ICopdGV4dFJlY3RzRnJvbU1hcmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzIHdp
dGhUZXh0OihOU1N0cmluZyAqKXRleHQKICAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBz
ZWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpTZWxlY3Rp
b25SZWN0PiByZWN0czsKLSAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0
aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHJlY3RzKTsKKyAgICBhdXRvIHJlY3Rz
ID0gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlv
ckxpbmVzKCpyYW5nZSk7CiAgICAgaWYgKHJlY3RzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyZWN0cywgWyZdIChhdXRvJiByZWN0KSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGFmODQ2YzE3ZjY2
NjllYWE3OTg1NzIxYWEwMjIzZDRkZGNmZjFjNGUuLmJkYzdkNDgwODA2MTVjNDY4MWU3ODljOGJm
N2ZjNzllZDRkZGNiOTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CkBAIC0zNjIxLDEzICszNjIxLDExIEBAIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWRvQVhBdHRy
aWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKICAgICByZXR1cm4gW3NlbGYgZG9B
WEF0dHJpYnV0ZWRTdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2U6W3NlbGYgdGV4dE1hcmtlclJhbmdl
RnJvbVJhbmdlOndlYlJhbmdlXSBzcGVsbENoZWNrOllFU107CiB9CiAKLS0gKE5TUmFuZ2UpX2Nv
bnZlcnRUb05TUmFuZ2U6KFJhbmdlKilyYW5nZQorLy8gRklYTUU6IE5vIHJlYXNvbiBmb3IgdGhp
cyB0byBiZSBhIG1ldGhvZCBpbnN0ZWFkIG9mIGEgZnVuY3Rpb247IGNhbiBnZXQgZG9jdW1lbnQg
ZnJvbSByYW5nZS4KKy0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KGNvbnN0IFNpbXBsZVJh
bmdlJilyYW5nZQogewogICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CiAgICAgCi0gICAgaWYg
KCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwotICAg
IAogICAgIGF1dG8gZG9jdW1lbnQgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+ZG9jdW1lbnQoKTsK
ICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gTlNNYWtlUmFuZ2UoTlNOb3RGb3Vu
ZCwgMCk7CkBAIC0zNjM2LDcgKzM2MzQsNyBAQCAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1Jhbmdl
OihSYW5nZSopcmFuZ2UKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJu
IE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogCi0gICAgcmV0dXJuIGNoYXJhY3RlclJhbmdl
KG1ha2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCAq
cmFuZ2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9y
ZU5vZGVDb250ZW50cygqZG9jdW1lbnRFbGVtZW50KSwgcmFuZ2UpOwogfQogCiAtIChOU0ludGVn
ZXIpX2luZGV4Rm9yVGV4dE1hcmtlcjooaWQpbWFya2VyCkBAIC0zNjQ2LDkgKzM2NDQsMTAgQEAg
LSAoTlNJbnRlZ2VyKV9pbmRleEZvclRleHRNYXJrZXI6KGlkKW1hcmtlcgogICAgIAogICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENh
Y2hlKCkpIHsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtzZWxm
IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6bWFya2VyXTsKLSAgICAgICAgLy8gQ3JlYXRl
IGEgY29sbGFwc2VkIHJhbmdlIGZyb20gdGhlIENoYXJhY3Rlck9mZnNldCBvYmplY3QuCiAgICAg
ICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRz
KGNoYXJhY3Rlck9mZnNldCwgY2hhcmFjdGVyT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIFtzZWxm
IF9jb252ZXJ0VG9OU1JhbmdlOmNyZWF0ZUxpdmVSYW5nZShyYW5nZSkuZ2V0KCldLmxvY2F0aW9u
OworICAgICAgICBpZiAoIXJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIE5TTm90Rm91bmQ7Cisg
ICAgICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZToqcmFuZ2VdLmxvY2F0aW9uOwog
ICAgIH0KICAgICByZXR1cm4gTlNOb3RGb3VuZDsKIH0KQEAgLTM2NzAsNyArMzY2OSw3IEBAIC0g
KGlkKV90ZXh0TWFya2VyRm9ySW5kZXg6KE5TSW50ZWdlcil0ZXh0SW5kZXgKICAgICAgICAgcmV0
dXJuIG5pbDsKIAogICAgIGF1dG8gYm91bmRhcnkgPSByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24o
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpkb2N1bWVudEVsZW1lbnQpLCB0ZXh0SW5k
ZXgpOwotICAgIGF1dG8gY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFyYWN0
ZXJPZmZzZXRGb3JSYW5nZShjcmVhdGVMaXZlUmFuZ2UoeyBib3VuZGFyeSwgYm91bmRhcnkgfSks
IHRydWUpOworICAgIGF1dG8gY2hhcmFjdGVyT2Zmc2V0ID0gY2FjaGUtPnN0YXJ0T3JFbmRDaGFy
YWN0ZXJPZmZzZXRGb3JSYW5nZShtYWtlU2ltcGxlUmFuZ2UoYm91bmRhcnkpLCB0cnVlKTsKICAg
ICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZz
ZXRdOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwCmluZGV4IDY4Y2M3NjVmMDMwNjdlMmE3OGY2ZGE1MTRjZWM3YmZkMmNkNjI2NWIuLmJi
MmI3N2U4YThmNGY2NzYyY2JlZTE1ZGJlYWZmMTgxYTlkNjVlNzggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC0xMDUsNyArMTA1LDcg
QEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZpbHRlck1hcmtlcnMoY29uc3QgU2lt
cGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBGdW4KIHN0YXRpYyB2b2lkIHVwZGF0ZVJlbmRlcmVkUmVj
dHNGb3JNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBOb2RlJiBub2RlKQog
ewogICAgIEFTU0VSVCghbm9kZS5kb2N1bWVudCgpLnZpZXcoKSB8fCAhbm9kZS5kb2N1bWVudCgp
LnZpZXcoKS0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29sdXRl
UmVjdHMoYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdl
KG5vZGUsIG1hcmtlciksIHRydWUpKSk7CisgICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29sdXRl
UmVjdHMoYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKG1ha2VT
aW1wbGVSYW5nZShub2RlLCBtYXJrZXIpLCB0cnVlKSkpOwogfQogCiB2b2lkIERvY3VtZW50TWFy
a2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpCkBAIC02NjIsNyAr
NjYyLDcgQEAgdm9pZCByZW1vdmVNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0
aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXAKICAgICByYW5nZS5zdGFydC5jb250YWlu
ZXItPmRvY3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMocmFuZ2UsIHR5cGVzLCBwb2xp
Y3kpOwogfQogCi1TaW1wbGVSYW5nZSByYW5nZShOb2RlJiBub2RlLCBjb25zdCBEb2N1bWVudE1h
cmtlciYgbWFya2VyKQorU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKE5vZGUmIG5vZGUsIGNv
bnN0IERvY3VtZW50TWFya2VyJiBtYXJrZXIpCiB7CiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQg
PSBtYXJrZXIuc3RhcnRPZmZzZXQoKTsKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQgPSBtYXJrZXIu
ZW5kT2Zmc2V0KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJr
ZXJDb250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyLmgKaW5kZXggMGI0NGUyYzJlZDNiZWU1MzQzZWI3NjQ4N2RlMmI1ZjYyMDQwY2Q3Mi4uZjcz
NGQ3MzJiZjEwNzVjZjAyN2M5N2MxZWQ5OGVkNGZlNGZjMjhlOCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaApAQCAtMTE1LDcgKzExNSw3IEBAIHZv
aWQgYWRkTWFya2VyKGNvbnN0IFNpbXBsZVJhbmdlJiwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5
cGUsIGNvbnN0IERvY3VtZW50TWFyCiB2b2lkIGFkZE1hcmtlcihUZXh0JiwgdW5zaWduZWQgc3Rh
cnRPZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgRG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGUsIERv
Y3VtZW50TWFya2VyOjpEYXRhJiYgPSB7IH0pOwogdm9pZCByZW1vdmVNYXJrZXJzKGNvbnN0IFNp
bXBsZVJhbmdlJiwgT3B0aW9uU2V0PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlPiA9IERvY3Vt
ZW50TWFya2VyOjphbGxNYXJrZXJzKCksIFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2Vy
ID0gUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXI6Ok5vKTsKIAotV0VCQ09SRV9FWFBP
UlQgU2ltcGxlUmFuZ2UgcmFuZ2UoTm9kZSYsIGNvbnN0IERvY3VtZW50TWFya2VyJik7CitXRUJD
T1JFX0VYUE9SVCBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2UoTm9kZSYsIGNvbnN0IERvY3Vt
ZW50TWFya2VyJik7CiAKIGlubGluZSBib29sIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aGFz
TWFya2VycygpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCAyNjYxODVlYmQ3OTUyZGMy
MmE1Y2E3ZTQ0MjViZTk1NTEyZDRmMWJjLi43MDA4MWJlMjBjYjFiNzNiNmI0YTc5NGZhYjlhN2Ex
ZTljYjJjZTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKQEAgLTg4OCw3ICs4ODgsNyBAQCBTdHJpbmcg
UmFuZ2U6OnRleHQoKSBjb25zdAogICAgIC8vIEZJWE1FOiBBcyB3aXRoIGlubmVyVGV4dCwgd2Un
ZCBsaWtlIHRoaXMgdG8gd29yayBldmVuIGlmIHRoZXJlIGFyZSBubyByZW5kZXIgb2JqZWN0cy4K
ICAgICBzdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7CiAKLSAgICBy
ZXR1cm4gcGxhaW5UZXh0KCp0aGlzKTsKKyAgICByZXR1cm4gcGxhaW5UZXh0KG1ha2VTaW1wbGVS
YW5nZSgqdGhpcykpOwogfQogCiAvLyBodHRwczovL3czYy5naXRodWIuaW8vRE9NLVBhcnNpbmcv
I3dpZGwtUmFuZ2UtY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50LURvY3VtZW50RnJhZ21lbnQtRE9N
U3RyaW5nLWZyYWdtZW50CkBAIC0xMDY5LDExICsxMDY5LDYgQEAgTm9kZSogUmFuZ2U6OmZpcnN0
Tm9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIE5vZGVUcmF2ZXJzYWw6Om5leHRTa2lwcGluZ0NoaWxk
cmVuKHN0YXJ0Q29udGFpbmVyKCkpOwogfQogCi1TaGFkb3dSb290KiBSYW5nZTo6c2hhZG93Um9v
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHN0YXJ0Q29udGFpbmVyKCkuY29udGFpbmluZ1NoYWRv
d1Jvb3QoKTsKLX0KLQogTm9kZSogUmFuZ2U6OnBhc3RMYXN0Tm9kZSgpIGNvbnN0CiB7CiAgICAg
aWYgKGVuZENvbnRhaW5lcigpLmlzQ2hhcmFjdGVyRGF0YU5vZGUoKSkKQEAgLTExNDQsMjczICsx
MTM5LDYgQEAgdm9pZCBSYW5nZTo6YWJzb2x1dGVUZXh0UmVjdHMoVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cywgYm9vbCB1c2VTZWxlY3Rpb25IZWlnaHQsIE8KICAgICB9CiB9CiAKLSNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQotc3RhdGljIGJvb2wgaW50ZXJ2YWxzU3VmZmljaWVudGx5T3ZlcmxhcChp
bnQgc3RhcnRBLCBpbnQgZW5kQSwgaW50IHN0YXJ0QiwgaW50IGVuZEIpCi17Ci0gICAgaWYgKGVu
ZEEgPD0gc3RhcnRBIHx8IGVuZEIgPD0gc3RhcnRCKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBjb25zdCBmbG9hdCBzdWZmaWNpZW50T3ZlcmxhcCA9IC43NTsKLQotICAgIGludCBsZW5n
dGhBID0gZW5kQSAtIHN0YXJ0QTsKLSAgICBpbnQgbGVuZ3RoQiA9IGVuZEIgLSBzdGFydEI7Ci0K
LSAgICBpbnQgbWF4U3RhcnQgPSBzdGQ6Om1heChzdGFydEEsIHN0YXJ0Qik7Ci0gICAgaW50IG1p
bkVuZCA9IHN0ZDo6bWluKGVuZEEsIGVuZEIpOwotCi0gICAgaWYgKG1heFN0YXJ0ID4gbWluRW5k
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gbWluRW5kIC0gbWF4U3RhcnQg
Pj0gc3VmZmljaWVudE92ZXJsYXAgKiBzdGQ6Om1pbihsZW5ndGhBLCBsZW5ndGhCKTsKLX0KLQot
c3RhdGljIGlubGluZSB2b2lkIGFkanVzdExpbmVIZWlnaHRPZlNlbGVjdGlvblJlY3RzKFZlY3Rv
cjxTZWxlY3Rpb25SZWN0PiYgcmVjdHMsIHNpemVfdCBudW1iZXJPZlJlY3RzLCBpbnQgbGluZU51
bWJlciwgaW50IGxpbmVUb3AsIGludCBsaW5lSGVpZ2h0KQotewotICAgIEFTU0VSVChyZWN0cy5z
aXplKCkgPj0gbnVtYmVyT2ZSZWN0cyk7Ci0gICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mUmVj
dHM7IGk7ICkgewotICAgICAgICAtLWk7Ci0gICAgICAgIGlmIChyZWN0c1tpXS5saW5lTnVtYmVy
KCkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgcmVjdHNbaV0uc2V0TGluZU51bWJlcihs
aW5lTnVtYmVyKTsKLSAgICAgICAgcmVjdHNbaV0uc2V0TG9naWNhbFRvcChsaW5lVG9wKTsKLSAg
ICAgICAgcmVjdHNbaV0uc2V0TG9naWNhbEhlaWdodChsaW5lSGVpZ2h0KTsKLSAgICB9Ci19Ci0K
LXN0YXRpYyBTZWxlY3Rpb25SZWN0IGNvYWxlc2NlU2VsZWN0aW9uUmVjdHMoY29uc3QgU2VsZWN0
aW9uUmVjdCYgb3JpZ2luYWwsIGNvbnN0IFNlbGVjdGlvblJlY3QmIHByZXZpb3VzKQotewotICAg
IFNlbGVjdGlvblJlY3QgcmVzdWx0KHVuaW9uUmVjdChwcmV2aW91cy5yZWN0KCksIG9yaWdpbmFs
LnJlY3QoKSksIG9yaWdpbmFsLmlzSG9yaXpvbnRhbCgpLCBvcmlnaW5hbC5wYWdlTnVtYmVyKCkp
OwotICAgIHJlc3VsdC5zZXREaXJlY3Rpb24ob3JpZ2luYWwuY29udGFpbnNTdGFydCgpIHx8IG9y
aWdpbmFsLmNvbnRhaW5zRW5kKCkgPyBvcmlnaW5hbC5kaXJlY3Rpb24oKSA6IHByZXZpb3VzLmRp
cmVjdGlvbigpKTsKLSAgICByZXN1bHQuc2V0Q29udGFpbnNTdGFydChwcmV2aW91cy5jb250YWlu
c1N0YXJ0KCkgfHwgb3JpZ2luYWwuY29udGFpbnNTdGFydCgpKTsKLSAgICByZXN1bHQuc2V0Q29u
dGFpbnNFbmQocHJldmlvdXMuY29udGFpbnNFbmQoKSB8fCBvcmlnaW5hbC5jb250YWluc0VuZCgp
KTsKLSAgICByZXN1bHQuc2V0SXNGaXJzdE9uTGluZShwcmV2aW91cy5pc0ZpcnN0T25MaW5lKCkg
fHwgb3JpZ2luYWwuaXNGaXJzdE9uTGluZSgpKTsKLSAgICByZXN1bHQuc2V0SXNMYXN0T25MaW5l
KHByZXZpb3VzLmlzTGFzdE9uTGluZSgpIHx8IG9yaWdpbmFsLmlzTGFzdE9uTGluZSgpKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi0vLyBUaGlzIGZ1bmN0aW9uIGlzIHNpbWlsYXIgaW4gc3Bp
cml0IHRvIGFkZExpbmVCb3hSZWN0cywgYnV0IGFubm90YXRlcyB0aGUgcmV0dXJuZWQgcmVjdGFu
Z2xlcwotLy8gd2l0aCBhZGRpdGlvbmFsIHN0YXRlIHdoaWNoIGhlbHBzIGlPUyBkcmF3IHNlbGVj
dGlvbnMgaW4gaXRzIHVuaXF1ZSB3YXkuCi1pbnQgUmFuZ2U6OmNvbGxlY3RTZWxlY3Rpb25SZWN0
c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0cykg
Y29uc3QKLXsKLSAgICBhdXRvJiBzdGFydENvbnRhaW5lciA9IHRoaXMtPnN0YXJ0Q29udGFpbmVy
KCk7Ci0gICAgYXV0byYgZW5kQ29udGFpbmVyID0gdGhpcy0+ZW5kQ29udGFpbmVyKCk7Ci0gICAg
aW50IHN0YXJ0T2Zmc2V0ID0gbV9zdGFydC5vZmZzZXQoKTsKLSAgICBpbnQgZW5kT2Zmc2V0ID0g
bV9lbmQub2Zmc2V0KCk7Ci0KLSAgICBWZWN0b3I8U2VsZWN0aW9uUmVjdD4gbmV3UmVjdHM7Ci0g
ICAgTm9kZSogc3RvcE5vZGUgPSBwYXN0TGFzdE5vZGUoKTsKLSAgICBib29sIGhhc0ZsaXBwZWRX
cml0aW5nTW9kZSA9IHN0YXJ0Q29udGFpbmVyLnJlbmRlcmVyKCkgJiYgc3RhcnRDb250YWluZXIu
cmVuZGVyZXIoKS0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpOwotICAgIGJv
b2wgY29udGFpbnNEaWZmZXJlbnRXcml0aW5nTW9kZXMgPSBmYWxzZTsKLSAgICBmb3IgKE5vZGUq
IG5vZGUgPSBmaXJzdE5vZGUoKTsgbm9kZSAmJiBub2RlICE9IHN0b3BOb2RlOyBub2RlID0gTm9k
ZVRyYXZlcnNhbDo6bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJl
ciA9IG5vZGUtPnJlbmRlcmVyKCk7Ci0gICAgICAgIC8vIE9ubHkgYXNrIGxlYWYgcmVuZGVyIG9i
amVjdHMgZm9yIHRoZWlyIGxpbmUgYm94IHJlY3RzLgotICAgICAgICBpZiAocmVuZGVyZXIgJiYg
IXJlbmRlcmVyLT5maXJzdENoaWxkU2xvdygpICYmIHJlbmRlcmVyLT5zdHlsZSgpLnVzZXJTZWxl
Y3QoKSAhPSBVc2VyU2VsZWN0OjpOb25lKSB7Ci0gICAgICAgICAgICBib29sIGlzU3RhcnROb2Rl
ID0gcmVuZGVyZXItPm5vZGUoKSA9PSAmc3RhcnRDb250YWluZXI7Ci0gICAgICAgICAgICBib29s
IGlzRW5kTm9kZSA9IHJlbmRlcmVyLT5ub2RlKCkgPT0gJmVuZENvbnRhaW5lcjsKLSAgICAgICAg
ICAgIGlmIChoYXNGbGlwcGVkV3JpdGluZ01vZGUgIT0gcmVuZGVyZXItPnN0eWxlKCkuaXNGbGlw
cGVkQmxvY2tzV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgICAgICBjb250YWluc0RpZmZlcmVu
dFdyaXRpbmdNb2RlcyA9IHRydWU7Ci0gICAgICAgICAgICAvLyBGSVhNRTogU2VuZGluZyAwIGZv
ciB0aGUgc3RhcnRPZmZzZXQgaXMgYSB3ZWlyZCB3YXkgb2YgdGVsbGluZyB0aGUgcmVuZGVyZXIg
dGhhdCB0aGUgc2VsZWN0aW9uCi0gICAgICAgICAgICAvLyBkb2Vzbid0IHN0YXJ0IGluc2lkZSBp
dCwgc2luY2Ugd2UnbGwgYWxzbyBzZW5kIDAgaWYgdGhlIHNlbGVjdGlvbiAqZG9lcyogc3RhcnQg
aW4gaXQsIGF0IG9mZnNldCAwLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vIEZJWE1F
OiBTZWxlY3Rpb24gZW5kcG9pbnRzIGFyZW4ndCBhbHdheXMgaW5zaWRlIGxlYXZlcywgYW5kIHdl
IG9ubHkgYnVpbGQgU2VsZWN0aW9uUmVjdHMgZm9yIGxlYXZlcywKLSAgICAgICAgICAgIC8vIHNv
IHdlIGNhbid0IGFjY3VyYXRlbHkgZGV0ZXJtaW5lIHdoaWNoIFNlbGVjdGlvblJlY3RzIGNvbnRh
aW4gdGhlIHNlbGVjdGlvbiBzdGFydCBhbmQgZW5kIHVzaW5nCi0gICAgICAgICAgICAvLyBvbmx5
IHRoZSBvZmZzZXRzIG9mIHRoZSBzdGFydCBhbmQgZW5kLiBXZSBuZWVkIHRvIHBhc3MgdGhlIHdo
b2xlIFJhbmdlLgotICAgICAgICAgICAgaW50IGJlZ2luU2VsZWN0aW9uT2Zmc2V0ID0gaXNTdGFy
dE5vZGUgPyBzdGFydE9mZnNldCA6IDA7Ci0gICAgICAgICAgICBpbnQgZW5kU2VsZWN0aW9uT2Zm
c2V0ID0gaXNFbmROb2RlID8gZW5kT2Zmc2V0IDogc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKTsKLSAgICAgICAgICAgIHJlbmRlcmVyLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMobmV3UmVj
dHMsIGJlZ2luU2VsZWN0aW9uT2Zmc2V0LCBlbmRTZWxlY3Rpb25PZmZzZXQpOwotICAgICAgICAg
ICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogbmV3UmVjdHMpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoc2VsZWN0aW9uUmVjdC5jb250YWluc1N0YXJ0KCkgJiYgIWlzU3RhcnROb2RlKQotICAg
ICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldENvbnRhaW5zU3RhcnQoZmFsc2UpOwot
ICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SZWN0LmNvbnRhaW5zRW5kKCkgJiYgIWlzRW5k
Tm9kZSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVjdC5zZXRDb250YWluc0VuZChm
YWxzZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJlY3QubG9naWNhbFdpZHRoKCkg
fHwgc2VsZWN0aW9uUmVjdC5sb2dpY2FsSGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIHJl
Y3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5l
d1JlY3RzLnNocmluaygwKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZSByYW5nZSBj
b3VsZCBzcGFuIG5vZGVzIHdpdGggZGlmZmVyZW50IHdyaXRpbmcgbW9kZXMuCi0gICAgLy8gSWYg
dGhpcyBpcyB0aGUgY2FzZSwgd2UgdXNlIHRoZSB3cml0aW5nIG1vZGUgb2YgdGhlIGNvbW1vbiBh
bmNlc3Rvci4KLSAgICBpZiAoY29udGFpbnNEaWZmZXJlbnRXcml0aW5nTW9kZXMpIHsKLSAgICAg
ICAgaWYgKGF1dG8gYW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVBbmNlc3RvcihzdGFydENvbnRh
aW5lciwgZW5kQ29udGFpbmVyKSkKLSAgICAgICAgICAgIGhhc0ZsaXBwZWRXcml0aW5nTW9kZSA9
IGFuY2VzdG9yLT5yZW5kZXJlcigpLT5zdHlsZSgpLmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2Rl
KCk7Ci0gICAgfQotCi0gICAgY29uc3Qgc2l6ZV90IG51bWJlck9mUmVjdHMgPSByZWN0cy5zaXpl
KCk7Ci0KLSAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGVuZHMgaW4gYSBCUiwgdGhlbiBhZGQgdGhl
IGxpbmUgYnJlYWsgYml0IHRvIHRoZSBsYXN0Ci0gICAgLy8gcmVjdCB3ZSBoYXZlLiBUaGlzIHdp
bGwgY2F1c2UgaXRzIHNlbGVjdGlvbiByZWN0IHRvIGV4dGVuZCB0byB0aGUKLSAgICAvLyBlbmQg
b2YgdGhlIGxpbmUuCi0gICAgaWYgKHN0b3BOb2RlICYmIHN0b3BOb2RlLT5oYXNUYWdOYW1lKEhU
TUxOYW1lczo6YnJUYWcpICYmIG51bWJlck9mUmVjdHMpIHsKLSAgICAgICAgLy8gT25seSBzZXQg
dGhlIGxpbmUgYnJlYWsgYml0IGlmIHRoZSBlbmQgb2YgdGhlIHJhbmdlIGFjdHVhbGx5Ci0gICAg
ICAgIC8vIGV4dGVuZHMgYWxsIHRoZSB3YXkgdG8gaW5jbHVkZSB0aGUgPGJyPi4gVmlzaWJsZVBv
c2l0aW9uIGhlbHBzIHRvCi0gICAgICAgIC8vIGZpZ3VyZSB0aGlzIG91dC4KLSAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIGVuZFBvc2l0aW9uKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmZW5k
Q29udGFpbmVyLCBlbmRPZmZzZXQpLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIGJyUG9zaXRpb24oY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHN0b3BO
b2RlLCAwKSwgVlBfREVGQVVMVF9BRkZJTklUWSk7Ci0gICAgICAgIGlmIChlbmRQb3NpdGlvbiA9
PSBiclBvc2l0aW9uKQotICAgICAgICAgICAgcmVjdHMubGFzdCgpLnNldElzTGluZUJyZWFrKHRy
dWUpOwotICAgIH0KLQotICAgIGludCBsaW5lVG9wID0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+
OjptYXgoKTsKLSAgICBpbnQgbGluZUJvdHRvbSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6
bWluKCk7Ci0gICAgaW50IGxhc3RMaW5lVG9wID0gbGluZVRvcDsKLSAgICBpbnQgbGFzdExpbmVC
b3R0b20gPSBsaW5lQm90dG9tOwotICAgIGludCBsaW5lTnVtYmVyID0gMDsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWN0czsgKytpKSB7Ci0gICAgICAgIGludCBjdXJy
ZW50UmVjdFRvcCA9IHJlY3RzW2ldLmxvZ2ljYWxUb3AoKTsKLSAgICAgICAgaW50IGN1cnJlbnRS
ZWN0Qm90dG9tID0gY3VycmVudFJlY3RUb3AgKyByZWN0c1tpXS5sb2dpY2FsSGVpZ2h0KCk7Ci0K
LSAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBjb3VudCB0aGUgcnVieSB0ZXh0IGFzIGEgc2Vw
YXJhdGUgbGluZS4KLSAgICAgICAgaWYgKGludGVydmFsc1N1ZmZpY2llbnRseU92ZXJsYXAoY3Vy
cmVudFJlY3RUb3AsIGN1cnJlbnRSZWN0Qm90dG9tLCBsaW5lVG9wLCBsaW5lQm90dG9tKSB8fCAo
aSAmJiByZWN0c1tpXS5pc1J1YnlUZXh0KCkpKSB7Ci0gICAgICAgICAgICAvLyBHcm93IHRoZSBj
dXJyZW50IGxpbmUgYm91bmRzLgotICAgICAgICAgICAgbGluZVRvcCA9IHN0ZDo6bWluKGxpbmVU
b3AsIGN1cnJlbnRSZWN0VG9wKTsKLSAgICAgICAgICAgIGxpbmVCb3R0b20gPSBzdGQ6Om1heChs
aW5lQm90dG9tLCBjdXJyZW50UmVjdEJvdHRvbSk7Ci0gICAgICAgICAgICAvLyBBdm9pZCBvdmVy
bGFwIHdpdGggdGhlIHByZXZpb3VzIGxpbmUuCi0gICAgICAgICAgICBpZiAoIWhhc0ZsaXBwZWRX
cml0aW5nTW9kZSkKLSAgICAgICAgICAgICAgICBsaW5lVG9wID0gc3RkOjptYXgobGFzdExpbmVC
b3R0b20sIGxpbmVUb3ApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxpbmVC
b3R0b20gPSBzdGQ6Om1pbihsYXN0TGluZVRvcCwgbGluZUJvdHRvbSk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBhZGp1c3RMaW5lSGVpZ2h0T2ZTZWxlY3Rpb25SZWN0cyhyZWN0cywg
aSwgbGluZU51bWJlciwgbGluZVRvcCwgbGluZUJvdHRvbSAtIGxpbmVUb3ApOwotICAgICAgICAg
ICAgaWYgKCFoYXNGbGlwcGVkV3JpdGluZ01vZGUpIHsKLSAgICAgICAgICAgICAgICBsYXN0TGlu
ZVRvcCA9IGxpbmVUb3A7Ci0gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRSZWN0Qm90dG9tID49
IGxhc3RMaW5lVG9wKSB7Ci0gICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lQm90dG9tID0gbGlu
ZUJvdHRvbTsKLSAgICAgICAgICAgICAgICAgICAgbGluZVRvcCA9IGxhc3RMaW5lQm90dG9tOwot
ICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVUb3AgPSBj
dXJyZW50UmVjdFRvcDsKLSAgICAgICAgICAgICAgICAgICAgbGFzdExpbmVCb3R0b20gPSBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1pbigpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBsaW5lQm90dG9tID0gY3VycmVudFJlY3RCb3R0b207Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIGxhc3RMaW5lQm90dG9tID0gbGluZUJvdHRvbTsKLSAgICAg
ICAgICAgICAgICBpZiAoY3VycmVudFJlY3RUb3AgPD0gbGFzdExpbmVCb3R0b20gJiYgaSAmJiBy
ZWN0c1tpXS5wYWdlTnVtYmVyKCkgPT0gcmVjdHNbaSAtIDFdLnBhZ2VOdW1iZXIoKSkgewotICAg
ICAgICAgICAgICAgICAgICBsYXN0TGluZVRvcCA9IGxpbmVUb3A7Ci0gICAgICAgICAgICAgICAg
ICAgIGxpbmVCb3R0b20gPSBsYXN0TGluZVRvcDsKLSAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICBsYXN0TGluZVRvcCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCk7Ci0gICAgICAgICAgICAgICAgICAgIGxpbmVCb3R0b20gPSBjdXJyZW50UmVjdEJv
dHRvbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbGluZVRvcCA9IGN1cnJl
bnRSZWN0VG9wOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKytsaW5lTnVtYmVyOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gQWRqdXN0IGxpbmUgaGVpZ2h0LgotICAgIGFkanVzdExp
bmVIZWlnaHRPZlNlbGVjdGlvblJlY3RzKHJlY3RzLCBudW1iZXJPZlJlY3RzLCBsaW5lTnVtYmVy
LCBsaW5lVG9wLCBsaW5lQm90dG9tIC0gbGluZVRvcCk7Ci0KLSAgICAvLyBTb3J0IHRoZSByZWN0
YW5nbGVzIGFuZCBtYWtlIHN1cmUgdGhlcmUgYXJlIG5vIGdhcHMuIFRoZSByZWN0YW5nbGVzIGNv
dWxkIGJlIHVuc29ydGVkIHdoZW4KLSAgICAvLyB0aGVyZSBpcyBydWJ5IHRleHQgYW5kIHdlIGNv
dWxkIGhhdmUgZ2FwcyBvbiB0aGUgbGluZSB3aGVuIGFkamFjZW50IGVsZW1lbnRzIG9uIHRoZSBs
aW5lCi0gICAgLy8gaGF2ZSBhIGRpZmZlcmVudCBvcmllbnRhdGlvbi4KLSAgICBzaXplX3QgZmly
c3RSZWN0V2l0aEN1cnJlbnRMaW5lTnVtYmVyID0gMDsKLSAgICBmb3IgKHNpemVfdCBjdXJyZW50
UmVjdCA9IDE7IGN1cnJlbnRSZWN0IDwgbnVtYmVyT2ZSZWN0czsgKytjdXJyZW50UmVjdCkgewot
ICAgICAgICBpZiAocmVjdHNbY3VycmVudFJlY3RdLmxpbmVOdW1iZXIoKSAhPSByZWN0c1tjdXJy
ZW50UmVjdCAtIDFdLmxpbmVOdW1iZXIoKSkgewotICAgICAgICAgICAgZmlyc3RSZWN0V2l0aEN1
cnJlbnRMaW5lTnVtYmVyID0gY3VycmVudFJlY3Q7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAocmVjdHNbY3VycmVudFJlY3RdLmxvZ2ljYWxMZWZ0KCkgPj0g
cmVjdHNbY3VycmVudFJlY3QgLSAxXS5sb2dpY2FsTGVmdCgpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgU2VsZWN0aW9uUmVjdCBzZWxlY3Rpb25SZWN0ID0gcmVjdHNbY3VycmVu
dFJlY3RdOwotICAgICAgICBzaXplX3QgaTsKLSAgICAgICAgZm9yIChpID0gY3VycmVudFJlY3Q7
IGkgPiBmaXJzdFJlY3RXaXRoQ3VycmVudExpbmVOdW1iZXIgJiYgc2VsZWN0aW9uUmVjdC5sb2dp
Y2FsTGVmdCgpIDwgcmVjdHNbaSAtIDFdLmxvZ2ljYWxMZWZ0KCk7IC0taSkKLSAgICAgICAgICAg
IHJlY3RzW2ldID0gcmVjdHNbaSAtIDFdOwotICAgICAgICByZWN0c1tpXSA9IHNlbGVjdGlvblJl
Y3Q7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaiA9IDE7IGogPCBudW1iZXJPZlJlY3RzOyAr
K2opIHsKLSAgICAgICAgaWYgKHJlY3RzW2pdLmxpbmVOdW1iZXIoKSAhPSByZWN0c1tqIC0gMV0u
bGluZU51bWJlcigpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNlbGVjdGlvblJl
Y3QmIHByZXZpb3VzUmVjdCA9IHJlY3RzW2ogLSAxXTsKLSAgICAgICAgYm9vbCBwcmV2aW91c1Jl
Y3RNYXlOb3RSZWFjaFJpZ2h0RWRnZSA9IChwcmV2aW91c1JlY3QuZGlyZWN0aW9uKCkgPT0gVGV4
dERpcmVjdGlvbjo6TFRSICYmIHByZXZpb3VzUmVjdC5jb250YWluc0VuZCgpKSB8fCAocHJldmlv
dXNSZWN0LmRpcmVjdGlvbigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBwcmV2aW91c1JlY3Qu
Y29udGFpbnNTdGFydCgpKTsKLSAgICAgICAgaWYgKHByZXZpb3VzUmVjdE1heU5vdFJlYWNoUmln
aHRFZGdlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGludCBhZGp1c3RlZFdpZHRo
ID0gcmVjdHNbal0ubG9naWNhbExlZnQoKSAtIHByZXZpb3VzUmVjdC5sb2dpY2FsTGVmdCgpOwot
ICAgICAgICBpZiAoYWRqdXN0ZWRXaWR0aCA+IHByZXZpb3VzUmVjdC5sb2dpY2FsV2lkdGgoKSkK
LSAgICAgICAgICAgIHByZXZpb3VzUmVjdC5zZXRMb2dpY2FsV2lkdGgoYWRqdXN0ZWRXaWR0aCk7
Ci0gICAgfQotCi0gICAgaW50IG1heExpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwotCi0gICAgLy8g
RXh0ZW5kIHJlY3RzIG91dCB0byBlZGdlcyBhcyBuZWVkZWQuCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1iZXJPZlJlY3RzOyArK2kpIHsKLSAgICAgICAgU2VsZWN0aW9uUmVjdCYgc2Vs
ZWN0aW9uUmVjdCA9IHJlY3RzW2ldOwotICAgICAgICBpZiAoIXNlbGVjdGlvblJlY3QuaXNMaW5l
QnJlYWsoKSAmJiBzZWxlY3Rpb25SZWN0LmxpbmVOdW1iZXIoKSA+PSBtYXhMaW5lTnVtYmVyKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25SZWN0LmRpcmVjdGlv
bigpID09IFRleHREaXJlY3Rpb246OlJUTCAmJiBzZWxlY3Rpb25SZWN0LmlzRmlyc3RPbkxpbmUo
KSkgewotICAgICAgICAgICAgc2VsZWN0aW9uUmVjdC5zZXRMb2dpY2FsV2lkdGgoc2VsZWN0aW9u
UmVjdC5sb2dpY2FsV2lkdGgoKSArIHNlbGVjdGlvblJlY3QubG9naWNhbExlZnQoKSAtIHNlbGVj
dGlvblJlY3QubWluWCgpKTsKLSAgICAgICAgICAgIHNlbGVjdGlvblJlY3Quc2V0TG9naWNhbExl
ZnQoc2VsZWN0aW9uUmVjdC5taW5YKCkpOwotICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvblJl
Y3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6TFRSICYmIHNlbGVjdGlvblJlY3QuaXNM
YXN0T25MaW5lKCkpCi0gICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldExvZ2ljYWxXaWR0aChz
ZWxlY3Rpb25SZWN0Lm1heFgoKSAtIHNlbGVjdGlvblJlY3QubG9naWNhbExlZnQoKSk7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiBtYXhMaW5lTnVtYmVyOwotfQotCi12b2lkIFJhbmdlOjpjb2xs
ZWN0U2VsZWN0aW9uUmVjdHMoVmVjdG9yPFNlbGVjdGlvblJlY3Q+JiByZWN0cykgY29uc3QKLXsK
LSAgICBpbnQgbWF4TGluZU51bWJlciA9IGNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlv
bkludGVyaW9yTGluZXMocmVjdHMpOwotICAgIGNvbnN0IHNpemVfdCBudW1iZXJPZlJlY3RzID0g
cmVjdHMuc2l6ZSgpOwotICAgIAotICAgIC8vIFVuaW9uIGFsbCB0aGUgcmVjdGFuZ2xlcyBvbiBp
bnRlcmlvciBsaW5lcyAoaS5lLiBub3QgZmlyc3Qgb3IgbGFzdCkuCi0gICAgLy8gT24gZmlyc3Qg
YW5kIGxhc3QgbGluZXMsIGp1c3QgYXZvaWQgaGF2aW5nIG92ZXJsYXBzIGJ5IG1lcmdpbmcgaW50
ZXJzZWN0aW5nIHJlY3RhbmdsZXMuCi0gICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHVuaW9uZWRS
ZWN0czsKLSAgICBJbnRSZWN0IGludGVyaW9yVW5pb25SZWN0OwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtYmVyT2ZSZWN0czsgKytpKSB7Ci0gICAgICAgIFNlbGVjdGlvblJlY3QmIGN1
cnJlbnRSZWN0ID0gcmVjdHNbaV07Ci0gICAgICAgIGlmIChjdXJyZW50UmVjdC5saW5lTnVtYmVy
KCkgPT0gMSkgewotICAgICAgICAgICAgQVNTRVJUKGludGVyaW9yVW5pb25SZWN0LmlzRW1wdHko
KSk7Ci0gICAgICAgICAgICBpZiAoIXVuaW9uZWRSZWN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAg
ICAgICAgICBTZWxlY3Rpb25SZWN0JiBwcmV2aW91c1JlY3QgPSB1bmlvbmVkUmVjdHMubGFzdCgp
OwotICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1JlY3QucmVjdCgpLmludGVyc2VjdHMoY3Vy
cmVudFJlY3QucmVjdCgpKSkgewotICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1JlY3QgPSBj
b2FsZXNjZVNlbGVjdGlvblJlY3RzKGN1cnJlbnRSZWN0LCBwcmV2aW91c1JlY3QpOwotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvLyBDb3VsZG4ndCBtZXJnZSB3aXRoIHByZXZpb3VzIHJlY3QsIHNvIGp1
c3QgYXBwZW5kaW5nLgotICAgICAgICAgICAgdW5pb25lZFJlY3RzLmFwcGVuZChjdXJyZW50UmVj
dCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFJlY3QubGluZU51bWJlcigpIDwgbWF4TGlu
ZU51bWJlcikgewotICAgICAgICAgICAgaWYgKGludGVyaW9yVW5pb25SZWN0LmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgICAgIC8vIFN0YXJ0IGNvbGxlY3RpbmcgaW50ZXJpb3IgcmVjdHMuCi0g
ICAgICAgICAgICAgICAgaW50ZXJpb3JVbmlvblJlY3QgPSBjdXJyZW50UmVjdC5yZWN0KCk7ICAg
ICAgICAgCi0gICAgICAgICAgICB9IGVsc2UgaWYgKGludGVyaW9yVW5pb25SZWN0LmludGVyc2Vj
dHMoY3VycmVudFJlY3QucmVjdCgpKQotICAgICAgICAgICAgICAgIHx8IGludGVyaW9yVW5pb25S
ZWN0Lm1heFgoKSA9PSBjdXJyZW50UmVjdC5yZWN0KCkueCgpCi0gICAgICAgICAgICAgICAgfHwg
aW50ZXJpb3JVbmlvblJlY3QubWF4WSgpID09IGN1cnJlbnRSZWN0LnJlY3QoKS55KCkKLSAgICAg
ICAgICAgICAgICB8fCBpbnRlcmlvclVuaW9uUmVjdC54KCkgPT0gY3VycmVudFJlY3QucmVjdCgp
Lm1heFgoKQotICAgICAgICAgICAgICAgIHx8IGludGVyaW9yVW5pb25SZWN0LnkoKSA9PSBjdXJy
ZW50UmVjdC5yZWN0KCkubWF4WSgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gT25seSB1bmlvbiB0
aGUgbGluZXMgdGhhdCBhcmUgYXR0YWNoZWQuCi0gICAgICAgICAgICAgICAgLy8gRm9yIGlCb29r
cywgdGhlIGludGVyaW9yIGxpbmVzIG1heSBjcm9zcyBtdWx0aXBsZSBob3Jpem9udGFsIHBhZ2Vz
LgotICAgICAgICAgICAgICAgIGludGVyaW9yVW5pb25SZWN0LnVuaXRlKGN1cnJlbnRSZWN0LnJl
Y3QoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHVuaW9uZWRSZWN0
cy5hcHBlbmQoU2VsZWN0aW9uUmVjdChpbnRlcmlvclVuaW9uUmVjdCwgY3VycmVudFJlY3QuaXNI
b3Jpem9udGFsKCksIGN1cnJlbnRSZWN0LnBhZ2VOdW1iZXIoKSkpOwotICAgICAgICAgICAgICAg
IGludGVyaW9yVW5pb25SZWN0ID0gY3VycmVudFJlY3QucmVjdCgpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gUHJvY2Vzc2luZyBsYXN0IGxpbmUuCi0g
ICAgICAgICAgICBpZiAoIWludGVyaW9yVW5pb25SZWN0LmlzRW1wdHkoKSkgewotICAgICAgICAg
ICAgICAgIHVuaW9uZWRSZWN0cy5hcHBlbmQoU2VsZWN0aW9uUmVjdChpbnRlcmlvclVuaW9uUmVj
dCwgY3VycmVudFJlY3QuaXNIb3Jpem9udGFsKCksIGN1cnJlbnRSZWN0LnBhZ2VOdW1iZXIoKSkp
OwotICAgICAgICAgICAgICAgIGludGVyaW9yVW5pb25SZWN0ID0gSW50UmVjdCgpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQoIXVuaW9uZWRSZWN0cy5pc0VtcHR5KCkpOwot
ICAgICAgICAgICAgU2VsZWN0aW9uUmVjdCYgcHJldmlvdXNSZWN0ID0gdW5pb25lZFJlY3RzLmxh
c3QoKTsKLSAgICAgICAgICAgIGlmIChwcmV2aW91c1JlY3QubG9naWNhbFRvcCgpID09IGN1cnJl
bnRSZWN0LmxvZ2ljYWxUb3AoKSAmJiBwcmV2aW91c1JlY3QucmVjdCgpLmludGVyc2VjdHMoY3Vy
cmVudFJlY3QucmVjdCgpKSkgewotICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzUmVjdCBpcyBh
bHNvIG9uIHRoZSBsYXN0IGxpbmUsIGFuZCBpbnRlcnNlY3RzIHRoZSBjdXJyZW50IG9uZS4KLSAg
ICAgICAgICAgICAgICBwcmV2aW91c1JlY3QgPSBjb2FsZXNjZVNlbGVjdGlvblJlY3RzKGN1cnJl
bnRSZWN0LCBwcmV2aW91c1JlY3QpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgLy8gQ291bGRuJ3QgbWVyZ2Ugd2l0aCBwcmV2aW91cyByZWN0
LCBzbyBqdXN0IGFwcGVuZGluZy4KLSAgICAgICAgICAgIHVuaW9uZWRSZWN0cy5hcHBlbmQoY3Vy
cmVudFJlY3QpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmVjdHMuc3dhcCh1bmlvbmVkUmVj
dHMpOwotfQotI2VuZGlmCi0KICNpZiBFTkFCTEUoVFJFRV9ERUJVR0dJTkcpCiB2b2lkIFJhbmdl
Ojpmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3QK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oIGIvU291cmNlL1dlYkNv
cmUvZG9tL1JhbmdlLmgKaW5kZXggM2JlY2ZkZDBlMjI0NjU4NGMwNGQ3NTk0ZDgwMzY1MjBjZTM5
OGM0Ni4uZmFiOGY4MmJhZmY4YjM1OWM4MjAxYjYyMWMwMWZmOTYwOTIyMzEyNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1Jh
bmdlLmgKQEAgLTk3LDkgKzk3LDYgQEAgcHVibGljOgogICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9u
KCkgY29uc3QgeyByZXR1cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9CiAKICAgICBXRUJDT1JFX0VY
UE9SVCBOb2RlKiBmaXJzdE5vZGUoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBOb2RlKiBw
YXN0TGFzdE5vZGUoKSBjb25zdDsKLQotICAgIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QoKSBjb25z
dDsKIAogICAgIGVudW0gY2xhc3MgQm91bmRpbmdSZWN0QmVoYXZpb3IgOiB1aW50OF90IHsKICAg
ICAgICAgUmVzcGVjdENsaXBwaW5nID0gMSA8PCAwLApAQCAtMTE0LDEwICsxMTEsNiBAQCBwdWJs
aWM6CiAKICAgICAvLyBUcmFuc2Zvcm0tZnJpZW5kbHkKICAgICBXRUJDT1JFX0VYUE9SVCBGbG9h
dFJlY3QgYWJzb2x1dGVCb3VuZGluZ1JlY3QoT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9y
PiA9IHsgfSkgY29uc3Q7Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBXRUJDT1JFX0VY
UE9SVCB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0cyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mKSBj
b25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCBpbnQgY29sbGVjdFNlbGVjdGlvblJlY3RzV2l0aG91
dFVuaW9uSW50ZXJpb3JMaW5lcyhWZWN0b3I8U2VsZWN0aW9uUmVjdD4mKSBjb25zdDsKLSNlbmRp
ZgogCiAgICAgdm9pZCBub2RlQ2hpbGRyZW5DaGFuZ2VkKENvbnRhaW5lck5vZGUmKTsKICAgICB2
b2lkIG5vZGVDaGlsZHJlbldpbGxCZVJlbW92ZWQoQ29udGFpbmVyTm9kZSYpOwpAQCAtMTYwLDYg
KzE1Myw4IEBAIHByaXZhdGU6CiAKICAgICBWZWN0b3I8RmxvYXRSZWN0PiBhYnNvbHV0ZVJlY3Rz
Rm9yUmFuZ2VJblRleHQoTm9kZSosIFJlbmRlclRleHQmLCBib29sIHVzZVNlbGVjdGlvbkhlaWdo
dCwgYm9vbCYgaXNGaXhlZCwgT3B0aW9uU2V0PEJvdW5kaW5nUmVjdEJlaGF2aW9yPikgY29uc3Q7
CiAKKyAgICBOb2RlKiBwYXN0TGFzdE5vZGUoKSBjb25zdDsKKwogICAgIFJlZjxEb2N1bWVudD4g
bV9vd25lckRvY3VtZW50OwogICAgIFJhbmdlQm91bmRhcnlQb2ludCBtX3N0YXJ0OwogICAgIFJh
bmdlQm91bmRhcnlQb2ludCBtX2VuZDsKQEAgLTE2OSw3ICsxNjQsNyBAQCBXRUJDT1JFX0VYUE9S
VCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIFdFQkNP
UkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7
CiAKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSYW5n
ZSYpOwotU2ltcGxlUmFuZ2UgbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFJlZjxSYW5nZT4mKTsKK1dF
QkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VTaW1wbGVSYW5nZShjb25zdCBSZWY8UmFuZ2U+
Jik7CiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdl
KGNvbnN0IFJhbmdlKik7CiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFr
ZVNpbXBsZVJhbmdlKGNvbnN0IFJlZlB0cjxSYW5nZT4mKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5jcHAKaW5kZXggNmNhNTlmYjA2ZWEwOWViNTlkMDVlNTVhMWQyZDg2OWQwMTcyZjc2NC4u
NTMwYzcwNTJlMDM4MGNlZDA0NjMwNjA5NmYxZjk4ZGZmZTczZDhlZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
U2ltcGxlUmFuZ2UuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDaGFyYWN0ZXJE
YXRhLmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgotI2luY2x1ZGUgIlJhbmdlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsMTIgKzQzLDYgQEAgU2ltcGxlUmFuZ2U6OlNp
bXBsZVJhbmdlKEJvdW5kYXJ5UG9pbnQmJiBzdGFydCwgQm91bmRhcnlQb2ludCYmIGVuZCkKIHsK
IH0KIAotU2ltcGxlUmFuZ2U6OlNpbXBsZVJhbmdlKGNvbnN0IFJhbmdlJiBvdGhlcikKLSAgICA6
IHN0YXJ0KG90aGVyLnN0YXJ0Q29udGFpbmVyKCksIG90aGVyLnN0YXJ0T2Zmc2V0KCkpCi0gICAg
LCBlbmQob3RoZXIuZW5kQ29udGFpbmVyKCksIG90aGVyLmVuZE9mZnNldCgpKQotewotfQotCiBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU2ltcGxlUmFuZ2UmIGEsIGNvbnN0IFNpbXBsZVJhbmdlJiBi
KQogewogICAgIHJldHVybiBhLnN0YXJ0ID09IGIuc3RhcnQgJiYgYS5lbmQgPT0gYi5lbmQ7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9TaW1wbGVSYW5nZS5oCmluZGV4IDYyODM3MDk2YjYxODc0M2FjZDY3OWE0ZGY2ODE3
YzNmZGRlZDU0OTEuLmY5NTMwMTM3MDJlMWRjNjUyNjViYTcxMjRhZWU0MDM3YjFhNjczZDkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotY2xhc3MgUmFuZ2U7Ci0KIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAgICAgQm91
bmRhcnlQb2ludCBzdGFydDsKICAgICBCb3VuZGFyeVBvaW50IGVuZDsKQEAgLTQ0LDExICs0Miw2
IEBAIHN0cnVjdCBTaW1wbGVSYW5nZSB7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5n
ZShjb25zdCBCb3VuZGFyeVBvaW50JiwgY29uc3QgQm91bmRhcnlQb2ludCYpOwogICAgIFdFQkNP
UkVfRVhQT1JUIFNpbXBsZVJhbmdlKEJvdW5kYXJ5UG9pbnQmJiwgQm91bmRhcnlQb2ludCYmKTsK
LQotICAgIC8vIENvbnZlbmllbmNlIG92ZXJsb2FkcyB0byBoZWxwIHdpdGggdHJhbnNpdGlvbiBm
cm9tIHVzaW5nIGEgbG90IG9mIGxpdmUgcmFuZ2VzLgotICAgIC8vIEZJWE1FOiBPbmNlIHRyYW5z
aXRpb24gaXMgb3ZlciwgcmVtb3ZlIGFuZCBjaGFuZ2UgY2FsbGVycyB0byB1c2UgbWFrZVNpbXBs
ZVJhbmdlIGluc3RlYWQuCi0gICAgV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UoY29uc3QgUmFu
Z2UmKTsKLSAgICBTaW1wbGVSYW5nZShjb25zdCBSZWY8UmFuZ2U+Jik7CiB9OwogCiBTaW1wbGVS
YW5nZSBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIoQm91bmRhcnlQb2ludCYmLCBCb3VuZGFyeVBvaW50
JiYpOwpAQCAtMTIyLDExICsxMTUsNiBAQCBpbmxpbmUgSW50ZXJzZWN0aW5nTm9kZVJhbmdlIGlu
dGVyc2VjdGluZ05vZGVzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKICAgICByZXR1cm4geyBy
YW5nZSB9OwogfQogCi1pbmxpbmUgU2ltcGxlUmFuZ2U6OlNpbXBsZVJhbmdlKGNvbnN0IFJlZjxS
YW5nZT4mIHJhbmdlKQotICAgIDogU2ltcGxlUmFuZ2UocmFuZ2UuZ2V0KCkpCi17Ci19Ci0KIGlu
bGluZSBTaW1wbGVSYW5nZSBtYWtlU2ltcGxlUmFuZ2VIZWxwZXIoQm91bmRhcnlQb2ludCYmIHN0
YXJ0LCBCb3VuZGFyeVBvaW50JiYgZW5kKQogewogICAgIHJldHVybiB7IFdURk1vdmUoc3RhcnQp
LCBXVEZNb3ZlKGVuZCkgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVy
bmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDkzM2IwOTUzZWU3YmI1Y2UyZThmNDc4NTNl
MzI1ZmVhNmYzZTdkMGQuLjI1YWFjY2ZjZjQwY2FmYThlNzNiOTJiOTJmYzRhODhmNTkyYTgyOWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250
cm9sbGVyLmNwcApAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlcjo6dGltZXJGaXJlZCgpCiAgICAgY2FzZSBBbHRlcm5hdGl2ZVRleHRUeXBlU3BlbGxpbmdT
dWdnZXN0aW9uczogewogICAgICAgICBpZiAoIW1fcmFuZ2VXaXRoQWx0ZXJuYXRpdmUgfHwgcGxh
aW5UZXh0KCptX3JhbmdlV2l0aEFsdGVybmF0aXZlKSAhPSBtX29yaWdpbmFsVGV4dCkKICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBTdHJpbmcgcGFyYWdyYXBoVGV4dCA9IHBsYWluVGV4dChU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKCptX3JhbmdlV2l0aEFsdGVybmF0
aXZlKSkucGFyYWdyYXBoUmFuZ2UoKSk7CisgICAgICAgIFN0cmluZyBwYXJhZ3JhcGhUZXh0ID0g
cGxhaW5UZXh0KFRleHRDaGVja2luZ1BhcmFncmFwaCgqbV9yYW5nZVdpdGhBbHRlcm5hdGl2ZSku
cGFyYWdyYXBoUmFuZ2UoKSk7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IHN1Z2dlc3Rpb25zOwog
ICAgICAgICB0ZXh0Q2hlY2tlcigpLT5nZXRHdWVzc2VzRm9yV29yZChtX29yaWdpbmFsVGV4dCwg
cGFyYWdyYXBoVGV4dCwgbV9kb2N1bWVudC5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSwgc3VnZ2Vz
dGlvbnMpOwogICAgICAgICBpZiAoc3VnZ2VzdGlvbnMuaXNFbXB0eSgpKSB7CkBAIC01MjMsNyAr
NTIzLDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJB
dEVuZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAgICBpZiAoIXNob3VsZFN0YXJ0VGlt
ZXJGb3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBub2RlID0gZW5kT2ZXb3JkUG9zaXRp
b24uY29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8gd29yZFJhbmdlID0gcmFuZ2UoKm5vZGUsIG1h
cmtlcik7CisgICAgYXV0byB3b3JkUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKm5vZGUsIG1hcmtl
cik7CiAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZSk7CiAgICAg
aWYgKCFjdXJyZW50V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTkx
LDcgKzU5MSw3IEBAIHZvaWQgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6YXBwbHlBbHRlcm5h
dGl2ZVRleHRUb1JhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByCiAgICAgYXV0byBjb3JyZWN0aW9u
T2Zmc2V0SW5QYXJhZ3JhcGggPSBjaGFyYWN0ZXJDb3VudCh7ICpwYXJhZ3JhcGhTdGFydCwgcmFu
Z2Uuc3RhcnQgfSk7CiAgICAgYXV0byBwYXJhZ3JhcGhPZmZzZXRJblRyZWVTY29wZSA9IGNoYXJh
Y3RlckNvdW50KHsgdHJlZVNjb3BlU3RhcnQsICpwYXJhZ3JhcGhTdGFydCB9KTsKIAotICAgIFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBh
bHRlcm5hdGl2ZSktPmFwcGx5KCk7CisgICAgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3Jl
YXRlKHJhbmdlLCBhbHRlcm5hdGl2ZSktPmFwcGx5KCk7CiAKICAgICAvLyBSZWNhbGN1bGF0ZSBw
cmFncmFwaFJhbmdlQ29udGFpbmluZ0NvcnJlY3Rpb24sIHNpbmNlIFNwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQgbW9kaWZpZWQgdGhlIERPTSwgc3VjaCB0aGF0IHRoZSBvcmlnaW5hbCBwYXJhZ3Jh
cGhSYW5nZUNvbnRhaW5pbmdDb3JyZWN0aW9uIGlzIG5vIGxvbmdlciB2YWxpZC4gUmFkYXI6IDEw
MzA1MzE1IEJ1Z3ppbGxhOiA4OTUyNgogICAgIGF1dG8gdXBkYXRlZFBhcmFncmFwaFN0YXJ0Q29u
dGFpbmluZ0NvcnJlY3Rpb24gPSByZXNvbHZlQ2hhcmFjdGVyTG9jYXRpb24obWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKHRyZWVTY29wZVJvb3QpLCBwYXJhZ3JhcGhPZmZzZXRJblRyZWVT
Y29wZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKaW5kZXggZWZmYWY0
OTc5ZDJjNDRmNTJkZjU5MTYwMTk2YjcyMzE0NmI0MDVlYi4uYjdkNzJlNWM0ZTY1ZTYxOTU4Yjll
MWZlNGY5MjZlMjZiY2FmMzYwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0aW5nU3R5bGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxl
LmNwcApAQCAtMTUxNCw3ICsxNTE0LDcgQEAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gRWRpdGluZ1N0
eWxlOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAgICAv
LyBhbmQgZmluZCB0aGUgYmFja2dyb3VuZCBjb2xvciBvZiB0aGUgY29tbW9uIGFuY2VzdG9yLgog
ICAgIGlmIChzaG91bGRVc2VCYWNrZ3JvdW5kQ29sb3JJbkVmZmVjdCAmJiAoc2VsZWN0aW9uLmlz
UmFuZ2UoKSB8fCBoYXNUcmFuc3BhcmVudEJhY2tncm91bmRDb2xvcihzdHlsZS0+bV9tdXRhYmxl
U3R5bGUuZ2V0KCkpKSkgewogICAgICAgICBpZiAoYXV0byByYW5nZSA9IHNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IGJhY2tncm91
bmRDb2xvckluRWZmZWN0KGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb21tb25BbmNlc3RvckNv
bnRhaW5lcigpKSkKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gYmFja2dyb3VuZENvbG9y
SW5FZmZlY3QoY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IoKnJhbmdlKS5nZXQoKSkpCiAgICAgICAg
ICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yLCB2
YWx1ZS0+Y3NzVGV4dCgpKTsKICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcAppbmRleCBjNGE3YmM5MjY2YjgzMzhkN2QwMTcxY2I5ZjI4ZTMyMzBjZGViYjI5Li44NTky
N2M5NGE0ZDgxZWI3YjRjODA0NmM2N2MzZDczOWUwYTA0NmFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9F
ZGl0b3IuY3BwCkBAIC0xNDMxLDcgKzE0MzEsNyBAQCB2b2lkIEVkaXRvcjo6cGVyZm9ybUN1dE9y
Q29weShFZGl0b3JBY3Rpb25TcGVjaWZpZXIgYWN0aW9uKQogICAgICAgICAgICAgd3JpdGVTZWxl
Y3Rpb25Ub1Bhc3RlYm9hcmQoKlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpKTsK
ICNlbHNlCiAgICAgICAgICAgICAvLyBGSVhNRTogRGVsZXRlIGFmdGVyIDxodHRwOi8vd2Via2l0
Lm9yZy9iLzE3NzYxOD4gbGFuZHMuCi0gICAgICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JD
b3B5QW5kUGFzdGUoKS0+d3JpdGVTZWxlY3Rpb24oY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24p
LmdldCgpLCBjYW5TbWFydENvcHlPckRlbGV0ZSgpLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBJbmNs
dWRlSW1hZ2VBbHRUZXh0Rm9yRGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgIFBhc3RlYm9hcmQ6
OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9uLCBjYW5T
bWFydENvcHlPckRlbGV0ZSgpLCAqbV9kb2N1bWVudC5mcmFtZSgpLCBJbmNsdWRlSW1hZ2VBbHRU
ZXh0Rm9yRGF0YVRyYW5zZmVyKTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfQpAQCAtMjY3Nyw3
ICsyNjc3LDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFy
SW5SYW5nZXMoT3B0aW9uU2V0PFRleHRDaGVja2luZ1R5cGUKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byYgcmFuZ2VUb0NoZWNrID0gc2hvdWxkTWFya0dyYW1tYXIgPyAqZ3JhbW1hclJhbmdl
IDogKnNwZWxsaW5nUmFuZ2U7Ci0gICAgVGV4dENoZWNraW5nUGFyYWdyYXBoIHBhcmFncmFwaFRv
Q2hlY2soY3JlYXRlTGl2ZVJhbmdlKHJhbmdlVG9DaGVjaykpOworICAgIFRleHRDaGVja2luZ1Bh
cmFncmFwaCBwYXJhZ3JhcGhUb0NoZWNrKHJhbmdlVG9DaGVjayk7CiAgICAgaWYgKHBhcmFncmFw
aFRvQ2hlY2suaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTI3MjMsNyArMjcyMyw3
IEBAIHN0YXRpYyBib29sIGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50VHlwZShUZXh0Q2hlY2tp
bmdUeXBlIHR5cGUpCiAKIHZvaWQgRWRpdG9yOjpyZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5n
KGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudCkKIHsKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUoY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlVG9SZXBsYWNlKSwgcmVwbGFjZW1lbnQpLT5hcHBseSgpOworICAgIFNwZWxs
aW5nQ29ycmVjdGlvbkNvbW1hbmQ6OmNyZWF0ZShyYW5nZVRvUmVwbGFjZSwgcmVwbGFjZW1lbnQp
LT5hcHBseSgpOwogfQogCiBzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZp
bmdUZXh0Q2hlY2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYWdyYXBoJiBwYXJhZ3JhcGgs
IGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvUmVwbGFjZSwgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudCwgQ2hhcmFjdGVyUmFuZ2UgcmVzdWx0Q2hhcmFjdGVyUmFuZ2UpCkBAIC0yNzMxLDcgKzI3
MzEsNyBAQCBzdGF0aWMgdm9pZCBjb3JyZWN0U3BlbGxjaGVja2luZ1ByZXNlcnZpbmdUZXh0Q2hl
Y2tpbmdQYXJhZ3JhcGgoVGV4dENoZWNraW5nUGFyYQogICAgIGF1dG8gc2NvcGVOb2RlID0gbWFr
ZVJlZihkb3duY2FzdDxDb250YWluZXJOb2RlPihwYXJhZ3JhcGgucGFyYWdyYXBoUmFuZ2UoKS5z
dGFydENvbnRhaW5lcigpLnJvb3ROb2RlKCkpKTsKICAgICBhdXRvIHBhcmFncmFwaENoYXJhY3Rl
clJhbmdlID0gY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVu
dHMoc2NvcGVOb2RlKSwgcGFyYWdyYXBoLnBhcmFncmFwaFJhbmdlKCkpOwogCi0gICAgU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZVRvUmVwbGFj
ZSksIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
OjpjcmVhdGUocmFuZ2VUb1JlcGxhY2UsIHJlcGxhY2VtZW50KS0+YXBwbHkoKTsKIAogICAgIC8v
IFRleHRDaGVja2luZ1BhcmFncmFwaCBtYXkgYmUgb3JwaGFuZWQgYWZ0ZXIgU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29tbWFuZCBtdXRhdGVkIERPTS4KICAgICAvLyBTZWUgPHJkYXI6Ly8xMDMwNTMxNT4s
IGh0dHA6Ly93ZWJraXQub3JnL2IvODk1MjYuCkBAIC0yOTIxLDcgKzI5MjEsNyBAQCB2b2lkIEVk
aXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZykKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIG1fYWx0ZXJuYXRpdmVUZXh0Q29udHJv
bGxlci0+cmVjb3JkQXV0b2NvcnJlY3Rpb25SZXNwb25zZShBdXRvY29ycmVjdGlvblJlc3BvbnNl
OjpSZXZlcnRlZCwgcmVwbGFjZWRTdHJpbmcsICpzZWxlY3Rpb24pOwotICAgIFRleHRDaGVja2lu
Z1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb24pKTsKKyAgICBU
ZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKCpzZWxlY3Rpb24pOwogICAgIHJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dChyZXBsYWNlZFN0cmluZywgU2VsZWN0UmVwbGFjZW1lbnQ6Ok5vLCBT
bWFydFJlcGxhY2U6Ok5vLCBFZGl0QWN0aW9uOjpJbnNlcnQpOwogICAgIGF1dG8gY2hhbmdlZFJh
bmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKENoYXJhY3RlclJhbmdlKHBhcmFncmFwaC5jaGVja2lu
Z1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKSk7CiAgICAgYWRkTWFya2VyKGNoYW5n
ZWRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CkBAIC0zNTc3
LDcgKzM1NzcsNyBAQCB1bnNpZ25lZCBFZGl0b3I6OmNvdW50TWF0Y2hlc0ZvclRleHQoY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZQogCiAgICAgICAgICsrbWF0Y2hD
b3VudDsKICAgICAgICAgaWYgKG1hdGNoZXMpCi0gICAgICAgICAgICBtYXRjaGVzLT5hcHBlbmQo
Y3JlYXRlTGl2ZVJhbmdlKHJlc3VsdFJhbmdlKSk7CisgICAgICAgICAgICBtYXRjaGVzLT5hcHBl
bmQocmVzdWx0UmFuZ2UpOwogCiAgICAgICAgIGlmIChtYXJrTWF0Y2hlcykKICAgICAgICAgICAg
IGFkZE1hcmtlcihyZXN1bHRSYW5nZSwgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydExpc3RDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlzdENvbW1hbmQuY3BwCmluZGV4IDJlN2M4ZDZi
NjUwM2JkZjJlNDA0M2Y0MjUxNzFhOTM5Zjc0OGUzM2IuLjRiYTU1ZDJkNjYyMzEyNTZiYmJhZGM5
NWJlMDQ1MWIxN2FiODQyNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0TGlzdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGlz
dENvbW1hbmQuY3BwCkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6
ZG9BcHBseSgpCiAgICAgICAgICAgICBpZiAoc3RhcnRPZkxhc3RQYXJhZ3JhcGguaXNOb3ROdWxs
KCkgJiYgc3RhcnRPZlBhcmFncmFwaChzdGFydE9mU2VsZWN0aW9uLCBDYW5Ta2lwT3ZlckVkaXRp
bmdCb3VuZGFyeSkgIT0gc3RhcnRPZkxhc3RQYXJhZ3JhcGgpIHsKICAgICAgICAgICAgICAgICBi
b29sIGZvcmNlQ3JlYXRlTGlzdCA9ICFzZWxlY3Rpb25IYXNMaXN0T2ZUeXBlKHNlbGVjdGlvbiwg
bGlzdFRhZyk7CiAKLSAgICAgICAgICAgICAgICBhdXRvIGN1cnJlbnRTZWxlY3Rpb24gPSBjcmVh
dGVMaXZlUmFuZ2UoZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5nZSgpKTsKKyAgICAgICAgICAg
ICAgICBhdXRvIGN1cnJlbnRTZWxlY3Rpb24gPSAqZW5kaW5nU2VsZWN0aW9uKCkuZmlyc3RSYW5n
ZSgpOwogICAgICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBzdGFydE9mQ3VycmVudFBhcmFn
cmFwaCA9IHN0YXJ0T2ZTZWxlY3Rpb247CiAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YXJ0T2ZD
dXJyZW50UGFyYWdyYXBoLmlzTm90TnVsbCgpICYmICFpblNhbWVQYXJhZ3JhcGgoc3RhcnRPZkN1
cnJlbnRQYXJhZ3JhcGgsIHN0YXJ0T2ZMYXN0UGFyYWdyYXBoLCBDYW5Dcm9zc0VkaXRpbmdCb3Vu
ZGFyeSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gZG9BcHBseSgpIG1heSBvcGVyYXRlIG9u
IGFuZCByZW1vdmUgdGhlIGxhc3QgcGFyYWdyYXBoIG9mIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUg
ZG9jdW1lbnQKQEAgLTE2Miw3ICsxNjIsNyBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0Fw
cGx5KCkKICAgICAgICAgICAgICAgICAgICAgLy8gQnV0IG5vdCB1c2luZyBpbmRleCBpcyBoYXJk
IGJlY2F1c2UgdGhlcmUgYXJlIHNvIG1hbnkgd2F5cyB3ZSBjYW4gbG9zZSBzZWxlY3Rpb24gaW5z
aWRlIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGguCiAgICAgICAgICAgICAgICAgICAgIFJlZlB0
cjxDb250YWluZXJOb2RlPiBzY29wZTsKICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4Rm9y
RW5kT2ZTZWxlY3Rpb24gPSBpbmRleEZvclZpc2libGVQb3NpdGlvbihlbmRPZlNlbGVjdGlvbiwg
c2NvcGUpOwotICAgICAgICAgICAgICAgICAgICBkb0FwcGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGZv
cmNlQ3JlYXRlTGlzdCwgbGlzdFRhZywgY3VycmVudFNlbGVjdGlvbi5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBs
aXN0VGFnLCBjdXJyZW50U2VsZWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE9m
U2VsZWN0aW9uLmlzTnVsbCgpIHx8IGVuZE9mU2VsZWN0aW9uLmlzT3JwaGFuKCkgfHwgc3RhcnRP
Zkxhc3RQYXJhZ3JhcGguaXNOdWxsKCkgfHwgc3RhcnRPZkxhc3RQYXJhZ3JhcGguaXNPcnBoYW4o
KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZW5kT2ZTZWxlY3Rpb24gPSB2aXNpYmxlUG9z
aXRpb25Gb3JJbmRleChpbmRleEZvckVuZE9mU2VsZWN0aW9uLCBzY29wZS5nZXQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBJZiBlbmRPZlNlbGVjdGlvbiBpcyBudWxsLCB0aGVuIHNv
bWUgY29udGVudHMgaGF2ZSBiZWVuIGRlbGV0ZWQgZnJvbSB0aGUgZG9jdW1lbnQuCkBAIC0xODMs
NyArMTgzLDcgQEAgdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0T2ZDdXJyZW50UGFyYWdyYXBoID0gc3RhcnRPZk5leHRQYXJhZ3JhcGgo
ZW5kaW5nU2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24oZW5kT2ZTZWxlY3Rpb24pOwotICAgICAg
ICAgICAgICAgIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoZm9yY2VDcmVhdGVMaXN0LCBsaXN0
VGFnLCBjdXJyZW50U2VsZWN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgICAgICBkb0FwcGx5Rm9y
U2luZ2xlUGFyYWdyYXBoKGZvcmNlQ3JlYXRlTGlzdCwgbGlzdFRhZywgY3VycmVudFNlbGVjdGlv
bik7CiAgICAgICAgICAgICAgICAgLy8gRmV0Y2ggdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLCBm
b3IgdGhlIHJlYXNvbiBtZW50aW9uZWQgYWJvdmUuCiAgICAgICAgICAgICAgICAgZW5kT2ZTZWxl
Y3Rpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS52aXNpYmxlRW5kKCk7CiAgICAgICAgICAgICAgICAg
c2V0RW5kaW5nU2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbGVjdGlvbiwgZW5k
T2ZTZWxlY3Rpb24sIGVuZGluZ1NlbGVjdGlvbigpLmlzRGlyZWN0aW9uYWwoKSkpOwpAQCAtMTky
LDcgKzE5Miw4IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHkoKQogICAgICAgICB9
CiAgICAgfQogCi0gICAgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywg
Y3JlYXRlTGl2ZVJhbmdlKGVuZGluZ1NlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkuZ2V0KCkpOwor
ICAgIGF1dG8gcmFuZ2UgPSBlbmRpbmdTZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CisgICAgZG9B
cHBseUZvclNpbmdsZVBhcmFncmFwaChmYWxzZSwgbGlzdFRhZywgKnJhbmdlKTsKIH0KIAogRWRp
dEFjdGlvbiBJbnNlcnRMaXN0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigpIGNvbnN0CkBAIC0yMDAs
NyArMjAxLDcgQEAgRWRpdEFjdGlvbiBJbnNlcnRMaXN0Q29tbWFuZDo6ZWRpdGluZ0FjdGlvbigp
IGNvbnN0CiAgICAgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpPcmRlcmVkTGlzdCA/IEVkaXRBY3Rp
b246Okluc2VydE9yZGVyZWRMaXN0IDogRWRpdEFjdGlvbjo6SW5zZXJ0VW5vcmRlcmVkTGlzdDsK
IH0KIAotdm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChi
b29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUmIGxpc3RUYWcsIFJh
bmdlKiBjdXJyZW50U2VsZWN0aW9uKQordm9pZCBJbnNlcnRMaXN0Q29tbWFuZDo6ZG9BcHBseUZv
clNpbmdsZVBhcmFncmFwaChib29sIGZvcmNlQ3JlYXRlTGlzdCwgY29uc3QgSFRNTFF1YWxpZmll
ZE5hbWUmIGxpc3RUYWcsIFNpbXBsZVJhbmdlJiBjdXJyZW50U2VsZWN0aW9uKQogewogICAgIC8v
IEZJWE1FOiBUaGlzIHdpbGwgcHJvZHVjZSB1bmV4cGVjdGVkIHJlc3VsdHMgZm9yIGEgc2VsZWN0
aW9uIHRoYXQgc3RhcnRzIGp1c3QgYmVmb3JlIGEKICAgICAvLyB0YWJsZSBhbmQgZW5kcyBpbnNp
ZGUgdGhlIGZpcnN0IGNlbGwsIHNlbGVjdGlvbkZvclBhcmFncmFwaEl0ZXJhdGlvbiBzaG91bGQg
cHJvYmFibHkKQEAgLTIyOSw5ICsyMzAsOSBAQCB2b2lkIEluc2VydExpc3RDb21tYW5kOjpkb0Fw
cGx5Rm9yU2luZ2xlUGFyYWdyYXBoKGJvb2wgZm9yY2VDcmVhdGVMaXN0LCBjb25zdCBIVAogICAg
ICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIElmIHRoZSBlbnRpcmUgbGlzdCBpcyBzZWxl
Y3RlZCwgdGhlbiBjb252ZXJ0IHRoZSB3aG9sZSBsaXN0LgotICAgICAgICBpZiAoc3dpdGNoTGlz
dFR5cGUgJiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqbGlzdE5vZGUsICpjdXJyZW50
U2VsZWN0aW9uKSkgewotICAgICAgICAgICAgYm9vbCByYW5nZVN0YXJ0SXNJbkxpc3QgPSB2aXNp
YmxlUG9zaXRpb25CZWZvcmVOb2RlKCpsaXN0Tm9kZSkgPT0gY3VycmVudFNlbGVjdGlvbi0+c3Rh
cnRQb3NpdGlvbigpOwotICAgICAgICAgICAgYm9vbCByYW5nZUVuZElzSW5MaXN0ID0gdmlzaWJs
ZVBvc2l0aW9uQWZ0ZXJOb2RlKCpsaXN0Tm9kZSkgPT0gY3VycmVudFNlbGVjdGlvbi0+ZW5kUG9z
aXRpb24oKTsKKyAgICAgICAgaWYgKHN3aXRjaExpc3RUeXBlICYmIGlzTm9kZVZpc2libHlDb250
YWluZWRXaXRoaW4oKmxpc3ROb2RlLCBjdXJyZW50U2VsZWN0aW9uKSkgeworICAgICAgICAgICAg
Ym9vbCByYW5nZVN0YXJ0SXNJbkxpc3QgPSB2aXNpYmxlUG9zaXRpb25CZWZvcmVOb2RlKCpsaXN0
Tm9kZSkgPT0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJlbnRTZWxlY3Rpb24uc3Rh
cnQpOworICAgICAgICAgICAgYm9vbCByYW5nZUVuZElzSW5MaXN0ID0gdmlzaWJsZVBvc2l0aW9u
QWZ0ZXJOb2RlKCpsaXN0Tm9kZSkgPT0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGN1cnJl
bnRTZWxlY3Rpb24uZW5kKTsKIAogICAgICAgICAgICAgUmVmUHRyPEhUTUxFbGVtZW50PiBuZXdM
aXN0ID0gY3JlYXRlSFRNTEVsZW1lbnQoZG9jdW1lbnQoKSwgbGlzdFRhZyk7CiAgICAgICAgICAg
ICBpbnNlcnROb2RlQmVmb3JlKCpuZXdMaXN0LCAqbGlzdE5vZGUpOwpAQCAtMjU0LDkgKzI1NSw5
IEBAIHZvaWQgSW5zZXJ0TGlzdENvbW1hbmQ6OmRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9v
bCBmb3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUCiAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBz
dGFydCBhbmQgdGhlIGVuZCBvZiBjdXJyZW50IHNlbGVjdGlvbiBpZiB0aGV5IHN0YXJ0ZWQgaW5z
aWRlIGxpc3ROb2RlCiAgICAgICAgICAgICAvLyBiZWNhdXNlIG1vdmVQYXJhZ3JhcGhXaXRoQ2xv
bmVzIGNvdWxkIGhhdmUgcmVtb3ZlZCB0aGVtLgogICAgICAgICAgICAgaWYgKHJhbmdlU3RhcnRJ
c0luTGlzdCAmJiBuZXdMaXN0KQotICAgICAgICAgICAgICAgIGN1cnJlbnRTZWxlY3Rpb24tPnNl
dFN0YXJ0KCpuZXdMaXN0LCAwKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLnN0
YXJ0ID0gbWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKm5ld0xpc3QpOwogICAg
ICAgICAgICAgaWYgKHJhbmdlRW5kSXNJbkxpc3QgJiYgbmV3TGlzdCkKLSAgICAgICAgICAgICAg
ICBjdXJyZW50U2VsZWN0aW9uLT5zZXRFbmQoKm5ld0xpc3QsIG5ld0xpc3QtPmxlbmd0aCgpKTsK
KyAgICAgICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uLmVuZCA9IG1ha2VCb3VuZGFyeVBvaW50
QWZ0ZXJOb2RlQ29udGVudHMoKm5ld0xpc3QpOwogCiAgICAgICAgICAgICBzZXRFbmRpbmdTZWxl
Y3Rpb24oVmlzaWJsZVBvc2l0aW9uKGZpcnN0UG9zaXRpb25Jbk5vZGUobmV3TGlzdC5nZXQoKSkp
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFu
ZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNlcnRMaXN0Q29tbWFuZC5oCmluZGV4IGFi
ODJhMjc5NzNkNDE3MzMwYTc5ZTJkYzE4M2I3NzVkMjRkZmY4ZWQuLjQxOTlmNjk5MjZiOWIzZTAw
YjMyODI0N2I5NDc0NTc1MWUxOGJjNjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvSW5zZXJ0TGlzdENvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dExpc3RDb21tYW5kLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MRWxlbWVu
dCogZml4T3JwaGFuZWRMaXN0Q2hpbGQoTm9kZSYpOwogICAgIGJvb2wgc2VsZWN0aW9uSGFzTGlz
dE9mVHlwZShjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKICAgICBSZWY8SFRNTEVsZW1lbnQ+IG1lcmdlV2l0aE5laWdoYm9yaW5nTGlzdHMo
SFRNTEVsZW1lbnQmKTsKLSAgICB2b2lkIGRvQXBwbHlGb3JTaW5nbGVQYXJhZ3JhcGgoYm9vbCBm
b3JjZUNyZWF0ZUxpc3QsIGNvbnN0IEhUTUxRdWFsaWZpZWROYW1lJiwgUmFuZ2UqIGN1cnJlbnRT
ZWxlY3Rpb24pOworICAgIHZvaWQgZG9BcHBseUZvclNpbmdsZVBhcmFncmFwaChib29sIGZvcmNl
Q3JlYXRlTGlzdCwgY29uc3QgSFRNTFF1YWxpZmllZE5hbWUmLCBTaW1wbGVSYW5nZSYgY3VycmVu
dFNlbGVjdGlvbik7CiAgICAgdm9pZCB1bmxpc3RpZnlQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBv
c2l0aW9uJiBvcmlnaW5hbFN0YXJ0LCBIVE1MRWxlbWVudCogbGlzdE5vZGUsIE5vZGUqIGxpc3RD
aGlsZE5vZGUpOwogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbGlzdGlmeVBhcmFncmFwaChjb25z
dCBWaXNpYmxlUG9zaXRpb24mIG9yaWdpbmFsU3RhcnQsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGxp
c3RUYWcpOwogICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gbV9saXN0RWxlbWVudDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmNwcAppbmRleCA1MDYwOGFiOTYxMTJjYzgwYjRhZDhj
NzE5OTg2MmVjNTJiMDFkOGQxLi4xNDg5M2YxZjQ5ZGE0ZWQ5NjRlMGFjMzZjZmY0NjFiZWVmMTRj
MTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbENoZWNrZXIuY3BwCkBAIC0xNDMsOCAr
MTQzLDE0IEBAIGJvb2wgU3BlbGxDaGVja2VyOjpjYW5DaGVja0FzeW5jaHJvbm91c2x5KGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIAogYm9vbCBTcGVsbENoZWNrZXI6OmlzQ2hlY2th
YmxlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkgY29uc3QKIHsKLSAgICBhdXRvIGZpcnN0Tm9k
ZSA9IGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmZpcnN0Tm9kZSgpOwotICAgIGlmICghZmlyc3RO
b2RlIHx8ICFmaXJzdE5vZGUtPnJlbmRlcmVyKCkpCisgICAgYm9vbCBmb3VuZFJlbmRlcmVyID0g
ZmFsc2U7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5nTm9kZXMocmFuZ2UpKSB7
CisgICAgICAgIGlmIChub2RlLnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgIGZvdW5kUmVuZGVy
ZXIgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg
KCFmb3VuZFJlbmRlcmVyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgYXV0byYgbm9kZSA9
IHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5nZXQoKTsKICAgICByZXR1cm4gIWlzPEVsZW1lbnQ+KG5v
ZGUpIHx8IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLmlzU3BlbGxDaGVja2luZ0VuYWJsZWQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCAy
NTQ2MDIzZjY0MDU3ZjgzZDkyMTY5YTU4YWU0NTFhMzYzMzA4NWVkLi42Y2U2YWI3OGQ2YjA4ZWUy
Nzc1YTQ4MDE2N2E5YWI2ZWU5YTc4M2ViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
ZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC00NTUsNyArNDU1LDcgQEAgYXV0byBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRVbmdyYW1tYXRpY2FsUGhyYXNlcyhPcGVyYXRpb24gb3BlcmF0aW9uKSBj
b25zdCAtPgogICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRp
cmUgcGFyYWdyYXBocywgc2luY2UgZ3JhbW1hciBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29u
dGV4dC4KICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3Rh
cnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCBy
YW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhp
cyBhcmVhLgotICAgIFRleHRDaGVja2luZ1BhcmFncmFwaCBwYXJhZ3JhcGgoY3JlYXRlTGl2ZVJh
bmdlKG1fcmFuZ2UpKTsKKyAgICBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGggcGFyYWdyYXBoKG1fcmFu
Z2UpOwogICAgIAogICAgIC8vIFN0YXJ0IGNoZWNraW5nIGZyb20gYmVnaW5uaW5nIG9mIHBhcmFn
cmFwaCwgYnV0IHNraXAgcGFzdCByZXN1bHRzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZSBzdGFydCBv
ZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlLgogICAgIGZvciAodWludDY0X3Qgc3RhcnRPZmZz
ZXQgPSAwOyBzdGFydE9mZnNldCA8IHBhcmFncmFwaC5jaGVja2luZ0VuZCgpOyApIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IGZjOTc1Nzc0ODMxMWNkMTJm
YmRkNzJlMWIyNGZlNGJiMGYwNzA5YWMuLmUxNmU1MmVhOWZiYWQ3MTE4YmY4MGEyZWQzMmNjOTcz
MDIyOGZhNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApAQCAt
NzM1LDcgKzczNSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2hvdWxkQWRkCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChzaG91bGRBZGRUb0tpbGxSaW5nKQotICAgICAgICBkb2N1bWVudCgpLmVkaXRv
cigpLmFkZFJhbmdlVG9LaWxsUmluZyhjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblRvRGVsZXRl
LnRvTm9ybWFsaXplZFJhbmdlKCkpLCBFZGl0b3I6OktpbGxSaW5nSW5zZXJ0aW9uTW9kZTo6UHJl
cGVuZFRleHQpOworICAgICAgICBkb2N1bWVudCgpLmVkaXRvcigpLmFkZFJhbmdlVG9LaWxsUmlu
Zygqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxpemVkUmFuZ2UoKSwgRWRpdG9yOjpLaWxsUmlu
Z0luc2VydGlvbk1vZGU6OlByZXBlbmRUZXh0KTsKIAogICAgIC8vIFBvc3QgdGhlIGFjY2Vzc2li
aWxpdHkgbm90aWZpY2F0aW9uIGJlZm9yZSBhY3R1YWxseSBkZWxldGluZyB0aGUgY29udGVudCB3
aGlsZSBzZWxlY3Rpb25Ub0RlbGV0ZSBpcyBzdGlsbCB2YWxpZAogICAgIHBvc3RUZXh0U3RhdGVD
aGFuZ2VOb3RpZmljYXRpb25Gb3JEZWxldGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSk7CkBAIC04NDYs
NyArODQ2LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChU
ZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICAgICBwb3N0VGV4dFN0YXRlQ2hh
bmdlTm90aWZpY2F0aW9uRm9yRGVsZXRpb24oc2VsZWN0aW9uVG9EZWxldGUpOwogCiAgICAgaWYg
KHNob3VsZEFkZFRvS2lsbFJpbmcpCi0gICAgICAgIGRvY3VtZW50KCkuZWRpdG9yKCkuYWRkUmFu
Z2VUb0tpbGxSaW5nKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uVG9EZWxldGUudG9Ob3JtYWxp
emVkUmFuZ2UoKSksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25Nb2RlOjpBcHBlbmRUZXh0KTsK
KyAgICAgICAgZG9jdW1lbnQoKS5lZGl0b3IoKS5hZGRSYW5nZVRvS2lsbFJpbmcoKnNlbGVjdGlv
blRvRGVsZXRlLnRvTm9ybWFsaXplZFJhbmdlKCksIEVkaXRvcjo6S2lsbFJpbmdJbnNlcnRpb25N
b2RlOjpBcHBlbmRUZXh0KTsKICAgICAvLyBtYWtlIHVuZG8gc2VsZWN0IHdoYXQgd2FzIGRlbGV0
ZWQKICAgICBzZXRTdGFydGluZ1NlbGVjdGlvbihzZWxlY3Rpb25BZnRlclVuZG8pOwogICAgIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjpkZWxldGVTZWxlY3Rpb24oc2VsZWN0aW9uVG9EZWxldGUsIG1f
c21hcnREZWxldGUsIC8qIG1lcmdlQmxvY2tzQWZ0ZXJEZWxldGUqLyB0cnVlLCAvKiByZXBsYWNl
Ki8gZmFsc2UsIGV4cGFuZEZvclNwZWNpYWxFbGVtZW50cywgLypzYW5pdGl6ZU1hcmt1cCovIHRy
dWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IDE3OGQyNzRm
ZjUwNDBhNzExOWIyMjUwMDUzMGRlMGZkNzAxODVjOTkuLjcyMTBkM2Y5YzBhZTFlNWE3MWIzZjIw
Y2M4ZjExMGFjMzg1YzYwMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KQEAgLTM1MSw5ICszNTEsNyBAQCB2b2lkIEVkaXRvcjo6c2V0VGV4dEFzQ2hpbGRPZkVsZW1l
bnQoY29uc3QgU3RyaW5nJiB0ZXh0LCBFbGVtZW50JiBlbGVtZW50KQogICAgICAgICBpZiAocGFy
ZW50KQogICAgICAgICAgICAgZWxlbWVudC5yZW1vdmUoKTsKIAotICAgICAgICBhdXRvIGNvbnRl
eHQgPSBkb2N1bWVudCgpLmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIGNvbnRleHQtPnNlbGVjdE5v
ZGVDb250ZW50cyhlbGVtZW50KTsKLSAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChjcmVhdGVG
cmFnbWVudEZyb21UZXh0KGNvbnRleHQsIHRleHQpKTsKKyAgICAgICAgZWxlbWVudC5hcHBlbmRD
aGlsZChjcmVhdGVGcmFnbWVudEZyb21UZXh0KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50
cyhlbGVtZW50KSwgdGV4dCkpOwogCiAgICAgICAgIC8vIHJlc3RvcmUgZWxlbWVudCB0byBkb2N1
bWVudAogICAgICAgICBpZiAocGFyZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hcmt1cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hcmt1cC5jcHAKaW5k
ZXggZWMyZDliNDc4YWZjMmI5NjI1NDM3MjVlNmIxOGE4Yjk1YzM4ZjkxNC4uZTVlNmZjOWQzNTc0
YTgwYTcyMzI2NDdiMGRiNGViMDhjMDA2ODkzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9tYXJrdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFya3VwLmNw
cApAQCAtMTE1NywxNCArMTE1NywxMyBAQCBSZWY8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJh
Z21lbnRGcm9tVGV4dChjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dCwgY29uc3QgUwogICAgIH0K
IAogICAgIC8vIEJyZWFrIHN0cmluZyBpbnRvIHBhcmFncmFwaHMuIEV4dHJhIGxpbmUgYnJlYWtz
IHR1cm4gaW50byBlbXB0eSBwYXJhZ3JhcGhzLgotICAgIE5vZGUqIGJsb2NrTm9kZSA9IGVuY2xv
c2luZ0Jsb2NrKGNyZWF0ZUxpdmVSYW5nZShjb250ZXh0KS0+Zmlyc3ROb2RlKCkpOwotICAgIEVs
ZW1lbnQqIGJsb2NrID0gZG93bmNhc3Q8RWxlbWVudD4oYmxvY2tOb2RlKTsKLSAgICBib29sIHVz
ZUNsb25lc09mRW5jbG9zaW5nQmxvY2sgPSBibG9ja05vZGUKLSAgICAgICAgJiYgYmxvY2tOb2Rl
LT5pc0VsZW1lbnROb2RlKCkKKyAgICBhdXRvIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKGNvbnRleHQuc3RhcnQpOworICAgIGF1dG8gYmxvY2sgPSBlbmNsb3NpbmdCbG9jayhz
dGFydC5maXJzdE5vZGUoKS5nZXQoKSk7CisgICAgYm9vbCB1c2VDbG9uZXNPZkVuY2xvc2luZ0Js
b2NrID0gYmxvY2sKICAgICAgICAgJiYgIWJsb2NrLT5oYXNUYWdOYW1lKGJvZHlUYWcpCiAgICAg
ICAgICYmICFibG9jay0+aGFzVGFnTmFtZShodG1sVGFnKQotICAgICAgICAmJiBibG9jayAhPSBl
ZGl0YWJsZVJvb3RGb3JQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29udGV4
dC5zdGFydCkpOwotICAgIGJvb2wgdXNlTGluZUJyZWFrID0gZW5jbG9zaW5nVGV4dEZvcm1Db250
cm9sKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb250ZXh0LnN0YXJ0KSk7CisgICAgICAg
ICYmIGJsb2NrICE9IGVkaXRhYmxlUm9vdEZvclBvc2l0aW9uKHN0YXJ0KTsKKyAgICBib29sIHVz
ZUxpbmVCcmVhayA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCk7CiAKICAgICBWZWN0
b3I8U3RyaW5nPiBsaXN0ID0gc3RyaW5nLnNwbGl0QWxsb3dpbmdFbXB0eUVudHJpZXMoJ1xuJyk7
CiAgICAgc2l6ZV90IG51bUxpbmVzID0gbGlzdC5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy93aW4vRWRpdG9yV2luLmNwcAppbmRleCBkZmYxMmMzYjhiZGNiODlhMjU2MmE5YTc2MzQ4NWFk
ZDE2MGNhOTliLi4zYjQwNTJkNDllNTU0MDBhYTMwYmJlN2VhNzE4M2M3YTQ2YjhjN2M0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dpbi9FZGl0b3JXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvd2luL0VkaXRvcldpbi5jcHAKQEAgLTQzLDcgKzQzLDcgQEAg
dm9pZCBFZGl0b3I6OnBhc3RlV2l0aFBhc3RlYm9hcmQoUGFzdGVib2FyZCogcGFzdGVib2FyZCwg
T3B0aW9uU2V0PFBhc3RlT3B0aW9uPgogICAgICAgICByZXR1cm47CiAKICAgICBib29sIGNob3Nl
UGxhaW5UZXh0OwotICAgIGF1dG8gZnJhZ21lbnQgPSBwYXN0ZWJvYXJkLT5kb2N1bWVudEZyYWdt
ZW50KCptX2RvY3VtZW50LmZyYW1lKCksIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBvcHRpb25z
LmNvbnRhaW5zKFBhc3RlT3B0aW9uOjpBbGxvd1BsYWluVGV4dCksIGNob3NlUGxhaW5UZXh0KTsK
KyAgICBhdXRvIGZyYWdtZW50ID0gcGFzdGVib2FyZC0+ZG9jdW1lbnRGcmFnbWVudCgqbV9kb2N1
bWVudC5mcmFtZSgpLCAqcmFuZ2UsIG9wdGlvbnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFsbG93
UGxhaW5UZXh0KSwgY2hvc2VQbGFpblRleHQpOwogCiAgICAgaWYgKGZyYWdtZW50ICYmIG9wdGlv
bnMuY29udGFpbnMoUGFzdGVPcHRpb246OkFzUXVvdGF0aW9uKSkKICAgICAgICAgcXVvdGVGcmFn
bWVudEZvclBhc3RpbmcoKmZyYWdtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRE9NU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNw
cAppbmRleCAzYjE2MjNhOWIwZWEwODk3MThkNDgyZWM2ZjY4MTk2MTI1YjUxYTc4Li4zZWY2NmU1
OTlhOWFmNmFlZGZhZGRhMTA1NWQxYjE3N2MwZTQyYTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01T
ZWxlY3Rpb24uY3BwCkBAIC0zMzcsNyArMzM3LDcgQEAgdm9pZCBET01TZWxlY3Rpb246OmFkZFJh
bmdlKFJhbmdlJiByYW5nZSkKIAogICAgIGF1dG8mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rp
b24oKTsKICAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpKSB7Ci0gICAgICAgIHNlbGVjdGlvbi5z
ZXRTZWxlY3Rpb24oU2ltcGxlUmFuZ2UgeyByYW5nZSB9KTsKKyAgICAgICAgc2VsZWN0aW9uLnNl
dFNlbGVjdGlvbihtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIApAQCAtMzU2LDcgKzM1Niw3IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjphZGRSYW5nZShSYW5n
ZSYgcmFuZ2UpCiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhyYW5nZS5zdGFydFBv
c2l0aW9uKCksIG5vcm1hbGl6ZWRSYW5nZS0+ZW5kUG9zaXRpb24oKSwgRE9XTlNUUkVBTSk7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFRoZSBuZXcgcmFuZ2UgY29u
dGFpbnMgdGhlIG9yaWdpbmFsIHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlvbi5zZXRT
ZWxlY3Rpb24oU2ltcGxlUmFuZ2UgeyByYW5nZSB9KTsKKyAgICAgICAgICAgICAgICBzZWxlY3Rp
b24uc2V0U2VsZWN0aW9uKG1ha2VTaW1wbGVSYW5nZShyYW5nZSkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfSBlbHNlIHsKQEAgLTM2Niw3ICszNjYsNyBAQCB2b2lkIERPTVNlbGVj
dGlvbjo6YWRkUmFuZ2UoUmFuZ2UmIHJhbmdlKQogICAgICAgICAgICAgcmVzdWx0ID0gcmFuZ2Uu
Y29tcGFyZUJvdW5kYXJ5UG9pbnRzKFJhbmdlOjpFTkRfVE9fRU5ELCAqbm9ybWFsaXplZFJhbmdl
KTsKICAgICAgICAgICAgIGlmICghcmVzdWx0Lmhhc0V4Y2VwdGlvbigpICYmIHJlc3VsdC5yZWxl
YXNlUmV0dXJuVmFsdWUoKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBvcmlnaW5h
bCByYW5nZSBjb250YWlucyB0aGUgbmV3IHJhbmdlLgotICAgICAgICAgICAgICAgIHNlbGVjdGlv
bi5zZXRTZWxlY3Rpb24oU2ltcGxlUmFuZ2UgeyAqbm9ybWFsaXplZFJhbmdlIH0pOworICAgICAg
ICAgICAgICAgIHNlbGVjdGlvbi5zZXRTZWxlY3Rpb24obWFrZVNpbXBsZVJhbmdlKCpub3JtYWxp
emVkUmFuZ2UpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gVGhl
IHJhbmdlcyBpbnRlcnNlY3QuCiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uLm1vdmVUbyhub3Jt
YWxpemVkUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgcmFuZ2UuZW5kUG9zaXRpb24oKSwgRE9XTlNU
UkVBTSk7CkBAIC0zODEsMTIgKzM4MSw4IEBAIHZvaWQgRE9NU2VsZWN0aW9uOjpkZWxldGVGcm9t
RG9jdW1lbnQoKQogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8m
IHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKTsKLSAgICBpZiAoc2VsZWN0aW9uLmlzTm9u
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIHNlbGVjdGVkUmFuZ2UgPSBzZWxlY3Rp
b24uc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBpZiAoIXNlbGVjdGVkUmFu
Z2UgfHwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+c2hhZG93Um9vdCgpKQorICAg
IGF1dG8gc2VsZWN0ZWRSYW5nZSA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOworICAgIGlmICghc2VsZWN0ZWRSYW5nZSB8fCBzZWxlY3RlZFJhbmdl
LT5zdGFydC5jb250YWluZXItPmNvbnRhaW5pbmdTaGFkb3dSb290KCkpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKCpmcmFtZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RHJhZ0NvbnRyb2xsZXIuY3BwCmluZGV4IDY1YjUzODAwY2VhYTNkODVlNzU2YmFiYmRlMDY0OTQ5
N2IwNzliODYuLjIwZWIzYjZiMmIxN2YxYTZlNzI1ZGE3MGU1MTIyYWViNWU5NWMxZjUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0xNDIsMTEgKzE0MiwxMCBAQCBE
cmFnQ29udHJvbGxlcjo6RHJhZ0NvbnRyb2xsZXIoUGFnZSYgcGFnZSwgc3RkOjp1bmlxdWVfcHRy
PERyYWdDbGllbnQ+JiYgY2xpZW50KQogCiBEcmFnQ29udHJvbGxlcjo6fkRyYWdDb250cm9sbGVy
KCkgPSBkZWZhdWx0OwogCi1zdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50
RnJhZ21lbnRGcm9tRHJhZ0RhdGEoY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBGcmFtZSYgZnJh
bWUsIFJhbmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWlu
VGV4dCkKK3N0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdW1lbnRGcmFnbWVudEZy
b21EcmFnRGF0YShjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEsIEZyYW1lJiBmcmFtZSwgY29uc3Qg
U2ltcGxlUmFuZ2UmIGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRleHQsIGJvb2wmIGNob3NlUGxh
aW5UZXh0KQogewogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFsc2U7CiAKLSAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBjb250ZXh0Lm93bmVyRG9jdW1lbnQoKTsKICAgICBpZiAoZHJhZ0RhdGEuY29u
dGFpbnNDb21wYXRpYmxlQ29udGVudCgpKSB7CiAgICAgICAgIGlmIChhdXRvIGZyYWdtZW50ID0g
ZnJhbWUuZWRpdG9yKCkud2ViQ29udGVudEZyb21QYXN0ZWJvYXJkKCpQYXN0ZWJvYXJkOjpjcmVh
dGVGb3JEcmFnQW5kRHJvcChkcmFnRGF0YSksIGNvbnRleHQsIGFsbG93UGxhaW5UZXh0LCBjaG9z
ZVBsYWluVGV4dCkpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CkBAIC0xNTUsMTAgKzE1
NCwxMSBAQCBzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRvY3VtZW50RnJhZ21lbnRG
cm9tRHJhZ0RhdGEoY29uc3QgRHJhZ0RhdGEmIGRyYQogICAgICAgICAgICAgU3RyaW5nIHRpdGxl
OwogICAgICAgICAgICAgU3RyaW5nIHVybCA9IGRyYWdEYXRhLmFzVVJMKERyYWdEYXRhOjpEb05v
dENvbnZlcnRGaWxlbmFtZXMsICZ0aXRsZSk7CiAgICAgICAgICAgICBpZiAoIXVybC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGNvbnRleHQuc3RhcnQuY29u
dGFpbmVyLT5kb2N1bWVudCgpOwogICAgICAgICAgICAgICAgIGF1dG8gYW5jaG9yID0gSFRNTEFu
Y2hvckVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgYW5jaG9yLT5z
ZXRIcmVmKHVybCk7CiAgICAgICAgICAgICAgICAgaWYgKHRpdGxlLmlzRW1wdHkoKSkgewotICAg
ICAgICAgICAgICAgICAgICAvLyBUcnkgdGhlIHBsYWluIHRleHQgZmlyc3QgYmVjYXVzZSB0aGUg
dXJsIG1pZ2h0IGJlIG5vcm1hbGl6ZWQgb3IgZXNjYXBlZC4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gVHJ5IHRoZSBwbGFpbiB0ZXh0IGZpcnN0IGJlY2F1c2UgdGhlIFVSTCBtaWdodCBiZSBub3Jt
YWxpemVkIG9yIGVzY2FwZWQuCiAgICAgICAgICAgICAgICAgICAgIGlmIChkcmFnRGF0YS5jb250
YWluc1BsYWluVGV4dCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgPSBkcmFnRGF0
YS5hc1BsYWluVGV4dCgpOwogICAgICAgICAgICAgICAgICAgICBpZiAodGl0bGUuaXNFbXB0eSgp
KQpAQCAtNjAzLDEzICs2MDMsMTMgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6Y29uY2x1ZGVFZGl0
RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAgICAgYm9vbCBpc01vdmUgPSBkcmFnSXNN
b3ZlKGlubmVyRnJhbWUtPnNlbGVjdGlvbigpLCBkcmFnRGF0YSk7CiAgICAgaWYgKGlzTW92ZSB8
fCBkcmFnQ2FyZXQuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkgewogICAgICAgICBib29sIGNo
b3NlUGxhaW5UZXh0ID0gZmFsc2U7Ci0gICAgICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBm
cmFnbWVudCA9IGRvY3VtZW50RnJhZ21lbnRGcm9tRHJhZ0RhdGEoZHJhZ0RhdGEsICppbm5lckZy
YW1lLCBjcmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOworICAg
ICAgICBhdXRvIGZyYWdtZW50ID0gZG9jdW1lbnRGcmFnbWVudEZyb21EcmFnRGF0YShkcmFnRGF0
YSwgKmlubmVyRnJhbWUsICpyYW5nZSwgdHJ1ZSwgY2hvc2VQbGFpblRleHQpOwogICAgICAgICBp
ZiAoIWZyYWdtZW50IHx8ICFlZGl0b3Iuc2hvdWxkSW5zZXJ0RnJhZ21lbnQoKmZyYWdtZW50LCBy
YW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpEcm9wcGVkKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgICAgICBjbGllbnQoKS53aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bihEcmFnRGVzdGluYXRpb25BY3Rpb246OkVkaXQsIGRyYWdEYXRhKTsKIAotICAgICAgICBpZiAo
ZWRpdG9yLmNsaWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKCpm
cmFnbWVudCwgY3JlYXRlTGl2ZVJhbmdlKCpyYW5nZSksIGlzTW92ZSkpCisgICAgICAgIGlmIChl
ZGl0b3IuY2xpZW50KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoKmZy
YWdtZW50LCAqcmFuZ2UsIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAg
ICAgICBpZiAoaXNNb3ZlKSB7CkBAIC02MzUsNyArNjM1LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6Y29uY2x1ZGVFZGl0RHJhZyhjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEpCiAKICAgICAgICAg
Y2xpZW50KCkud2lsbFBlcmZvcm1EcmFnRGVzdGluYXRpb25BY3Rpb24oRHJhZ0Rlc3RpbmF0aW9u
QWN0aW9uOjpFZGl0LCBkcmFnRGF0YSk7CiAgICAgICAgIGF1dG8gZnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21UZXh0KCpyYW5nZSwgdGV4dCk7Ci0gICAgICAgIGlmIChlZGl0b3IuY2xpZW50
KCkgJiYgZWRpdG9yLmNsaWVudCgpLT5wZXJmb3JtVHdvU3RlcERyb3AoZnJhZ21lbnQuZ2V0KCks
IGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLCBpc01vdmUpKQorICAgICAgICBpZiAoZWRpdG9yLmNs
aWVudCgpICYmIGVkaXRvci5jbGllbnQoKS0+cGVyZm9ybVR3b1N0ZXBEcm9wKGZyYWdtZW50Lmdl
dCgpLCAqcmFuZ2UsIGlzTW92ZSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgICAg
ICBpZiAoc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoaW5uZXJGcmFtZS5nZXQoKSwgZHJhZ0NhcmV0
LCBwb2ludCkpCkBAIC0xMDQxLDcgKzEwNDEsNyBAQCBib29sIERyYWdDb250cm9sbGVyOjpzdGFy
dERyYWcoRnJhbWUmIHNyYywgY29uc3QgRHJhZ1N0YXRlJiBzdGF0ZSwgT3B0aW9uU2V0PERyYQog
ICAgICAgICAgICAgICAgICAgICBzcmMuZWRpdG9yKCkud3JpdGVTZWxlY3Rpb25Ub1Bhc3RlYm9h
cmQoZGF0YVRyYW5zZmVyLnBhc3RlYm9hcmQoKSk7CiAjZWxzZQogICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogQ29udmVydCBXaW5kb3dzIHRvIG1hdGNoIHRoZSBvdGhlciBwbGF0Zm9ybXMg
YW5kIGRlbGV0ZSB0aGlzLgotICAgICAgICAgICAgICAgICAgICBkYXRhVHJhbnNmZXIucGFzdGVi
b2FyZCgpLndyaXRlU2VsZWN0aW9uKGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLCBz
cmMuZWRpdG9yKCkuY2FuU21hcnRDb3B5T3JEZWxldGUoKSwgc3JjLCBJbmNsdWRlSW1hZ2VBbHRU
ZXh0Rm9yRGF0YVRyYW5zZmVyKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0YVRyYW5zZmVyLnBh
c3RlYm9hcmQoKS53cml0ZVNlbGVjdGlvbigqc2VsZWN0aW9uUmFuZ2UsIHNyYy5lZGl0b3IoKS5j
YW5TbWFydENvcHlPckRlbGV0ZSgpLCBzcmMsIEluY2x1ZGVJbWFnZUFsdFRleHRGb3JEYXRhVHJh
bnNmZXIpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICNpZiBQTEFURk9STShD
T0NPQSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGljYXRvci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1RleHRJbmRpY2F0b3IuY3BwCmluZGV4IDllNjIxMDk2ZGEy
ZTJmN2JmNWFlNzBlOGEzZWRmYjRjNmQ4NTJhMGMuLjhlMGUwNzllYWQ0M2Q2Zjg0YmU0ZmFkY2I3
N2Q0M2YxZmM5YmEzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvVGV4dEluZGlj
YXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9UZXh0SW5kaWNhdG9yLmNwcApAQCAt
MTc3LDIwICsxNzcsNiBAQCBzdGF0aWMgYm9vbCB0YWtlU25hcHNob3RzKFRleHRJbmRpY2F0b3JE
YXRhJiBkYXRhLCBGcmFtZSYgZnJhbWUsIEludFJlY3Qgc25hcHNobwogICAgIHJldHVybiB0cnVl
OwogfQogCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLQotc3RhdGljIFZlY3RvcjxGbG9hdFJl
Y3Q+IHNlbGVjdGlvblJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKLXsKLSAgICBWZWN0
b3I8U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVjdHM7Ci0gICAgY3JlYXRlTGl2ZVJhbmdlKHJh
bmdlKS0+Y29sbGVjdFNlbGVjdGlvblJlY3RzKHNlbGVjdGlvblJlY3RzKTsKLSAgICBWZWN0b3I8
RmxvYXRSZWN0PiByZWN0czsKLSAgICBmb3IgKGF1dG8mIHNlbGVjdGlvblJlY3QgOiBzZWxlY3Rp
b25SZWN0cykKLSAgICAgICAgcmVjdHMuYXBwZW5kKHNlbGVjdGlvblJlY3QucmVjdCgpKTsKLSAg
ICByZXR1cm4gcmVjdHM7Ci19Ci0KLSNlbmRpZgotCiBzdGF0aWMgYm9vbCBzdHlsZUNvbnRhaW5z
Q29tcGxleEJhY2tncm91bmQoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewogICAgIHJldHVy
biBzdHlsZS5oYXNCbGVuZE1vZGUoKSB8fCBzdHlsZS5oYXNCYWNrZ3JvdW5kSW1hZ2UoKSB8fCBz
dHlsZS5oYXNCYWNrZHJvcEZpbHRlcigpOwpAQCAtMzE2LDggKzMwMiwxMSBAQCBzdGF0aWMgYm9v
bCBpbml0aWFsaXplSW5kaWNhdG9yKFRleHRJbmRpY2F0b3JEYXRhJiBkYXRhLCBGcmFtZSYgZnJh
bWUsIGNvbnN0IFNpbQogICAgIH0gZWxzZSBpZiAodXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxD
b250ZW50Rm9yQ29tcGxleFJhbmdlcyAmJiAodHJlYXRSYW5nZUFzQ29tcGxleER1ZVRvSWxsZWdp
YmxlVGV4dENvbG9ycyB8fCBoYXNOb25JbmxpbmVPclJlcGxhY2VkRWxlbWVudHMocmFuZ2UpKSkK
ICAgICAgICAgZGF0YS5vcHRpb25zLmFkZChUZXh0SW5kaWNhdG9yT3B0aW9uOjpQYWludEFsbENv
bnRlbnQpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZWxzZSBpZiAoZGF0YS5vcHRp
b25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlVzZVNlbGVjdGlvblJlY3RGb3JTaXpp
bmcpKQotICAgICAgICB0ZXh0UmVjdHMgPSBzZWxlY3Rpb25SZWN0cyhyYW5nZSk7CisgICAgZWxz
ZSBpZiAoZGF0YS5vcHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlVzZVNlbGVj
dGlvblJlY3RGb3JTaXppbmcpKSB7CisgICAgICAgIHRleHRSZWN0cyA9IFJlbmRlck9iamVjdDo6
Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJhbmdlKS5tYXAoWyZdKGNvbnN0IGF1dG8mIHJlY3QpIC0+
IEZsb2F0UmVjdCB7CisgICAgICAgICAgICByZXR1cm4gcmVjdC5yZWN0KCk7CisgICAgICAgIH0p
OworICAgIH0KICNlbmRpZgogICAgIGVsc2UgewogICAgICAgICBhdXRvIHRleHRSZWN0SGVpZ2h0
ID0gZGF0YS5vcHRpb25zLmNvbnRhaW5zKFRleHRJbmRpY2F0b3JPcHRpb246OlRpZ2h0bHlGaXRD
b250ZW50KSA/IEZyYW1lU2VsZWN0aW9uOjpUZXh0UmVjdGFuZ2xlSGVpZ2h0OjpUZXh0SGVpZ2h0
IDogRnJhbWVTZWxlY3Rpb246OlRleHRSZWN0YW5nbGVIZWlnaHQ6OlNlbGVjdGlvbkhlaWdodDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5kZXggZjY4Y2FjNDI4MWU2NTc3NzA0OWZj
OThkYjI4MmU5YjUzMjY0MTUxNC4uOWJiOGU5MmNhYWM1Y2Y1MzJiNzliOTBlZWFiM2NmMjE1NDBh
ZmY0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KQEAgLTc0OCw3ICs3NDgsNyBA
QCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3QoKSBjb25zdAog
ICAgICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJz
Rm9yKG5vZGUsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVz
KSkgewogICAgICAgICAgICAgYXV0byYgYWx0ZXJuYXRpdmVzID0gV1RGOjpnZXQ8VmVjdG9yPFN0
cmluZz4+KG1hcmtlci0+ZGF0YSgpKTsKIAotICAgICAgICAgICAgYXV0byByYW5nZUZvck1hcmtl
ciA9IHJhbmdlKG5vZGUsICptYXJrZXIpOworICAgICAgICAgICAgYXV0byByYW5nZUZvck1hcmtl
ciA9IG1ha2VTaW1wbGVSYW5nZShub2RlLCAqbWFya2VyKTsKIAogICAgICAgICAgICAgaWYgKGF1
dG8gcHJlY2VkaW5nVGV4dFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHByZWNlZGluZ1RleHRTdGFy
dFBvc2l0aW9uLCByYW5nZUZvck1hcmtlci5zdGFydCkpIHsKICAgICAgICAgICAgICAgICBTdHJp
bmcgcHJlY2VkaW5nVGV4dCA9IHBsYWluVGV4dCgqcHJlY2VkaW5nVGV4dFJhbmdlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IDQ2NjBjZjZjNTY5MzE1NGFiMzJlOTFk
MGY5NGMwY2U1ODY0NTA1MjEuLjY4ZjgzOTc4ZmM3Zjc3ZmE1YTE4ZTY0YjA4NTI5Yzc5YzI5ZmE1
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcApAQCAtMzEsMTAgKzMxLDkg
QEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJS
ZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyVmlldy5oIgorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAiVGV4dEluZGlj
YXRvci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTMsNyArMTUyLDcgQEAgc3RydWN0
IFNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUgewogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CiAKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJh
bmdlJiByYW5nZSwgYm9vbCBmb3JjZUJsYWNrVGV4dCkKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFn
SW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9v
bCBmb3JjZUJsYWNrVGV4dCkKIHsKICAgICBmcmFtZS5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQo
KTsKICAgICBSZW5kZXJWaWV3KiB2aWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCk7CkBAIC0x
NjEsMTIgKzE2MCwxMiBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJh
bWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFjawogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIAogICAgIC8vIFRvIHNuYXBzaG90IHRoZSByYW5nZSwgdGVtcG9yYXJpbHkgc2Vs
ZWN0IGl0IGFuZCB0YWtlIHNlbGVjdGlvbiBzbmFwc2hvdC4KLSAgICBQb3NpdGlvbiBzdGFydCA9
IHJhbmdlLnN0YXJ0UG9zaXRpb24oKTsKKyAgICBQb3NpdGlvbiBzdGFydCA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCk7CiAgICAgUG9zaXRpb24gY2FuZGlkYXRlID0g
c3RhcnQuZG93bnN0cmVhbSgpOwogICAgIGlmIChjYW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKSAm
JiBjYW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSkKICAgICAgICAgc3RhcnQg
PSBjYW5kaWRhdGU7CiAKLSAgICBQb3NpdGlvbiBlbmQgPSByYW5nZS5lbmRQb3NpdGlvbigpOwor
ICAgIFBvc2l0aW9uIGVuZCA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5lbmQp
OwogICAgIGNhbmRpZGF0ZSA9IGVuZC51cHN0cmVhbSgpOwogICAgIGlmIChjYW5kaWRhdGUuZGVw
cmVjYXRlZE5vZGUoKSAmJiBjYW5kaWRhdGUuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKSkK
ICAgICAgICAgZW5kID0gY2FuZGlkYXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vRHJhZ0ltYWdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaApp
bmRleCBkMDUwODc1ODJkZDFjNjBiNDRlNmRjMWEzMGUxZWJiZmVmNGQ0YTZkLi4yODNhNjc5MWQ3
MmI1OWY4NDdmMjE3MmVkYzNhNzgzZDhlMTZiNGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFn
SW1hZ2UuaApAQCAtNTYsNyArNTYsNiBAQCBjbGFzcyBGcmFtZTsKIGNsYXNzIEltYWdlOwogY2xh
c3MgSW50UmVjdDsKIGNsYXNzIE5vZGU7Ci1jbGFzcyBSYW5nZTsKIAogI2lmIFBMQVRGT1JNKElP
U19GQU1JTFkpCiB0eXBlZGVmIFJldGFpblB0cjxDR0ltYWdlUmVmPiBEcmFnSW1hZ2VSZWY7CkBA
IC04OSw3ICs4OCw3IEBAIERyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VJY29uRm9yQ2FjaGVk
SW1hZ2VGaWxlbmFtZShjb25zdCBTdHJpbmcmKTsKIAogV0VCQ09SRV9FWFBPUlQgRHJhZ0ltYWdl
UmVmIGNyZWF0ZURyYWdJbWFnZUZvck5vZGUoRnJhbWUmLCBOb2RlJik7CiBXRUJDT1JFX0VYUE9S
VCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yU2VsZWN0aW9uKEZyYW1lJiwgVGV4dElu
ZGljYXRvckRhdGEmLCBib29sIGZvcmNlQmxhY2tUZXh0ID0gZmFsc2UpOwotV0VCQ09SRV9FWFBP
UlQgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiwgUmFuZ2UmLCBi
b29sIGZvcmNlQmxhY2tUZXh0ID0gZmFsc2UpOworV0VCQ09SRV9FWFBPUlQgRHJhZ0ltYWdlUmVm
IGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKEZyYW1lJiwgY29uc3QgU2ltcGxlUmFuZ2UmLCBib29s
IGZvcmNlQmxhY2tUZXh0ID0gZmFsc2UpOwogRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZv
ckNvbG9yKGNvbnN0IENvbG9yJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIFBhdGgmKTsKIERy
YWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JJbWFnZShGcmFtZSYsIE5vZGUmLCBJbnRSZWN0
JiBpbWFnZVJlY3QsIEludFJlY3QmIGVsZW1lbnRSZWN0KTsKIERyYWdJbWFnZVJlZiBjcmVhdGVE
cmFnSW1hZ2VGb3JMaW5rKEVsZW1lbnQmLCBVUkwmLCBjb25zdCBTdHJpbmcmIGxhYmVsLCBUZXh0
SW5kaWNhdG9yRGF0YSYsIEZvbnRSZW5kZXJpbmdNb2RlLCBmbG9hdCBkZXZpY2VTY2FsZUZhY3Rv
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggOWUyYjM1OGFkYjBmNjkw
N2VhNmMxNmNiOTQ0MjJhMmJhNjhjYTdlNi4uYWFkYzQ2Njk4ZGY3OTU2NDM2MmEwM2Y1ZGZlODli
MGViNzgxMWNlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2Fy
ZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApAQCAtNjUsOSAr
NjUsMTAgQEAgY2xhc3MgRHJhZ0RhdGE7CiBjbGFzcyBFbGVtZW50OwogY2xhc3MgRnJhbWU7CiBj
bGFzcyBQYXN0ZWJvYXJkU3RyYXRlZ3k7Ci1jbGFzcyBSYW5nZTsKIGNsYXNzIFNoYXJlZEJ1ZmZl
cjsKIAorc3RydWN0IFNpbXBsZVJhbmdlOworCiBlbnVtIGNsYXNzIFBsYWluVGV4dFVSTFJlYWRp
bmdQb2xpY3kgOiBib29sIHsgSWdub3JlVVJMLCBBbGxvd1VSTCB9OwogZW51bSBjbGFzcyBXZWJD
b250ZW50UmVhZGluZ1BvbGljeSA6IGJvb2wgeyBBbnlUeXBlLCBPbmx5UmljaFRleHRUeXBlcyB9
OwogZW51bSBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgeyBEZWZh
dWx0U2VsZWN0ZWRUZXh0VHlwZSwgSW5jbHVkZUltYWdlQWx0VGV4dEZvckRhdGFUcmFuc2ZlciB9
OwpAQCAtMjQxLDkgKzI0Miw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lO
KQotICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1bWVudEZyYWdtZW50KEZyYW1lJiwg
UmFuZ2UmLCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCk7IC8vIEZJ
WE1FOiBMYXllcmluZyB2aW9sYXRpb24uCisgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGRv
Y3VtZW50RnJhZ21lbnQoRnJhbWUmLCBjb25zdCBTaW1wbGVSYW5nZSYsIGJvb2wgYWxsb3dQbGFp
blRleHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlv
bi4KICAgICB2b2lkIHdyaXRlSW1hZ2UoRWxlbWVudCYsIGNvbnN0IFVSTCYsIGNvbnN0IFN0cmlu
ZyYgdGl0bGUpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgotICAgIHZvaWQgd3JpdGVT
ZWxlY3Rpb24oUmFuZ2UmLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSYsIFNob3Vs
ZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlciA9IERlZmF1bHRTZWxlY3RlZFRl
eHRUeXBlKTsgLy8gRklYTUU6IExheWVyaW5nIHZpb2xhdGlvbi4KKyAgICB2b2lkIHdyaXRlU2Vs
ZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwgRnJh
bWUmLCBTaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIgPSBEZWZhdWx0
U2VsZWN0ZWRUZXh0VHlwZSk7IC8vIEZJWE1FOiBMYXllcmluZyB2aW9sYXRpb24uCiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKEdUSykKQEAgLTMxMiw3ICszMTMsNyBAQCBwcml2YXRlOgogCiAjaWYg
UExBVEZPUk0oV0lOKQogICAgIHZvaWQgZmluaXNoQ3JlYXRpbmdQYXN0ZWJvYXJkKCk7Ci0gICAg
dm9pZCB3cml0ZVJhbmdlVG9EYXRhT2JqZWN0KFJhbmdlJiwgRnJhbWUmKTsgLy8gRklYTUU6IExh
eWVyaW5nIHZpb2xhdGlvbi4KKyAgICB2b2lkIHdyaXRlUmFuZ2VUb0RhdGFPYmplY3QoY29uc3Qg
U2ltcGxlUmFuZ2UmLCBGcmFtZSYpOyAvLyBGSVhNRTogTGF5ZXJpbmcgdmlvbGF0aW9uLgogICAg
IHZvaWQgd3JpdGVVUkxUb0RhdGFPYmplY3QoY29uc3QgVVJMJiwgY29uc3QgU3RyaW5nJik7CiAg
ICAgdm9pZCB3cml0ZVBsYWluVGV4dFRvRGF0YU9iamVjdChjb25zdCBTdHJpbmcmLCBTbWFydFJl
cGxhY2VPcHRpb24pOwogICAgIE9wdGlvbmFsPFBhc3RlYm9hcmRDdXN0b21EYXRhPiByZWFkUGFz
dGVib2FyZEN1c3RvbURhdGEoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9EcmFnSW1hZ2VJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvRHJhZ0lt
YWdlSU9TLm1tCmluZGV4IGNiNWFlZjkyZjIzODA4NjhkYThhM2FlNjM2NTJlNTNmNTU0ZjAzOGIu
LmM2NGE0YmNhMWFkOGU3YjcyYWYyMjYwM2ZiMWNjMDFmOTc2OWY2MjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9EcmFnSW1hZ2VJT1MubW0KKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0RyYWdJbWFnZUlPUy5tbQpAQCAtMjE5LDcgKzIxOSw3IEBAIERy
YWdJbWFnZVJlZiBkaXNzb2x2ZURyYWdJbWFnZVRvRnJhY3Rpb24oRHJhZ0ltYWdlUmVmIGltYWdl
LCBmbG9hdCkKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKLURyYWdJbWFnZVJlZiBjcmVhdGVEcmFn
SW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwgYm9vbCBmb3JjZUJsYWNr
VGV4dCkKK0RyYWdJbWFnZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUs
IGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCBmb3JjZUJsYWNrVGV4dCkKIHsKICAgICBp
ZiAoYXV0byBkb2N1bWVudCA9IGZyYW1lLmRvY3VtZW50KCkpCiAgICAgICAgIGRvY3VtZW50LT51
cGRhdGVMYXlvdXQoKTsKQEAgLTI4Niw3ICsyODYsNyBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4g
Y3JlYXRlRHJhZ0ltYWdlRnJvbUltYWdlKEltYWdlKiwgSW1hZ2VPcmllbnRhdGlvbikKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAotRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdl
KEZyYW1lJiwgUmFuZ2UmLCBib29sKQorRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJh
bmdlKEZyYW1lJiwgY29uc3QgU2ltcGxlUmFuZ2UmLCBib29sKQogewogICAgIHJldHVybiBudWxs
cHRyOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9h
cmRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
CmluZGV4IDY4NzU3ZWFhOGM4ZjEwNDA0ODE1NWZlZDgxNGYyYzBjMjBhYzFmMzYuLjIxYjk3ZjU4
YjBlZTM5ZTQ0NzIxZTZmMjdkMDdlNjI5MTJlYjA0ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKQEAgLTQ3OCw3ICs0NzgsNyBAQCB2b2lkIFBh
c3RlYm9hcmQ6OnNldERyYWdJbWFnZShEcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JikKIH0KICNl
bmRpZgogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlUmFuZ2VUb0RhdGFPYmplY3QoUmFuZ2UmIHNl
bGVjdGVkUmFuZ2UsIEZyYW1lJiBmcmFtZSkKK3ZvaWQgUGFzdGVib2FyZDo6d3JpdGVSYW5nZVRv
RGF0YU9iamVjdChjb25zdCBTaW1wbGVSYW5nZSYgc2VsZWN0ZWRSYW5nZSwgRnJhbWUmIGZyYW1l
KQogewogICAgIGlmICghbV93cml0YWJsZURhdGFPYmplY3QpCiAgICAgICAgIHJldHVybjsKQEAg
LTQ4OCw3ICs0ODgsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUmFuZ2VUb0RhdGFPYmplY3Qo
UmFuZ2UmIHNlbGVjdGVkUmFuZ2UsIEZyYW1lJiBmcmFtZSkKIAogICAgIFZlY3RvcjxjaGFyPiBk
YXRhOwogICAgIG1hcmt1cFRvQ0ZIVE1MKHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJh
bmNlKHNlbGVjdGVkUmFuZ2UsIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6Olllcyks
Ci0gICAgICAgIHNlbGVjdGVkUmFuZ2Uuc3RhcnRDb250YWluZXIoKS5kb2N1bWVudCgpLnVybCgp
LnN0cmluZygpLCBkYXRhKTsKKyAgICAgICAgc2VsZWN0ZWRSYW5nZS5zdGFydC5jb250YWluZXIt
PmRvY3VtZW50KCkudXJsKCkuc3RyaW5nKCksIGRhdGEpOwogICAgIG1lZGl1bS5oR2xvYmFsID0g
Y3JlYXRlR2xvYmFsRGF0YShkYXRhKTsKICAgICBpZiAobWVkaXVtLmhHbG9iYWwgJiYgRkFJTEVE
KG1fd3JpdGFibGVEYXRhT2JqZWN0LT5TZXREYXRhKGh0bWxGb3JtYXQoKSwgJm1lZGl1bSwgVFJV
RSkpKQogICAgICAgICA6Okdsb2JhbEZyZWUobWVkaXVtLmhHbG9iYWwpOwpAQCAtNTA1LDcgKzUw
NSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVSYW5nZVRvRGF0YU9iamVjdChSYW5nZSYgc2Vs
ZWN0ZWRSYW5nZSwgRnJhbWUmIGZyYW1lKQogICAgICAgICBtX3dyaXRhYmxlRGF0YU9iamVjdC0+
U2V0RGF0YShzbWFydFBhc3RlRm9ybWF0KCksICZtZWRpdW0sIFRSVUUpOwogfQogCi12b2lkIFBh
c3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlJiBzZWxlY3RlZFJhbmdlLCBib29sIGNhblNt
YXJ0Q29weU9yRGVsZXRlLCBGcmFtZSYgZnJhbWUsIFNob3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4
dEZvckRhdGFUcmFuc2ZlciBzaG91bGRTZXJpYWxpemVTZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNm
ZXIpCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKGNvbnN0IFNpbXBsZVJhbmdlJiBz
ZWxlY3RlZFJhbmdlLCBib29sIGNhblNtYXJ0Q29weU9yRGVsZXRlLCBGcmFtZSYgZnJhbWUsIFNo
b3VsZFNlcmlhbGl6ZVNlbGVjdGVkVGV4dEZvckRhdGFUcmFuc2ZlciBzaG91bGRTZXJpYWxpemVT
ZWxlY3RlZFRleHRGb3JEYXRhVHJhbnNmZXIpCiB7CiAgICAgY2xlYXIoKTsKIApAQCAtNTE0LDcg
KzUxNCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oUmFuZ2UmIHNlbGVjdGVk
UmFuZ2UsIGJvb2wgY2FuU21hcnRDb3B5T3JEZWxldGUsCiAgICAgICAgIFZlY3RvcjxjaGFyPiBk
YXRhOwogICAgICAgICAvLyBGSVhNRTogVXNlIFJlc29sdmVVUkxzOjpZZXNFeGNsdWRpbmdMb2Nh
bEZpbGVVUkxzRm9yUHJpdmFjeS4KICAgICAgICAgbWFya3VwVG9DRkhUTUwoc2VyaWFsaXplUHJl
c2VydmluZ1Zpc3VhbEFwcGVhcmFuY2UoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpLAot
ICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCkudXJs
KCkuc3RyaW5nKCksIGRhdGEpOworICAgICAgICAgICAgc2VsZWN0ZWRSYW5nZS5zdGFydC5jb250
YWluZXItPmRvY3VtZW50KCkudXJsKCkuc3RyaW5nKCksIGRhdGEpOwogICAgICAgICBIR0xPQkFM
IGNiRGF0YSA9IGNyZWF0ZUdsb2JhbERhdGEoZGF0YSk7CiAgICAgICAgIGlmICghOjpTZXRDbGlw
Ym9hcmREYXRhKEhUTUxDbGlwYm9hcmRGb3JtYXQsIGNiRGF0YSkpCiAgICAgICAgICAgICA6Okds
b2JhbEZyZWUoY2JEYXRhKTsKQEAgLTg1NCw3ICs4NTQsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OnJl
YWQoUGFzdGVib2FyZFBsYWluVGV4dCYgdGV4dCwgUGxhaW5UZXh0VVJMUmVhZGluZ1BvbGljeSwg
T3B0aQogICAgIH0KIH0KIAotUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRv
Y3VtZW50RnJhZ21lbnQoRnJhbWUmIGZyYW1lLCBSYW5nZSYgY29udGV4dCwgYm9vbCBhbGxvd1Bs
YWluVGV4dCwgYm9vbCYgY2hvc2VQbGFpblRleHQpCitSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4g
UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSYgZnJhbWUsIGNvbnN0IFNpbXBsZVJh
bmdlJiBjb250ZXh0LCBib29sIGFsbG93UGxhaW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkK
IHsKICAgICBjaG9zZVBsYWluVGV4dCA9IGZhbHNlOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAppbmRleCA3OTM0ZTUxM2QwZjUzOGNlMDc4OTA1ZjVkYmNk
ODFkYWFiMmQyZmUxLi5lMGYzMzM4NzBkNTc5ODUzNTFhZWQ1YTA5YTI2Nzg4MWFiMTUyMzczIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcApAQCAtMzUsNyArMzUs
NyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGFibGVFbGVt
ZW50LmgiCkBAIC0xOTE3LDYgKzE5MTcsMjcwIEBAIFZlY3RvcjxJbnRSZWN0PiBSZW5kZXJPYmpl
Y3Q6OmFic29sdXRlVGV4dFJlY3RzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgYm9vbCB1CiAg
ICAgcmV0dXJuIHJlY3RzOwogfQogCisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKworc3RhdGlj
IGJvb2wgaW50ZXJ2YWxzU3VmZmljaWVudGx5T3ZlcmxhcChpbnQgc3RhcnRBLCBpbnQgZW5kQSwg
aW50IHN0YXJ0QiwgaW50IGVuZEIpCit7CisgICAgaWYgKGVuZEEgPD0gc3RhcnRBIHx8IGVuZEIg
PD0gc3RhcnRCKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBmbG9hdCBzdWZm
aWNpZW50T3ZlcmxhcCA9IC43NTsKKworICAgIGludCBsZW5ndGhBID0gZW5kQSAtIHN0YXJ0QTsK
KyAgICBpbnQgbGVuZ3RoQiA9IGVuZEIgLSBzdGFydEI7CisKKyAgICBpbnQgbWF4U3RhcnQgPSBz
dGQ6Om1heChzdGFydEEsIHN0YXJ0Qik7CisgICAgaW50IG1pbkVuZCA9IHN0ZDo6bWluKGVuZEEs
IGVuZEIpOworCisgICAgaWYgKG1heFN0YXJ0ID4gbWluRW5kKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICByZXR1cm4gbWluRW5kIC0gbWF4U3RhcnQgPj0gc3VmZmljaWVudE92ZXJsYXAg
KiBzdGQ6Om1pbihsZW5ndGhBLCBsZW5ndGhCKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFk
anVzdExpbmVIZWlnaHRPZlNlbGVjdGlvblJlY3RzKFZlY3RvcjxTZWxlY3Rpb25SZWN0PiYgcmVj
dHMsIHNpemVfdCBudW1iZXJPZlJlY3RzLCBpbnQgbGluZU51bWJlciwgaW50IGxpbmVUb3AsIGlu
dCBsaW5lSGVpZ2h0KQoreworICAgIEFTU0VSVChyZWN0cy5zaXplKCkgPj0gbnVtYmVyT2ZSZWN0
cyk7CisgICAgZm9yIChzaXplX3QgaSA9IG51bWJlck9mUmVjdHM7IGk7ICkgeworICAgICAgICAt
LWk7CisgICAgICAgIGlmIChyZWN0c1tpXS5saW5lTnVtYmVyKCkpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgcmVjdHNbaV0uc2V0TGluZU51bWJlcihsaW5lTnVtYmVyKTsKKyAgICAgICAg
cmVjdHNbaV0uc2V0TG9naWNhbFRvcChsaW5lVG9wKTsKKyAgICAgICAgcmVjdHNbaV0uc2V0TG9n
aWNhbEhlaWdodChsaW5lSGVpZ2h0KTsKKyAgICB9Cit9CisKK3N0YXRpYyBTZWxlY3Rpb25SZWN0
IGNvYWxlc2NlU2VsZWN0aW9uUmVjdHMoY29uc3QgU2VsZWN0aW9uUmVjdCYgb3JpZ2luYWwsIGNv
bnN0IFNlbGVjdGlvblJlY3QmIHByZXZpb3VzKQoreworICAgIFNlbGVjdGlvblJlY3QgcmVzdWx0
KHVuaW9uUmVjdChwcmV2aW91cy5yZWN0KCksIG9yaWdpbmFsLnJlY3QoKSksIG9yaWdpbmFsLmlz
SG9yaXpvbnRhbCgpLCBvcmlnaW5hbC5wYWdlTnVtYmVyKCkpOworICAgIHJlc3VsdC5zZXREaXJl
Y3Rpb24ob3JpZ2luYWwuY29udGFpbnNTdGFydCgpIHx8IG9yaWdpbmFsLmNvbnRhaW5zRW5kKCkg
PyBvcmlnaW5hbC5kaXJlY3Rpb24oKSA6IHByZXZpb3VzLmRpcmVjdGlvbigpKTsKKyAgICByZXN1
bHQuc2V0Q29udGFpbnNTdGFydChwcmV2aW91cy5jb250YWluc1N0YXJ0KCkgfHwgb3JpZ2luYWwu
Y29udGFpbnNTdGFydCgpKTsKKyAgICByZXN1bHQuc2V0Q29udGFpbnNFbmQocHJldmlvdXMuY29u
dGFpbnNFbmQoKSB8fCBvcmlnaW5hbC5jb250YWluc0VuZCgpKTsKKyAgICByZXN1bHQuc2V0SXNG
aXJzdE9uTGluZShwcmV2aW91cy5pc0ZpcnN0T25MaW5lKCkgfHwgb3JpZ2luYWwuaXNGaXJzdE9u
TGluZSgpKTsKKyAgICByZXN1bHQuc2V0SXNMYXN0T25MaW5lKHByZXZpb3VzLmlzTGFzdE9uTGlu
ZSgpIHx8IG9yaWdpbmFsLmlzTGFzdE9uTGluZSgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitWZWN0b3I8U2VsZWN0aW9uUmVjdD4gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVj
dHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sK
KyAgICByZXR1cm4gY29sbGVjdFNlbGVjdGlvblJlY3RzSW50ZXJuYWwocmFuZ2UpLnJlY3RzOwor
fQorCithdXRvIFJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzSW50ZXJuYWwoY29u
c3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSAtPiBTZWxlY3Rpb25SZWN0cworeworICAgIFZlY3RvcjxT
ZWxlY3Rpb25SZWN0PiByZWN0czsKKyAgICBWZWN0b3I8U2VsZWN0aW9uUmVjdD4gbmV3UmVjdHM7
CisgICAgYm9vbCBoYXNGbGlwcGVkV3JpdGluZ01vZGUgPSByYW5nZS5zdGFydC5jb250YWluZXIt
PnJlbmRlcmVyKCkgJiYgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5yZW5kZXJlcigpLT5zdHlsZSgp
LmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCk7CisgICAgYm9vbCBjb250YWluc0RpZmZlcmVu
dFdyaXRpbmdNb2RlcyA9IGZhbHNlOworICAgIGZvciAoYXV0byYgbm9kZSA6IGludGVyc2VjdGlu
Z05vZGVzKHJhbmdlKSkgeworICAgICAgICBhdXRvIHJlbmRlcmVyID0gbm9kZS5yZW5kZXJlcigp
OworICAgICAgICAvLyBPbmx5IGFzayBsZWFmIHJlbmRlciBvYmplY3RzIGZvciB0aGVpciBsaW5l
IGJveCByZWN0cy4KKyAgICAgICAgaWYgKHJlbmRlcmVyICYmICFyZW5kZXJlci0+Zmlyc3RDaGls
ZFNsb3coKSAmJiByZW5kZXJlci0+c3R5bGUoKS51c2VyU2VsZWN0KCkgIT0gVXNlclNlbGVjdDo6
Tm9uZSkgeworICAgICAgICAgICAgYm9vbCBpc1N0YXJ0Tm9kZSA9IHJlbmRlcmVyLT5ub2RlKCkg
PT0gcmFuZ2Uuc3RhcnQuY29udGFpbmVyLnB0cigpOworICAgICAgICAgICAgYm9vbCBpc0VuZE5v
ZGUgPSByZW5kZXJlci0+bm9kZSgpID09IHJhbmdlLmVuZC5jb250YWluZXIucHRyKCk7CisgICAg
ICAgICAgICBpZiAoaGFzRmxpcHBlZFdyaXRpbmdNb2RlICE9IHJlbmRlcmVyLT5zdHlsZSgpLmlz
RmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCkpCisgICAgICAgICAgICAgICAgY29udGFpbnNEaWZm
ZXJlbnRXcml0aW5nTW9kZXMgPSB0cnVlOworICAgICAgICAgICAgLy8gRklYTUU6IFNlbmRpbmcg
MCBmb3IgdGhlIHN0YXJ0T2Zmc2V0IGlzIGEgd2VpcmQgd2F5IG9mIHRlbGxpbmcgdGhlIHJlbmRl
cmVyIHRoYXQgdGhlIHNlbGVjdGlvbgorICAgICAgICAgICAgLy8gZG9lc24ndCBzdGFydCBpbnNp
ZGUgaXQsIHNpbmNlIHdlJ2xsIGFsc28gc2VuZCAwIGlmIHRoZSBzZWxlY3Rpb24gKmRvZXMqIHN0
YXJ0IGluIGl0LCBhdCBvZmZzZXQgMC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBG
SVhNRTogU2VsZWN0aW9uIGVuZHBvaW50cyBhcmVuJ3QgYWx3YXlzIGluc2lkZSBsZWF2ZXMsIGFu
ZCB3ZSBvbmx5IGJ1aWxkIFNlbGVjdGlvblJlY3RzIGZvciBsZWF2ZXMsCisgICAgICAgICAgICAv
LyBzbyB3ZSBjYW4ndCBhY2N1cmF0ZWx5IGRldGVybWluZSB3aGljaCBTZWxlY3Rpb25SZWN0cyBj
b250YWluIHRoZSBzZWxlY3Rpb24gc3RhcnQgYW5kIGVuZCB1c2luZworICAgICAgICAgICAgLy8g
b25seSB0aGUgb2Zmc2V0cyBvZiB0aGUgc3RhcnQgYW5kIGVuZC4gV2UgbmVlZCB0byBwYXNzIHRo
ZSB3aG9sZSBSYW5nZS4KKyAgICAgICAgICAgIGludCBiZWdpblNlbGVjdGlvbk9mZnNldCA9IGlz
U3RhcnROb2RlID8gcmFuZ2Uuc3RhcnQub2Zmc2V0IDogMDsKKyAgICAgICAgICAgIGludCBlbmRT
ZWxlY3Rpb25PZmZzZXQgPSBpc0VuZE5vZGUgPyByYW5nZS5lbmQub2Zmc2V0IDogc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgICAgIHJlbmRlcmVyLT5jb2xsZWN0U2Vs
ZWN0aW9uUmVjdHMobmV3UmVjdHMsIGJlZ2luU2VsZWN0aW9uT2Zmc2V0LCBlbmRTZWxlY3Rpb25P
ZmZzZXQpOworICAgICAgICAgICAgZm9yIChhdXRvJiBzZWxlY3Rpb25SZWN0IDogbmV3UmVjdHMp
IHsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uUmVjdC5jb250YWluc1N0YXJ0KCkgJiYg
IWlzU3RhcnROb2RlKQorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldENvbnRh
aW5zU3RhcnQoZmFsc2UpOworICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25SZWN0LmNvbnRh
aW5zRW5kKCkgJiYgIWlzRW5kTm9kZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0aW9uUmVj
dC5zZXRDb250YWluc0VuZChmYWxzZSk7CisgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGlvblJl
Y3QubG9naWNhbFdpZHRoKCkgfHwgc2VsZWN0aW9uUmVjdC5sb2dpY2FsSGVpZ2h0KCkpCisgICAg
ICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChzZWxlY3Rpb25SZWN0KTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG5ld1JlY3RzLnNocmluaygwKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIFRoZSByYW5nZSBjb3VsZCBzcGFuIG5vZGVzIHdpdGggZGlmZmVyZW50IHdyaXRpbmcg
bW9kZXMuCisgICAgLy8gSWYgdGhpcyBpcyB0aGUgY2FzZSwgd2UgdXNlIHRoZSB3cml0aW5nIG1v
ZGUgb2YgdGhlIGNvbW1vbiBhbmNlc3Rvci4KKyAgICBpZiAoY29udGFpbnNEaWZmZXJlbnRXcml0
aW5nTW9kZXMpIHsKKyAgICAgICAgaWYgKGF1dG8gYW5jZXN0b3IgPSBjb21tb25JbmNsdXNpdmVB
bmNlc3RvcihyYW5nZSkpCisgICAgICAgICAgICBoYXNGbGlwcGVkV3JpdGluZ01vZGUgPSBhbmNl
c3Rvci0+cmVuZGVyZXIoKS0+c3R5bGUoKS5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9kZSgpOwor
ICAgIH0KKworICAgIGF1dG8gbnVtYmVyT2ZSZWN0cyA9IHJlY3RzLnNpemUoKTsKKworICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gZW5kcyBpbiBhIEJSLCB0aGVuIGFkZCB0aGUgbGluZSBicmVhayBi
aXQgdG8gdGhlIGxhc3QgcmVjdCB3ZSBoYXZlLgorICAgIC8vIFRoaXMgd2lsbCBjYXVzZSBpdHMg
c2VsZWN0aW9uIHJlY3QgdG8gZXh0ZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuCisgICAgaWYg
KG51bWJlck9mUmVjdHMpIHsKKyAgICAgICAgLy8gT25seSBzZXQgdGhlIGxpbmUgYnJlYWsgYml0
IGlmIHRoZSBlbmQgb2YgdGhlIHJhbmdlIGFjdHVhbGx5CisgICAgICAgIC8vIGV4dGVuZHMgYWxs
IHRoZSB3YXkgdG8gaW5jbHVkZSB0aGUgPGJyPi4gVmlzaWJsZVBvc2l0aW9uIGhlbHBzIHRvCisg
ICAgICAgIC8vIGZpZ3VyZSB0aGlzIG91dC4KKyAgICAgICAgaWYgKGlzPEhUTUxCUkVsZW1lbnQ+
KFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSku
ZGVlcEVxdWl2YWxlbnQoKS5maXJzdE5vZGUoKSkpCisgICAgICAgICAgICByZWN0cy5sYXN0KCku
c2V0SXNMaW5lQnJlYWsodHJ1ZSk7CisgICAgfQorCisgICAgaW50IGxpbmVUb3AgPSBzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpOworICAgIGludCBsaW5lQm90dG9tID0gc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKyAgICBpbnQgbGFzdExpbmVUb3AgPSBsaW5lVG9wOwor
ICAgIGludCBsYXN0TGluZUJvdHRvbSA9IGxpbmVCb3R0b207CisgICAgaW50IGxpbmVOdW1iZXIg
PSAwOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1iZXJPZlJlY3RzOyArK2kpIHsK
KyAgICAgICAgaW50IGN1cnJlbnRSZWN0VG9wID0gcmVjdHNbaV0ubG9naWNhbFRvcCgpOworICAg
ICAgICBpbnQgY3VycmVudFJlY3RCb3R0b20gPSBjdXJyZW50UmVjdFRvcCArIHJlY3RzW2ldLmxv
Z2ljYWxIZWlnaHQoKTsKKworICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIGNvdW50IHRoZSBy
dWJ5IHRleHQgYXMgYSBzZXBhcmF0ZSBsaW5lLgorICAgICAgICBpZiAoaW50ZXJ2YWxzU3VmZmlj
aWVudGx5T3ZlcmxhcChjdXJyZW50UmVjdFRvcCwgY3VycmVudFJlY3RCb3R0b20sIGxpbmVUb3As
IGxpbmVCb3R0b20pIHx8IChpICYmIHJlY3RzW2ldLmlzUnVieVRleHQoKSkpIHsKKyAgICAgICAg
ICAgIC8vIEdyb3cgdGhlIGN1cnJlbnQgbGluZSBib3VuZHMuCisgICAgICAgICAgICBsaW5lVG9w
ID0gc3RkOjptaW4obGluZVRvcCwgY3VycmVudFJlY3RUb3ApOworICAgICAgICAgICAgbGluZUJv
dHRvbSA9IHN0ZDo6bWF4KGxpbmVCb3R0b20sIGN1cnJlbnRSZWN0Qm90dG9tKTsKKyAgICAgICAg
ICAgIC8vIEF2b2lkIG92ZXJsYXAgd2l0aCB0aGUgcHJldmlvdXMgbGluZS4KKyAgICAgICAgICAg
IGlmICghaGFzRmxpcHBlZFdyaXRpbmdNb2RlKQorICAgICAgICAgICAgICAgIGxpbmVUb3AgPSBz
dGQ6Om1heChsYXN0TGluZUJvdHRvbSwgbGluZVRvcCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbGluZUJvdHRvbSA9IHN0ZDo6bWluKGxhc3RMaW5lVG9wLCBsaW5lQm90dG9t
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGFkanVzdExpbmVIZWlnaHRPZlNlbGVj
dGlvblJlY3RzKHJlY3RzLCBpLCBsaW5lTnVtYmVyLCBsaW5lVG9wLCBsaW5lQm90dG9tIC0gbGlu
ZVRvcCk7CisgICAgICAgICAgICBpZiAoIWhhc0ZsaXBwZWRXcml0aW5nTW9kZSkgeworICAgICAg
ICAgICAgICAgIGxhc3RMaW5lVG9wID0gbGluZVRvcDsKKyAgICAgICAgICAgICAgICBpZiAoY3Vy
cmVudFJlY3RCb3R0b20gPj0gbGFzdExpbmVUb3ApIHsKKyAgICAgICAgICAgICAgICAgICAgbGFz
dExpbmVCb3R0b20gPSBsaW5lQm90dG9tOworICAgICAgICAgICAgICAgICAgICBsaW5lVG9wID0g
bGFzdExpbmVCb3R0b207CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgbGluZVRvcCA9IGN1cnJlbnRSZWN0VG9wOworICAgICAgICAgICAgICAgICAgICBsYXN0
TGluZUJvdHRvbSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGxpbmVCb3R0b20gPSBjdXJyZW50UmVjdEJvdHRvbTsK
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbGFzdExpbmVCb3R0b20gPSBs
aW5lQm90dG9tOworICAgICAgICAgICAgICAgIGlmIChjdXJyZW50UmVjdFRvcCA8PSBsYXN0TGlu
ZUJvdHRvbSAmJiBpICYmIHJlY3RzW2ldLnBhZ2VOdW1iZXIoKSA9PSByZWN0c1tpIC0gMV0ucGFn
ZU51bWJlcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lVG9wID0gbGluZVRvcDsK
KyAgICAgICAgICAgICAgICAgICAgbGluZUJvdHRvbSA9IGxhc3RMaW5lVG9wOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lVG9wID0gc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsKKyAgICAgICAgICAgICAgICAgICAgbGluZUJvdHRv
bSA9IGN1cnJlbnRSZWN0Qm90dG9tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBsaW5lVG9wID0gY3VycmVudFJlY3RUb3A7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAr
K2xpbmVOdW1iZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBZGp1c3QgbGluZSBoZWln
aHQuCisgICAgYWRqdXN0TGluZUhlaWdodE9mU2VsZWN0aW9uUmVjdHMocmVjdHMsIG51bWJlck9m
UmVjdHMsIGxpbmVOdW1iZXIsIGxpbmVUb3AsIGxpbmVCb3R0b20gLSBsaW5lVG9wKTsKKworICAg
IC8vIFNvcnQgdGhlIHJlY3RhbmdsZXMgYW5kIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gZ2Fwcy4g
VGhlIHJlY3RhbmdsZXMgY291bGQgYmUgdW5zb3J0ZWQgd2hlbgorICAgIC8vIHRoZXJlIGlzIHJ1
YnkgdGV4dCBhbmQgd2UgY291bGQgaGF2ZSBnYXBzIG9uIHRoZSBsaW5lIHdoZW4gYWRqYWNlbnQg
ZWxlbWVudHMgb24gdGhlIGxpbmUKKyAgICAvLyBoYXZlIGEgZGlmZmVyZW50IG9yaWVudGF0aW9u
LgorICAgIHNpemVfdCBmaXJzdFJlY3RXaXRoQ3VycmVudExpbmVOdW1iZXIgPSAwOworICAgIGZv
ciAoc2l6ZV90IGN1cnJlbnRSZWN0ID0gMTsgY3VycmVudFJlY3QgPCBudW1iZXJPZlJlY3RzOyAr
K2N1cnJlbnRSZWN0KSB7CisgICAgICAgIGlmIChyZWN0c1tjdXJyZW50UmVjdF0ubGluZU51bWJl
cigpICE9IHJlY3RzW2N1cnJlbnRSZWN0IC0gMV0ubGluZU51bWJlcigpKSB7CisgICAgICAgICAg
ICBmaXJzdFJlY3RXaXRoQ3VycmVudExpbmVOdW1iZXIgPSBjdXJyZW50UmVjdDsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChyZWN0c1tjdXJyZW50UmVjdF0u
bG9naWNhbExlZnQoKSA+PSByZWN0c1tjdXJyZW50UmVjdCAtIDFdLmxvZ2ljYWxMZWZ0KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBTZWxlY3Rpb25SZWN0IHNlbGVjdGlvblJl
Y3QgPSByZWN0c1tjdXJyZW50UmVjdF07CisgICAgICAgIHNpemVfdCBpOworICAgICAgICBmb3Ig
KGkgPSBjdXJyZW50UmVjdDsgaSA+IGZpcnN0UmVjdFdpdGhDdXJyZW50TGluZU51bWJlciAmJiBz
ZWxlY3Rpb25SZWN0LmxvZ2ljYWxMZWZ0KCkgPCByZWN0c1tpIC0gMV0ubG9naWNhbExlZnQoKTsg
LS1pKQorICAgICAgICAgICAgcmVjdHNbaV0gPSByZWN0c1tpIC0gMV07CisgICAgICAgIHJlY3Rz
W2ldID0gc2VsZWN0aW9uUmVjdDsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBqID0gMTsgaiA8
IG51bWJlck9mUmVjdHM7ICsraikgeworICAgICAgICBpZiAocmVjdHNbal0ubGluZU51bWJlcigp
ICE9IHJlY3RzW2ogLSAxXS5saW5lTnVtYmVyKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgU2VsZWN0aW9uUmVjdCYgcHJldmlvdXNSZWN0ID0gcmVjdHNbaiAtIDFdOworICAgICAg
ICBib29sIHByZXZpb3VzUmVjdE1heU5vdFJlYWNoUmlnaHRFZGdlID0gKHByZXZpb3VzUmVjdC5k
aXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgJiYgcHJldmlvdXNSZWN0LmNvbnRhaW5z
RW5kKCkpIHx8IChwcmV2aW91c1JlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRM
ICYmIHByZXZpb3VzUmVjdC5jb250YWluc1N0YXJ0KCkpOworICAgICAgICBpZiAocHJldmlvdXNS
ZWN0TWF5Tm90UmVhY2hSaWdodEVkZ2UpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
aW50IGFkanVzdGVkV2lkdGggPSByZWN0c1tqXS5sb2dpY2FsTGVmdCgpIC0gcHJldmlvdXNSZWN0
LmxvZ2ljYWxMZWZ0KCk7CisgICAgICAgIGlmIChhZGp1c3RlZFdpZHRoID4gcHJldmlvdXNSZWN0
LmxvZ2ljYWxXaWR0aCgpKQorICAgICAgICAgICAgcHJldmlvdXNSZWN0LnNldExvZ2ljYWxXaWR0
aChhZGp1c3RlZFdpZHRoKTsKKyAgICB9CisKKyAgICBpbnQgbWF4TGluZU51bWJlciA9IGxpbmVO
dW1iZXI7CisKKyAgICAvLyBFeHRlbmQgcmVjdHMgb3V0IHRvIGVkZ2VzIGFzIG5lZWRlZC4KKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bWJlck9mUmVjdHM7ICsraSkgeworICAgICAgICBT
ZWxlY3Rpb25SZWN0JiBzZWxlY3Rpb25SZWN0ID0gcmVjdHNbaV07CisgICAgICAgIGlmICghc2Vs
ZWN0aW9uUmVjdC5pc0xpbmVCcmVhaygpICYmIHNlbGVjdGlvblJlY3QubGluZU51bWJlcigpID49
IG1heExpbmVOdW1iZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNlbGVj
dGlvblJlY3QuZGlyZWN0aW9uKCkgPT0gVGV4dERpcmVjdGlvbjo6UlRMICYmIHNlbGVjdGlvblJl
Y3QuaXNGaXJzdE9uTGluZSgpKSB7CisgICAgICAgICAgICBzZWxlY3Rpb25SZWN0LnNldExvZ2lj
YWxXaWR0aChzZWxlY3Rpb25SZWN0LmxvZ2ljYWxXaWR0aCgpICsgc2VsZWN0aW9uUmVjdC5sb2dp
Y2FsTGVmdCgpIC0gc2VsZWN0aW9uUmVjdC5taW5YKCkpOworICAgICAgICAgICAgc2VsZWN0aW9u
UmVjdC5zZXRMb2dpY2FsTGVmdChzZWxlY3Rpb25SZWN0Lm1pblgoKSk7CisgICAgICAgIH0gZWxz
ZSBpZiAoc2VsZWN0aW9uUmVjdC5kaXJlY3Rpb24oKSA9PSBUZXh0RGlyZWN0aW9uOjpMVFIgJiYg
c2VsZWN0aW9uUmVjdC5pc0xhc3RPbkxpbmUoKSkKKyAgICAgICAgICAgIHNlbGVjdGlvblJlY3Qu
c2V0TG9naWNhbFdpZHRoKHNlbGVjdGlvblJlY3QubWF4WCgpIC0gc2VsZWN0aW9uUmVjdC5sb2dp
Y2FsTGVmdCgpKTsKKyAgICB9CisKKyAgICByZXR1cm4geyBXVEZNb3ZlKHJlY3RzKSwgbWF4TGlu
ZU51bWJlciB9OworfQorCitWZWN0b3I8U2VsZWN0aW9uUmVjdD4gUmVuZGVyT2JqZWN0Ojpjb2xs
ZWN0U2VsZWN0aW9uUmVjdHMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQoreworICAgIGF1dG8g
cmVzdWx0ID0gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNJbnRlcm5hbChyYW5n
ZSk7CisgICAgYXV0byBudW1iZXJPZlJlY3RzID0gcmVzdWx0LnJlY3RzLnNpemUoKTsKKworICAg
IC8vIFVuaW9uIGFsbCB0aGUgcmVjdGFuZ2xlcyBvbiBpbnRlcmlvciBsaW5lcyAoaS5lLiBub3Qg
Zmlyc3Qgb3IgbGFzdCkuCisgICAgLy8gT24gZmlyc3QgYW5kIGxhc3QgbGluZXMsIGp1c3QgYXZv
aWQgaGF2aW5nIG92ZXJsYXBzIGJ5IG1lcmdpbmcgaW50ZXJzZWN0aW5nIHJlY3RhbmdsZXMuCisg
ICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHVuaW9uZWRSZWN0czsKKyAgICBJbnRSZWN0IGludGVy
aW9yVW5pb25SZWN0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtYmVyT2ZSZWN0czsg
KytpKSB7CisgICAgICAgIFNlbGVjdGlvblJlY3QmIGN1cnJlbnRSZWN0ID0gcmVzdWx0LnJlY3Rz
W2ldOworICAgICAgICBpZiAoY3VycmVudFJlY3QubGluZU51bWJlcigpID09IDEpIHsKKyAgICAg
ICAgICAgIEFTU0VSVChpbnRlcmlvclVuaW9uUmVjdC5pc0VtcHR5KCkpOworICAgICAgICAgICAg
aWYgKCF1bmlvbmVkUmVjdHMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgU2VsZWN0aW9u
UmVjdCYgcHJldmlvdXNSZWN0ID0gdW5pb25lZFJlY3RzLmxhc3QoKTsKKyAgICAgICAgICAgICAg
ICBpZiAocHJldmlvdXNSZWN0LnJlY3QoKS5pbnRlcnNlY3RzKGN1cnJlbnRSZWN0LnJlY3QoKSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNSZWN0ID0gY29hbGVzY2VTZWxlY3Rpb25S
ZWN0cyhjdXJyZW50UmVjdCwgcHJldmlvdXNSZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8g
Q291bGRuJ3QgbWVyZ2Ugd2l0aCBwcmV2aW91cyByZWN0LCBzbyBqdXN0IGFwcGVuZGluZy4KKyAg
ICAgICAgICAgIHVuaW9uZWRSZWN0cy5hcHBlbmQoY3VycmVudFJlY3QpOworICAgICAgICB9IGVs
c2UgaWYgKGN1cnJlbnRSZWN0LmxpbmVOdW1iZXIoKSA8IHJlc3VsdC5tYXhMaW5lTnVtYmVyKSB7
CisgICAgICAgICAgICBpZiAoaW50ZXJpb3JVbmlvblJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICAgICAgLy8gU3RhcnQgY29sbGVjdGluZyBpbnRlcmlvciByZWN0cy4KKyAgICAgICAgICAg
ICAgICBpbnRlcmlvclVuaW9uUmVjdCA9IGN1cnJlbnRSZWN0LnJlY3QoKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoaW50ZXJpb3JVbmlvblJlY3QuaW50ZXJzZWN0cyhjdXJyZW50UmVjdC5yZWN0
KCkpCisgICAgICAgICAgICAgICAgfHwgaW50ZXJpb3JVbmlvblJlY3QubWF4WCgpID09IGN1cnJl
bnRSZWN0LnJlY3QoKS54KCkKKyAgICAgICAgICAgICAgICB8fCBpbnRlcmlvclVuaW9uUmVjdC5t
YXhZKCkgPT0gY3VycmVudFJlY3QucmVjdCgpLnkoKQorICAgICAgICAgICAgICAgIHx8IGludGVy
aW9yVW5pb25SZWN0LngoKSA9PSBjdXJyZW50UmVjdC5yZWN0KCkubWF4WCgpCisgICAgICAgICAg
ICAgICAgfHwgaW50ZXJpb3JVbmlvblJlY3QueSgpID09IGN1cnJlbnRSZWN0LnJlY3QoKS5tYXhZ
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBPbmx5IHVuaW9uIHRoZSBsaW5lcyB0aGF0IGFyZSBh
dHRhY2hlZC4KKyAgICAgICAgICAgICAgICAvLyBGb3IgaUJvb2tzLCB0aGUgaW50ZXJpb3IgbGlu
ZXMgbWF5IGNyb3NzIG11bHRpcGxlIGhvcml6b250YWwgcGFnZXMuCisgICAgICAgICAgICAgICAg
aW50ZXJpb3JVbmlvblJlY3QudW5pdGUoY3VycmVudFJlY3QucmVjdCgpKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdW5pb25lZFJlY3RzLmFwcGVuZChTZWxlY3Rpb25S
ZWN0KGludGVyaW9yVW5pb25SZWN0LCBjdXJyZW50UmVjdC5pc0hvcml6b250YWwoKSwgY3VycmVu
dFJlY3QucGFnZU51bWJlcigpKSk7CisgICAgICAgICAgICAgICAgaW50ZXJpb3JVbmlvblJlY3Qg
PSBjdXJyZW50UmVjdC5yZWN0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAvLyBQcm9jZXNzaW5nIGxhc3QgbGluZS4KKyAgICAgICAgICAgIGlmICghaW50
ZXJpb3JVbmlvblJlY3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgdW5pb25lZFJlY3Rz
LmFwcGVuZChTZWxlY3Rpb25SZWN0KGludGVyaW9yVW5pb25SZWN0LCBjdXJyZW50UmVjdC5pc0hv
cml6b250YWwoKSwgY3VycmVudFJlY3QucGFnZU51bWJlcigpKSk7CisgICAgICAgICAgICAgICAg
aW50ZXJpb3JVbmlvblJlY3QgPSBJbnRSZWN0KCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEFTU0VSVCghdW5pb25lZFJlY3RzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBTZWxlY3Rp
b25SZWN0JiBwcmV2aW91c1JlY3QgPSB1bmlvbmVkUmVjdHMubGFzdCgpOworICAgICAgICAgICAg
aWYgKHByZXZpb3VzUmVjdC5sb2dpY2FsVG9wKCkgPT0gY3VycmVudFJlY3QubG9naWNhbFRvcCgp
ICYmIHByZXZpb3VzUmVjdC5yZWN0KCkuaW50ZXJzZWN0cyhjdXJyZW50UmVjdC5yZWN0KCkpKSB7
CisgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNSZWN0IGlzIGFsc28gb24gdGhlIGxhc3QgbGlu
ZSwgYW5kIGludGVyc2VjdHMgdGhlIGN1cnJlbnQgb25lLgorICAgICAgICAgICAgICAgIHByZXZp
b3VzUmVjdCA9IGNvYWxlc2NlU2VsZWN0aW9uUmVjdHMoY3VycmVudFJlY3QsIHByZXZpb3VzUmVj
dCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAvLyBDb3VsZG4ndCBtZXJnZSB3aXRoIHByZXZpb3VzIHJlY3QsIHNvIGp1c3QgYXBwZW5kaW5n
LgorICAgICAgICAgICAgdW5pb25lZFJlY3RzLmFwcGVuZChjdXJyZW50UmVjdCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gdW5pb25lZFJlY3RzOworfQorCisjZW5kaWYKKwogU3Ry
aW5nIFJlbmRlck9iamVjdDo6ZGVidWdEZXNjcmlwdGlvbigpIGNvbnN0CiB7CiAgICAgU3RyaW5n
QnVpbGRlciBidWlsZGVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmlu
ZGV4IGNiZmJiMzU3M2M5YTEyYjhmMDgyYTA2OWRlZDI4MmQ2ZWU5MmZhYTEuLjcxMTNmNWMzMjkw
MGVkNzY0YjM2ZTQ0NzliOTYwN2YwNzc5YjEyZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKQEAgLTU0Nyw2ICs1NDcsOCBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKICAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdFNlbGVjdGlvblJlY3RzKFZlY3Rv
cjxTZWxlY3Rpb25SZWN0PiYsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gMCwgdW5zaWduZWQgZW5k
T2Zmc2V0ID0gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKICAgICB2aXJ0
dWFsIHZvaWQgYWJzb2x1dGVRdWFkc0ZvclNlbGVjdGlvbihWZWN0b3I8RmxvYXRRdWFkPiYgcXVh
ZHMpIGNvbnN0IHsgYWJzb2x1dGVRdWFkcyhxdWFkcyk7IH0KKyAgICBXRUJDT1JFX0VYUE9SVCBz
dGF0aWMgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IGNvbGxlY3RTZWxlY3Rpb25SZWN0cyhjb25zdCBT
aW1wbGVSYW5nZSYpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8U2VsZWN0aW9u
UmVjdD4gY29sbGVjdFNlbGVjdGlvblJlY3RzV2l0aG91dFVuaW9uSW50ZXJpb3JMaW5lcyhjb25z
dCBTaW1wbGVSYW5nZSYpOwogI2VuZGlmCiAKICAgICB2aXJ0dWFsIHZvaWQgYWJzb2x1dGVSZWN0
cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0IHsgfQpAQCAtNzU4
LDYgKzc2MCwxNCBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0TGF5ZXJOZWVkc0Z1bGxSZXBhaW50
KCk7CiAgICAgdm9pZCBzZXRMYXllck5lZWRzRnVsbFJlcGFpbnRGb3JQb3NpdGlvbmVkTW92ZW1l
bnRMYXlvdXQoKTsKIAorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RydWN0IFNlbGVj
dGlvblJlY3RzIHsKKyAgICAgICAgVmVjdG9yPFNlbGVjdGlvblJlY3Q+IHJlY3RzOworICAgICAg
ICBpbnQgbWF4TGluZU51bWJlcjsKKyAgICB9OworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBT
ZWxlY3Rpb25SZWN0cyBjb2xsZWN0U2VsZWN0aW9uUmVjdHNJbnRlcm5hbChjb25zdCBTaW1wbGVS
YW5nZSYpOworI2VuZGlmCisKICAgICBOb2RlKiBnZW5lcmF0aW5nUHNldWRvSG9zdEVsZW1lbnQo
KSBjb25zdDsKIAogICAgIHZvaWQgcHJvcGFnYXRlUmVwYWludFRvUGFyZW50V2l0aE91dGxpbmVB
dXRvSWZOZWVkZWQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVwYWludENvbnRhaW5l
ciwgY29uc3QgTGF5b3V0UmVjdCYgcmVwYWludFJlY3QpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCmluZGV4IGQ0N2YyNjE3ZWJkMGViOTdiZjMxM2VkNjZjM2Q4ZGUyNDI0
ZTQwMDIuLmFiMjBmMzBkM2QxYWYxMDJiODQ3ODk0ZTM5ZDY4ZTI5NGQwOGIxMWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTE3NzUsNyArMTc3NSw3IEBAIEV4Y2VwdGlv
bk9yPFJlZlB0cjxSYW5nZT4+IEludGVybmFsczo6bWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUmIG5v
ZGUsIGNvbnN0IFN0cmluCiAgICAgYXV0byBtYXJrZXIgPSByZXN1bHQucmVsZWFzZVJldHVyblZh
bHVlKCk7CiAgICAgaWYgKCFtYXJrZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJl
dHVybiB7IGNyZWF0ZUxpdmVSYW5nZShyYW5nZShub2RlLCAqbWFya2VyKSkgfTsKKyAgICByZXR1
cm4geyBjcmVhdGVMaXZlUmFuZ2UobWFrZVNpbXBsZVJhbmdlKG5vZGUsICptYXJrZXIpKSB9Owog
fQogCiBFeGNlcHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6bWFya2VyRGVzY3JpcHRpb25Gb3JO
b2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgp
CkBAIC0yMTU0LDEyICsyMTU0LDEyIEBAIFJlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpyYW5nZUZy
b21Mb2NhdGlvbkFuZExlbmd0aChFbGVtZW50JiBzY29wZSwgdW5zaWduZWQgcmFuCiAKIHVuc2ln
bmVkIEludGVybmFsczo6bG9jYXRpb25Gcm9tUmFuZ2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJh
bmdlJiByYW5nZSkKIHsKLSAgICByZXR1cm4gY2xhbXBUbzx1bnNpZ25lZD4oY2hhcmFjdGVyUmFu
Z2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoc2NvcGUpLCByYW5nZSkubG9j
YXRpb24pOworICAgIHJldHVybiBjbGFtcFRvPHVuc2lnbmVkPihjaGFyYWN0ZXJSYW5nZShtYWtl
Qm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cyhzY29wZSksIG1ha2VTaW1wbGVSYW5nZShy
YW5nZSkpLmxvY2F0aW9uKTsKIH0KIAogdW5zaWduZWQgSW50ZXJuYWxzOjpsZW5ndGhGcm9tUmFu
Z2UoRWxlbWVudCYgc2NvcGUsIGNvbnN0IFJhbmdlJiByYW5nZSkKIHsKLSAgICByZXR1cm4gY2xh
bXBUbzx1bnNpZ25lZD4oY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2Rl
Q29udGVudHMoc2NvcGUpLCByYW5nZSkubGVuZ3RoKTsKKyAgICByZXR1cm4gY2xhbXBUbzx1bnNp
Z25lZD4oY2hhcmFjdGVyUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMo
c2NvcGUpLCBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKS5sZW5ndGgpOwogfQogCiBTdHJpbmcgSW50
ZXJuYWxzOjpyYW5nZUFzVGV4dChjb25zdCBSYW5nZSYgcmFuZ2UpCkBAIC0yMTcwLDE5ICsyMTcw
LDE5IEBAIFN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0KGNvbnN0IFJhbmdlJiByYW5nZSkK
IFN0cmluZyBJbnRlcm5hbHM6OnJhbmdlQXNUZXh0VXNpbmdCYWNrd2FyZHNUZXh0SXRlcmF0b3Io
Y29uc3QgUmFuZ2UmIHJhbmdlKQogewogICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgZm9yIChTaW1w
bGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKHJhbmdlKTsgIWJh
Y2t3YXJkc0l0ZXJhdG9yLmF0RW5kKCk7IGJhY2t3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKKyAg
ICBmb3IgKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3IgYmFja3dhcmRzSXRlcmF0b3Io
bWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7ICFiYWNrd2FyZHNJdGVyYXRvci5hdEVuZCgpOyBiYWNr
d2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpCiAgICAgICAgIHJlc3VsdC5pbnNlcnQoYmFja3dhcmRz
SXRlcmF0b3IudGV4dCgpLnRvU3RyaW5nKCksIDApOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
IFJlZjxSYW5nZT4gSW50ZXJuYWxzOjpzdWJyYW5nZShSYW5nZSYgcmFuZ2UsIHVuc2lnbmVkIHJh
bmdlTG9jYXRpb24sIHVuc2lnbmVkIHJhbmdlTGVuZ3RoKQogewotICAgIHJldHVybiBjcmVhdGVM
aXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKHJhbmdlLCB7IHJhbmdlTG9jYXRpb24sIHJh
bmdlTGVuZ3RoIH0pKTsKKyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0
ZXJSYW5nZShtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpLCB7IHJhbmdlTG9jYXRpb24sIHJhbmdlTGVu
Z3RoIH0pKTsKIH0KIAotUmVmUHRyPFJhbmdlPiBJbnRlcm5hbHM6OnJhbmdlT2ZTdHJpbmdOZWFy
TG9jYXRpb24oY29uc3QgUmFuZ2UmIHNlYXJjaFJhbmdlLCBjb25zdCBTdHJpbmcmIHRleHQsIHVu
c2lnbmVkIHRhcmdldE9mZnNldCkKK1JlZlB0cjxSYW5nZT4gSW50ZXJuYWxzOjpyYW5nZU9mU3Ry
aW5nTmVhckxvY2F0aW9uKGNvbnN0IFJhbmdlJiByYW5nZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCB1
bnNpZ25lZCB0YXJnZXRPZmZzZXQpCiB7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShmaW5k
Q2xvc2VzdFBsYWluVGV4dChzZWFyY2hSYW5nZSwgdGV4dCwgeyB9LCB0YXJnZXRPZmZzZXQpKTsK
KyAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGZpbmRDbG9zZXN0UGxhaW5UZXh0KG1ha2VTaW1w
bGVSYW5nZShyYW5nZSksIHRleHQsIHsgfSwgdGFyZ2V0T2Zmc2V0KSk7CiB9CiAKICNpZiAhUExB
VEZPUk0oTUFDKQpAQCAtNTc1Niw3ICs1NzU2LDcgQEAgSW50ZXJuYWxzOjpUZXh0SW5kaWNhdG9y
SW5mbzo6flRleHRJbmRpY2F0b3JJbmZvKCkgPSBkZWZhdWx0OwogCiBJbnRlcm5hbHM6OlRleHRJ
bmRpY2F0b3JJbmZvIEludGVybmFsczo6dGV4dEluZGljYXRvckZvclJhbmdlKGNvbnN0IFJhbmdl
JiByYW5nZSwgVGV4dEluZGljYXRvck9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBhdXRvIGluZGlj
YXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShyYW5nZSwgb3B0aW9ucy5jb3Jl
T3B0aW9ucygpLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSk7Cisg
ICAgYXV0byBpbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UobWFrZVNp
bXBsZVJhbmdlKHJhbmdlKSwgb3B0aW9ucy5jb3JlT3B0aW9ucygpLCBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSk7CiAgICAgcmV0dXJuIGluZGljYXRvci0+ZGF0YSgp
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL0NvY29hL1dLV2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9Db2NvYS9XS1dlYlByb2Nlc3NQbHVn
SW5SYW5nZUhhbmRsZS5tbQppbmRleCAwNzY3NmEwZTM2NjdjMWI3NTgyODQzNDJiNmZiZGYzOGE5
ZTE2Mzg4Li4xZWY3OGNiMzZjNjBhODhiYzUxYmE1MDY0YmIzM2I5YjRkODY1ZmI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL0NvY29hL1dL
V2ViUHJvY2Vzc1BsdWdJblJhbmdlSGFuZGxlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvQ29jb2EvV0tXZWJQcm9jZXNzUGx1Z0luUmFuZ2VIYW5k
bGUubW0KQEAgLTY3LDcgKzY3LDcgQEAgLSAoTlNTdHJpbmcgKil0ZXh0CiAtIChOU0FycmF5ICop
ZGV0ZWN0RGF0YVdpdGhUeXBlczooV0tEYXRhRGV0ZWN0b3JUeXBlcyl0eXBlcyBjb250ZXh0OihO
U0RpY3Rpb25hcnkgKiljb250ZXh0CiB7CiAjaWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQotICAg
IHJldHVybiBXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50SW5SYW5nZShfcmFu
Z2VIYW5kbGUtPmNvcmVSYW5nZSgpLCBmcm9tV0tEYXRhRGV0ZWN0b3JUeXBlcyh0eXBlcyksIGNv
bnRleHQpOworICAgIHJldHVybiBXZWJDb3JlOjpEYXRhRGV0ZWN0aW9uOjpkZXRlY3RDb250ZW50
SW5SYW5nZShtYWtlU2ltcGxlUmFuZ2UoX3JhbmdlSGFuZGxlLT5jb3JlUmFuZ2UoKSksIGZyb21X
S0RhdGFEZXRlY3RvclR5cGVzKHR5cGVzKSwgY29udGV4dCk7CiAjZWxzZQogICAgIHJldHVybiBu
aWw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3Rl
ZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcAppbmRl
eCAzNWI2NjQ3MmU3NzA1N2NjZWZlOTNkZjhmZGE5NTNkMGQ0MTk2YWM0Li4xMjA3OGUyMzk3N2I2
NDEyMWRjM2YzN2JhMWYxMDM0NWYwZTE4MWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZU92ZXJsYXkuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9HcmFw
aGljc0NvbnRleHQuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1BhZ2VPdmVybGF5Lmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybU1vdXNlRXZlbnQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1Jhbmdl
Lmg+CiAKIG5hbWVzcGFjZSBBUEkgewogCkBAIC0xMzgsNyArMTM5LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgaWYgKCFhY3Rpb25Db250ZXh0IHx8ICFhcGlSYW5nZSkKICAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgcmV0dXJuIHsgeyBhY3Rpb25Db250ZXh0LCBXZWJL
aXQ6OnRvSW1wbChhcGlSYW5nZSktPmNvcmVSYW5nZSgpIH0gfTsKKyAgICAgICAgcmV0dXJuIHsg
eyBhY3Rpb25Db250ZXh0LCBtYWtlU2ltcGxlUmFuZ2UoV2ViS2l0Ojp0b0ltcGwoYXBpUmFuZ2Up
LT5jb3JlUmFuZ2UoKSkgfSB9OwogICAgIH0KIAogICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZFBy
ZXNlbnRVSShXZWJLaXQ6OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSkgb3ZlcnJpZGUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFj
L1dLRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IDFiNmJiNzdlY2E3ZTZlYzBmMWY2MWU4NzIxMmM0
YzQ1ZjY5NmI2NjQuLjMwMjExYzk3ODdkNjM4YzFhNmY1ZDhkZTA1NTQ4MGFkNDM2ZjUwOWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFj
L1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtMTI5LDcgKzEyOSw3IEBAIC0gKEJPT0wpaXND
b2xsYXBzZWQKIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHMKIHsKICAgICBfaW1wbC0+b3duZXJEb2N1
bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIHJldHVy
biBjcmVhdGVOU0FycmF5KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UmVjdHMo
Kl9pbXBsKSkuYXV0b3JlbGVhc2UoKTsKKyAgICByZXR1cm4gY3JlYXRlTlNBcnJheShXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKG1ha2VTaW1wbGVSYW5nZSgqX2ltcGwp
KSkuYXV0b3JlbGVhc2UoKTsKIH0KIAogLSAoV0tET01SYW5nZSAqKXJhbmdlQnlFeHBhbmRpbmdU
b1dvcmRCb3VuZGFyeUJ5Q2hhcmFjdGVyczooTlNVSW50ZWdlciljaGFyYWN0ZXJzIGluRGlyZWN0
aW9uOihXS0RPTVJhbmdlRGlyZWN0aW9uKWRpcmVjdGlvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01UZXh0SXRlcmF0b3Iu
bW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TVRleHRJdGVyYXRvci5tbQppbmRleCA1ZjQ2YjFmNjE4OGY4NWQxMmUwYzhjODNkMzZkZDBkZDI0
YmMyOWMzLi5iMWI4NjMwNjg5ZjA5ZGM4MWJiZjE3MmMzMjBlNjJlOTNlYjdjZDk5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL21hYy9XS0RP
TVRleHRJdGVyYXRvci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL21hYy9XS0RPTVRleHRJdGVyYXRvci5tbQpAQCAtNDgsNyArNDgsNyBAQCAtIChp
ZClpbml0V2l0aFJhbmdlOihXS0RPTVJhbmdlICopcmFuZ2UKICAgICBpZiAoIXJhbmdlKQogICAg
ICAgICByZXR1cm4gc2VsZjsKIAotICAgIF90ZXh0SXRlcmF0b3IgPSBtYWtlVW5pcXVlPFdlYkNv
cmU6OlRleHRJdGVyYXRvcj4oKldlYktpdDo6dG9XZWJDb3JlUmFuZ2UocmFuZ2UpKTsKKyAgICBf
dGV4dEl0ZXJhdG9yID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpUZXh0SXRlcmF0b3I+KG1ha2VTaW1w
bGVSYW5nZSgqV2ViS2l0Ojp0b1dlYkNvcmVSYW5nZShyYW5nZSkpKTsKICAgICByZXR1cm4gc2Vs
ZjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVSYW5nZUhhbmRsZS5jcHAK
aW5kZXggYTkxZjdmNzA3ODE3OGRmYmU0M2I1ODQ2YmMwMGM0NGViZDk2ZDc0Mi4uZDA3YmQ5OGEx
NzE2YmQ4MWNiMGM4YmU1OGI1ZjQxNzZhMWI3OWNkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxl
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9NL0lu
amVjdGVkQnVuZGxlUmFuZ2VIYW5kbGUuY3BwCkBAIC0xMjQsNyArMTI0LDcgQEAgUmVmUHRyPFdl
YkltYWdlPiBJbmplY3RlZEJ1bmRsZVJhbmdlSGFuZGxlOjpyZW5kZXJlZEltYWdlKFNuYXBzaG90
T3B0aW9ucyBvcHRpb24KICAgICBSZWY8RnJhbWU+IHByb3RlY3RvcigqZnJhbWUpOwogCiAgICAg
VmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7Ci0gICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKG1fcmFuZ2UpKTsKKyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG1ha2VT
aW1wbGVSYW5nZShtX3JhbmdlKSk7CiAKICAgICBmbG9hdCBzY2FsZUZhY3RvciA9IChvcHRpb25z
ICYgU25hcHNob3RPcHRpb25zRXhjbHVkZURldmljZVNjYWxlRmFjdG9yKSA/IDEgOiBmcmFtZS0+
cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIEludFJlY3QgcGFpbnRSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChtX3JhbmdlLT5hYnNvbHV0ZUJvdW5kaW5nUmVjdCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1dlYlBhZ2VDb2NvYS5t
bQppbmRleCA2NmFhNWI4MDA0MzViOGM1OGNiZTJjOGM2MjFlZjA4NjI2Mzg5ZmFiLi4wNzg2NmQw
YzJjNDZhODQxOGQ3MGViZjhjMWEyNjcwZGExYTYzYmIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9XZWJQYWdlQ29jb2EubW0KKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvV2ViUGFnZUNvY29hLm1tCkBAIC0xMjks
NyArMTI5LDcgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEF0TG9jYXRp
b24oY29uc3QgRmxvYXRQb2ludCYgZmxvYXRQb2ludCkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
YXV0byBbcmFuZ2UsIG9wdGlvbnNdID0gV1RGTW92ZSgqcmFuZ2VSZXN1bHQpOwotICAgIHBlcmZv
cm1EaWN0aW9uYXJ5TG9va3VwRm9yUmFuZ2UoKmZyYW1lLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2Up
LCBvcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Qm91bmNlKTsK
KyAgICBwZXJmb3JtRGljdGlvbmFyeUxvb2t1cEZvclJhbmdlKCpmcmFtZSwgcmFuZ2UsIG9wdGlv
bnMsIFRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpCb3VuY2UpOwogfQogCiB2
b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwRm9yU2VsZWN0aW9uKEZyYW1lJiBm
cmFtZSwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBUZXh0SW5kaWNhdG9yUHJl
c2VudGF0aW9uVHJhbnNpdGlvbiBwcmVzZW50YXRpb25UcmFuc2l0aW9uKQpAQCAtMTM5LDcgKzEz
OSw3IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURpY3Rpb25hcnlMb29rdXBGb3JTZWxlY3Rpb24o
RnJhbWUmIGZyYW1lLCBjb25zdCBWaXNpYmxlU2VsCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1
dG8gW3JhbmdlLCBvcHRpb25zXSA9IFdURk1vdmUoKnJlc3VsdCk7Ci0gICAgcGVyZm9ybURpY3Rp
b25hcnlMb29rdXBGb3JSYW5nZShmcmFtZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSwgb3B0aW9u
cywgcHJlc2VudGF0aW9uVHJhbnNpdGlvbik7CisgICAgcGVyZm9ybURpY3Rpb25hcnlMb29rdXBG
b3JSYW5nZShmcmFtZSwgcmFuZ2UsIG9wdGlvbnMsIHByZXNlbnRhdGlvblRyYW5zaXRpb24pOwog
fQogCiB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EaWN0aW9uYXJ5TG9va3VwT2ZDdXJyZW50U2VsZWN0
aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRD
b250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0ZpbmRDb250
cm9sbGVyLmNwcAppbmRleCA1MzE4NTUzOGI5ZTA1MTkwM2E5ZDZlZGU3NWI0ZTBlYzgzNTI2OTMx
Li4yYTU3ZmQyMDllNjM1NzBiNzM4OTIzZjBiNTlmYjNjY2RiMmY0ZDQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9GaW5kQ29udHJvbGxlci5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRmluZENvbnRyb2xsZXIuY3BwCkBAIC0y
MDQsNyArMjA0LDcgQEAgdm9pZCBGaW5kQ29udHJvbGxlcjo6dXBkYXRlRmluZFVJQWZ0ZXJQYWdl
U2Nyb2xsKGJvb2wgZm91bmQsIGNvbnN0IFN0cmluZyYgc3RyaW4KICAgICAgICAgICAgIFZlY3Rv
cjxJbnRSZWN0PiBtYXRjaFJlY3RzOwogICAgICAgICAgICAgaWYgKGF1dG8gcmFuZ2UgPSBtX3dl
YlBhZ2UtPmNvcmVQYWdlKCktPnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKSkgewogICAgICAgICAg
ICAgICAgIG1hdGNoUmVjdHMgPSBSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKCpyYW5n
ZSk7Ci0gICAgICAgICAgICAgICAgbV9maW5kTWF0Y2hlcy5hcHBlbmQoY3JlYXRlTGl2ZVJhbmdl
KCpyYW5nZSkpOworICAgICAgICAgICAgICAgIG1fZmluZE1hdGNoZXMuYXBwZW5kKCpyYW5nZSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3dlYlBhZ2UtPnNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6RGlkRmluZFN0cmluZyhzdHJpbmcsIG1hdGNoUmVjdHMsIG1hdGNoQ291bnQs
IG1fZm91bmRTdHJpbmdNYXRjaEluZGV4LCBkaWRXcmFwID09IERpZFdyYXA6OlllcykpOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3Mv
V2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCmluZGV4IDFlNmNiZGQ4YzQ1MTI0ODBhYTBhZTEwOTY0NjM4NjUxZWFlYTg1ZTYu
LjA2MjA4NTY1YTVhM2EyNWQyZjExY2FjODYxZDQ4NjBlNzgyMzdhZDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0yNjgs
NyArMjY4LDcgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBm
cmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKIAogICAgIGlmIChmcmFtZS5lZGl0b3Io
KS5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIGlmIChhdXRvIGNvbXBvc2l0aW9uUmFuZ2Ug
PSBmcmFtZS5lZGl0b3IoKS5jb21wb3NpdGlvblJhbmdlKCkpIHsKLSAgICAgICAgICAgIGNyZWF0
ZUxpdmVSYW5nZSgqY29tcG9zaXRpb25SYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0cyhwb3N0
TGF5b3V0RGF0YS5tYXJrZWRUZXh0UmVjdHMpOworICAgICAgICAgICAgcG9zdExheW91dERhdGEu
bWFya2VkVGV4dFJlY3RzID0gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHMoKmNv
bXBvc2l0aW9uUmFuZ2UpOwogICAgICAgICAgICAgY29udmVydENvbnRlbnRUb1Jvb3RWaWV3U2Vs
ZWN0aW9uUmVjdHModmlldywgcG9zdExheW91dERhdGEubWFya2VkVGV4dFJlY3RzKTsKIAogICAg
ICAgICAgICAgcG9zdExheW91dERhdGEubWFya2VkVGV4dCA9IHBsYWluVGV4dEZvckNvbnRleHQo
KmNvbXBvc2l0aW9uUmFuZ2UpOwpAQCAtMjk4LDcgKzI5OCw3IEBAIHZvaWQgV2ViUGFnZTo6Z2V0
UGxhdGZvcm1FZGl0b3JTdGF0ZShGcmFtZSYgZnJhbWUsIEVkaXRvclN0YXRlJiByZXN1bHQpIGNv
bnN0CiAgICAgICAgIGF1dG8gc2VsZWN0ZWRSYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRS
YW5nZSgpOwogICAgICAgICBTdHJpbmcgc2VsZWN0ZWRUZXh0OwogICAgICAgICBpZiAoc2VsZWN0
ZWRSYW5nZSkgewotICAgICAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3RlZFJhbmdlKS0+
Y29sbGVjdFNlbGVjdGlvblJlY3RzKHBvc3RMYXlvdXREYXRhLnNlbGVjdGlvblJlY3RzKTsKKyAg
ICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnNlbGVjdGlvblJlY3RzID0gUmVuZGVyT2JqZWN0Ojpj
b2xsZWN0U2VsZWN0aW9uUmVjdHMoKnNlbGVjdGVkUmFuZ2UpOwogICAgICAgICAgICAgY29udmVy
dENvbnRlbnRUb1Jvb3RWaWV3U2VsZWN0aW9uUmVjdHModmlldywgcG9zdExheW91dERhdGEuc2Vs
ZWN0aW9uUmVjdHMpOwogICAgICAgICAgICAgc2VsZWN0ZWRUZXh0ID0gcGxhaW5UZXh0Rm9yRGlz
cGxheSgqc2VsZWN0ZWRSYW5nZSk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zZWxlY3Rl
ZFRleHRMZW5ndGggPSBzZWxlY3RlZFRleHQubGVuZ3RoKCk7CkBAIC0xMDI0LDcgKzEwMjQsNyBA
QCB2b2lkIFdlYlBhZ2U6OmNvbXB1dGVBbmRTZW5kRWRpdERyYWdTbmFwc2hvdCgpCiAgICAgICAg
IFRleHRJbmRpY2F0b3JPcHRpb246OkluY2x1ZGVTbmFwc2hvdFdpdGhTZWxlY3Rpb25IaWdobGln
aHQKICAgICB9OwogICAgIGlmIChhdXRvIHJhbmdlID0gc3RkOjpleGNoYW5nZShtX3JhbmdlRm9y
RHJvcFNuYXBzaG90LCBXVEY6Om51bGxvcHQpKSB7Ci0gICAgICAgIGlmIChhdXRvIHRleHRJbmRp
Y2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoY3JlYXRlTGl2ZVJhbmdlKCpy
YW5nZSksIGRlZmF1bHRUZXh0SW5kaWNhdG9yT3B0aW9uc0ZvckVkaXREcmFnLCBUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgeyB9KSkKKyAgICAgICAgaWYgKGF1dG8g
dGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqcmFuZ2UsIGRl
ZmF1bHRUZXh0SW5kaWNhdG9yT3B0aW9uc0ZvckVkaXREcmFnLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgeyB9KSkKICAgICAgICAgICAgIHRleHRJbmRpY2F0b3JE
YXRhID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwogICAgIH0KICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZFJlY2VpdmVFZGl0RHJhZ1NuYXBzaG90KFdURk1vdmUodGV4dEluZGlj
YXRvckRhdGEpKSk7CkBAIC0xOTgyLDggKzE5ODIsNyBAQCB2b2lkIFdlYlBhZ2U6OmdldFJlY3Rz
Rm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0
eQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlv
blJlY3Q+IHNlbGVjdGlvblJlY3RzOwotICAgIGNyZWF0ZUxpdmVSYW5nZSgqcmFuZ2UpLT5jb2xs
ZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHNlbGVjdGlvblJlY3Rz
KTsKKyAgICBhdXRvIHNlbGVjdGlvblJlY3RzID0gUmVuZGVyT2JqZWN0Ojpjb2xsZWN0U2VsZWN0
aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKCpyYW5nZSk7CiAgICAgY29udmVydENv
bnRlbnRUb1Jvb3RWaWV3U2VsZWN0aW9uUmVjdHMoKmZyYW1lLnZpZXcoKSwgc2VsZWN0aW9uUmVj
dHMpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxs
YmFjayhzZWxlY3Rpb25SZWN0cywgY2FsbGJhY2tJRCkpOwogfQpAQCAtMjAyOSw4ICsyMDI4LDcg
QEAgdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQoaW50MzJf
dCBvZmZzZXQsIGNvbnN0IFN0cmluZyYgdGUKICAgICAgICAgfQogICAgIH0KIAotICAgIFZlY3Rv
cjxXZWJDb3JlOjpTZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0czsKLSAgICBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxp
bmVzKHNlbGVjdGlvblJlY3RzKTsKKyAgICBhdXRvIHNlbGVjdGlvblJlY3RzID0gUmVuZGVyT2Jq
ZWN0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKCpyYW5n
ZSk7CiAgICAgY29udmVydENvbnRlbnRUb1Jvb3RWaWV3U2VsZWN0aW9uUmVjdHMoKmZyYW1lLnZp
ZXcoKSwgc2VsZWN0aW9uUmVjdHMpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
U2VsZWN0aW9uUmVjdHNDYWxsYmFjayhzZWxlY3Rpb25SZWN0cywgY2FsbGJhY2tJRCkpOwogfQpA
QCAtMjMzMiw3ICsyMzMwLDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0QXV0b2NvcnJlY3Rpb25E
YXRhKGNvbnN0IFN0cmluZyYgdGV4dEZvckF1dG9jb3JyZWN0aW9uLCBDb20KIAogICAgIFZlY3Rv
cjxTZWxlY3Rpb25SZWN0PiBzZWxlY3Rpb25SZWN0czsKICAgICBpZiAodGV4dEZvclJhbmdlID09
IHRleHRGb3JBdXRvY29ycmVjdGlvbikKLSAgICAgICAgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKS0+
Y29sbGVjdFNlbGVjdGlvblJlY3RzKHNlbGVjdGlvblJlY3RzKTsKKyAgICAgICAgc2VsZWN0aW9u
UmVjdHMgPSBSZW5kZXJPYmplY3Q6OmNvbGxlY3RTZWxlY3Rpb25SZWN0cygqcmFuZ2UpOwogCiAg
ICAgYXV0byByb290Vmlld1NlbGVjdGlvblJlY3RzID0gc2VsZWN0aW9uUmVjdHMubWFwKFsmXShj
b25zdCBhdXRvJiBzZWxlY3Rpb25SZWN0KSAtPiBGbG9hdFJlY3QgeyByZXR1cm4gZnJhbWUudmll
dygpLT5jb250ZW50c1RvUm9vdFZpZXcoc2VsZWN0aW9uUmVjdC5yZWN0KCkpOyB9KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJ
T1MubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlP
Uy5tbQppbmRleCA0N2YzMGNhZDE0YmVlYTBlNzYzOWJmNGI5N2ExZjU2ODBmNDJmMGRiLi43Y2Fm
Y2JhYjc3NDI1ZWQwYjVhMDUzMGNkMTA1NzkwNGExMDljZTgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQpAQCAtMjA2
LDEwICsyMDYsNyBAQCAtICh2b2lkKWV4dGVuZFNlbGVjdGlvbjooQk9PTClzdGFydAogCiAtIChO
U0FycmF5ICopc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KGNvbnN0IFNpbXBsZVJhbmdlJily
YW5nZQogewotICAgIFZlY3RvcjxTZWxlY3Rpb25SZWN0PiByZWN0czsKLSAgICBjcmVhdGVMaXZl
UmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHMocmVjdHMpOwotCi0gICAgcmV0dXJu
IGNyZWF0ZU5TQXJyYXkocmVjdHMsIFtdIChhdXRvJiBjb3JlUmVjdCkgeworICAgIHJldHVybiBj
cmVhdGVOU0FycmF5KFJlbmRlck9iamVjdDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzKHJhbmdlKSwg
W10gKGF1dG8mIGNvcmVSZWN0KSB7CiAgICAgICAgIGF1dG8gd2ViUmVjdCA9IFtXZWJTZWxlY3Rp
b25SZWN0IHNlbGVjdGlvblJlY3RdOwogICAgICAgICB3ZWJSZWN0LnJlY3QgPSBjb3JlUmVjdC5y
ZWN0KCk7CiAgICAgICAgIHdlYlJlY3Qud3JpdGluZ0RpcmVjdGlvbiA9IGNvcmVSZWN0LmRpcmVj
dGlvbigpID09IFRleHREaXJlY3Rpb246OkxUUiA/IFdLV3JpdGluZ0RpcmVjdGlvbkxlZnRUb1Jp
Z2h0IDogV0tXcml0aW5nRGlyZWN0aW9uUmlnaHRUb0xlZnQ7CkBAIC0yMjYsNyArMjIzLDcgQEAg
LSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yQ29yZVJhbmdlOihjb25zdCBTaW1wbGVSYW5n
ZSYpcmFuZ2UKIAogLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzRm9yUmFuZ2U6KERPTVJhbmdl
ICopZG9tUmFuZ2UKIHsKLSAgICBhdXRvIHJhbmdlID0gY29yZShkb21SYW5nZSk7CisgICAgYXV0
byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjb3JlKGRvbVJhbmdlKSk7CiAgICAgcmV0dXJuIHJh
bmdlID8gW3NlbGYgc2VsZWN0aW9uUmVjdHNGb3JDb3JlUmFuZ2U6KnJhbmdlXSA6IG5pbDsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2Vi
VmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBv
cnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IGRlNWRhNDRhZmQ5MjhhM2YwOTk1MGI1MmU2
NGM2NTQwNWU1YmI5MjQuLmUyYzE5Y2ZkNTIyZjc0ZTZiNzdhMmJhMjM0MjgzMjBmMzMzMTM4Zjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZp
c2libGVQb3NpdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3Vw
cG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KQEAgLTQxNiw3ICs0MTYsNyBAQCAtIChET01SYW5n
ZSAqKWVuY2xvc2luZ1JhbmdlV2l0aERpY3RhdGlvblBocmFzZUFsdGVybmF0aXZlczooTlNBcnJh
eSAqKilhbHRlcm5hdAogICAgIGZvciAoYXV0byBtYXJrZXIgOiBkb2N1bWVudC5tYXJrZXJzKCku
bWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRl
cm5hdGl2ZXMpKSB7CiAgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPD0gb2Zmc2V0
ICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gb2Zmc2V0KSB7CiAgICAgICAgICAgICAqYWx0ZXJu
YXRpdmVzID0gY3JlYXRlTlNBcnJheShXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4obWFya2VyLT5k
YXRhKCkpKS5hdXRvcmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGtpdChyYW5nZSgqbm9k
ZSwgKm1hcmtlcikpOworICAgICAgICAgICAgcmV0dXJuIGtpdChtYWtlU2ltcGxlUmFuZ2UoKm5v
ZGUsICptYXJrZXIpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbmlsOwpAQCAtNDMz
LDcgKzQzMyw3IEBAIC0gKERPTVJhbmdlICopZW5jbG9zaW5nUmFuZ2VXaXRoQ29ycmVjdGlvbklu
ZGljYXRvcgogICAgIGF1dG8mIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKICAgICBmb3Ig
KGF1dG8gbWFya2VyIDogZG9jdW1lbnQubWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUsIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZykpIHsKICAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQo
KSA8PSBvZmZzZXQgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA+PSBvZmZzZXQpCi0gICAgICAgICAg
ICByZXR1cm4ga2l0KHJhbmdlKCpub2RlLCAqbWFya2VyKSk7CisgICAgICAgICAgICByZXR1cm4g
a2l0KG1ha2VTaW1wbGVSYW5nZSgqbm9kZSwgKm1hcmtlcikpOwogICAgIH0KICAgICByZXR1cm4g
bmlsOwogfQpAQCAtNDc1LDExICs0NzUsMTEgQEAgLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdXb3Jk
UmFuZ2UKIAogKyAoRE9NUmFuZ2UgKilyYW5nZUZvckZpcnN0UG9zaXRpb246KFdlYlZpc2libGVQ
b3NpdGlvbiAqKWZpcnN0IHNlY29uZDooV2ViVmlzaWJsZVBvc2l0aW9uICopc2Vjb25kCiB7Ci0g
ICAgYXV0byBmaXJzdFZQID0gW2ZpcnN0IF92aXNpYmxlUG9zaXRpb25dOwotICAgIGF1dG8gc2Vj
b25kVlAgPSBbc2Vjb25kIF92aXNpYmxlUG9zaXRpb25dOwotICAgIGlmIChmaXJzdFZQIDwgc2Vj
b25kVlApCi0gICAgICAgIHN0ZDo6c3dhcChmaXJzdFZQLCBzZWNvbmRWUCk7Ci0gICAgcmV0dXJu
IGtpdChtYWtlU2ltcGxlUmFuZ2UoZmlyc3RWUCwgc2Vjb25kVlApKTsKKyAgICBhdXRvIGZpcnN0
UG9zaXRpb24gPSBbZmlyc3QgX3Zpc2libGVQb3NpdGlvbl07CisgICAgYXV0byBzZWNvbmRQb3Np
dGlvbiA9IFtzZWNvbmQgX3Zpc2libGVQb3NpdGlvbl07CisgICAgaWYgKGZpcnN0UG9zaXRpb24g
PCBzZWNvbmRQb3NpdGlvbikKKyAgICAgICAgc3RkOjpzd2FwKGZpcnN0UG9zaXRpb24sIHNlY29u
ZFBvc2l0aW9uKTsKKyAgICByZXR1cm4ga2l0KG1ha2VTaW1wbGVSYW5nZShmaXJzdFBvc2l0aW9u
LCBzZWNvbmRQb3NpdGlvbikpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9ET00vRE9NLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTS5t
bQppbmRleCA3YWU0NTU4NjViNDY1MGQ5NmZlNjQzMmEzOGRlNDE3MWEwZDc5ODZhLi4xNDNmMDhk
MzU5MmEzMDU2NWMxNTcwYzdlNjcxY2ZmY2NmMjQyNGExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9ET00vRE9NLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET00ubW0KQEAgLTU4MSwzMSArNTgxLDI3IEBAIC0gKE5TSW1hZ2UgKilyZW5kZXJlZEltYWdl
Rm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAogLSAoQ0dJbWFnZVJlZilyZW5k
ZXJlZEltYWdlRm9yY2luZ0JsYWNrVGV4dDooQk9PTClmb3JjZUJsYWNrVGV4dAogI2VuZGlmCiB7
Ci0gICAgYXV0byYgcmFuZ2UgPSAqY29yZShzZWxmKTsKLSAgICBhdXRvKiBmcmFtZSA9IHJhbmdl
Lm93bmVyRG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2UoKmNvcmUoc2VsZikpOworICAgIGF1dG8gZnJhbWUgPSBtYWtlUmVmUHRyKHJhbmdlLnN0YXJ0
LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS5mcmFtZSgpKTsKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0ZWRGcmFtZSgqZnJhbWUpOwor
ICAgIGF1dG8gcmVuZGVyZWRJbWFnZSA9IGNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKCpmcmFtZSwg
cmFuZ2UsIGZvcmNlQmxhY2tUZXh0KTsKIAotICAgIC8vIGlPUyB1c2VzIENHSW1hZ2VSZWYgZm9y
IGRyYWcgaW1hZ2VzLCB3aGljaCBkb2Vzbid0IHN1cHBvcnQgc2VwYXJhdGUgbG9naWNhbC9waHlz
aWNhbCBzaXplcy4KICNpZiBQTEFURk9STShNQUMpCi0gICAgUmV0YWluUHRyPE5TSW1hZ2U+IHJl
bmRlcmVkSW1hZ2UgPSBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZSgqZnJhbWUsIHJhbmdlLCBmb3Jj
ZUJsYWNrVGV4dCk7Ci0KKyAgICAvLyBpT1MgdXNlcyBDR0ltYWdlUmVmIGZvciBkcmFnIGltYWdl
cywgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHNlcGFyYXRlIGxvZ2ljYWwvcGh5c2ljYWwgc2l6ZXMu
CiAgICAgSW50U2l6ZSBzaXplKFtyZW5kZXJlZEltYWdlIHNpemVdKTsKICAgICBzaXplLnNjYWxl
KDEgLyBmcmFtZS0+cGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICBbcmVuZGVyZWRJ
bWFnZSBzZXRTaXplOnNpemVdOworI2VuZGlmCiAKICAgICByZXR1cm4gcmVuZGVyZWRJbWFnZS5h
dXRvcmVsZWFzZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2Uo
KmZyYW1lLCByYW5nZSwgZm9yY2VCbGFja1RleHQpLmF1dG9yZWxlYXNlKCk7Ci0jZW5kaWYKIH0K
IAogLSAoTlNBcnJheSAqKXRleHRSZWN0cwogewotICAgIGF1dG8mIHJhbmdlID0gKmNvcmUoc2Vs
Zik7Ci0gICAgcmFuZ2Uub3duZXJEb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoKmNvcmUoc2Vs
ZikpOworICAgIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJ
Z25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShSZW5k
ZXJPYmplY3Q6OmFic29sdXRlVGV4dFJlY3RzKHJhbmdlKSkuYXV0b3JlbGVhc2UoKTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTURvY3VtZW50Lm1tIGIv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTURvY3VtZW50Lm1tCmluZGV4IGRkODVmOTc5
NzgzZDc2NmUxYmVmYTdmZDU1NmJhMWFjOGQ1OGQzYzQuLjA4ZWMyZmEwNGVlYmYzMzNhOTQwN2Fi
MGY3NDQxOWQ4MmI3YzMxMWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01Eb2N1bWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NRG9j
dW1lbnQubW0KQEAgLTc2LDYgKzc2LDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvUHJvY2Vzc2luZ0lu
c3RydWN0aW9uLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L1NlY3VyaXR5T3JpZ2luLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1w
b3J0IDxXZWJDb3JlL1N0eWxlUHJvcGVydGllcy5oPgogI2ltcG9ydCA8V2ViQ29yZS9TdHlsZVNo
ZWV0TGlzdC5oPgogI2ltcG9ydCA8V2ViQ29yZS9UZXh0Lmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9ET00vRE9NUmFuZ2UubW0KaW5kZXggZDBkMzBjZTlhODFiNzE4YjlhYzIyODAzNGViMDU3MTU5
OWVkZDcxMC4uNWVlMGJjZGZkOTk3NDM3MmEzZWJjNGFkMmE4N2FmODNiZGY1M2Y1MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZS5tbQpAQCAtMzEsOCArMzEsOCBAQAogI2lt
cG9ydCA8V2ViQ29yZS9Eb2N1bWVudEZyYWdtZW50Lmg+CiAjaW1wb3J0ICJFeGNlcHRpb25IYW5k
bGVycy5oIgogI2ltcG9ydCA8V2ViQ29yZS9KU0V4ZWNTdGF0ZS5oPgotI2ltcG9ydCA8V2ViQ29y
ZS9Ob2RlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1JhbmdlLmg+CisjaW1wb3J0IDxXZWJDb3JlL1Np
bXBsZVJhbmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1RocmVhZENoZWNrLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL1dlYkNvcmVPYmpDRXh0cmFzLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYlNjcmlwdE9i
amVjdFByaXZhdGUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01SYW5nZUludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NUmFuZ2VJ
bnRlcm5hbC5oCmluZGV4IGU2ODE5YTVmOGQ1ODhkMmU5YjY4N2YwZDk3OWY2N2NiMjNhODlhMTku
LmY4MDRlN2VjOTJjMjg1MGJkMWMzMDczYjI2YzZiZjNmYzJhZTMzYWEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01SYW5nZUludGVybmFsLmgKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVJhbmdlSW50ZXJuYWwuaApAQCAtMjMsOCArMjMsMTMg
QEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2ltcG9ydCA8V2ViQ29yZS9TaW1wbGVSYW5nZS5o
PgotI2ltcG9ydCA8V2ViS2l0TGVnYWN5L0RPTVJhbmdlLmg+CisjaW1wb3J0ICJET01SYW5nZS5o
IgorI2ltcG9ydCA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
UmFuZ2U7CitzdHJ1Y3QgU2ltcGxlUmFuZ2U7Cit9CiAKIFdlYkNvcmU6OlJhbmdlKiBjb3JlKERP
TVJhbmdlICopOwogRE9NUmFuZ2UgKmtpdChXZWJDb3JlOjpSYW5nZSopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggMjlmYzJj
NzcwOWFiNGRhOTg0MTc5ZjNjYmM4Zjc0ZTBiODI5MWE3Ny4uYWU1YzQ5YmYxNDc1OGYzMTQwOTQy
MGQ5ZjZkNTVhMmU2MzYyNjFjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9E
T00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCkBAIC02MSw2ICs2MSw3IEBACiAjaW1wb3J0IDxXZWJD
b3JlL1JlbmRlclRleHQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUm91bmRlZFJlY3QuaD4KICNpbXBv
cnQgPFdlYkNvcmUvU2hhcmVkQnVmZmVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1Zpc2libGVQb3NpdGlvbi5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9WaXNpYmxlVW5pdHMuaD4KICNpbXBvcnQgPFdlYkNvcmUvV0FLQXBwS2l0U3R1YnMuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VdGlsaXR5Lm1tIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVV0aWxpdHkubW0KaW5kZXggMTAyOGYwOTZiYTE0
NWViNTQ3N2I3MTJhMGViNjQ2MjQ3YjE1OGJiZi4uNDk2YzcyZTlmZjZkNjFjNDdjNmE5MDhkYTkw
ZGJmM2UwZTY2N2M1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RP
TVV0aWxpdHkubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVV0aWxpdHku
bW0KQEAgLTcwLDYgKzcwLDcgQEAKICNpbXBvcnQgPFdlYkNvcmUvSlNXaW5kb3dQcm94eS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9KU1hQYXRoRXhwcmVzc2lvbi5oPgogI2ltcG9ydCA8V2ViQ29yZS9K
U1hQYXRoUmVzdWx0Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJhbmdlLmg+CiAjaW1wb3J0
IDxXZWJDb3JlL1dlYlNjcmlwdE9iamVjdFByaXZhdGUuaD4KIAogc3RhdGljIFdlYlNjcmlwdE9i
amVjdCAqY3JlYXRlRE9NV3JhcHBlcihKU0M6OkpTT2JqZWN0JiBqc1dyYXBwZXIpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vV2ViRE9NT3BlcmF0aW9ucy5tbSBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9XZWJET01PcGVyYXRpb25zLm1tCmluZGV4IGQzYWU3
ZjZlZjgzZDIwOGYyNjliNmUxNjJkYmUxNDU0NjJkZmI5NmYuLmNhZDM1OTFiZTYzMzIzZWU2N2Fh
NmFmOGQxM2U0NWZkNzE2MGRhYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9XZWJET01PcGVyYXRpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9XZWJET01PcGVyYXRpb25zLm1tCkBAIC01Niw2ICs1Niw3IEBACiAjaW1wb3J0IDxXZWJDb3Jl
L1JlbmRlckVsZW1lbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUvUmVuZGVyVHJlZUFzVGV4dC5oPgog
I2ltcG9ydCA8V2ViQ29yZS9TaGFkb3dSb290Lmg+CisjaW1wb3J0IDxXZWJDb3JlL1NpbXBsZVJh
bmdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1doZWVsRXZlbnQuaD4KICNpbXBvcnQgPFdlYkNvcmUv
bWFya3VwLmg+CiAjaW1wb3J0IDxXZWJLaXRMZWdhY3kvRE9NRXh0ZW5zaW9ucy5oPgpAQCAtMTg1
LDEzICsxODYsMTMgQEAgQGltcGxlbWVudGF0aW9uIERPTVJhbmdlIChXZWJET01SYW5nZU9wZXJh
dGlvbnMpCiAKIC0gKFdlYkFyY2hpdmUgKil3ZWJBcmNoaXZlCiB7Ci0gICAgcmV0dXJuIFtbW1dl
YkFyY2hpdmUgYWxsb2NdIF9pbml0V2l0aENvcmVMZWdhY3lXZWJBcmNoaXZlOkxlZ2FjeVdlYkFy
Y2hpdmU6OmNyZWF0ZSgqY29yZShzZWxmKSldIGF1dG9yZWxlYXNlXTsKKyAgICByZXR1cm4gW1tb
V2ViQXJjaGl2ZSBhbGxvY10gX2luaXRXaXRoQ29yZUxlZ2FjeVdlYkFyY2hpdmU6TGVnYWN5V2Vi
QXJjaGl2ZTo6Y3JlYXRlKG1ha2VTaW1wbGVSYW5nZSgqY29yZShzZWxmKSkpXSBhdXRvcmVsZWFz
ZV07CiB9CiAKIC0gKE5TU3RyaW5nICopbWFya3VwU3RyaW5nCiB7CiAgICAgYXV0byYgcmFuZ2Ug
PSAqY29yZShzZWxmKTsKLSAgICByZXR1cm4gU3RyaW5nIHsgZG9jdW1lbnRUeXBlU3RyaW5nKHJh
bmdlLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQoKSkgKyBzZXJpYWxpemVQcmVzZXJ2aW5nVmlz
dWFsQXBwZWFyYW5jZShyYW5nZSwgbnVsbHB0ciwgQW5ub3RhdGVGb3JJbnRlcmNoYW5nZTo6WWVz
KSB9OworICAgIHJldHVybiBTdHJpbmcgeyBkb2N1bWVudFR5cGVTdHJpbmcocmFuZ2Uub3duZXJE
b2N1bWVudCgpKSArIHNlcmlhbGl6ZVByZXNlcnZpbmdWaXN1YWxBcHBlYXJhbmNlKG1ha2VTaW1w
bGVSYW5nZShyYW5nZSksIG51bGxwdHIsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2U6OlllcykgfTsK
IH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9X
ZWJGcmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
aW5kZXggZjc5NDE5ODBmNjRhMGE0MGE1MDY1NjY3ODcxZjViMjg2Njc2ZmNkOS4uZWY3MzUwMDRl
YTZkMDVlOTEyODZlY2ZhNmYwZjhkNDAxMDVlNjZkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC01ODIsNyArNTgyLDcgQEAgLSAoTlNTdHJpbmcg
Kilfc3RyaW5nRm9yUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKIHsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gQCIiOwotICAgIHJldHVybiBwbGFpblRleHQoKmNvcmUocmFuZ2UpLCBX
ZWJDb3JlOjpUZXh0SXRlcmF0b3JEZWZhdWx0QmVoYXZpb3IsIHRydWUpOworICAgIHJldHVybiBw
bGFpblRleHQobWFrZVNpbXBsZVJhbmdlKCpjb3JlKHJhbmdlKSksIFdlYkNvcmU6OlRleHRJdGVy
YXRvckRlZmF1bHRCZWhhdmlvciwgdHJ1ZSk7CiB9CiAKIC0gKE9wdGlvblNldDxXZWJDb3JlOjpQ
YWludEJlaGF2aW9yPilfcGFpbnRCZWhhdmlvckZvckRlc3RpbmF0aW9uQ29udGV4dDooQ0dDb250
ZXh0UmVmKWNvbnRleHQKQEAgLTgwOSwxNSArODA5LDE1IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRU
b05TUmFuZ2U6KGNvbnN0IFdlYkNvcmU6OlNpbXBsZVJhbmdlJilyYW5nZQogICAgIHJldHVybiBj
aGFyYWN0ZXJSYW5nZShtYWtlQm91bmRhcnlQb2ludEJlZm9yZU5vZGVDb250ZW50cygqZWxlbWVu
dCksIHJhbmdlKTsKIH0KIAotLSAoUmVmUHRyPFdlYkNvcmU6OlJhbmdlPilfY29udmVydFRvRE9N
UmFuZ2U6KE5TUmFuZ2UpbnNyYW5nZQorLSAoT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+
KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCiB7CiAgICAgcmV0dXJuIFtzZWxm
IF9jb252ZXJ0VG9ET01SYW5nZTpuc3JhbmdlIHJhbmdlSXNSZWxhdGl2ZVRvOldlYlJhbmdlSXNS
ZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3RdOwogfQogCi0tIChSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+
KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzooV2Vi
UmFuZ2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0aXZlVG8KKy0gKE9wdGlvbmFsPFdlYkNvcmU6
OlNpbXBsZVJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UgcmFuZ2VJc1Jl
bGF0aXZlVG86KFdlYlJhbmdlSXNSZWxhdGl2ZVRvKXJhbmdlSXNSZWxhdGl2ZVRvCiB7CiAgICAg
aWYgKHJhbmdlLmxvY2F0aW9uID09IE5TTm90Rm91bmQpCi0gICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogCiAgICAgaWYgKHJhbmdlSXNSZWxhdGl2
ZVRvID09IFdlYlJhbmdlSXNSZWxhdGl2ZVRvOjpFZGl0YWJsZVJvb3QpIHsKICAgICAgICAgLy8g
T3VyIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGNvZGUgcGF0aCBpcyBvbmx5IGNh
bGxlZCBieSBpbnB1dCBtZXRob2RzIHRoYXQKQEAgLTgyOCwzMCArODI4LDMwIEBAIC0gKFJlZlB0
cjxXZWJDb3JlOjpSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlIHJhbmdl
SXNSZWxhdGl2ZVRvOihXCiAgICAgICAgIC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlkZWEg
b2YgYW4gaW5wdXQgY29udGV4dC4KICAgICAgICAgYXV0byogZWxlbWVudCA9IF9wcml2YXRlLT5j
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVu
dCgpOwogICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpKTsKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVy
UmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCplbGVtZW50KSwgcmFuZ2UpOwog
ICAgIH0KIAogICAgIEFTU0VSVChyYW5nZUlzUmVsYXRpdmVUbyA9PSBXZWJSYW5nZUlzUmVsYXRp
dmVUbzo6UGFyYWdyYXBoKTsKIAogICAgIGF1dG8gcGFyYWdyYXBoU3RhcnQgPSBtYWtlQm91bmRh
cnlQb2ludChzdGFydE9mUGFyYWdyYXBoKF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSk7CiAgICAgaWYgKCFwYXJhZ3JhcGhTdGFydCkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAK
ICAgICBhdXRvIHNjb3BlRW5kID0gbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cyhw
YXJhZ3JhcGhTdGFydC0+Y29udGFpbmVyLT50cmVlU2NvcGUoKS5yb290Tm9kZSgpKTsKLSAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKFdlYkNvcmU6OnJlc29sdmVDaGFyYWN0ZXJSYW5nZSh7IFdU
Rk1vdmUoKnBhcmFncmFwaFN0YXJ0KSwgV1RGTW92ZShzY29wZUVuZCkgfSwgcmFuZ2UpKTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHsgV1RGTW92ZSgqcGFyYWdy
YXBoU3RhcnQpLCBXVEZNb3ZlKHNjb3BlRW5kKSB9LCByYW5nZSk7CiB9CiAKIC0gKERPTVJhbmdl
ICopX2NvbnZlcnROU1JhbmdlVG9ET01SYW5nZTooTlNSYW5nZSluc3JhbmdlCiB7Ci0gICAgcmV0
dXJuIGtpdChbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6bnNyYW5nZV0uZ2V0KCkpOworICAgIHJl
dHVybiBraXQoW3NlbGYgX2NvbnZlcnRUb0RPTVJhbmdlOm5zcmFuZ2VdKTsKIH0KIAogLSAoTlNS
YW5nZSlfY29udmVydERPTVJhbmdlVG9OU1JhbmdlOihET01SYW5nZSAqKXJhbmdlCiB7CiAgICAg
aWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwot
ICAgIHJldHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZToqY29yZShyYW5nZSldOworICAgIHJl
dHVybiBbc2VsZiBfY29udmVydFRvTlNSYW5nZTptYWtlU2ltcGxlUmFuZ2UoKmNvcmUocmFuZ2Up
KV07CiB9CiAKIC0gKERPTVJhbmdlICopX21hcmtET01SYW5nZQpAQCAtMTEyOSw4ICsxMTI5LDcg
QEAgLSAoTlNSYW5nZSlfc2VsZWN0ZWROU1JhbmdlCiAKIC0gKHZvaWQpX3NlbGVjdE5TUmFuZ2U6
KE5TUmFuZ2UpcmFuZ2UKIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGRvbVJhbmdlID0g
W3NlbGYgX2NvbnZlcnRUb0RPTVJhbmdlOnJhbmdlXTsKLSAgICBpZiAoZG9tUmFuZ2UpCisgICAg
aWYgKGF1dG8gZG9tUmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6cmFuZ2VdKQogICAg
ICAgICBfcHJpdmF0ZS0+Y29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24oV2ViQ29y
ZTo6VmlzaWJsZVNlbGVjdGlvbigqZG9tUmFuZ2UsIFdlYkNvcmU6OlNFTF9ERUZBVUxUX0FGRklO
SVRZKSk7CiB9CiAKQEAgLTEyMTcsMTEgKzEyMTYsOCBAQCAtICh2b2lkKXNlbGVjdE5TUmFuZ2U6
KE5TUmFuZ2UpcmFuZ2UKIAogLSAodm9pZClzZWxlY3RXaXRob3V0Q2xvc2luZ1R5cGluZ05TUmFu
Z2U6KE5TUmFuZ2UpcmFuZ2UKIHsKLSAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGRvbVJhbmdl
ID0gW3NlbGYgX2NvbnZlcnRUb0RPTVJhbmdlOnJhbmdlXTsKLSAgICBpZiAoZG9tUmFuZ2UpIHsK
LSAgICAgICAgY29uc3QgYXV0byYgbmV3U2VsZWN0aW9uID0gV2ViQ29yZTo6VmlzaWJsZVNlbGVj
dGlvbigqZG9tUmFuZ2UsIFdlYkNvcmU6OlNFTF9ERUZBVUxUX0FGRklOSVRZKTsKLSAgICAgICAg
X3ByaXZhdGUtPmNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlv
biwgeyB9KTsKLSAgICAgICAgCisgICAgaWYgKGF1dG8gZG9tUmFuZ2UgPSBbc2VsZiBfY29udmVy
dFRvRE9NUmFuZ2U6cmFuZ2VdKSB7CisgICAgICAgIF9wcml2YXRlLT5jb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnNldFNlbGVjdGlvbigqZG9tUmFuZ2UsIHsgfSk7CiAgICAgICAgIF9wcml2YXRlLT5j
b3JlRnJhbWUtPmVkaXRvcigpLmVuc3VyZUxhc3RFZGl0Q29tbWFuZEhhc0N1cnJlbnRTZWxlY3Rp
b25JZk9wZW5Gb3JNb3JlVHlwaW5nKCk7CiAgICAgfQogfQpAQCAtMTc0MSw3ICsxNzM3LDcgQEAg
LSAodm9pZClnZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6KE5TQXJyYXkgKiopb3V0UmFuZ2VzIGFu
ZE1ldGFkYXRhczooTlNBcnJheSAqKikKICAgICAgICAgICAgIGlmICghbWV0YWRhdGEpCiAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIERPTVJhbmdl
ICpkb21SYW5nZSA9IGtpdChyYW5nZSgqbm9kZSwgKm1hcmtlcikpOworICAgICAgICAgICAgRE9N
UmFuZ2UgKmRvbVJhbmdlID0ga2l0KG1ha2VTaW1wbGVSYW5nZSgqbm9kZSwgKm1hcmtlcikpOwog
CiAgICAgICAgICAgICBpZiAobWV0YWRhdGEgIT0gcHJldmlvdXNNZXRhZGF0YSkgewogICAgICAg
ICAgICAgICAgIFttZXRhZGF0YXMgYWRkT2JqZWN0Om1ldGFkYXRhXTsKQEAgLTE3NzQsNyArMTc3
MCw3IEBAIC0gKGlkKWRpY3RhdGlvblJlc3VsdE1ldGFkYXRhRm9yUmFuZ2U6KERPTVJhbmdlICop
cmFuZ2UKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgYXV0byBt
YXJrZXJzID0gY29yZShzZWxmKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLm1hcmtlcnNJblJhbmdl
KCpjb3JlKHJhbmdlKSwgV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblJlc3VsdCk7
CisgICAgYXV0byBtYXJrZXJzID0gY29yZShzZWxmKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLm1h
cmtlcnNJblJhbmdlKG1ha2VTaW1wbGVSYW5nZSgqY29yZShyYW5nZSkpLCBXZWJDb3JlOjpEb2N1
bWVudE1hcmtlcjo6RGljdGF0aW9uUmVzdWx0KTsKIAogICAgIC8vIFVJS2l0IHNob3VsZCBvbmx5
IGV2ZXIgZ2l2ZSB1cyBhIERPTVJhbmdlIGZvciBhIHBocmFzZSB3aXRoIGFsdGVybmF0aXZlcywg
d2hpY2ggc2hvdWxkIG5vdCBiZSBwYXJ0IG9mIG1vcmUgdGhhbiBvbmUgcmVzdWx0LgogICAgIEFT
U0VSVChtYXJrZXJzLnNpemUoKSA8PSAxKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvbWFjL1dlYlZpZXcvV2ViRnJhbWVJbnRlcm5hbC5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJGcmFtZUludGVybmFsLmgKaW5kZXggZjE1NzJiZDU2ZjAyNWJmMzlmNmQ1
ZmMzODFhZDdiZGY1ZjQwNzY4NC4uMzBjNDhkMTVlOWY2MTc5YTk5NWQxOWE5M2U3YTFiMjJkMWEz
MDMxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZUludGVybmFsLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFt
ZUludGVybmFsLmgKQEAgLTE2Niw4ICsxNjYsOCBAQCBXZWJWaWV3ICpnZXRXZWJWaWV3KFdlYkZy
YW1lICp3ZWJGcmFtZSk7CiAjZW5kaWYKIAogLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZToo
Y29uc3QgV2ViQ29yZTo6U2ltcGxlUmFuZ2UmKXJhbmdlOwotLSAoUmVmUHRyPFdlYkNvcmU6OlJh
bmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2U7Ci0tIChSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZSByYW5nZUlzUmVsYXRp
dmVUbzooV2ViUmFuZ2VJc1JlbGF0aXZlVG8pcmFuZ2VJc1JlbGF0aXZlVG87CistIChPcHRpb25h
bDxXZWJDb3JlOjpTaW1wbGVSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdl
OworLSAoT3B0aW9uYWw8V2ViQ29yZTo6U2ltcGxlUmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZToo
TlNSYW5nZSlyYW5nZSByYW5nZUlzUmVsYXRpdmVUbzooV2ViUmFuZ2VJc1JlbGF0aXZlVG8pcmFu
Z2VJc1JlbGF0aXZlVG87CiAKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilfZG9jdW1lbnRGcmFn
bWVudFdpdGhNYXJrdXBTdHJpbmc6KE5TU3RyaW5nICopbWFya3VwU3RyaW5nIGJhc2VVUkxTdHJp
bmc6KE5TU3RyaW5nICopYmFzZVVSTFN0cmluZzsKIC0gKERPTURvY3VtZW50RnJhZ21lbnQgKilf
ZG9jdW1lbnRGcmFnbWVudFdpdGhOb2Rlc0FzUGFyYWdyYXBoczooTlNBcnJheSAqKW5vZGVzOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0KaW5kZXgg
NzIxMTFkNGJmYmQxNWJmYWU0ZjdmMmRhMjZkNDY2MjRlMWE1OTMyZS4uM2FkZjYzNDBlMDc4MDc1
YzFkN2MzMGEzNzkyYWVjNDNiMjJlYTZkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJIVE1MVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCkBAIC0yMzc2LDcgKzIzNzYsOCBAQCAtIChET01Eb2N1
bWVudEZyYWdtZW50ICopX2RvY3VtZW50RnJhZ21lbnRGcm9tUGFzdGVib2FyZDooTlNQYXN0ZWJv
YXJkICopcGFzdGVibwogICAgIGlmIChbcGJvYXJkVHlwZSBpc0VxdWFsVG9TdHJpbmc6V2ViQ29y
ZTo6bGVnYWN5U3RyaW5nUGFzdGVib2FyZFR5cGUoKV0pIHsKICAgICAgICAgaWYgKCFjb250ZXh0
KQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAgICAgcmV0dXJuIGtpdChjcmVhdGVGcmFn
bWVudEZyb21UZXh0KCpjb3JlKGNvbnRleHQpLCBbW3Bhc3RlYm9hcmQgc3RyaW5nRm9yVHlwZTpX
ZWJDb3JlOjpsZWdhY3lTdHJpbmdQYXN0ZWJvYXJkVHlwZSgpXSBwcmVjb21wb3NlZFN0cmluZ1dp
dGhDYW5vbmljYWxNYXBwaW5nXSkucHRyKCkpOworICAgICAgICBhdXRvIHN0cmluZyA9IFtbcGFz
dGVib2FyZCBzdHJpbmdGb3JUeXBlOldlYkNvcmU6OmxlZ2FjeVN0cmluZ1Bhc3RlYm9hcmRUeXBl
KCldIHByZWNvbXBvc2VkU3RyaW5nV2l0aENhbm9uaWNhbE1hcHBpbmddOworICAgICAgICByZXR1
cm4ga2l0KGNyZWF0ZUZyYWdtZW50RnJvbVRleHQobWFrZVNpbXBsZVJhbmdlKCpjb3JlKGNvbnRl
eHQpKSwgc3RyaW5nKS5wdHIoKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIG5pbDsKQEAgLTY0MTMs
NyArNjQxNCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAg
ICBMT0coVGV4dElucHV0LCAiYXR0cmlidXRlZFN1YnN0cmluZ0Zyb21SYW5nZTooJXUsICV1KSAt
PiBuaWwiLCBuc1JhbmdlLmxvY2F0aW9uLCBuc1JhbmdlLmxlbmd0aCk7CiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgfQotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBbZnJhbWUg
X2NvbnZlcnRUb0RPTVJhbmdlOm5zUmFuZ2VdOworICAgIGF1dG8gcmFuZ2UgPSBbZnJhbWUgX2Nv
bnZlcnRUb0RPTVJhbmdlOm5zUmFuZ2VdOwogICAgIGlmICghcmFuZ2UpIHsKICAgICAgICAgTE9H
KFRleHRJbnB1dCwgImF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2U6KCV1LCAldSkgLT4gbmls
IiwgbnNSYW5nZS5sb2NhdGlvbiwgbnNSYW5nZS5sZW5ndGgpOwogICAgICAgICByZXR1cm4gbmls
OwpAQCAtNjk4MSwyMSArNjk4Miw2IEBAIC0gKE5TU3RyaW5nICopc3RyaW5nCiAKICNpZiBQTEFU
Rk9STShNQUMpCiAKLS0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9hdHRyaWJ1dGVkU3RyaW5nRnJv
bURPTVJhbmdlOihET01SYW5nZSAqKXJhbmdlCi17Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgZG91YmxlIHN0YXJ0ID0gQ0ZBYnNv
bHV0ZVRpbWVHZXRDdXJyZW50KCk7Ci0jZW5kaWYKLSAgICBhdXRvIHJlc3VsdCA9IGF0dHJpYnV0
ZWRTdHJpbmcoKmNvcmUocmFuZ2UpKS5zdHJpbmcuYXV0b3JlbGVhc2UoKTsKLSNpZiAhTE9HX0RJ
U0FCTEVECi0gICAgZG91YmxlIGR1cmF0aW9uID0gQ0ZBYnNvbHV0ZVRpbWVHZXRDdXJyZW50KCkg
LSBzdGFydDsKLSAgICBMT0coVGltaW5nLCAiY3JlYXRpbmcgYXR0cmlidXRlZCBzdHJpbmcgZnJv
bSBzZWxlY3Rpb24gdG9vayAlZiBzZWNvbmRzLiIsIGR1cmF0aW9uKTsKLSNlbmRpZgotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKV9sZWdhY3lBdHRyaWJ1
dGVkU3RyaW5nRnJvbTooRE9NTm9kZSAqKXN0YXJ0Q29udGFpbmVyIG9mZnNldDooaW50KXN0YXJ0
T2Zmc2V0IHRvOihET01Ob2RlICopZW5kQ29udGFpbmVyIG9mZnNldDooaW50KWVuZE9mZnNldAog
ewogICAgIGlmICghc3RhcnRDb250YWluZXIgfHwgIWVuZENvbnRhaW5lcikKQEAgLTcwMDYsMjgg
KzY5OTIsMjYgQEAgLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopX2xlZ2FjeUF0dHJpYnV0ZWRTdHJp
bmdGcm9tOihET01Ob2RlICopc3RhcnRDb250YWluZXIgb2YKIAogLSAoTlNBdHRyaWJ1dGVkU3Ry
aW5nICopYXR0cmlidXRlZFN0cmluZwogewotICAgIERPTURvY3VtZW50ICpkb2N1bWVudCA9IFtb
c2VsZiBfZnJhbWVdIERPTURvY3VtZW50XTsKKyAgICBhdXRvIGRvY3VtZW50ID0gY29yZShbW3Nl
bGYgX2ZyYW1lXSBET01Eb2N1bWVudF0pOwogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJl
dHVybiBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKLSAg
ICBpZiAoYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gW3NlbGYgX2F0dHJpYnV0ZWRTdHJpbmdGcm9t
RE9NUmFuZ2U6W2RvY3VtZW50IF9kb2N1bWVudFJhbmdlXV0pCi0gICAgICAgIHJldHVybiBhdHRy
aWJ1dGVkU3RyaW5nOwotICAgIHJldHVybiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhtYWtlUmFu
Z2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKmNvcmUoZG9jdW1lbnQpKSkuc3RyaW5nLmF1dG9yZWxl
YXNlKCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygq
ZG9jdW1lbnQpOworICAgIGlmIChhdXRvIHJlc3VsdCA9IGF0dHJpYnV0ZWRTdHJpbmcocmFuZ2Up
LnN0cmluZykKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hdXRvcmVsZWFzZSgpOworICAgIHJldHVy
biBlZGl0aW5nQXR0cmlidXRlZFN0cmluZyhyYW5nZSkuc3RyaW5nLmF1dG9yZWxlYXNlKCk7CiB9
CiAKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKXNlbGVjdGVkQXR0cmlidXRlZFN0cmluZwogewot
ICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IHJldGFpblB0cihbc2VsZiBfYXR0cmlidXRlZFN0
cmluZ0Zyb21ET01SYW5nZTpbc2VsZiBfc2VsZWN0ZWRSYW5nZV1dKTsKLSAgICBpZiAoIWF0dHJp
YnV0ZWRTdHJpbmcpIHsKLSAgICAgICAgYXV0byogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJh
bWVdKTsKLSAgICAgICAgaWYgKGNvcmVGcmFtZSkgewotICAgICAgICAgICAgYXV0byByYW5nZSA9
IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkudG9Ob3JtYWxpemVkUmFuZ2UoKTsK
LSAgICAgICAgICAgIGlmIChyYW5nZSkKLSAgICAgICAgICAgICAgICBhdHRyaWJ1dGVkU3RyaW5n
ID0gZWRpdGluZ0F0dHJpYnV0ZWRTdHJpbmcoKnJhbmdlKS5zdHJpbmc7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgYXR0cmlidXRlZFN0cmluZyA9IGFkb3B0TlMoW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4g
YXR0cmlidXRlZFN0cmluZy5hdXRvcmVsZWFzZSgpOworICAgIGF1dG8gZnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBbW1tOU0F0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRdIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIHJhbmdlID0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmZpcnN0UmFuZ2UoKTsKKyAgICBpZiAoIXJh
bmdlKQorICAgICAgICByZXR1cm4gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSBh
dXRvcmVsZWFzZV07CisgICAgaWYgKGF1dG8gcmVzdWx0ID0gYXR0cmlidXRlZFN0cmluZygqcmFu
Z2UpLnN0cmluZykKKyAgICAgICAgcmV0dXJuIHJlc3VsdC5hdXRvcmVsZWFzZSgpOworICAgIHJl
dHVybiBlZGl0aW5nQXR0cmlidXRlZFN0cmluZygqcmFuZ2UpLnN0cmluZy5hdXRvcmVsZWFzZSgp
OwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQppbmRleCA5ZTc2ZDJi
NDc1ZGUxMDUwOGVhYTM4ZjJmYmViM2U5NTUzYTc4ODUyLi5iZjRmZmNiYTUwZmRiMmMzMjY5NzU3
ZDA3YmVhNjRmNmIxYjkwMjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCkBAIC00
MjIsNyArNDIyLDcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxl
cj4pX2FuaW1hdGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKICAgICAgICAgICAgIGRldGVj
dGVkSXRlbSA9IHsgewogICAgICAgICAgICAgICAgIGFjdGlvbkNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgeyB9LCAvLyBGSVhNRTogU2VlbXMgbGlrZSBhbiBlbXB0eSByZWN0IGlzbid0IHJlYWxs
eSBPSy4KLSAgICAgICAgICAgICAgICAqY29yZShjdXN0b21EYXRhRGV0ZWN0b3JzUmFuZ2UpCisg
ICAgICAgICAgICAgICAgbWFrZVNpbXBsZVJhbmdlKCpjb3JlKGN1c3RvbURhdGFEZXRlY3RvcnNS
YW5nZSkpCiAgICAgICAgICAgICB9IH07CiAgICAgICAgIH0KICAgICB9CkBAIC00MzksNyArNDM5
LDcgQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pX2FuaW1h
dGlvbkNvbnRyb2xsZXJGb3JEYXRhRGV0ZWN0ZWQKICAgICBpZiAoIVtbZ2V0RERBY3Rpb25zTWFu
YWdlckNsYXNzKCkgc2hhcmVkTWFuYWdlcl0gaGFzQWN0aW9uc0ZvclJlc3VsdDpbZGV0ZWN0ZWRJ
dGVtLT5hY3Rpb25Db250ZXh0IG1haW5SZXN1bHRdIGFjdGlvbkNvbnRleHQ6ZGV0ZWN0ZWRJdGVt
LT5hY3Rpb25Db250ZXh0LmdldCgpXSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIGF1dG8g
aW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGNyZWF0
ZUxpdmVSYW5nZShkZXRlY3RlZEl0ZW0tPnJhbmdlKSwgeyB9LCBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKKyAgICBhdXRvIGluZGljYXRvciA9
IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShkZXRlY3RlZEl0ZW0tPnJh
bmdlLCB7IH0sIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpG
YWRlSW4pOwogCiAgICAgX2N1cnJlbnRBY3Rpb25Db250ZXh0ID0gW2RldGVjdGVkSXRlbS0+YWN0
aW9uQ29udGV4dCBjb250ZXh0Rm9yVmlldzpfd2ViVmlldyBhbHRNb2RlOllFUyBpbnRlcmFjdGlv
blN0YXJ0ZWRIYW5kbGVyOl4oKSB7CiAgICAgfSBpbnRlcmFjdGlvbkNoYW5nZWRIYW5kbGVyOl4o
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlRleHRJ
dGVyYXRvci5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJh
dG9yLm1tCmluZGV4IDkzYjgzNDc3ZmM4YTQyYWQzZjc0ZDM2OWU4MTc5NGJiZWZkYTAzYWUuLmQz
YWQ5MThkYTdlZTNmNmY1OGY0MDkwM2M3ZTE3ZDZhNjZlMzg3YTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVGV4dEl0ZXJhdG9yLm1tCkBAIC03Miw3ICs3
Miw3IEBAIC0gKGlkKWluaXRXaXRoUmFuZ2U6KERPTVJhbmdlICopcmFuZ2UKICAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4gc2VsZjsKIAotICAgIF9wcml2YXRlLT5fdGV4dEl0ZXJhdG9y
ID0gbWFrZVVuaXF1ZTxXZWJDb3JlOjpUZXh0SXRlcmF0b3I+KCpjb3JlKHJhbmdlKSk7CisgICAg
X3ByaXZhdGUtPl90ZXh0SXRlcmF0b3IgPSBtYWtlVW5pcXVlPFdlYkNvcmU6OlRleHRJdGVyYXRv
cj4obWFrZVNpbXBsZVJhbmdlKCpjb3JlKHJhbmdlKSkpOwogICAgIHJldHVybiBzZWxmOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggYTE4NTY4
ZWY1YjVkZjhhMGFkOWE0Y2U0YzJiNmNlZjY3YzQ4NWViMy4uMDY2NjEwMjAxZTZkYjg1ODk0OGQw
ZjMyMmVjZjI0MTA3N2ZjYTBlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQpAQCAtMjEzNyw3ICsyMTM3LDcgQEAgLSAodm9pZClfZGlkQ29uY2x1ZGVFZGl0
RHJhZwogICAgIH07CiAgICAgYXV0byYgZnJhbWUgPSBwYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5m
b2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBpZiAoYXV0byByYW5nZSA9IGZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkpIHsKLSAgICAgICAgaWYgKGF1dG8g
dGV4dEluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShj
cmVhdGVMaXZlUmFuZ2UoKnJhbmdlKSwgZGVmYXVsdEVkaXREcmFnVGV4dEluZGljYXRvck9wdGlv
bnMsIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCBX
ZWJDb3JlOjpGbG9hdFNpemUoKSkpCisgICAgICAgIGlmIChhdXRvIHRleHRJbmRpY2F0b3IgPSBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKnJhbmdlLCBkZWZhdWx0RWRp
dERyYWdUZXh0SW5kaWNhdG9yT3B0aW9ucywgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRh
dGlvblRyYW5zaXRpb246Ok5vbmUsIFdlYkNvcmU6OkZsb2F0U2l6ZSgpKSkKICAgICAgICAgICAg
IF9wcml2YXRlLT5kYXRhT3BlcmF0aW9uVGV4dEluZGljYXRvciA9IGFkb3B0TlMoW1tXZWJVSVRl
eHRJbmRpY2F0b3JEYXRhIGFsbG9jXSBpbml0V2l0aEltYWdlOm5pbCB0ZXh0SW5kaWNhdG9yRGF0
YTp0ZXh0SW5kaWNhdG9yLT5kYXRhKCkgc2NhbGU6cGFnZS0+ZGV2aWNlU2NhbGVGYWN0b3IoKV0p
OwogICAgIH0KIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>