<?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>206340</bug_id>
          
          <creation_ts>2020-01-16 01:26:16 -0800</creation_ts>
          <short_desc>Rename SelectionData classes and structures HighlightData, etc to be more inclusive for their new use cases</short_desc>
          <delta_ts>2020-02-10 11:33:23 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Megan Gardner">megan_gardner</reporter>
          <assigned_to name="Megan Gardner">megan_gardner</assigned_to>
          <cc>annulen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mifenton</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>rniwa</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1607378</commentid>
    <comment_count>0</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-01-16 01:26:16 -0800</bug_when>
    <thetext>Rename SelectionData classes and structures HighlightData, etc to be more inclusive for their new use cases</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607379</commentid>
    <comment_count>1</comment_count>
      <attachid>387898</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-01-16 01:31:19 -0800</bug_when>
    <thetext>Created attachment 387898
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607490</commentid>
    <comment_count>2</comment_count>
      <attachid>387923</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-01-16 08:22:45 -0800</bug_when>
    <thetext>Created attachment 387923
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1607771</commentid>
    <comment_count>3</comment_count>
      <attachid>387923</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-01-16 16:42:52 -0800</bug_when>
    <thetext>Comment on attachment 387923
Patch

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

r=me provided the following issues are addressed.

&gt; Source/WebCore/rendering/HighlightData.cpp:48
&gt; +struct SelectionData {

I guess you&apos;re gonna rename this in a followup?

&gt; Source/WebCore/rendering/RenderObject.h:696
&gt; +    enum HighlightState {

Please use enum class instead.
We then don&apos;t have to prefix every value with &quot;Highlight&quot;.
Also specify the width: uint8_t.

&gt; WebKit.xcworkspace/xcshareddata/xcschemes/All Source.xcscheme:60
&gt; -               BuildableName = &quot;libANGLE-shared.dylib&quot;
&gt; +               BuildableName = &quot;libANGLE.a&quot;

revert?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1609750</commentid>
    <comment_count>4</comment_count>
      <attachid>388470</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-01-22 14:28:47 -0800</bug_when>
    <thetext>Created attachment 388470
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611676</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2020-01-27 16:00:19 -0800</bug_when>
    <thetext>Is this new patch still up for a review??</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611708</commentid>
    <comment_count>6</comment_count>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-01-27 16:55:53 -0800</bug_when>
    <thetext>I guess I hadn&apos;t actually pushed it, I was going to, but my connection to my work computer stopped functioning and completely distracted me. Did you have more comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616953</commentid>
    <comment_count>7</comment_count>
      <attachid>390261</attachid>
    <who name="Megan Gardner">megan_gardner</who>
    <bug_when>2020-02-10 10:35:23 -0800</bug_when>
    <thetext>Created attachment 390261
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616995</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-10 11:31:35 -0800</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 390261:

editing/spelling/spellcheck-async-remove-frame.html bug 158401 (authors: morrita@google.com, rniwa@webkit.org, and tony@chromium.org)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616996</commentid>
    <comment_count>9</comment_count>
      <attachid>390261</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-10 11:32:24 -0800</bug_when>
    <thetext>Comment on attachment 390261
Patch for landing

Clearing flags on attachment: 390261

Committed r256196: &lt;https://trac.webkit.org/changeset/256196&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616997</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-10 11:32:26 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1616999</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-02-10 11:33:23 -0800</bug_when>
    <thetext>&lt;rdar://problem/59318985&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387898</attachid>
            <date>2020-01-16 01:31:19 -0800</date>
            <delta_ts>2020-01-16 08:22:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206340-20200116013118.patch</filename>
            <type>text/plain</type>
            <size>121976</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmFjNzM1MmQwNTI0NjE5
OTQ5MTI4ZGU3Y2M0NTZjZGM2NmQ0NTY1Zi4uYzRjY2Q3ZTMxMjYwMmZjNDMwMzk2ODM2YjRlNzg2
ODQ4MTRiNmJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNCBAQAorMjAyMC0wMS0xNiAgTWVn
YW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBT
ZWxlY3Rpb25EYXRhIGNsYXNzZXMgYW5kIHN0cnVjdHVyZXMgSGlnaGxpZ2h0RGF0YSwgZXRjIHRv
IGJlIG1vcmUgaW5jbHVzaXZlIGZvciB0aGVpciBuZXcgdXNlIGNhc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYzNDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgb25seSwgbm8gYmVoYXZp
b3VyIGNoYW5nZS4KKworICAgICAgICBXaXRoIHRoZSBuZXcgSGlnaGxpZ2h0IEFQSSwgd2Ugd2ls
bCBiZSB1c2luZyB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBIaWdobGlnaHRzIGFz
IHdlbGwgYXMgU2VsZWN0aW9uLCAKKyAgICAgICAgcmVuYW1lIHRvIEhpZ2hsaWdodCwgYXMgYSBT
ZWxlY3Rpb24gaXMgYSB0eXBlIG9mIEhpZ2hsaWdodC4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRnJhbWVT
ZWxlY3Rpb25TdGF0ZTo6flNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9Db21w
bGV4TGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4TGluZUxheW91dDo6
Y29uc3RydWN0TGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L0VsbGlwc2lzQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5j
cHAuCisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRh
OjpIaWdobGlnaHREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNldFJl
bmRlclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNlbGVjdGlvblN0
YXRlRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhpZ2hsaWdodERhdGE6OnJlcGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGln
aGxpZ2h0RGF0YTo6Y29sbGVjdEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIaWdo
bGlnaHREYXRhOjphcHBseSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlOjpSZW5kZXJS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6b3Bl
cmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpnZXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c3RhcnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhpZ2hsaWdodERhdGE6OnN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhpZ2hsaWdodERhdGE6OmVuZE9mZnNldCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNlbGVjdGlvblN0YXRl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6c2Vs
ZWN0aW9uU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6dmVyaWZ5U2VsZWN0aW9uU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y2xh
bXBlZFN0YXJ0RW5kRm9yU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6aGlnaGxpZ2h0U3RhcnRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRzRm9ySGlnaGxpZ2h0cyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNob3VsZFBhaW50U2Vs
ZWN0aW9uR2FwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0
aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25H
YXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRTZWxlY3Rpb25HYXBJbmZv
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjppbmxpbmVTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aW5lQnJlYWs6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU2VsZWN0
aW9uQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3RCaXRmaWVsZHM6OlJlbmRlck9i
amVjdEJpdGZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OlJlbmRlck9i
amVjdEJpdGZpZWxkczo6c2VsZWN0aW9uU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3RCaXRmaWVsZHM6OnNldFNlbGVjdGlvblN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlcGxhY2VkOjpzaG91bGREcmF3U2VsZWN0aW9uVGludCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5m
by5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VsZWN0aW9uSW5mb0Jhc2U6OnN0YXRlIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRM
aW5lQm94ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2V0
U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50QXR0YWNobWVudCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpsaW5lU2Vs
ZWN0aW9uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmZpcnN0U2VsZWN0ZWRCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6bGFzdFNlbGVjdGVkQm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJl
Y2VkaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yV2l0aFJlYXNvbik6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6
OnBhaW50KToKKwogMjAyMC0wMS0xNSAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnku
Y29tPgogCiAgICAgICAgIFtMRkNdIEZpeCBDTWFrZSBCdWlsZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA2
ZThlMjEzMDgyZTQxZDlhYzc2OTg1NTE4NjAyOGRmZDk5NGVmN2U3Li43N2VmMjAyZGVlMDdjZDk4
MDNiNDk1YzZkOTEwZjJiMzVlN2Y1ZTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjE5Niw3ICsyMTk2
LDcgQEAgcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNw
cAogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCiByZW5kZXJpbmcvU2Nyb2xsQWxpZ25tZW50
LmNwcAotcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5jcHAKK3JlbmRlcmluZy9IaWdobGln
aHREYXRhLmNwcAogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCiByZW5kZXJpbmcvU2lt
cGxlTGluZUxheW91dENvdmVyYWdlLmNwcAogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGbG93
Q29udGVudHMuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggOTA5NWQ1MjUzYWRlZjViMWQxZjQyNDVjYmEzYzk2MGZmMTk4OGMw
MS4uNzY2MzEzNjkyMDAwNmU4YTQ4MTI4ZTc4YWU2MmI4YWFiZGEzYmUzMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDE2MCw3
ICs0MTYwLDcgQEAKIAkJQ0RDQzlCQ0YyMjM4N0U5QTAwRkZCNTFDIC8qIE1lZGlhQ2FwYWJpbGl0
aWVzRGVjb2RpbmdJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRENDOUJDRTIyMzg3RTlBMDBGRkI1MUMgLyogTWVkaWFDYXBhYmlsaXRpZXNEZWNv
ZGluZ0luZm8uaCAqLzsgfTsKIAkJQ0RDQzlCRDEyMjM4N0VBQTAwRkZCNTFDIC8qIE1lZGlhQ2Fw
YWJpbGl0aWVzRW5jb2RpbmdJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRENDOUJEMDIyMzg3RUFBMDBGRkI1MUMgLyogTWVkaWFDYXBhYmlsaXRp
ZXNFbmNvZGluZ0luZm8uaCAqLzsgfTsKIAkJQ0RDRDQxRTgxQzNEREIwQTAwOTY1RDk5IC8qIFBh
cnNlZENvbnRlbnRSYW5nZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RDRDQxRTYxQzNEREIwOTAwOTY1RDk5IC8qIFBhcnNlZENvbnRlbnRSYW5nZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCUNEQ0ZB
QkJEMThDMEFGNzgwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1
MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogSGlnaGxpZ2h0
RGF0YS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RD
RkFCQkIxOEMwQUUzMTAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlDREQ3MDg5NzE4MzU5RjZGMDAyQjNE
QzYgLyogU2FtcGxlTWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDREQ3MDg5NTE4MzU5RjZGMDAyQjNEQzYgLyogU2FtcGxlTWFwLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0REQzFFN0ExOEE5NTJG
MzAwMjdBOUQ0IC8qIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0REQzFFNzkxOEE5NTJGMzAwMjdBOUQ0IC8q
IE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oICovOyB9OwogCQlDRERFMDJFRDE4QjNFRDZEMDBD
RjdGRjEgLyogQ0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRERFMDJFQjE4QjNFRDZEMDBDRjdGRjEgLyog
Q0RNU2Vzc2lvbkFWRm91bmRhdGlvbk9iakMubW0gKi87IH07CkBAIC0xNDAzNiw4ICsxNDAzNiw4
IEBACiAJCUNEQ0Q0MUU1MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGFyc2VkQ29udGVudFJhbmdl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RDRDQxRTYxQzNEREIwOTAwOTY1
RDk5IC8qIFBhcnNlZENvbnRlbnRSYW5nZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQYXJzZWRDb250ZW50UmFuZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
Q0RDRTVDRDAxNDYzM0JDOTAwRDQ3Q0NBIC8qIEV2ZW50VGFyZ2V0RmFjdG9yeS5pbiAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSBFdmVudFRhcmdldEZhY3RvcnkuaW47IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURh
dGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2VsZWN0aW9uUmFuZ2VEYXRh
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUNEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1
MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGlnaGxpZ2h0RGF0YS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlDRENGQUJCQzE4QzBBRjE5MDA2Rjg0NTAgLyogSGlnaGxpZ2h0RGF0
YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIaWdobGlnaHREYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0REMUU1MjUxNjdCQTU2NDAwQ0U4
MjBCIC8qIFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRleHRUcmFja1JlcHJlc2VudGF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUNERDcwODk0MTgzNTlGNkUwMDJCM0RDNiAvKiBTYW1wbGVNYXAuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2FtcGxlTWFwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQ0RENzA4OTUxODM1OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1h
cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTYW1wbGVNYXAuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3NzE3LDYgKzI3NzE3LDggQEAKIAkJCQlFMTEyRjQ2
RjFFM0E4NUQ4MDBENkNERkQgLyogR3JpZC5oICovLAogCQkJCUUxMkRFNzE1MUU0Qjc0ODcwMEY5
QUNDRiAvKiBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uY3BwICovLAogCQkJCUUxMkRFNzE2MUU0
Qjc0ODcwMEY5QUNDRiAvKiBHcmlkVHJhY2tTaXppbmdBbGdvcml0aG0uaCAqLywKKwkJCQlDRENG
QUJCQzE4QzBBRjE5MDA2Rjg0NTAgLyogSGlnaGxpZ2h0RGF0YS5jcHAgKi8sCisJCQkJQ0RDRkFC
QkIxOEMwQUUzMTAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuaCAqLywKIAkJCQk0OTY5QjBGMDEz
RDBCMzNGMDBERjM1MjEgLyogSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmNwcCAqLywKIAkJCQk0
OTY5QjBGMTEzRDBCMzNGMDBERjM1MjEgLyogSGl0VGVzdGluZ1RyYW5zZm9ybVN0YXRlLmggKi8s
CiAJCQkJMkQ4Mjg3RjQxNkU0QTAzODAwODZCRDAwIC8qIEhpdFRlc3RMb2NhdGlvbi5jcHAgKi8s
CkBAIC0yNzkzOSw4ICsyNzk0MSw2IEBACiAJCQkJQThDRkY1REEwQTE1NUEwNTAwMEE0MjM0IC8q
IFJvb3RJbmxpbmVCb3guaCAqLywKIAkJCQk1RDkyNUI2NTBGNjRENEREMDBCODQ3RjAgLyogU2Ny
b2xsQWxpZ25tZW50LmNwcCAqLywKIAkJCQk1RDkyNUI2NjBGNjRENEREMDBCODQ3RjAgLyogU2Ny
b2xsQWxpZ25tZW50LmggKi8sCi0JCQkJQ0RDRkFCQkMxOEMwQUYxOTAwNkY4NDUwIC8qIFNlbGVj
dGlvblJhbmdlRGF0YS5jcHAgKi8sCi0JCQkJQ0RDRkFCQkIxOEMwQUUzMTAwNkY4NDUwIC8qIFNl
bGVjdGlvblJhbmdlRGF0YS5oICovLAogCQkJCUU0ODk0NEEwMTgwQjU3RDgwMEYxNjVEOCAvKiBT
aW1wbGVMaW5lTGF5b3V0LmNwcCAqLywKIAkJCQlFNDg5NDRBMTE4MEI1N0Q4MDBGMTY1RDggLyog
U2ltcGxlTGluZUxheW91dC5oICovLAogCQkJCTExRTA2N0VCMUU2MjQ2MTMwMDE2MkQxNiAvKiBT
aW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwICovLApAQCAtMzAxMDIsNiArMzAxMDIsNyBAQAog
CQkJCUY1NUIzREMwMTI1MUYxMkQwMDNFRjI2OSAvKiBIaWRkZW5JbnB1dFR5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUxNUJFMTlDMUQ1NEY2QzEwMEREN0M2OCAvKiBISURHYW1lcGFkLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1MTVCRTE5RTFENTRGNkMxMDBERDdDNjggLyogSElER2FtZXBhZFBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyog
SGlnaGxpZ2h0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5NEQxNTQwQzI3NUM4QjAwNkJD
NjE3IC8qIEhpc3RvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3RENFMjAyMTA4MDdDNzUwMDU3
RDM5NCAvKiBIaXN0b3J5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE3NDFEMTEw
QjA3MjU5QTAwRUQ0NDJDIC8qIEhpc3RvcnlJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTMyMjc5
LDcgKzMyMjgwLDYgQEAKIAkJCQk5NzREMkRBNTE0NkE1MzVEMDBENTFGOEIgLyogU2VjdXJpdHlQ
b2xpY3kuaCBpbiBIZWFkZXJzICovLAogCQkJCTJENUJDNDI3MTZGODgyRUUwMDcwNDhEMCAvKiBT
ZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkMzREEy
RjBEMDA2QzFEMDBFRjZGMjYgLyogU2VnbWVudGVkU3RyaW5nLmggaW4gSGVhZGVycyAqLywKLQkJ
CQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCRUE4MDdDOTBGNzE0QTAzMDA1MjQxOTkgLyogU2VsZWN0aW9uUmVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTE0MDVDODkxOTBCMDE0NDAwNzU0Rjk0IC8qIFNlbGVjdGlv
blJlY3RHYXRoZXJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0QjRCQjQxNDE2NTBENzAwMkIx
RDhCIC8qIFNlbGVjdG9yQ2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vRHJhZ0ltYWdlLmNwcAppbmRleCAwMGFjOThmZTE2OGNkZjMzMDNjMWY5N2JlYjgzOGM0YTFk
NmZlNGI0Li5iZGVlYTFlNmNiNTlmZjg3NDAxODVkZDllNWMxOTBhNTBlZTM3YWE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKQEAgLTE0NSwxMiArMTQ1LDEyIEBAIHN0cnVj
dCBTY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlIHsKICAgICB7CiAgICAgICAgIGlmIChhdXRvKiBy
ZW5kZXJWaWV3ID0gZnJhbWUuY29udGVudFJlbmRlcmVyKCkpIHsKICAgICAgICAgICAgIEFTU0VS
VChzZWxlY3Rpb24pOwotICAgICAgICAgICAgcmVuZGVyVmlldy0+c2VsZWN0aW9uKCkuc2V0KHNl
bGVjdGlvbi52YWx1ZSgpLCBTZWxlY3Rpb25SYW5nZURhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5n
KTsKKyAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLnNldChzZWxlY3Rpb24udmFs
dWUoKSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgY29uc3QgRnJhbWUmIGZyYW1lOwotICAgIE9wdGlvbmFsPFNlbGVjdGlvblJh
bmdlRGF0YTo6Q29udGV4dD4gc2VsZWN0aW9uOworICAgIE9wdGlvbmFsPEhpZ2hsaWdodERhdGE6
OlJlbmRlclJhbmdlPiBzZWxlY3Rpb247CiB9OwogCiAjaWYgIVBMQVRGT1JNKElPU19GQU1JTFkp
CkBAIC0xODcsNyArMTg3LDcgQEAgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJbWFnZUZvclJhbmdl
KEZyYW1lJiBmcmFtZSwgUmFuZ2UmIHJhbmdlLCBib29sIGZvcmNlQmxhY2sKICAgICBpbnQgc3Rh
cnRPZmZzZXQgPSBzdGFydC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIGludCBlbmRP
ZmZzZXQgPSBlbmQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBBU1NFUlQoc3RhcnRP
ZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7Ci0gICAgdmlldy0+c2VsZWN0aW9uKCkuc2V0
KHsgc3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFy
dE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0sIFNlbGVjdGlvblJh
bmdlRGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOworICAgIHZpZXctPnNlbGVjdGlvbigpLnNl
dCh7IHN0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
cnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9LCBIaWdobGlnaHRE
YXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CiAgICAgLy8gV2UgY2FwdHVyZSB1c2luZyBzbmFw
c2hvdEZyYW1lUmVjdCgpIGJlY2F1c2Ugd2UgZmFrZSB1cCB0aGUgc2VsZWN0aW9uIHVzaW5nCiAg
ICAgLy8gRnJhbWVWaWV3IGJ1dCBzbmFwc2hvdFNlbGVjdGlvbigpIHVzZXMgdGhlIHNlbGVjdGlv
biBmcm9tIHRoZSBGcmFtZSBpdHNlbGYuCiAgICAgcmV0dXJuIGNyZWF0ZURyYWdJbWFnZUZyb21T
bmFwc2hvdChzbmFwc2hvdEZyYW1lUmVjdChmcmFtZSwgdmlldy0+c2VsZWN0aW9uKCkuYm91bmRz
Q2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSwgb3B0aW9ucyksIG51bGxwdHIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAKaW5kZXggZjZmZDE2YjU0
OWYxYTc0ODA0ZDZmZjYzMWM5MzMxNzE4NjAyNTA1Yy4uOTQzZmY1ZjQyYjc1NDU3ODQ5Y2U0ZTA1
Mzk3Y2UwNGU1NzMzZDBhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Nv
bXBsZXhMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxl
eExpbmVMYXlvdXQuY3BwCkBAIC0zMTAsNyArMzEwLDcgQEAgUm9vdElubGluZUJveCogQ29tcGxl
eExpbmVMYXlvdXQ6OmNvbnN0cnVjdExpbmUoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mIGJpZGlSdW5z
LAogICAgICAgICBJbmxpbmVCb3gqIGJveCA9IGNyZWF0ZUlubGluZUJveEZvclJlbmRlcmVyKCZy
LT5yZW5kZXJlcigpLCBpc09ubHlSdW4pOwogICAgICAgICByLT5zZXRCb3goYm94KTsKIAotICAg
ICAgICBpZiAoIXJvb3RIYXNTZWxlY3RlZENoaWxkcmVuICYmIGJveC0+cmVuZGVyZXIoKS5zZWxl
Y3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKKyAgICAgICAgaWYg
KCFyb290SGFzU2VsZWN0ZWRDaGlsZHJlbiAmJiBib3gtPnJlbmRlcmVyKCkuc2VsZWN0aW9uU3Rh
dGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUpCiAgICAgICAgICAgICByb290SGFz
U2VsZWN0ZWRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBoYXZl
IG5vIHBhcmVudCBib3ggeWV0LCBvciBpZiB0aGUgcnVuIGlzIG5vdCBzaW1wbHkgYSBzaWJsaW5n
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKaW5kZXggMjI3NGU3YjRi
ZmE2ZjExZWVlNzRlNDNlNTRhZDAyNWFhN2JmMWI2MC4uZjQwNmIxMGNhNDUwYzVjZjlkNzU0ZDdm
MDY2MDIyZGIwOGYyMWVhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExhCiAgICAgfQogCiAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKLSAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsK
KyAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUp
IHsKICAgICAgICAgcGFpbnRTZWxlY3Rpb24oY29udGV4dCwgcGFpbnRPZmZzZXQsIGxpbmVTdHls
ZSwgZm9udCk7CiAKICAgICAgICAgLy8gU2VsZWN0IHRoZSBjb3JyZWN0IGNvbG9yIGZvciBwYWlu
dGluZyB0aGUgdGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxp
cHNpc0JveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKaW5kZXgg
M2Y5OGI3ZDg3ZmUyMmQ1MjkzMjg3NzMwYzg2YmMyMjg4Y2E0MDZhNi4uYzg4ZGYwNjc0OGM5Yjg2
NDdjMGUyOTgyMzljODA3ZmIzN2MzYzIwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0VsbGlwc2lzQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmgKQEAgLTMzLDcgKzMzLDcgQEAgcHVibGljOgogICAgIEVsbGlwc2lzQm94KFJlbmRl
ckJsb2NrRmxvdyYsIGNvbnN0IEF0b21TdHJpbmcmIGVsbGlwc2lzU3RyLCBJbmxpbmVGbG93Qm94
KiBwYXJlbnQsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IHksIGJvb2wgZmlyc3RMaW5lLCBi
b29sIGlzSG9yaXpvbnRhbCwgSW5saW5lQm94KiBtYXJrdXBCb3gpOwogICAgIHZvaWQgcGFpbnQo
UGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91
dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7CiAgICAgYm9vbCBub2RlQXRQb2ludChjb25zdCBI
aXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxv
Y2F0aW9uSW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwg
TGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20sIEhpdFRlc3RBY3Rpb24p
IGZpbmFsOwotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25TdGF0ZSBzKSB7IG1fc2VsZWN0aW9uU3RhdGUgPSBzOyB9CisgICAgdm9pZCBzZXRTZWxlY3Rp
b25TdGF0ZShSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHMpIHsgbV9zZWxlY3Rpb25TdGF0
ZSA9IHM7IH0KICAgICBJbnRSZWN0IHNlbGVjdGlvblJlY3QoKTsKIAogICAgIFJlbmRlckJsb2Nr
RmxvdyYgYmxvY2tGbG93KCkgY29uc3QgeyByZXR1cm4gZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93
PihJbmxpbmVCb3g6OnJlbmRlcmVyKCkpOyB9CkBAIC00MSwxMiArNDEsMTIgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICB2b2lkIHBhaW50TWFya3VwQm94KFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVC
b3R0b20sIGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0
dXJuIG1faGVpZ2h0OyB9Ci0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rp
b25TdGF0ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhdGU7IH0KKyAgICBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgb3ZlcnJpZGUgeyByZXR1
cm4gbV9zZWxlY3Rpb25TdGF0ZTsgfQogICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3ND
b250ZXh0JiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZv
bnRDYXNjYWRlJik7CiAgICAgSW5saW5lQm94KiBtYXJrdXBCb3goKSBjb25zdDsKIAogICAgIGJv
b2wgbV9zaG91bGRQYWludE1hcmt1cEJveDsKLSAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXRlIG1fc2VsZWN0aW9uU3RhdGUgeyBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUgfTsKKyAg
ICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIG1fc2VsZWN0aW9uU3RhdGUgeyBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodE5vbmUgfTsKICAgICBpbnQgbV9oZWlnaHQ7CiAgICAgQXRvbVN0cmlu
ZyBtX3N0cjsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxp
Z2h0RGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjBkMWU3YTJlMjQyOWQ1MGZkOWMwMGQ4MjJlYTc2M2FiOTZmMzczZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNw
cApAQCAtMCwwICsxLDM4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5M
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUK
KyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2Ns
YWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGlnaGxp
Z2h0RGF0YS5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZVNlbGVj
dGlvbi5oIgorI2luY2x1ZGUgIlBvc2l0aW9uLmgiCisjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNs
dWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCituYW1lc3BhY2UgeyAvLyBTZWUgYnVnICMxNzc4MDguCisKK3N0cnVjdCBTZWxlY3Rp
b25EYXRhIHsKKyAgICB1c2luZyBSZW5kZXJlck1hcCA9IEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+PjsKKyAgICB1c2luZyBSZW5kZXJC
bG9ja01hcCA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxvY2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyQmxvY2tTZWxlY3Rpb25JbmZvPj47CisKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRP
ZmZzZXQ7CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZE9mZnNldDsKKyAgICBSZW5kZXJlck1h
cCByZW5kZXJlcnM7CisgICAgUmVuZGVyQmxvY2tNYXAgYmxvY2tzOworfTsKKworY2xhc3MgU2Vs
ZWN0aW9uSXRlcmF0b3IgeworcHVibGljOgorICAgIFNlbGVjdGlvbkl0ZXJhdG9yKFJlbmRlck9i
amVjdCogc3RhcnQpCisgICAgICAgIDogbV9jdXJyZW50KHN0YXJ0KQorICAgIHsKKyAgICAgICAg
Y2hlY2tGb3JTcGFubmVyKCk7CisgICAgfQorICAgIAorICAgIFJlbmRlck9iamVjdCogY3VycmVu
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50OworICAgIH0KKyAgICAK
KyAgICBSZW5kZXJPYmplY3QqIG5leHQoKQorICAgIHsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBj
dXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1wdHkoKSA/IG51bGxwdHIgOiBtX3NwYW5u
ZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKKyAgICAgICAgbV9jdXJyZW50ID0gbV9jdXJyZW50
LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7CisgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigp
OworICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJyZW50U3BhbikgeworICAgICAgICAgICAg
UmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bhbm5lclN0YWNrLmxhc3QoKTsKKyAgICAg
ICAgICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIG1fY3VycmVu
dCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigpOworICAgICAgICAgICAgY2hlY2tGb3JT
cGFubmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBjaGVja0ZvclNwYW5uZXIoKQorICAgIHsKKyAgICAgICAgaWYg
KCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4obV9jdXJyZW50KSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgcGxhY2Vob2xkZXIgPSBkb3duY2FzdDxS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcj4oKm1fY3VycmVudCk7CisgICAgICAg
IG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xkZXIpOworICAgICAgICBtX2N1cnJlbnQg
PSBwbGFjZWhvbGRlci5zcGFubmVyKCk7CisgICAgfQorCisgICAgUmVuZGVyT2JqZWN0KiBtX2N1
cnJlbnQgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBs
YWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKworc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVyZXJBZnRlck9mZnNldChjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyLCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgYXV0byogY2hpbGQg
PSByZW5kZXJlci5jaGlsZEF0KG9mZnNldCk7CisgICAgcmV0dXJuIGNoaWxkID8gY2hpbGQgOiBy
ZW5kZXJlci5uZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRyZW4oKTsKK30KKworc3RhdGljIGJvb2wg
aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIs
IGNvbnN0IEhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlJiBzZWxlY3Rpb24pCit7CisgICAgcmV0
dXJuIChyZW5kZXJlci5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCAmcmVuZGVyZXIgPT0gc2VsZWN0
aW9uLnN0YXJ0KCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5lbmQoKSkKKyAgICAgICAgJiYg
cmVuZGVyZXIuc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUK
KyAgICAgICAgJiYgcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Cit9CisKK3N0YXRpYyBSZW5k
ZXJCbG9jayogY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIpCit7CisgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmlu
Z0Jsb2NrKCk7CisgICAgcmV0dXJuIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBu
dWxscHRyIDogY29udGFpbmluZ0Jsb2NrOworfQorCitzdGF0aWMgU2VsZWN0aW9uRGF0YSBjb2xs
ZWN0KGNvbnN0IEhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlJiBzZWxlY3Rpb24sIGJvb2wgcmVw
YWludERpZmZlcmVuY2UpCit7CisgICAgU2VsZWN0aW9uRGF0YSBvbGRTZWxlY3Rpb25EYXRhIHsg
c2VsZWN0aW9uLnN0YXJ0T2Zmc2V0KCksIHNlbGVjdGlvbi5lbmRPZmZzZXQoKSwgeyB9LCB7IH0g
fTsKKyAgICAvLyBCbG9ja3MgY29udGFpbiBzZWxlY3RlZCBvYmplY3RzIGFuZCBmaWxsIGdhcHMg
YmV0d2VlbiB0aGVtLCBlaXRoZXIgb24gdGhlIGxlZnQsIHJpZ2h0LCBvciBpbiBiZXR3ZWVuIGxp
bmVzIGFuZCBibG9ja3MuCisgICAgLy8gSW4gb3JkZXIgdG8gZ2V0IHRoZSByZXBhaW50IHJlY3Qg
cmlnaHQsIHdlIGhhdmUgdG8gZXhhbWluZSBsZWZ0LCBtaWRkbGUsIGFuZCByaWdodCByZWN0cyBp
bmRpdmlkdWFsbHksIHNpbmNlIG90aGVyd2lzZQorICAgIC8vIHRoZSB1bmlvbiBvZiB0aG9zZSBy
ZWN0cyBtaWdodCByZW1haW4gdGhlIHNhbWUgZXZlbiB3aGVuIGNoYW5nZXMgaGF2ZSBvY2N1cnJl
ZC4KKyAgICBhdXRvKiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOworICAgIFJlbmRlck9iamVj
dCogc3RvcCA9IG51bGxwdHI7CisgICAgaWYgKHNlbGVjdGlvbi5lbmQoKSkKKyAgICAgICAgc3Rv
cCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKnNlbGVjdGlvbi5lbmQoKSwgc2VsZWN0aW9uLmVuZE9m
ZnNldCgpLnZhbHVlKCkpOworICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9y
KHN0YXJ0KTsKKyAgICB3aGlsZSAoc3RhcnQgJiYgc3RhcnQgIT0gc3RvcCkgeworICAgICAgICBp
ZiAoaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKCpzdGFydCwgc2VsZWN0aW9uKSkgeworICAg
ICAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBz
IGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAg
ICAgICBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVycy5zZXQoc3RhcnQsIG1ha2VVbmlxdWU8UmVu
ZGVyU2VsZWN0aW9uSW5mbz4oKnN0YXJ0LCB0cnVlKSk7CisgICAgICAgICAgICBpZiAocmVwYWlu
dERpZmZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8qIGJsb2NrID0gY29udGFp
bmluZ0Jsb2NrQmVsb3dWaWV3KCpzdGFydCk7IGJsb2NrOyBibG9jayA9IGNvbnRhaW5pbmdCbG9j
a0JlbG93VmlldygqYmxvY2spKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIGJsb2NrSW5m
byA9IG9sZFNlbGVjdGlvbkRhdGEuYmxvY2tzLmFkZChibG9jaywgbnVsbHB0cikuaXRlcmF0b3It
PnZhbHVlOworICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IG1ha2VV
bmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPigqYmxvY2spOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGFydCA9IHNlbGVjdGlvbkl0
ZXJhdG9yLm5leHQoKTsKKyAgICB9CisgICAgcmV0dXJuIG9sZFNlbGVjdGlvbkRhdGE7Cit9CisK
K0hpZ2hsaWdodERhdGE6OkhpZ2hsaWdodERhdGEoUmVuZGVyVmlldyYgdmlldykKKyAgICA6IG1f
cmVuZGVyVmlldyh2aWV3KQorI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgICwgbV9z
ZWxlY3Rpb25SZWN0R2F0aGVyZXIodmlldykKKyNlbmRpZgoreworfQorCit2b2lkIEhpZ2hsaWdo
dERhdGE6OnNldFJlbmRlclJhbmdlKGNvbnN0IFJlbmRlclJhbmdlJiByZW5kZXJSYW5nZSkKK3sK
KyAgICBBU1NFUlQocmVuZGVyUmFuZ2Uuc3RhcnQoKSAmJiByZW5kZXJSYW5nZS5lbmQoKSk7Cisg
ICAgbV9yZW5kZXJSYW5nZSA9IHJlbmRlclJhbmdlOworfQorCitSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodFN0YXRlIEhpZ2hsaWdodERhdGE6OnNlbGVjdGlvblN0YXRlRm9yUmVuZGVyZXIoUmVuZGVy
T2JqZWN0JiByZW5kZXJlcikKK3sKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkbG4ndCBoYXZlIHRv
IGNoZWNrIHRoYXQgYSByZW5kZXJlciBpcyBhIGRlc2NlbmRhbnQgb2YgdGhlIHJlbmRlciBub2Rl
CisgICAgLy8gZnJvbSB0aGUgcmFuZ2UuIFRoaXMgaXMgbGlrZWx5IGJlY2F1c2Ugd2UgYXJlbid0
IHVzaW5nIFZpc2libGVQb3NpdGlvbnMgeWV0LgorICAgIC8vIFBsYW5uZWQgZml4IGluIGEgZm9s
bG93dXA6IDxyZGFyOi8vcHJvYmxlbS81ODA5NTkyMz4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NTI5CisgICAgCisgICAgaWYgKCZyZW5kZXJlciA9
PSBtX3JlbmRlclJhbmdlLnN0YXJ0KCkgfHwgcmVuZGVyZXIuaXNEZXNjZW5kYW50T2YobV9yZW5k
ZXJSYW5nZS5zdGFydCgpKSkgeworICAgICAgICBpZiAobV9yZW5kZXJSYW5nZS5zdGFydCgpICYm
IG1fcmVuZGVyUmFuZ2UuZW5kKCkgJiYgbV9yZW5kZXJSYW5nZS5zdGFydCgpID09IG1fcmVuZGVy
UmFuZ2UuZW5kKCkpCisgICAgICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRC
b3RoOworICAgICAgICBpZiAobV9yZW5kZXJSYW5nZS5zdGFydCgpKQorICAgICAgICAgICAgcmV0
dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhcnQ7CisgICAgfQorICAgIGlmICgmcmVuZGVy
ZXIgPT0gbV9yZW5kZXJSYW5nZS5lbmQoKSB8fCByZW5kZXJlci5pc0Rlc2NlbmRhbnRPZihtX3Jl
bmRlclJhbmdlLmVuZCgpKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
RW5kOworCisgICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQgPSBudWxscHRyOworICAgIGF1
dG8qIHNlbGVjdGlvbkRhdGFFbmQgPSBtX3JlbmRlclJhbmdlLmVuZCgpOworICAgIGlmIChzZWxl
Y3Rpb25EYXRhRW5kKQorICAgICAgICBzZWxlY3Rpb25FbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0
KCpzZWxlY3Rpb25EYXRhRW5kLCBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlKCkpOwor
ICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG1fcmVuZGVyUmFuZ2Uuc3Rh
cnQoKSk7CisgICAgZm9yIChhdXRvKiBjdXJyZW50UmVuZGVyZXIgPSBtX3JlbmRlclJhbmdlLnN0
YXJ0KCk7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gbV9yZW5kZXJSYW5n
ZS5lbmQoKTsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Cisg
ICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5nZS5zdGFydCgpIHx8IGN1
cnJlbnRSZW5kZXJlciA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoJnJlbmRlcmVyID09IGN1cnJlbnRS
ZW5kZXJlcikKKyAgICAgICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEluc2lk
ZTsKKyAgICB9CisgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9uZTsKKyAgICAK
K30KKwordm9pZCBIaWdobGlnaHREYXRhOjpzZXQoY29uc3QgUmVuZGVyUmFuZ2UmIHNlbGVjdGlv
biwgUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3sKKyAgICBpZiAoKHNlbGVjdGlvbi5z
dGFydCgpICYmICFzZWxlY3Rpb24uZW5kKCkpIHx8IChzZWxlY3Rpb24uZW5kKCkgJiYgIXNlbGVj
dGlvbi5zdGFydCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEp1c3QgcmV0dXJuIGlmIHRo
ZSBzZWxlY3Rpb24gaGFzbid0IGNoYW5nZWQuCisgICAgYXV0byBpc0NhcmV0ID0gbV9yZW5kZXJW
aWV3LmZyYW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJldCgpOworICAgIGlmIChzZWxlY3Rpb24gPT0g
bV9yZW5kZXJSYW5nZSAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09IGlzQ2FyZXQpCisgICAgICAg
IHJldHVybjsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAvLyBDbGVhciB0aGUg
Y3VycmVudCByZWN0cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBuZXcgcmVjdHMgd2Ug
YXJlIGFib3V0IHRvIGdhdGhlci4KKyAgICAvLyBUaGUgTm90aWZpZXIgdXBkYXRlcyB0aGUgRWRp
dG9yIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3llZC4KKyAgICBhdXRv
IHJlY3ROb3RpZmllciA9IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNsZWFyQW5kQ3JlYXRlTm90
aWZpZXIoKTsKKyNlbmRpZgorICAgIG1fc2VsZWN0aW9uV2FzQ2FyZXQgPSBpc0NhcmV0OworICAg
IGFwcGx5KHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50TW9kZSk7Cit9CisKK3ZvaWQgSGlnaGxpZ2h0
RGF0YTo6Y2xlYXIoKQoreworICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tT
ZWxlY3Rpb25HYXBzKCk7CisgICAgc2V0KHsgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6
Ok5ld01pbnVzT2xkKTsKK30KKwordm9pZCBIaWdobGlnaHREYXRhOjpyZXBhaW50KCkgY29uc3QK
K3sKKyAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOworICAgIFJlbmRl
ck9iamVjdCogZW5kID0gbnVsbHB0cjsKKyAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAg
ICAgICAgZW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwgbV9y
ZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBTZWxlY3Rpb25JdGVyYXRvciBz
ZWxlY3Rpb25JdGVyYXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOworICAgIGZvciAoYXV0byog
cmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYmIHJlbmRl
cmVyICE9IGVuZDsgcmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAg
ICAgaWYgKCFyZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIgIT0gbV9y
ZW5kZXJSYW5nZS5zdGFydCgpICYmIHJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0
ZSgpID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9uZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKCpyZW5kZXJlciwgdHJ1ZSkucmVwYWludCgp
OworICAgICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdh
cHMgYW5kIG1hcmdpbiBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KKyAgICAg
ICAgZm9yIChhdXRvKiBibG9jayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93VmlldygqcmVuZGVyZXIp
OyBibG9jazsgYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKmJsb2NrKSkgeworICAg
ICAgICAgICAgaWYgKCFwcm9jZXNzZWRCbG9ja3MuYWRkKGJsb2NrKS5pc05ld0VudHJ5KQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqYmxv
Y2ssIHRydWUpLnJlcGFpbnQoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworSW50UmVjdCBIaWdo
bGlnaHREYXRhOjpjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50IGNsaXBUb1Zpc2li
bGVDb250ZW50KSBjb25zdAoreworICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlcmVyTWFwIHJlbmRl
cmVyczsKKyAgICBhdXRvKiBzdGFydCA9IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKTsKKyAgICBSZW5k
ZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAgIGlmIChtX3JlbmRlclJhbmdlLmVuZCgpKQor
ICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlck9mZnNldCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwg
bV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBTZWxlY3Rpb25JdGVyYXRv
ciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0ICE9
IHN0b3ApIHsKKyAgICAgICAgaWYgKChzdGFydC0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgfHwgc3Rh
cnQgPT0gbV9yZW5kZXJSYW5nZS5zdGFydCgpIHx8IHN0YXJ0ID09IG1fcmVuZGVyUmFuZ2UuZW5k
KCkpCisgICAgICAgICAgICAmJiBzdGFydC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodE5vbmUpIHsKKyAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2li
bGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBl
eGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAgcmVuZGVyZXJzLnNldChzdGFydCwgbWFrZVVu
aXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqc3RhcnQsIGNsaXBUb1Zpc2libGVDb250ZW50ID09
IENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpKTsKKyAgICAgICAgICAgIGF1dG8qIGJsb2NrID0g
c3RhcnQtPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFp
czxSZW5kZXJWaWV3PigqYmxvY2spKSB7CisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclNlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSByZW5kZXJlcnMuYWRkKGJsb2NrLCBu
dWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0g
bWFrZVVuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqYmxvY2ssIGNsaXBUb1Zpc2libGVDb250
ZW50ID09IENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpOworICAgICAgICAgICAgICAgIGJsb2Nr
ID0gYmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIHN0YXJ0ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpOworICAgIH0KKworICAgIC8v
IE5vdyBjcmVhdGUgYSBzaW5nbGUgYm91bmRpbmcgYm94IHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUg
d2hvbGUgc2VsZWN0aW9uLgorICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdDsKKyAgICBmb3Ig
KGF1dG8mIGluZm8gOiByZW5kZXJlcnMudmFsdWVzKCkpIHsKKyAgICAgICAgLy8gUmVuZGVyU2Vs
ZWN0aW9uSW5mbzo6cmVjdCgpIGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVwYWludENv
bnRhaW5lciwgc28gbWFwIHRvIHBhZ2UgY29vcmRpbmF0ZXMuCisgICAgICAgIExheW91dFJlY3Qg
Y3VycmVudFJlY3QgPSBpbmZvLT5yZWN0KCk7CisgICAgICAgIGlmIChhdXRvKiByZXBhaW50Q29u
dGFpbmVyID0gaW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7CisgICAgICAgICAgICBGbG9hdFF1
YWQgYWJzUXVhZCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRS
ZWN0KGN1cnJlbnRSZWN0KSk7CisgICAgICAgICAgICBjdXJyZW50UmVjdCA9IGFic1F1YWQuZW5j
bG9zaW5nQm91bmRpbmdCb3goKTsKKyAgICAgICAgfQorICAgICAgICBzZWxlY3Rpb25SZWN0LnVu
aXRlKGN1cnJlbnRSZWN0KTsKKyAgICB9CisgICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KHNlbGVj
dGlvblJlY3QpOworfQorCit2b2lkIEhpZ2hsaWdodERhdGE6OmFwcGx5KGNvbnN0IFJlbmRlclJh
bmdlJiBuZXdTZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCit7CisgICAg
YXV0byBvbGRTZWxlY3Rpb25EYXRhID0gY29sbGVjdChtX3JlbmRlclJhbmdlLCBibG9ja1JlcGFp
bnRNb2RlID09IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOworICAgIC8vIFJlbW92ZSBjdXJyZW50
IHNlbGVjdGlvbi4KKyAgICBmb3IgKGF1dG8qIHJlbmRlcmVyIDogb2xkU2VsZWN0aW9uRGF0YS5y
ZW5kZXJlcnMua2V5cygpKQorICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5l
ZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUpOworICAgIG1fcmVuZGVyUmFuZ2UgPSBu
ZXdTZWxlY3Rpb247CisgICAgYXV0byogc2VsZWN0aW9uU3RhcnQgPSBtX3JlbmRlclJhbmdlLnN0
YXJ0KCk7CisgICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGFsbCBvYmplY3Rz
IGJldHdlZW4gc2VsZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZAorICAgIGlmIChzZWxlY3Rp
b25TdGFydCAmJiBzZWxlY3Rpb25TdGFydCA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAg
ICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodEJvdGgpOworICAgIGVsc2UgeworICAgICAgICBpZiAoc2VsZWN0aW9uU3RhcnQp
CisgICAgICAgICAgICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXJ0KTsKKyAgICAgICAgaWYgKGF1dG8qIGVuZCA9IG1f
cmVuZGVyUmFuZ2UuZW5kKCkpCisgICAgICAgICAgICBlbmQtPnNldFNlbGVjdGlvblN0YXRlSWZO
ZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRFbmQpOworICAgIH0KKworICAgIFJlbmRlck9i
amVjdCogc2VsZWN0aW9uRW5kID0gbnVsbHB0cjsKKyAgICBhdXRvKiBzZWxlY3Rpb25EYXRhRW5k
ID0gbV9yZW5kZXJSYW5nZS5lbmQoKTsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKKyAgICAg
ICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqc2VsZWN0aW9uRGF0YUVuZCwg
bV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBTZWxlY3Rpb25JdGVyYXRv
ciBzZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7CisgICAgZm9yIChhdXRvKiBjdXJy
ZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRS
ZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJh
dG9yLm5leHQoKSkgeworICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09IHNlbGVjdGlvblN0
YXJ0IHx8IGN1cnJlbnRSZW5kZXJlciA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5jYW5CZVNlbGVjdGlv
bkxlYWYoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBjdXJyZW50UmVuZGVyZXIt
PnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRJbnNpZGUp
OworICAgIH0KKworICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRNb2RlOjpOb3Ro
aW5nKQorICAgICAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVjdGlvbkdh
cHNCb3VuZHMoKTsKKworICAgIC8vIE5vdyB0aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUgaGFzIGJl
ZW4gdXBkYXRlZCBmb3IgdGhlIG5ldyBvYmplY3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5kCisgICAg
Ly8gcHV0IHRoZW0gaW4gdGhlIG5ldyBvYmplY3RzIGxpc3QuCisgICAgU2VsZWN0aW9uRGF0YTo6
UmVuZGVyZXJNYXAgbmV3U2VsZWN0ZWRSZW5kZXJlcnM7CisgICAgU2VsZWN0aW9uRGF0YTo6UmVu
ZGVyQmxvY2tNYXAgbmV3U2VsZWN0ZWRCbG9ja3M7CisgICAgc2VsZWN0aW9uSXRlcmF0b3IgPSBT
ZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7CisgICAgZm9yIChhdXRvKiBjdXJyZW50
UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRSZW5k
ZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9y
Lm5leHQoKSkgeworICAgICAgICBpZiAoaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKCpjdXJy
ZW50UmVuZGVyZXIsIG1fcmVuZGVyUmFuZ2UpKSB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVy
U2VsZWN0aW9uSW5mbz4oKmN1cnJlbnRSZW5kZXJlciwgdHJ1ZSk7CisjaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpCisgICAgICAgICAgICBmb3IgKGF1dG8mIHJlY3QgOiBzZWxlY3Rpb25JbmZv
LT5jb2xsZWN0ZWRTZWxlY3Rpb25SZWN0cygpKQorICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9u
UmVjdEdhdGhlcmVyLmFkZFJlY3Qoc2VsZWN0aW9uSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBy
ZWN0KTsKKyAgICAgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5pc1RleHRPckxpbmVCcmVh
aygpKQorICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLnNldFRleHRPbmx5
KGZhbHNlKTsKKyNlbmRpZgorICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJlcnMuc2V0KGN1
cnJlbnRSZW5kZXJlciwgV1RGTW92ZShzZWxlY3Rpb25JbmZvKSk7CisgICAgICAgICAgICBhdXRv
KiBjb250YWluaW5nQmxvY2sgPSBjdXJyZW50UmVuZGVyZXItPmNvbnRhaW5pbmdCbG9jaygpOwor
ICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmNv
bnRhaW5pbmdCbG9jaykpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
QmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuYWRkKGNv
bnRhaW5pbmdCbG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgICAg
IGlmIChibG9ja0luZm8pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPigqY29u
dGFpbmluZ0Jsb2NrKTsKKyAgICAgICAgICAgICAgICBjb250YWluaW5nQmxvY2sgPSBjb250YWlu
aW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xT
KQorICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFkZEdhcFJlY3RzKGJs
b2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBibG9ja0luZm8tPnJlY3RzKCkpOworI2VuZGlm
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYmxvY2tSZXBhaW50
TW9kZSA9PSBSZXBhaW50TW9kZTo6Tm90aGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
SGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNoYW5nZWQgY29tcGFyZWQgdG8g
dGhlIG5ldyBzZWxlY3Rpb24/CisgICAgZm9yIChhdXRvJiBzZWxlY3RlZFJlbmRlcmVySW5mbyA6
IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzKSB7CisgICAgICAgIGF1dG8qIHJlbmRlcmVyID0g
c2VsZWN0ZWRSZW5kZXJlckluZm8ua2V5OworICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3U2Vs
ZWN0ZWRSZW5kZXJlcnMuZ2V0KHJlbmRlcmVyKTsKKyAgICAgICAgYXV0byogb2xkSW5mbyA9IHNl
bGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLmdldCgpOworICAgICAgICBpZiAoIW5ld0luZm8gfHwg
b2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8fCBvbGRJbmZvLT5zdGF0ZSgpICE9
IG5ld0luZm8tPnN0YXRlKCkKKyAgICAgICAgICAgIHx8IChtX3JlbmRlclJhbmdlLnN0YXJ0KCkg
PT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0YS5zdGFydE9mZnNldCAhPSBtX3JlbmRlclJh
bmdlLnN0YXJ0T2Zmc2V0KCkpCisgICAgICAgICAgICB8fCAobV9yZW5kZXJSYW5nZS5lbmQoKSA9
PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRhLmVuZE9mZnNldCAhPSBtX3JlbmRlclJhbmdl
LmVuZE9mZnNldCgpKSkgeworICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOworICAgICAg
ICAgICAgaWYgKG5ld0luZm8pIHsKKyAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7
CisgICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJlcnMucmVtb3ZlKHJlbmRlcmVyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFueSBuZXcgb2JqZWN0
cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGljdCwgYW5k
IHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgorICAgIGZvciAoYXV0byYgc2VsZWN0ZWRSZW5k
ZXJlckluZm8gOiBuZXdTZWxlY3RlZFJlbmRlcmVycykKKyAgICAgICAgc2VsZWN0ZWRSZW5kZXJl
ckluZm8udmFsdWUtPnJlcGFpbnQoKTsKKworICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgYmxv
Y2tzIGNoYW5nZWQ/CisgICAgZm9yIChhdXRvJiBzZWxlY3RlZEJsb2NrSW5mbyA6IG9sZFNlbGVj
dGlvbkRhdGEuYmxvY2tzKSB7CisgICAgICAgIGF1dG8qIGJsb2NrID0gc2VsZWN0ZWRCbG9ja0lu
Zm8ua2V5OworICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuZ2V0KGJs
b2NrKTsKKyAgICAgICAgYXV0byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLmdl
dCgpOworICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZv
LT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgeworICAg
ICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOworICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsK
KyAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICAgICAgbmV3
U2VsZWN0ZWRCbG9ja3MucmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5k
IGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4K
KyAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9ja3MpCisg
ICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdo
bGlnaHREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmZhMDQyZDA1ZTZiNmVjMWJmYWE4Y2U2NjY1Y2EwYzlmMmE1OGE5ZTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5oCkBA
IC0wLDAgKzEsMTA3IEBACisgLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJSZW5kZXJTZWxlY3Rpb25JbmZv
LmgiCisKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyNpbmNsdWRlICJTZWxlY3Rpb25S
ZWN0R2F0aGVyZXIuaCIKKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBP
bGRTZWxlY3Rpb25EYXRhOworICAgIAorY2xhc3MgSGlnaGxpZ2h0RGF0YSB7CitwdWJsaWM6Cisg
ICAgSGlnaGxpZ2h0RGF0YShSZW5kZXJWaWV3Jik7CisgICAgCisgICAgY2xhc3MgUmVuZGVyUmFu
Z2UgeworICAgIHB1YmxpYzoKKyAgICAgICAgUmVuZGVyUmFuZ2UoKSA9IGRlZmF1bHQ7CisgICAg
ICAgIFJlbmRlclJhbmdlKFJlbmRlck9iamVjdCogc3RhcnQsIFJlbmRlck9iamVjdCogZW5kLCB1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQorICAgICAgICAgICAgOiBt
X3N0YXJ0KG1ha2VXZWFrUHRyKHN0YXJ0KSkKKyAgICAgICAgICAgICwgbV9lbmQobWFrZVdlYWtQ
dHIoZW5kKSkKKyAgICAgICAgICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKKyAgICAg
ICAgICAgICwgbV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBSZW5kZXJPYmplY3QqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5nZXQo
KTsgfQorICAgICAgICBSZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmdl
dCgpOyB9CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3RhcnRPZmZzZXQ7IH0KKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZE9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kT2Zmc2V0OyB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFJlbmRlclJhbmdlJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fc3RhcnQgPT0gb3RoZXIubV9zdGFydCAmJiBtX2VuZCA9PSBvdGhlci5t
X2VuZCAmJiBtX3N0YXJ0T2Zmc2V0ID09IG90aGVyLm1fc3RhcnRPZmZzZXQgJiYgbV9lbmRPZmZz
ZXQgPT0gb3RoZXIubV9lbmRPZmZzZXQ7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIFdlYWtQdHI8UmVuZGVyT2JqZWN0PiBtX3N0YXJ0OworICAgICAgICBXZWFrUHRyPFJlbmRl
ck9iamVjdD4gbV9lbmQ7CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YXJ0T2Zmc2V0
OworICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9lbmRPZmZzZXQ7CisgICAgfTsKKyAgICAK
KyAgICB2b2lkIHNldFJlbmRlclJhbmdlKGNvbnN0IFJlbmRlclJhbmdlJik7CisgICAgCisgICAg
ZW51bSBjbGFzcyBSZXBhaW50TW9kZSB7IE5ld1hPUk9sZCwgTmV3TWludXNPbGQsIE5vdGhpbmcg
fTsKKyAgICB2b2lkIHNldChjb25zdCBSZW5kZXJSYW5nZSYsIFJlcGFpbnRNb2RlID0gUmVwYWlu
dE1vZGU6Ok5ld1hPUk9sZCk7CisgICAgY29uc3QgUmVuZGVyUmFuZ2UmIGdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVuZGVyUmFuZ2U7IH0KKworICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBjb25z
dCB7IHJldHVybiBtX3JlbmRlclJhbmdlLnN0YXJ0KCk7IH0KKyAgICBSZW5kZXJPYmplY3QqIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUmFuZ2UuZW5kKCk7IH0KKworICAgIHVuc2lnbmVk
IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBBU1NFUlQobV9yZW5kZXJSYW5nZS5zdGFydE9mZnNldCgp
KTsgcmV0dXJuIG1fcmVuZGVyUmFuZ2Uuc3RhcnRPZmZzZXQoKS52YWx1ZU9yKDApOyB9CisgICAg
dW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyBBU1NFUlQobV9yZW5kZXJSYW5nZS5lbmRPZmZz
ZXQoKSk7IHJldHVybiBtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpLnZhbHVlT3IoMCk7IH0KKwor
ICAgIHZvaWQgY2xlYXIoKTsKKyAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0dXJuIGNv
bGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Ok5vKTsgfQorICAgIEludFJlY3QgYm91
bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0Qm91bmRz
KENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpOyB9CisgICAgdm9pZCByZXBhaW50KCkgY29uc3Q7
CisgICAgCisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZUZv
clJlbmRlcmVyKFJlbmRlck9iamVjdCYpOworCitwcml2YXRlOgorICAgIGVudW0gY2xhc3MgQ2xp
cFRvVmlzaWJsZUNvbnRlbnQgeyBZZXMsIE5vIH07CisgICAgSW50UmVjdCBjb2xsZWN0Qm91bmRz
KENsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdDsKKyAgICB2b2lkIGFwcGx5KGNvbnN0IFJlbmRl
clJhbmdlJiwgUmVwYWludE1vZGUpOworCisgICAgY29uc3QgUmVuZGVyVmlldyYgbV9yZW5kZXJW
aWV3OworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgIFNlbGVjdGlvblJlY3RHYXRo
ZXJlciBtX3NlbGVjdGlvblJlY3RHYXRoZXJlcjsKKyNlbmRpZgorICAgIFJlbmRlclJhbmdlIG1f
cmVuZGVyUmFuZ2U7CisgICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0IHsgZmFsc2UgfTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJv
eC5jcHAKaW5kZXggODc5Nzc0YTBiODAxMzBjYzA1NzdlMjJlY2ZhYTQwMjNkMTI1YTQ1My4uMWE0
NTc5YjI5MjQ0MGVkZDRmNmVkYzNkNjM2MDA0NzJhZGZkODE0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUJveC5jcHAKQEAgLTI1Nyw3ICsyNTcsNyBAQCBJbmxpbmVCb3gqIElubGlu
ZUJveDo6cHJldmlvdXNMZWFmT25MaW5lSWdub3JpbmdMaW5lQnJlYWsoKSBjb25zdAogICAgIHJl
dHVybiBsZWFmOwogfQogCi1SZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZUJveDo6
c2VsZWN0aW9uU3RhdGUoKQorUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBJbmxpbmVCb3g6
OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICByZXR1cm4gbV9yZW5kZXJlci5zZWxlY3Rpb25TdGF0
ZSgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCmluZGV4IDJhYjExMjViNmRh
ZGJkY2I2YmIzMjIxMzNkNzgyNTE0ZDMzOGVhYmMuLjU5YTExZDZhNDhhODMzOGQ3ZTBiYTVlNjQ0
MTcyOWIxZjQ3OTllYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKQEAgLTIz
MCw3ICsyMzAsNyBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHZvaWQg
ZGlydHlMaW5lQm94ZXMoKTsKICAgICAKLSAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCB2aXJ0dWFsIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUo
KTsKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgYm9vbCBjYW5BY2NvbW1vZGF0ZUVsbGlw
c2lzKGJvb2wgbHRyLCBpbnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCkgY29uc3Q7CiAg
ICAgLy8gdmlzaWJsZUxlZnRFZGdlLCB2aXNpYmxlUmlnaHRFZGdlIGFyZSBpbiB0aGUgcGFyZW50
J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKaW5kZXggYzMxNjQ5NGJkYjM2ZDkxN2JhZGQ3YjY1MGUwYmViOWQ5ZmJlYjgyMi4u
NmY1NzdhYTQ1Nzg5NGNlYjljMmJkODc5NmYzZjBmYzEzNmI5MTAyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcApAQCAtMTUwNSw5ICsxNTA1LDkgQEAgSW5s
aW5lQm94KiBJbmxpbmVGbG93Qm94OjpsYXN0TGVhZkRlc2NlbmRhbnQoKSBjb25zdAogICAgIHJl
dHVybiBsZWFmOwogfQogCi1SZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZUZsb3dC
b3g6OnNlbGVjdGlvblN0YXRlKCkKK1JlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgSW5saW5l
Rmxvd0JveDo6c2VsZWN0aW9uU3RhdGUoKQogewotICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvbk5vbmU7CisgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9uZTsKIH0K
IAogYm9vbCBJbmxpbmVGbG93Qm94OjpjYW5BY2NvbW1vZGF0ZUVsbGlwc2lzKGJvb2wgbHRyLCBp
bnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCmluZGV4IGQzNmExNWI3NDk3ZDZjYTRlMDJkOTg4NTgzOWVi
NGQ0N2FhYzZlN2YuLjQwNTU1ZmY1NGUwMzEwZmY3OWRkOWNlOTMyMWRiYTJmMGFhNzk5NzkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaApAQCAtMjAxLDcgKzIwMSw3
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlbW92ZUNoaWxkKElubGluZUJveCogY2hpbGQp
OwogCi0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIG92
ZXJyaWRlOworICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUo
KSBvdmVycmlkZTsKIAogICAgIGJvb2wgY2FuQWNjb21tb2RhdGVFbGxpcHNpcyhib29sIGx0ciwg
aW50IGJsb2NrRWRnZSwgaW50IGVsbGlwc2lzV2lkdGgpIGNvbnN0IGZpbmFsOwogICAgIGZsb2F0
IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGZsb2F0IGJsb2NrTGVmdEVkZ2UsIGZsb2F0IGJs
b2NrUmlnaHRFZGdlLCBmbG9hdCBlbGxpcHNpc1dpZHRoLCBmbG9hdCAmdHJ1bmNhdGVkV2lkdGgs
IGJvb2wmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmNwcAppbmRleCA5NjY5NzI4YTc5NjBiYmI0OTM5ZjUyNTE2NjI0Y2I2ZTkwNGUwMDI1Li5lMzgz
NmMzMzUxMWQ5NmEyMTYxYTRmNTNiZGZhYWM5MjE5OWMxYjljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAi
RXZlbnRSZWdpb24uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgorI2luY2x1ZGUgIkhpZ2hsaWdodERhdGEuaCIKICNpbmNsdWRlICJIaWdobGlnaHRN
YXAuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKQEAgLTQ5LDcgKzUwLDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAi
UmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXMuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKICNpbmNsdWRlICJUZXh0Lmgi
CiAjaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWludGVyLmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50
U3R5bGUuaCIKQEAgLTE1NCw1NCArMTU0LDU0IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6aXNTZWxl
Y3RlZCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uCiAg
ICAgcmV0dXJuIGNsYW1wZWRPZmZzZXQoc3RhcnRQb3NpdGlvbikgPCBjbGFtcGVkT2Zmc2V0KGVu
ZFBvc2l0aW9uKTsKIH0KIAotUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0
Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIElubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICBhdXRvIHN0YXRlID0gdmVyaWZ5U2Vs
ZWN0aW9uU3RhdGUocmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpLCByZW5kZXJlcigpLnZpZXco
KS5zZWxlY3Rpb24oKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IHRoaXMgY29kZSBtdXRhdGVzIHNl
bGVjdGlvbiBzdGF0ZSwgYnV0IGl0J3MgdXNlZCBhdCBhIHNpbXBsZSBnZXR0ZXIgZWxzZXdoZXJl
Ci0gICAgLy8gaW4gdGhpcyBmaWxlLiBUaGlzIGNvZGUgc2hvdWxkIGxpa2VseSBsaXZlIGluIFNl
bGVjdGlvblJhbmdlRGF0YSwgb3Igc29tZXdoZXJlIGVsc2UuCisgICAgLy8gaW4gdGhpcyBmaWxl
LiBUaGlzIGNvZGUgc2hvdWxkIGxpa2VseSBsaXZlIGluIEhpZ2hsaWdodERhdGEsIG9yIHNvbWV3
aGVyZSBlbHNlLgogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81ODEyNTk3OD4KICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NTI4CiAgICAgLy8gSWYgdGhl
cmUgYXJlIGVsbGlwc2lzIGZvbGxvd2luZywgbWFrZSBzdXJlIHRoZWlyIHNlbGVjdGlvbiBpcyB1
cGRhdGVkLgogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiAmJiByb290KCku
ZWxsaXBzaXNCb3goKSkgewogICAgICAgICBFbGxpcHNpc0JveCogZWxsaXBzaXMgPSByb290KCku
ZWxsaXBzaXNCb3goKTsKLSAgICAgICAgaWYgKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uTm9uZSkgeworICAgICAgICBpZiAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRO
b25lKSB7CiAgICAgICAgICAgICBhdXRvIFtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kXSA9
IHNlbGVjdGlvblN0YXJ0RW5kKCk7CiAgICAgICAgICAgICAvLyBUaGUgZWxsaXBzaXMgc2hvdWxk
IGJlIGNvbnNpZGVyZWQgdG8gYmUgc2VsZWN0ZWQgaWYgdGhlIGVuZCBvZgogICAgICAgICAgICAg
Ly8gdGhlIHNlbGVjdGlvbiBpcyBwYXN0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRydW5jYXRpb24g
YW5kIHRoZQogICAgICAgICAgICAgLy8gYmVnaW5uaW5nIG9mIHRoZSBzZWxlY3Rpb24gaXMgYmVm
b3JlIG9yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCiAgICAgICAgICAgICAvLyB0cnVuY2F0aW9u
LgogICAgICAgICAgICAgZWxsaXBzaXMtPnNldFNlbGVjdGlvblN0YXRlKHNlbGVjdGlvbkVuZCA+
PSBtX3RydW5jYXRpb24gJiYgc2VsZWN0aW9uU3RhcnQgPD0gbV90cnVuY2F0aW9uID8KLSAgICAg
ICAgICAgICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSA6IFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uTm9uZSk7CisgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRJ
bnNpZGUgOiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUpOwogICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgIGVsbGlwc2lzLT5zZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvbk5vbmUpOworICAgICAgICAgICAgZWxsaXBzaXMtPnNldFNlbGVjdGlvblN0YXRlKFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0Tm9uZSk7CiAgICAgfQogICAgIAogICAgIHJldHVybiBzdGF0ZTsK
IH0KIAotUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94Ojp2ZXJpZnlT
ZWxlY3Rpb25TdGF0ZShSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlLCBTZWxlY3Rp
b25SYW5nZURhdGEmIHNlbGVjdGlvbikgY29uc3QKK1JlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3Rh
dGUgSW5saW5lVGV4dEJveDo6dmVyaWZ5U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZSBzdGF0ZSwgSGlnaGxpZ2h0RGF0YSYgc2VsZWN0aW9uKSBjb25zdAogewotICAg
IGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0IHx8IHN0YXRlID09IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uRW5kIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uQm90aCkgeworICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXJ0
IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0RW5kIHx8IHN0YXRlID09IFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0Qm90aCkgewogICAgICAgICBhdXRvIHN0YXJ0T2Zmc2V0ID0gc2Vs
ZWN0aW9uLnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIGF1dG8gZW5kT2Zmc2V0ID0gc2VsZWN0aW9u
LmVuZE9mZnNldCgpOwogICAgICAgICAvLyBUaGUgcG9zaXRpb24gYWZ0ZXIgYSBoYXJkIGxpbmUg
YnJlYWsgaXMgY29uc2lkZXJlZCB0byBiZSBwYXN0IGl0cyBlbmQuCiAgICAgICAgIEFTU0VSVChz
dGFydCgpICsgbGVuKCkgPj0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCkpOwogICAgICAgICB1bnNp
Z25lZCBsYXN0U2VsZWN0YWJsZSA9IHN0YXJ0KCkgKyBsZW4oKSAtIChpc0xpbmVCcmVhaygpID8g
MSA6IDApOwogCi0gICAgICAgIGJvb2wgc3RhcnQgPSAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25FbmQgJiYgc3RhcnRPZmZzZXQgPj0gbV9zdGFydCAmJiBzdGFydE9mZnNldCA8IG1f
c3RhcnQgKyBtX2xlbik7Ci0gICAgICAgIGJvb2wgZW5kID0gKHN0YXRlICE9IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uU3RhcnQgJiYgZW5kT2Zmc2V0ID4gbV9zdGFydCAmJiBlbmRPZmZzZXQgPD0g
bGFzdFNlbGVjdGFibGUpOworICAgICAgICBib29sIHN0YXJ0ID0gKHN0YXRlICE9IFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0RW5kICYmIHN0YXJ0T2Zmc2V0ID49IG1fc3RhcnQgJiYgc3RhcnRPZmZz
ZXQgPCBtX3N0YXJ0ICsgbV9sZW4pOworICAgICAgICBib29sIGVuZCA9IChzdGF0ZSAhPSBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXJ0ICYmIGVuZE9mZnNldCA+IG1fc3RhcnQgJiYgZW5kT2Zm
c2V0IDw9IGxhc3RTZWxlY3RhYmxlKTsKICAgICAgICAgaWYgKHN0YXJ0ICYmIGVuZCkKLSAgICAg
ICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoOworICAgICAgICAgICAg
c3RhdGUgPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEJvdGg7CiAgICAgICAgIGVsc2UgaWYgKHN0
YXJ0KQotICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0Owor
ICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXJ0OwogICAgICAg
ICBlbHNlIGlmIChlbmQpCi0gICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uRW5kOwotICAgICAgICBlbHNlIGlmICgoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25FbmQgfHwgc3RhcnRPZmZzZXQgPCBtX3N0YXJ0KQotICAgICAgICAgICAgJiYgKHN0YXRlID09
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQgfHwgZW5kT2Zmc2V0ID4gbGFzdFNlbGVjdGFi
bGUpKQotICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZTsK
LSAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoKQot
ICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgICAg
ICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0RW5kOworICAgICAgICBlbHNlIGlm
ICgoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRFbmQgfHwgc3RhcnRPZmZzZXQgPCBt
X3N0YXJ0KQorICAgICAgICAgICAgJiYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhcnQgfHwgZW5kT2Zmc2V0ID4gbGFzdFNlbGVjdGFibGUpKQorICAgICAgICAgICAgc3RhdGUg
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEluc2lkZTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUg
PT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRCb3RoKQorICAgICAgICAgICAgc3RhdGUgPSBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmU7CiAgICAgfQogCiAgICAgcmV0dXJuIHN0YXRlOwpAQCAt
NDkyLDcgKzQ5Miw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICBib29sIGlzUHJpbnRp
bmcgPSByZW5kZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmcoKTsKICAgICAKICAgICAvLyBEZXRl
cm1pbmUgd2hldGhlciBvciBub3Qgd2UncmUgc2VsZWN0ZWQuCi0gICAgYm9vbCBoYXZlU2VsZWN0
aW9uID0gIWlzUHJpbnRpbmcgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlRleHRD
bGlwICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOwor
ICAgIGJvb2wgaGF2ZVNlbGVjdGlvbiA9ICFpc1ByaW50aW5nICYmIHBhaW50SW5mby5waGFzZSAh
PSBQYWludFBoYXNlOjpUZXh0Q2xpcCAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0Tm9uZTsKICAgICBpZiAoIWhhdmVTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2U6OlNlbGVjdGlvbikgewogICAgICAgICAvLyBXaGVuIG9ubHkgcGFp
bnRpbmcgdGhlIHNlbGVjdGlvbiwgZG9uJ3QgYm90aGVyIHRvIHBhaW50IGlmIHRoZXJlIGlzIG5v
bmUuCiAgICAgICAgIHJldHVybjsKQEAgLTY4NCwxNCArNjg0LDE0IEBAIHVuc2lnbmVkIElubGlu
ZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQodW5zaWduZWQgeCkgY29uc3QKICAgICByZXR1cm4gb2Zm
c2V0OwogfQogCi1zdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0Qm94Ojpj
bGFtcGVkU3RhcnRFbmRGb3JTdGF0ZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKSBjb25zdAorc3RkOjpwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD4gSW5saW5lVGV4dEJveDo6Y2xhbXBlZFN0YXJ0RW5kRm9yU3Rh
dGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRT
dGF0ZSBzZWxlY3Rpb25TdGF0ZSkgY29uc3QKIHsKLSAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpCisgICAgaWYgKHNlbGVjdGlvblN0YXRlID09
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0SW5zaWRlKQogICAgICAgICByZXR1cm4geyAwLCBjbGFt
cGVkT2Zmc2V0KG1fc3RhcnQgKyBtX2xlbikgfTsKICAgICAKLSAgICBpZiAoc2VsZWN0aW9uU3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCkKKyAgICBpZiAoc2VsZWN0aW9uU3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGFydCkKICAgICAgICAgZW5kID0gcmVuZGVy
ZXIoKS50ZXh0KCkubGVuZ3RoKCk7Ci0gICAgZWxzZSBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpCisgICAgZWxzZSBpZiAoc2VsZWN0aW9uU3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRFbmQpCiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICByZXR1
cm4geyBjbGFtcGVkT2Zmc2V0KHN0YXJ0KSwgY2xhbXBlZE9mZnNldChlbmQpIH07CiB9CkBAIC03
MDMsMTIgKzcwMywxMiBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0
Qm94OjpzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CiAgICAgcmV0dXJuIGNsYW1wZWRTdGFydEVu
ZEZvclN0YXRlKHJlbmRlcmVyKCkudmlldygpLnNlbGVjdGlvbigpLnN0YXJ0T2Zmc2V0KCksIHJl
bmRlcmVyKCkudmlldygpLnNlbGVjdGlvbigpLmVuZE9mZnNldCgpLCBzZWxlY3Rpb25TdGF0ZSk7
CiB9CiAKLXN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElubGluZVRleHRCb3g6OmhpZ2hs
aWdodFN0YXJ0RW5kKFNlbGVjdGlvblJhbmdlRGF0YSAmcmFuZ2VEYXRhKSBjb25zdAorc3RkOjpw
YWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gSW5saW5lVGV4dEJveDo6aGlnaGxpZ2h0U3RhcnRFbmQo
SGlnaGxpZ2h0RGF0YSAmcmFuZ2VEYXRhKSBjb25zdAogewogICAgIGF1dG8gc3RhdGUgPSByYW5n
ZURhdGEuc2VsZWN0aW9uU3RhdGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKICAgICBzdGF0ZSA9
IHZlcmlmeVNlbGVjdGlvblN0YXRlKHN0YXRlLCByYW5nZURhdGEpOwogICAgIAotICAgIGlmIChz
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCisgICAgaWYgKHN0YXRlID09IFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9uZSkKICAgICAgICAgcmV0dXJuIHswLCAwfTsKICAgICAK
ICAgICByZXR1cm4gY2xhbXBlZFN0YXJ0RW5kRm9yU3RhdGUocmFuZ2VEYXRhLnN0YXJ0T2Zmc2V0
KCksIHJhbmdlRGF0YS5lbmRPZmZzZXQoKSwgc3RhdGUpOwpAQCAtMTA1NSw4ICsxMDU1LDggQEAg
VmVjdG9yPE1hcmtlZFRleHQ+IElubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0Zvckhp
Z2hsaWdodHMoVGV4dFBhaW50UGhhc2UKICAgICAgICAgICAgICAgICBBU1NFUlQoc3RhcnRPZmZz
ZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdGFydFJl
bmRlcmVyIHx8ICFlbmRSZW5kZXJlcikKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgYXV0byBoaWdobGlnaHREYXRhID0gU2VsZWN0aW9uUmFuZ2VEYXRhKHJl
bmRlcmVyKCkudmlldygpKTsKLSAgICAgICAgICAgICAgICBoaWdobGlnaHREYXRhLnNldENvbnRl
eHQoe3N0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3Rh
cnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KX0pOworICAgICAgICAg
ICAgICAgIGF1dG8gaGlnaGxpZ2h0RGF0YSA9IEhpZ2hsaWdodERhdGEocmVuZGVyZXIoKS52aWV3
KCkpOworICAgICAgICAgICAgICAgIGhpZ2hsaWdodERhdGEuc2V0UmVuZGVyUmFuZ2Uoe3N0YXJ0
UmVuZGVyZXIsIGVuZFJlbmRlcmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQp
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KX0pOwogICAgICAgICAgICAgICAgIGF1
dG8gW2hpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmRdID0gaGlnaGxpZ2h0U3RhcnRFbmQoaGln
aGxpZ2h0RGF0YSk7CiAgICAgICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFN0YXJ0IDwgaGlnaGxp
Z2h0RW5kKQogICAgICAgICAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBoaWdobGln
aHRTdGFydCwgaGlnaGxpZ2h0RW5kLCBNYXJrZWRUZXh0OjpIaWdobGlnaHQsIG51bGxwdHIsIGhp
Z2hsaWdodC5rZXkgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApp
bmRleCA0NjIxOGI2ZjZjNDkxNjcwYWIyOTNmOWYxOGM2ZDE1MDY0YTlhZjQwLi40MmQ3NDU1Yzg1
NmNmYmY2NTk0MGMxNjJmNjg0MTEyYWE4Mzk0Yjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmgKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWdu
ZWQgZW5kUG9zKSBjb25zdDsKICAgICBib29sIGlzU2VsZWN0ZWQodW5zaWduZWQgc3RhcnRQb3Np
dGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbnN0OwogICAgIHN0ZDo6cGFpcjx1bnNpZ25l
ZCwgdW5zaWduZWQ+IHNlbGVjdGlvblN0YXJ0RW5kKCkgY29uc3Q7Ci0gICAgc3RkOjpwYWlyPHVu
c2lnbmVkLCB1bnNpZ25lZD4gaGlnaGxpZ2h0U3RhcnRFbmQoU2VsZWN0aW9uUmFuZ2VEYXRhJikg
Y29uc3Q7CisgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gaGlnaGxpZ2h0U3RhcnRF
bmQoSGlnaGxpZ2h0RGF0YSYpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0
VW5pdCBsaW5lQm90dG9tKSBvdmVycmlkZTsKQEAgLTEzNCwxMSArMTM0LDExIEBAIHByaXZhdGU6
CiAgICAgdm9pZCBleHRyYWN0TGluZSgpIGZpbmFsOwogICAgIHZvaWQgYXR0YWNoTGluZSgpIGZp
bmFsOwogICAgIAotICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgdmVyaWZ5U2VsZWN0
aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSwgU2VsZWN0aW9uUmFuZ2VEYXRh
JikgY29uc3Q7Ci0gICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gY2xhbXBlZFN0YXJ0
RW5kRm9yU3RhdGUodW5zaWduZWQsIHVuc2lnbmVkLCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXRlKSBjb25zdDsKKyAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHZlcmlmeVNlbGVj
dGlvblN0YXRlKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUsIEhpZ2hsaWdodERhdGEmKSBj
b25zdDsKKyAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjbGFtcGVkU3RhcnRFbmRG
b3JTdGF0ZSh1bnNpZ25lZCwgdW5zaWduZWQsIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUp
IGNvbnN0OwogCiBwdWJsaWM6Ci0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxl
Y3Rpb25TdGF0ZSgpIGZpbmFsOworICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc2Vs
ZWN0aW9uU3RhdGUoKSBmaW5hbDsKIAogcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyVHJ1bmNhdGlv
bigpIGZpbmFsIHsgbV90cnVuY2F0aW9uID0gY05vVHJ1bmNhdGlvbjsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKaW5kZXggMmYzZmE5NWIzZWMwNDQ3MWVjMTgzZTUx
NzVmNWQ3YWFhNjE1MGFmZC4uM2FiMTAyYWEyNTRmNzM5NTA2YjBmNzE4ZjQ2NTMyYjllMTJlMGU5
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0xNDAwLDcg
KzE0MDAsNyBAQCBib29sIFJlbmRlckJsb2NrOjpzaG91bGRQYWludFNlbGVjdGlvbkdhcHMoKSBj
b25zdAogICAgIGlmIChzZXR0aW5ncygpLnNlbGVjdGlvblBhaW50aW5nV2l0aG91dFNlbGVjdGlv
bkdhcHNFbmFibGVkKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBzZWxl
Y3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUgJiYgc3R5bGUoKS52aXNpYmlsaXR5KCkgPT0g
VmlzaWJpbGl0eTo6VmlzaWJsZSAmJiBpc1NlbGVjdGlvblJvb3QoKTsKKyAgICByZXR1cm4gc2Vs
ZWN0aW9uU3RhdGUoKSAhPSBIaWdobGlnaHROb25lICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09
IFZpc2liaWxpdHk6OlZpc2libGUgJiYgaXNTZWxlY3Rpb25Sb290KCk7CiB9CiAKIGJvb2wgUmVu
ZGVyQmxvY2s6OmlzU2VsZWN0aW9uUm9vdCgpIGNvbnN0CkBAIC0xNTUwLDcgKzE1NTAsNyBAQCBH
YXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2Nr
LCBjb25zdCBMYXlvdXRQb2ludCYgcgogICAgICAgICByZXN1bHQgPSBibG9ja1NlbGVjdGlvbkdh
cHMocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBvZmZzZXRGcm9tUm9vdEJs
b2NrLCBsYXN0TG9naWNhbFRvcCwgbGFzdExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBj
YWNoZSwgcGFpbnRJbmZvKTsKIAogICAgIC8vIEZpbGwgdGhlIHZlcnRpY2FsIGdhcCBhbGwgdGhl
IHdheSB0byB0aGUgYm90dG9tIG9mIG91ciBibG9jayBpZiB0aGUgc2VsZWN0aW9uIGV4dGVuZHMg
cGFzdCBvdXIgYmxvY2suCi0gICAgaWYgKCZyb290QmxvY2sgPT0gdGhpcyAmJiAoc2VsZWN0aW9u
U3RhdGUoKSAhPSBTZWxlY3Rpb25Cb3RoICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9u
RW5kKSAmJiAhaXNSdWJ5QmFzZSgpICYmICFpc1J1YnlUZXh0KCkpIHsKKyAgICBpZiAoJnJvb3RC
bG9jayA9PSB0aGlzICYmIChzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodEJvdGggJiYgc2Vs
ZWN0aW9uU3RhdGUoKSAhPSBIaWdobGlnaHRFbmQpICYmICFpc1J1YnlCYXNlKCkgJiYgIWlzUnVi
eVRleHQoKSkgewogICAgICAgICByZXN1bHQudW5pdGVDZW50ZXIoYmxvY2tTZWxlY3Rpb25HYXAo
cm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBvZmZzZXRGcm9tUm9vdEJsb2Nr
LAogICAgICAgICAgICAgbGFzdExvZ2ljYWxUb3AsIGxhc3RMb2dpY2FsTGVmdCwgbGFzdExvZ2lj
YWxSaWdodCwgbG9naWNhbEhlaWdodCgpLCBjYWNoZSwgcGFpbnRJbmZvKSk7CiAgICAgfQpAQCAt
MTU3MSw3ICsxNTcxLDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2Fw
cyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKIAogICAgIC8vIEp1bXAg
cmlnaHQgdG8gdGhlIGZpcnN0IGJsb2NrIGNoaWxkIHRoYXQgY29udGFpbnMgc29tZSBzZWxlY3Rl
ZCBvYmplY3RzLgogICAgIFJlbmRlckJveCogY3VycjsKLSAgICBmb3IgKGN1cnIgPSBmaXJzdENo
aWxkQm94KCk7IGN1cnIgJiYgY3Vyci0+c2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25l
OyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmdCb3goKSkgeyB9CisgICAgZm9yIChjdXJyID0gZmly
c3RDaGlsZEJveCgpOyBjdXJyICYmIGN1cnItPnNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0
Tm9uZTsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nQm94KCkpIHsgfQogICAgIAogICAgIGlmICgh
Y3VycikKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1NzksOCArMTU3OSw4IEBAIEdhcFJl
Y3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9j
aywgY29uc3QgTGF5b3V0UG9pCiAgICAgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyBjaGls
ZENhY2hlKCp0aGlzLCBjYWNoZSk7CiAKICAgICBmb3IgKGJvb2wgc2F3U2VsZWN0aW9uRW5kID0g
ZmFsc2U7IGN1cnIgJiYgIXNhd1NlbGVjdGlvbkVuZDsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5n
Qm94KCkpIHsKLSAgICAgICAgU2VsZWN0aW9uU3RhdGUgY2hpbGRTdGF0ZSA9IGN1cnItPnNlbGVj
dGlvblN0YXRlKCk7Ci0gICAgICAgIGlmIChjaGlsZFN0YXRlID09IFNlbGVjdGlvbkJvdGggfHwg
Y2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25FbmQpCisgICAgICAgIEhpZ2hsaWdodFN0YXRlIGNoaWxk
U3RhdGUgPSBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpOworICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9
PSBIaWdobGlnaHRCb3RoIHx8IGNoaWxkU3RhdGUgPT0gSGlnaGxpZ2h0RW5kKQogICAgICAgICAg
ICAgc2F3U2VsZWN0aW9uRW5kID0gdHJ1ZTsKIAogICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGlu
Z09yT3V0T2ZGbG93UG9zaXRpb25lZCgpKQpAQCAtMTU5NSwxMCArMTU5NSwxMCBAQCBHYXBSZWN0
cyBSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ss
IGNvbnN0IExheW91dFBvaQogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBwYWludHNPd25TZWxl
Y3Rpb24gPSBjdXJyLT5zaG91bGRQYWludFNlbGVjdGlvbkdhcHMoKSB8fCBjdXJyLT5pc1RhYmxl
KCk7IC8vIEZJWE1FOiBFdmVudHVhbGx5IHdlIHdvbid0IHNwZWNpYWwtY2FzZSB0YWJsZSBsaWtl
IHRoaXMuCi0gICAgICAgIGJvb2wgZmlsbEJsb2NrR2FwcyA9IChwYWludHNPd25TZWxlY3Rpb24g
fHwgKGN1cnItPmNhbkJlU2VsZWN0aW9uTGVhZigpICYmIGNoaWxkU3RhdGUgIT0gU2VsZWN0aW9u
Tm9uZSkpICYmICFpc1J1YnlCYXNlKCkgJiYgIWlzUnVieVRleHQoKTsKKyAgICAgICAgYm9vbCBm
aWxsQmxvY2tHYXBzID0gKHBhaW50c093blNlbGVjdGlvbiB8fCAoY3Vyci0+Y2FuQmVTZWxlY3Rp
b25MZWFmKCkgJiYgY2hpbGRTdGF0ZSAhPSBIaWdobGlnaHROb25lKSkgJiYgIWlzUnVieUJhc2Uo
KSAmJiAhaXNSdWJ5VGV4dCgpOwogICAgICAgICBpZiAoZmlsbEJsb2NrR2FwcykgewogICAgICAg
ICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIHRoZSB2ZXJ0aWNhbCBnYXAgYWJvdmUgdGhpcyBvYmpl
Y3QuCi0gICAgICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25FbmQgfHwgY2hpbGRT
dGF0ZSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZFN0YXRlID09
IEhpZ2hsaWdodEVuZCB8fCBjaGlsZFN0YXRlID09IEhpZ2hsaWdodEluc2lkZSkgewogICAgICAg
ICAgICAgICAgIC8vIEZpbGwgdGhlIGdhcCBhYm92ZSB0aGUgb2JqZWN0LgogICAgICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZUNlbnRlcihibG9ja1NlbGVjdGlvbkdhcChyb290QmxvY2ssIHJvb3RC
bG9ja1BoeXNpY2FsUG9zaXRpb24sIG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAgICAgICAg
ICAgICAgIGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9naWNhbExlZnQsIGxhc3RMb2dpY2FsUmlnaHQs
IGN1cnItPmxvZ2ljYWxUb3AoKSwgY2FjaGUsIHBhaW50SW5mbykpOwpAQCAtMTYwNiw4ICsxNjA2
LDggQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9j
ayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKIAogICAgICAgICAgICAgLy8gT25seSBmaWxs
IHNpZGUgZ2FwcyBmb3Igb2JqZWN0cyB0aGF0IHBhaW50IHRoZWlyIG93biBzZWxlY3Rpb24gaWYg
d2Uga25vdyBmb3Igc3VyZSB0aGUgc2VsZWN0aW9uIGlzIGdvaW5nIHRvIGV4dGVuZCBhbGwgdGhl
IHdheSAqcGFzdCoKICAgICAgICAgICAgIC8vIG91ciBvYmplY3QuICBXZSBrbm93IHRoaXMgaWYg
dGhlIHNlbGVjdGlvbiBkaWQgbm90IGVuZCBpbnNpZGUgb3VyIG9iamVjdC4KLSAgICAgICAgICAg
IGlmIChwYWludHNPd25TZWxlY3Rpb24gJiYgKGNoaWxkU3RhdGUgPT0gU2VsZWN0aW9uU3RhcnQg
fHwgc2F3U2VsZWN0aW9uRW5kKSkKLSAgICAgICAgICAgICAgICBjaGlsZFN0YXRlID0gU2VsZWN0
aW9uTm9uZTsKKyAgICAgICAgICAgIGlmIChwYWludHNPd25TZWxlY3Rpb24gJiYgKGNoaWxkU3Rh
dGUgPT0gSGlnaGxpZ2h0U3RhcnQgfHwgc2F3U2VsZWN0aW9uRW5kKSkKKyAgICAgICAgICAgICAg
ICBjaGlsZFN0YXRlID0gSGlnaGxpZ2h0Tm9uZTsKIAogICAgICAgICAgICAgLy8gRmlsbCBzaWRl
IGdhcHMgb24gdGhpcyBvYmplY3QgYmFzZWQgb2ZmIGl0cyBzdGF0ZS4KICAgICAgICAgICAgIGJv
b2wgbGVmdEdhcCwgcmlnaHRHYXA7CkBAIC0xNjI0LDcgKzE2MjQsNyBAQCBHYXBSZWN0cyBSZW5k
ZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0
IExheW91dFBvaQogICAgICAgICAgICAgbGFzdExvZ2ljYWxUb3AgPSBibG9ja0RpcmVjdGlvbk9m
ZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgY3Vyci0+bG9naWNhbEJvdHRv
bSgpOwogICAgICAgICAgICAgbGFzdExvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRTZWxlY3Rpb25P
ZmZzZXQocm9vdEJsb2NrLCBjdXJyLT5sb2dpY2FsQm90dG9tKCksIGNhY2hlKTsKICAgICAgICAg
ICAgIGxhc3RMb2dpY2FsUmlnaHQgPSBsb2dpY2FsUmlnaHRTZWxlY3Rpb25PZmZzZXQocm9vdEJs
b2NrLCBjdXJyLT5sb2dpY2FsQm90dG9tKCksIGNhY2hlKTsKLSAgICAgICAgfSBlbHNlIGlmIChj
aGlsZFN0YXRlICE9IFNlbGVjdGlvbk5vbmUgJiYgaXM8UmVuZGVyQmxvY2s+KCpjdXJyKSkgewor
ICAgICAgICB9IGVsc2UgaWYgKGNoaWxkU3RhdGUgIT0gSGlnaGxpZ2h0Tm9uZSAmJiBpczxSZW5k
ZXJCbG9jaz4oKmN1cnIpKSB7CiAgICAgICAgICAgICAvLyBXZSBtdXN0IGJlIGEgYmxvY2sgdGhh
dCBoYXMgc29tZSBzZWxlY3RlZCBvYmplY3QgaW5zaWRlIGl0LCBzbyByZWN1ci4KICAgICAgICAg
ICAgIHJlc3VsdC51bml0ZShkb3duY2FzdDxSZW5kZXJCbG9jaz4oKmN1cnIpLnNlbGVjdGlvbkdh
cHMocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBMYXlvdXRTaXplKG9mZnNl
dEZyb21Sb290QmxvY2sud2lkdGgoKSArIGN1cnItPngoKSwgb2Zmc2V0RnJvbVJvb3RCbG9jay5o
ZWlnaHQoKSArIGN1cnItPnkoKSksCiAgICAgICAgICAgICAgICAgbGFzdExvZ2ljYWxUb3AsIGxh
c3RMb2dpY2FsTGVmdCwgbGFzdExvZ2ljYWxSaWdodCwgY2hpbGRDYWNoZSwgcGFpbnRJbmZvKSk7
CkBAIC0xNjg4LDE1ICsxNjg4LDExIEBAIExheW91dFJlY3QgUmVuZGVyQmxvY2s6OmxvZ2ljYWxS
aWdodFNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMCiAgICAgcmV0
dXJuIGdhcFJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmdldFNlbGVjdGlvbkdhcEluZm8o
U2VsZWN0aW9uU3RhdGUgc3RhdGUsIGJvb2wmIGxlZnRHYXAsIGJvb2wmIHJpZ2h0R2FwKQordm9p
ZCBSZW5kZXJCbG9jazo6Z2V0U2VsZWN0aW9uR2FwSW5mbyhIaWdobGlnaHRTdGF0ZSBzdGF0ZSwg
Ym9vbCYgbGVmdEdhcCwgYm9vbCYgcmlnaHRHYXApCiB7CiAgICAgYm9vbCBsdHIgPSBzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsKLSAgICBsZWZ0R2FwID0gKHN0YXRlID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKSB8fAotICAgICAgICAgICAgICAoc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQgJiYgbHRyKSB8fAotICAgICAgICAgICAgICAoc3RhdGUg
PT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCAmJiAhbHRyKTsKLSAgICByaWdodEdhcCA9
IChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSkgfHwKLSAgICAgICAgICAg
ICAgIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0ICYmIGx0cikgfHwKLSAg
ICAgICAgICAgICAgIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAmJiAhbHRy
KTsKKyAgICBsZWZ0R2FwID0gKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0SW5zaWRl
KSB8fCAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRFbmQgJiYgbHRyKSB8fCAoc3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGFydCAmJiAhbHRyKTsKKyAgICByaWdodEdh
cCA9IChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEluc2lkZSkgfHwgKHN0YXRlID09
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhcnQgJiYgbHRyKSB8fCAoc3RhdGUgPT0gUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRFbmQgJiYgIWx0cik7CiB9CiAKIExheW91dFVuaXQgUmVuZGVyQmxv
Y2s6OmxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrJiByb290QmxvY2ssIExh
eW91dFVuaXQgcG9zaXRpb24sIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmIGNh
Y2hlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBhMDUxNTE3MjQy
Yjc2Zjc1YmMyYzFmMTA1MTIwZGYxYWRlNjNjNzhlLi5kZjAxOWY3NjQ1Yzk5MTE1YWYxYjExZWEw
YzYxY2ZiMmEzZDdkYmVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApA
QCAtMTc3LDcgKzE3Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Qq
IHNlbE9iaiwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBM
YXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNo
ZXMmLCBjb25zdCBQYWludEluZm8qKTsKICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxSaWdodFNlbGVj
dGlvbkdhcChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJs
b2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9j
aywKICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QqIHNlbE9iaiwgTGF5b3V0VW5pdCBsb2dp
Y2FsUmlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
LCBjb25zdCBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzJiwgY29uc3QgUGFpbnRJbmZvKik7
Ci0gICAgdm9pZCBnZXRTZWxlY3Rpb25HYXBJbmZvKFNlbGVjdGlvblN0YXRlLCBib29sJiBsZWZ0
R2FwLCBib29sJiByaWdodEdhcCk7CisgICAgdm9pZCBnZXRTZWxlY3Rpb25HYXBJbmZvKEhpZ2hs
aWdodFN0YXRlLCBib29sJiBsZWZ0R2FwLCBib29sJiByaWdodEdhcCk7CiAgICAgYm9vbCBpc1Nl
bGVjdGlvblJvb3QoKSBjb25zdDsKIAogICAgIExheW91dFJlY3QgbG9naWNhbFJlY3RUb1BoeXNp
Y2FsUmVjdChjb25zdCBMYXlvdXRQb2ludCYgcGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5b3V0
UmVjdCYgbG9naWNhbFJlY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmNwcAppbmRleCBiODIwYWE3ZTYxZjM5NjZmYzgzNzZhZmViYTEyNmJhZTFiNjY3NzQx
Li42OGU0N2VjNDJjNGQ1NDlkNjEwMWE2YmQ2OGZmMmFkMzBiOTlmY2VlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzE3NCw5ICszMTc0LDkg
QEAgT3B0aW9uYWw8aW50PiBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZUJsb2NrQmFzZWxpbmUoTGlu
ZURpcmVjdGlvbk1vZGUgbGluZURpcmVjdGkKICAgICByZXR1cm4gc3R5bGUoKS5vdmVyZmxvd1ko
KSA9PSBPdmVyZmxvdzo6VmlzaWJsZSA/IGxhc3RCYXNlbGluZSA6IHN0ZDo6bWluKGJveEhlaWdo
dCwgbGFzdEJhc2VsaW5lKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldFNlbGVjdGlv
blN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQordm9pZCBSZW5kZXJCbG9ja0Zsb3c6OnNldFNl
bGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQogewotICAgIGlmIChzdGF0ZSAhPSBT
ZWxlY3Rpb25Ob25lKQorICAgIGlmIChzdGF0ZSAhPSBIaWdobGlnaHROb25lKQogICAgICAgICBl
bnN1cmVMaW5lQm94ZXMoKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9u
U3RhdGUoc3RhdGUpOwogfQpAQCAtMzE4OCw3ICszMTg4LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxv
Y2tGbG93OjppbmxpbmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0
IExheW8KIAogICAgIEdhcFJlY3RzIHJlc3VsdDsKIAotICAgIGJvb2wgY29udGFpbnNTdGFydCA9
IHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uU3RhcnQgfHwgc2VsZWN0aW9uU3RhdGUoKSA9
PSBTZWxlY3Rpb25Cb3RoOworICAgIGJvb2wgY29udGFpbnNTdGFydCA9IHNlbGVjdGlvblN0YXRl
KCkgPT0gSGlnaGxpZ2h0U3RhcnQgfHwgc2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRCb3Ro
OwogCiAgICAgaWYgKCFoYXNMaW5lcygpKSB7CiAgICAgICAgIGlmIChjb250YWluc1N0YXJ0KSB7
CkBAIC0zMjEwLDcgKzMyMTAsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNl
bGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5bwogICAgICAgICBM
YXlvdXRVbml0IHNlbEhlaWdodCA9IGN1cnItPnNlbGVjdGlvbkhlaWdodEFkanVzdGVkRm9yUHJl
Y2VkaW5nQmxvY2soKTsKIAogICAgICAgICBpZiAoIWNvbnRhaW5zU3RhcnQgJiYgIWxhc3RTZWxl
Y3RlZExpbmUgJiYKLSAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uU3Rh
cnQgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Cb3RoICYmICFpc1J1YnlCYXNlKCkp
CisgICAgICAgICAgICBzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodFN0YXJ0ICYmIHNlbGVj
dGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0Qm90aCAmJiAhaXNSdWJ5QmFzZSgpKQogICAgICAgICAg
ICAgcmVzdWx0LnVuaXRlQ2VudGVyKGJsb2NrU2VsZWN0aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJs
b2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zmc2V0RnJvbVJvb3RCbG9jaywgbGFzdExvZ2ljYWxUb3As
IGxhc3RMb2dpY2FsTGVmdCwgbGFzdExvZ2ljYWxSaWdodCwgc2VsVG9wLCBjYWNoZSwgcGFpbnRJ
bmZvKSk7CiAgICAgICAgIAogICAgICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxSZWN0IHsgTGF5b3V0
VW5pdChjdXJyLT5sb2dpY2FsTGVmdCgpKSwgc2VsVG9wLCBMYXlvdXRVbml0KGN1cnItPmxvZ2lj
YWxXaWR0aCgpKSwgc2VsVG9wICsgc2VsSGVpZ2h0IH07CkBAIC0zMjI3LDcgKzMyMjcsNyBAQCBH
YXBSZWN0cyBSZW5kZXJCbG9ja0Zsb3c6OmlubGluZVNlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sm
IHJvb3RCbG9jaywgY29uc3QgTGF5bwogICAgICAgICAvLyBWaXNpYmxlU2VsZWN0aW9uIG11c3Qg
c3RhcnQganVzdCBhZnRlciBvdXIgbGFzdCBsaW5lLgogICAgICAgICBsYXN0U2VsZWN0ZWRMaW5l
ID0gbGFzdFJvb3RCb3goKTsKIAotICAgIGlmIChsYXN0U2VsZWN0ZWRMaW5lICYmIHNlbGVjdGlv
blN0YXRlKCkgIT0gU2VsZWN0aW9uRW5kICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9u
Qm90aCkgeworICAgIGlmIChsYXN0U2VsZWN0ZWRMaW5lICYmIHNlbGVjdGlvblN0YXRlKCkgIT0g
SGlnaGxpZ2h0RW5kICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0Qm90aCkgewogICAg
ICAgICAvLyBVcGRhdGUgb3VyIGxhc3RZIHRvIGJlIHRoZSBib3R0b20gb2YgdGhlIGxhc3Qgc2Vs
ZWN0ZWQgbGluZS4KICAgICAgICAgbGFzdExvZ2ljYWxUb3AgPSBibG9ja0RpcmVjdGlvbk9mZnNl
dChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbGFzdFNlbGVjdGVkTGluZS0+c2Vs
ZWN0aW9uQm90dG9tKCk7CiAgICAgICAgIGxhc3RMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0U2Vs
ZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbGFzdFNlbGVjdGVkTGluZS0+c2VsZWN0aW9uQm90dG9t
KCksIGNhY2hlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaApp
bmRleCAyNzc3NjdkZTJkOTdkMzU4NDJlMDY1YTliMzExM2MyYjUzZjlhMmI3Li5iNDI5Yjc2OTIx
Yjc4Y2EyM2IyNDU4YjA0MjhjOGE5YmIyYjgzODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC01NTksNyArNTU5LDcgQEAgcHJpdmF0ZToKICAgICBp
bnQgbV93aWR0aEZvclRleHRBdXRvc2l6aW5nOwogICAgIHVuc2lnbmVkIG1fbGluZUNvdW50Rm9y
VGV4dEF1dG9zaXppbmcgOiAyOwogI2VuZGlmCi0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShT
ZWxlY3Rpb25TdGF0ZSkgZmluYWw7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGln
aHRTdGF0ZSkgZmluYWw7CiAKIHB1YmxpYzoKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRoZXNl
IGNhbiBiZSBtYWRlIHByb3RlY3RlZCBhZ2FpbiBvbmNlIGFsbCBjYWxsZXJzIGhhdmUgYmVlbiBt
b3ZlZCBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2Rl
bE9iamVjdC5jcHAKaW5kZXggODAxNzIxZGI1MjVjNDA0M2YwMTBkMWE3MDEyY2VlMGJjNmIyN2Iy
My4uNTA4NDU3ZTg4ZmEzNGVlODJhOWEzYzNmNzQ4MjJmY2I3ZmZiYjMxZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0xMjks
MTQgKzEyOSwxNCBAQCBzdGF0aWMgRmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0TWFwJiBmaXJzdExl
dHRlclJlbWFpbmluZ1RleHRNYXAoKQogICAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQor
dm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3Rh
dGUgc3RhdGUpCiB7Ci0gICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbkluc2lkZSAmJiBzZWxlY3Rp
b25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpCisgICAgaWYgKHN0YXRlID09IEhpZ2hsaWdodElu
c2lkZSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodE5vbmUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGlmICgoc3RhdGUgPT0gU2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhdGUo
KSA9PSBTZWxlY3Rpb25FbmQpCi0gICAgICAgIHx8IChzdGF0ZSA9PSBTZWxlY3Rpb25FbmQgJiYg
c2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25TdGFydCkpCi0gICAgICAgIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvbkJvdGgpOworICAgIGlmICgo
c3RhdGUgPT0gSGlnaGxpZ2h0U3RhcnQgJiYgc2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRF
bmQpCisgICAgICAgIHx8IChzdGF0ZSA9PSBIaWdobGlnaHRFbmQgJiYgc2VsZWN0aW9uU3RhdGUo
KSA9PSBIaWdobGlnaHRTdGFydCkpCisgICAgICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnNl
dFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodEJvdGgpOwogICAgIGVsc2UKICAgICAgICAgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oCmluZGV4IGU2MGQzYzJi
MzZlNWFlODUyY2IzMjBkN2RiMmUxNTk1YTkxMTllOWYuLmFjNTkzY2FmMTM5ZjExZjg3YmM4NTk1
NWJkNWRhYWFkNTBkYTFiNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3hNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5oCkBAIC0yMTUsNyArMjE1LDcgQEAgcHVibGljOgogCiAgICAgdm9p
ZCBtYXBBYnNvbHV0ZVRvTG9jYWxQb2ludChNYXBDb29yZGluYXRlc0ZsYWdzLCBUcmFuc2Zvcm1T
dGF0ZSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxl
Y3Rpb25TdGF0ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGln
aHRTdGF0ZSkgb3ZlcnJpZGU7CiAKICAgICBib29sIGNhbkhhdmVCb3hJbmZvSW5GcmFnbWVudCgp
IGNvbnN0IHsgcmV0dXJuICFpc0Zsb2F0aW5nKCkgJiYgIWlzUmVwbGFjZWQoKSAmJiAhaXNJbmxp
bmUoKSAmJiAhaXNUYWJsZUNlbGwoKSAmJiBpc1JlbmRlckJsb2NrKCkgJiYgIWlzUmVuZGVyU1ZH
QmxvY2soKTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsu
Y3BwCmluZGV4IDc0MDkwYWU3Y2E1ODYyMzgxMTEwZjVkNzU2OTNiZjRjYTc1NTRkOWMuLjc2NGVj
MzY5ZTJkMTE3M2ZjNGY5ZmVjYjBhMDM0YjY5NGE4YjA3NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwCkBAIC0xNDcsMTQgKzE0NywxNCBAQCBWaXNp
YmxlUG9zaXRpb24gUmVuZGVyTGluZUJyZWFrOjpwb3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91
dFBvaW50JiwgY29uc3QgUmVuZAogICAgIHJldHVybiBjcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwg
RE9XTlNUUkVBTSk7CiB9CiAKLXZvaWQgUmVuZGVyTGluZUJyZWFrOjpzZXRTZWxlY3Rpb25TdGF0
ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3ZvaWQgUmVuZGVyTGluZUJyZWFrOjpzZXRTZWxlY3Rp
b25TdGF0ZShIaWdobGlnaHRTdGF0ZSBzdGF0ZSkKIHsKLSAgICBpZiAoc3RhdGUgIT0gU2VsZWN0
aW9uTm9uZSkKKyAgICBpZiAoc3RhdGUgIT0gSGlnaGxpZ2h0Tm9uZSkKICAgICAgICAgZW5zdXJl
TGluZUJveGVzKCk7CiAgICAgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRl
KHN0YXRlKTsKICAgICBpZiAoIW1faW5saW5lQm94V3JhcHBlcikKICAgICAgICAgcmV0dXJuOwot
ICAgIG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgpLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3Rh
dGUgIT0gU2VsZWN0aW9uTm9uZSk7CisgICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0
SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBIaWdobGlnaHROb25lKTsKIH0KIAogTGF5b3V0
UmVjdCBSZW5kZXJMaW5lQnJlYWs6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94
LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5l
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCmluZGV4IGVkZmVm
ZjU1M2IzZjc0ZDg0ZDRkZTg5MDc3NGZmZWUyNGVlM2IzY2IuLjI0MjlmNThmODM5NTNmZmI1ODY5
NGI3NGNhOWU0MTk0NDJkNTljODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMaW5lQnJlYWsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgY2FyZXRNYXhP
ZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNv
bnN0IG92ZXJyaWRlOwogICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94Kiwg
dW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSkgb3Zl
cnJpZGU7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkgb3ZlcnJp
ZGU7CiAKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJl
Y3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBvdmVycmlkZTsKICAgICBpbnQgYmFz
ZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9u
TW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKaW5kZXggY2UwMTliYWEzYmQ1NWExNmVl
MjRmYWVlNmU5NzY2MjZiY2JlYWVkNC4uM2Y3N2E4YTI5MzhlMGExM2UwMWUxM2ZiYjY3ZTQ1Mjg2
M2VmNWE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcApAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKICAgICBp
ZiAoaXNJbWFnZSgpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IG1hcmtlckltYWdlID0g
bV9pbWFnZS0+aW1hZ2UodGhpcywgbWFya2VyUmVjdC5zaXplKCkpKQogICAgICAgICAgICAgY29u
dGV4dC5kcmF3SW1hZ2UoKm1hcmtlckltYWdlLCBtYXJrZXJSZWN0KTsKLSAgICAgICAgaWYgKHNl
bGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgeworICAgICAgICBpZiAoc2VsZWN0aW9u
U3RhdGUoKSAhPSBIaWdobGlnaHROb25lKSB7CiAgICAgICAgICAgICBMYXlvdXRSZWN0IHNlbFJl
Y3QgPSBsb2NhbFNlbGVjdGlvblJlY3QoKTsKICAgICAgICAgICAgIHNlbFJlY3QubW92ZUJ5KGJv
eE9yaWdpbik7CiAgICAgICAgICAgICBjb250ZXh0LmZpbGxSZWN0KHNuYXBwZWRJbnRSZWN0KHNl
bFJlY3QpLCBtX2xpc3RJdGVtLT5zZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSk7CkBAIC0xMTU1
LDcgKzExNTUsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgeworICAg
IGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodE5vbmUpIHsKICAgICAgICAgTGF5b3V0
UmVjdCBzZWxSZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0KCk7CiAgICAgICAgIHNlbFJlY3QubW92
ZUJ5KGJveE9yaWdpbik7CiAgICAgICAgIGNvbnRleHQuZmlsbFJlY3Qoc25hcHBlZEludFJlY3Qo
c2VsUmVjdCksIG1fbGlzdEl0ZW0tPnNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpKTsKQEAgLTE4
MzMsMjAgKzE4MzMsMjAgQEAgRmxvYXRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0aXZl
TWFya2VyUmVjdCgpCiAgICAgcmV0dXJuIHJlbGF0aXZlUmVjdDsKIH0KIAotdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3ZvaWQg
UmVuZGVyTGlzdE1hcmtlcjo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUp
CiB7CiAgICAgLy8gVGhlIHNlbGVjdGlvbiBzdGF0ZSBmb3Igb3VyIGNvbnRhaW5pbmcgYmxvY2sg
aGllcmFyY2h5IGlzIHVwZGF0ZWQgYnkgdGhlIGJhc2UgY2xhc3MgY2FsbC4KICAgICBSZW5kZXJC
b3g6OnNldFNlbGVjdGlvblN0YXRlKHN0YXRlKTsKIAogICAgIGlmIChtX2lubGluZUJveFdyYXBw
ZXIgJiYgY2FuVXBkYXRlU2VsZWN0aW9uT25Sb290TGluZUJveGVzKCkpCi0gICAgICAgIG1faW5s
aW5lQm94V3JhcHBlci0+cm9vdCgpLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3RhdGUgIT0gU2Vs
ZWN0aW9uTm9uZSk7CisgICAgICAgIG1faW5saW5lQm94V3JhcHBlci0+cm9vdCgpLnNldEhhc1Nl
bGVjdGVkQ2hpbGRyZW4oc3RhdGUgIT0gSGlnaGxpZ2h0Tm9uZSk7CiB9CiAKIExheW91dFJlY3Qg
UmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVu
dCkKIHsKICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwogCi0gICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSB8fCAhaW5saW5lQm94V3JhcHBlcigpKQorICAgIGlmIChz
ZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodE5vbmUgfHwgIWlubGluZUJveFdyYXBwZXIoKSkK
ICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIAogICAgIFJvb3RJbmxpbmVCb3gmIHJvb3RC
b3ggPSBpbmxpbmVCb3hXcmFwcGVyKCktPnJvb3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5oCmluZGV4IDE0MzA0YWU1ZDhhMmI1NWExODNmMzIzYjEzOWFk
MzM3MjVhOWNlZTEuLjY5NjE4YzE0ZDAxNjQ5ZjYzMDVkOTgwMTQyZjFhZDYxNWNkOGFiYjEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaApAQCAtNzIsNyAr
NzIsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNJbWFnZSgpIGNvbnN0IG92ZXJyaWRlOwogICAg
IGJvb2wgaXNUZXh0KCkgY29uc3QgeyByZXR1cm4gIWlzSW1hZ2UoKTsgfQogCi0gICAgdm9pZCBz
ZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRT
ZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkgb3ZlcnJpZGU7CiAgICAgTGF5b3V0UmVjdCBz
ZWxlY3Rpb25SZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBh
aW50Q29udGFpbmVyLCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmpl
Y3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKaW5kZXgg
OThjZGQ4YmVmZGJhMWJhNzgyYzAzZTZiMjUyMWRjYTgwNzVmY2RhYi4uYTIyOGIwMTU2NzY2NDg1
OGU5NWQ5M2MzNWQ4NDZhMDI0ZDMwZjFmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHAKQEAgLTE0NTAsMTAgKzE0NTAsMTAgQEAgUmVuZGVyRWxlbWVudCogUmVu
ZGVyT2JqZWN0Ojpjb250YWluZXIoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWlu
dENvbnQKIAogYm9vbCBSZW5kZXJPYmplY3Q6OmlzU2VsZWN0aW9uQm9yZGVyKCkgY29uc3QKIHsK
LSAgICBTZWxlY3Rpb25TdGF0ZSBzdCA9IHNlbGVjdGlvblN0YXRlKCk7Ci0gICAgcmV0dXJuIHN0
ID09IFNlbGVjdGlvblN0YXJ0Ci0gICAgICAgIHx8IHN0ID09IFNlbGVjdGlvbkVuZAotICAgICAg
ICB8fCBzdCA9PSBTZWxlY3Rpb25Cb3RoCisgICAgSGlnaGxpZ2h0U3RhdGUgc3QgPSBzZWxlY3Rp
b25TdGF0ZSgpOworICAgIHJldHVybiBzdCA9PSBIaWdobGlnaHRTdGFydAorICAgICAgICB8fCBz
dCA9PSBIaWdobGlnaHRFbmQKKyAgICAgICAgfHwgc3QgPT0gSGlnaGxpZ2h0Qm90aAogICAgICAg
ICB8fCB2aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnQoKSA9PSB0aGlzCiAgICAgICAgIHx8IHZpZXco
KS5zZWxlY3Rpb24oKS5lbmQoKSA9PSB0aGlzOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5oCmluZGV4IGY1ZDY5ZTkzYjQ4NWViYzI0MjY5MjJjMWQ5NGUyNjE4Yzk0ODFm
MzMuLmRlZjY5ZGUzZWEyZDQzMzg4OTkyYjVmOTNmZGEzYjYzNmM5NDIwYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTY0LDcgKzY0LDcgQEAgY2xhc3MgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdDsKIGNsYXNzIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOwogY2xh
c3MgUmVuZGVyVGhlbWU7CiBjbGFzcyBSZW5kZXJUcmVlQnVpbGRlcjsKLWNsYXNzIFNlbGVjdGlv
blJhbmdlRGF0YTsKK2NsYXNzIEhpZ2hsaWdodERhdGE7CiBjbGFzcyBUcmFuc2Zvcm1TdGF0ZTsK
IGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIApAQCAtNjkzLDE5ICs2OTMsMTkgQEAgcHVibGljOgog
CiAgICAgYm9vbCBpc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkgY29uc3QgeyByZXR1
cm4gKGlzRmxvYXRpbmcoKSB8fCBpc091dE9mRmxvd1Bvc2l0aW9uZWQoKSk7IH0KIAotICAgIGVu
dW0gU2VsZWN0aW9uU3RhdGUgewotICAgICAgICBTZWxlY3Rpb25Ob25lLCAvLyBUaGUgb2JqZWN0
IGlzIG5vdCBzZWxlY3RlZC4KLSAgICAgICAgU2VsZWN0aW9uU3RhcnQsIC8vIFRoZSBvYmplY3Qg
ZWl0aGVyIGNvbnRhaW5zIHRoZSBzdGFydCBvZiBhIHNlbGVjdGlvbiBydW4gb3IgaXMgdGhlIHN0
YXJ0IG9mIGEgcnVuCi0gICAgICAgIFNlbGVjdGlvbkluc2lkZSwgLy8gVGhlIG9iamVjdCBpcyBm
dWxseSBlbmNvbXBhc3NlZCBieSBhIHNlbGVjdGlvbiBydW4KLSAgICAgICAgU2VsZWN0aW9uRW5k
LCAvLyBUaGUgb2JqZWN0IGVpdGhlciBjb250YWlucyB0aGUgZW5kIG9mIGEgc2VsZWN0aW9uIHJ1
biBvciBpcyB0aGUgZW5kIG9mIGEgcnVuCi0gICAgICAgIFNlbGVjdGlvbkJvdGggLy8gVGhlIG9i
amVjdCBjb250YWlucyBhbiBlbnRpcmUgcnVuIG9yIGlzIHRoZSBzb2xlIHNlbGVjdGVkIG9iamVj
dCBpbiB0aGF0IHJ1bgorICAgIGVudW0gSGlnaGxpZ2h0U3RhdGUgeworICAgICAgICBIaWdobGln
aHROb25lLCAvLyBUaGUgb2JqZWN0IGlzIG5vdCBzZWxlY3RlZC4KKyAgICAgICAgSGlnaGxpZ2h0
U3RhcnQsIC8vIFRoZSBvYmplY3QgZWl0aGVyIGNvbnRhaW5zIHRoZSBzdGFydCBvZiBhIHNlbGVj
dGlvbiBydW4gb3IgaXMgdGhlIHN0YXJ0IG9mIGEgcnVuCisgICAgICAgIEhpZ2hsaWdodEluc2lk
ZSwgLy8gVGhlIG9iamVjdCBpcyBmdWxseSBlbmNvbXBhc3NlZCBieSBhIHNlbGVjdGlvbiBydW4K
KyAgICAgICAgSGlnaGxpZ2h0RW5kLCAvLyBUaGUgb2JqZWN0IGVpdGhlciBjb250YWlucyB0aGUg
ZW5kIG9mIGEgc2VsZWN0aW9uIHJ1biBvciBpcyB0aGUgZW5kIG9mIGEgcnVuCisgICAgICAgIEhp
Z2hsaWdodEJvdGggLy8gVGhlIG9iamVjdCBjb250YWlucyBhbiBlbnRpcmUgcnVuIG9yIGlzIHRo
ZSBzb2xlIHNlbGVjdGVkIG9iamVjdCBpbiB0aGF0IHJ1bgogICAgIH07CiAKICAgICAvLyBUaGUg
Y3VycmVudCBzZWxlY3Rpb24gc3RhdGUgZm9yIGFuIG9iamVjdC4gIEZvciBibG9ja3MsIHRoZSBz
dGF0ZSByZWZlcnMgdG8gdGhlIHN0YXRlIG9mIHRoZSBsZWFmCi0gICAgLy8gZGVzY2VuZGFudHMg
KGFzIGRlc2NyaWJlZCBhYm92ZSBpbiB0aGUgU2VsZWN0aW9uU3RhdGUgZW51bSBkZWNsYXJhdGlv
bikuCi0gICAgU2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X2JpdGZpZWxkcy5zZWxlY3Rpb25TdGF0ZSgpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFNlbGVj
dGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKSB7IG1fYml0ZmllbGRzLnNldFNlbGVjdGlv
blN0YXRlKHN0YXRlKTsgfQotICAgIGlubGluZSB2b2lkIHNldFNlbGVjdGlvblN0YXRlSWZOZWVk
ZWQoU2VsZWN0aW9uU3RhdGUpOworICAgIC8vIGRlc2NlbmRhbnRzIChhcyBkZXNjcmliZWQgYWJv
dmUgaW4gdGhlIEhpZ2hsaWdodFN0YXRlIGVudW0gZGVjbGFyYXRpb24pLgorICAgIEhpZ2hsaWdo
dFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuc2VsZWN0
aW9uU3RhdGUoKTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGln
aHRTdGF0ZSBzdGF0ZSkgeyBtX2JpdGZpZWxkcy5zZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7IH0K
KyAgICBpbmxpbmUgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKEhpZ2hsaWdodFN0YXRl
KTsKICAgICBib29sIGNhblVwZGF0ZVNlbGVjdGlvbk9uUm9vdExpbmVCb3hlcygpOwogCiAgICAg
Ly8gQSBzaW5nbGUgcmVjdGFuZ2xlIHRoYXQgZW5jb21wYXNzZXMgYWxsIG9mIHRoZSBzZWxlY3Rl
ZCBvYmplY3RzIHdpdGhpbiB0aGlzIG9iamVjdC4gIFVzZWQgdG8gZGV0ZXJtaW5lIHRoZSB0aWdo
dGVzdApAQCAtODk1LDcgKzg5NSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAsIG1fY2hpbGRy
ZW5JbmxpbmUoZmFsc2UpCiAgICAgICAgICAgICAsIG1faXNFeGNsdWRlZEZyb21Ob3JtYWxMYXlv
dXQoZmFsc2UpCiAgICAgICAgICAgICAsIG1fcG9zaXRpb25lZFN0YXRlKElzU3RhdGljYWxseVBv
c2l0aW9uZWQpCi0gICAgICAgICAgICAsIG1fc2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uTm9uZSkK
KyAgICAgICAgICAgICwgbV9zZWxlY3Rpb25TdGF0ZShIaWdobGlnaHROb25lKQogICAgICAgICAg
ICAgLCBtX2ZyYWdtZW50ZWRGbG93U3RhdGUoTm90SW5zaWRlRnJhZ21lbnRlZEZsb3cpCiAgICAg
ICAgICAgICAsIG1fYm94RGVjb3JhdGlvblN0YXRlKE5vQm94RGVjb3JhdGlvbnMpCiAgICAgICAg
IHsKQEAgLTk1MSw4ICs5NTEsOCBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIHZvaWQg
Y2xlYXJQb3NpdGlvbmVkU3RhdGUoKSB7IG1fcG9zaXRpb25lZFN0YXRlID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KFBvc2l0aW9uVHlwZTo6U3RhdGljKTsgfQogCi0gICAgICAgIEFMV0FZU19JTkxJ
TkUgU2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNf
Y2FzdDxTZWxlY3Rpb25TdGF0ZT4obV9zZWxlY3Rpb25TdGF0ZSk7IH0KLSAgICAgICAgQUxXQVlT
X0lOTElORSB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0
YXRlKSB7IG1fc2VsZWN0aW9uU3RhdGUgPSBzZWxlY3Rpb25TdGF0ZTsgfQorICAgICAgICBBTFdB
WVNfSU5MSU5FIEhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8SGlnaGxpZ2h0U3RhdGU+KG1fc2VsZWN0aW9uU3RhdGUpOyB9CisgICAgICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSBzZWxl
Y3Rpb25TdGF0ZSkgeyBtX3NlbGVjdGlvblN0YXRlID0gc2VsZWN0aW9uU3RhdGU7IH0KICAgICAg
ICAgCiAgICAgICAgIEFMV0FZU19JTkxJTkUgRnJhZ21lbnRlZEZsb3dTdGF0ZSBmcmFnbWVudGVk
Rmxvd1N0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RnJhZ21lbnRlZEZsb3dTdGF0
ZT4obV9mcmFnbWVudGVkRmxvd1N0YXRlKTsgfQogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQg
c2V0RnJhZ21lbnRlZEZsb3dTdGF0ZShGcmFnbWVudGVkRmxvd1N0YXRlIGZyYWdtZW50ZWRGbG93
U3RhdGUpIHsgbV9mcmFnbWVudGVkRmxvd1N0YXRlID0gZnJhZ21lbnRlZEZsb3dTdGF0ZTsgfQpA
QCAtMTA2Nyw3ICsxMDY3LDcgQEAgaW5saW5lIGJvb2wgUmVuZGVyT2JqZWN0OjpwcmVzZXJ2ZXNO
ZXdsaW5lKCkgY29uc3QKICAgICByZXR1cm4gc3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKTsKIH0K
IAotaW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNl
bGVjdGlvblN0YXRlIHN0YXRlKQoraW5saW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rp
b25TdGF0ZUlmTmVlZGVkKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQogewogICAgIGlmIChzZWxlY3Rp
b25TdGF0ZSgpID09IHN0YXRlKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAppbmRleCAzMzhjMzIzY2M4M2NlOGQ1Y2JlNjZmNzk1
YzlhNGIzMjEyZDQ4NmQyLi40NDRiM2EwMTE0NDI2NDA3MzY0OGYyYjE0MjY5MWJmMmRmNjhmNjhj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTEz
Myw3ICsxMzMsNyBAQCB2b2lkIFJlbmRlclJlcGxhY2VkOjppbnRyaW5zaWNTaXplQ2hhbmdlZCgp
CiAKIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZERyYXdTZWxlY3Rpb25UaW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lICYmICFkb2N1
bWVudCgpLnByaW50aW5nKCk7CisgICAgcmV0dXJuIHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxp
Z2h0Tm9uZSAmJiAhZG9jdW1lbnQoKS5wcmludGluZygpOwogfQogCiBpbmxpbmUgc3RhdGljIGJv
b2wgZHJhZ2dlZENvbnRlbnRDb250YWluc1JlcGxhY2VkRWxlbWVudChjb25zdCBWZWN0b3I8UmVu
ZGVyZWREb2N1bWVudE1hcmtlcio+JiBtYXJrZXJzLCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQpA
QCAtMjAzLDcgKzIwMyw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQpCiAgICAgCiAgICAgYm9v
bCBkcmF3U2VsZWN0aW9uVGludCA9IHNob3VsZERyYXdTZWxlY3Rpb25UaW50KCk7CiAgICAgaWYg
KHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpTZWxlY3Rpb24pIHsKLSAgICAgICAgaWYg
KHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkKKyAgICAgICAgaWYgKHNlbGVjdGlv
blN0YXRlKCkgPT0gSGlnaGxpZ2h0Tm9uZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ZHJhd1NlbGVjdGlvblRpbnQgPSBmYWxzZTsKICAgICB9CkBAIC02NDgsNyArNjQ4LDcgQEAgTGF5
b3V0UmVjdCBSZW5kZXJSZXBsYWNlZDo6bG9jYWxTZWxlY3Rpb25SZWN0KGJvb2wgY2hlY2tXaGV0
aGVyU2VsZWN0ZWQpIGNvbnN0CiAgICAgcmV0dXJuIExheW91dFJlY3QobmV3TG9naWNhbFRvcCwg
MF9sdSwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHQoKSwgaGVpZ2h0KCkpOwogfQogCi12b2lkIFJl
bmRlclJlcGxhY2VkOjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3Zv
aWQgUmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRl
KQogewogICAgIC8vIFRoZSBzZWxlY3Rpb24gc3RhdGUgZm9yIG91ciBjb250YWluaW5nIGJsb2Nr
IGhpZXJhcmNoeSBpcyB1cGRhdGVkIGJ5IHRoZSBiYXNlIGNsYXNzIGNhbGwuCiAgICAgUmVuZGVy
Qm94OjpzZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7CkBAIC02NTksMjEgKzY1OSwyMSBAQCB2b2lk
IFJlbmRlclJlcGxhY2VkOjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkK
IAogYm9vbCBSZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCgpIGNvbnN0CiB7Ci0gICAgU2VsZWN0
aW9uU3RhdGUgc3RhdGUgPSBzZWxlY3Rpb25TdGF0ZSgpOwotICAgIGlmIChzdGF0ZSA9PSBTZWxl
Y3Rpb25Ob25lKQorICAgIEhpZ2hsaWdodFN0YXRlIHN0YXRlID0gc2VsZWN0aW9uU3RhdGUoKTsK
KyAgICBpZiAoc3RhdGUgPT0gSGlnaGxpZ2h0Tm9uZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChzdGF0ZSA9PSBTZWxlY3Rpb25JbnNpZGUpCisgICAgaWYgKHN0YXRlID09IEhpZ2hs
aWdodEluc2lkZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBhdXRvIHNlbGVjdGlvblN0
YXJ0ID0gdmlldygpLnNlbGVjdGlvbigpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgYXV0byBzZWxlY3Rp
b25FbmQgPSB2aWV3KCkuc2VsZWN0aW9uKCkuZW5kT2Zmc2V0KCk7Ci0gICAgaWYgKHN0YXRlID09
IFNlbGVjdGlvblN0YXJ0KQorICAgIGlmIChzdGF0ZSA9PSBIaWdobGlnaHRTdGFydCkKICAgICAg
ICAgcmV0dXJuICFzZWxlY3Rpb25TdGFydDsKIAogICAgIHVuc2lnbmVkIGVuZCA9IGVsZW1lbnQo
KS0+aGFzQ2hpbGROb2RlcygpID8gZWxlbWVudCgpLT5jb3VudENoaWxkTm9kZXMoKSA6IDE7Ci0g
ICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbkVuZCkKKyAgICBpZiAoc3RhdGUgPT0gSGlnaGxpZ2h0
RW5kKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uRW5kID09IGVuZDsKLSAgICBpZiAoc3RhdGUg
PT0gU2VsZWN0aW9uQm90aCkKKyAgICBpZiAoc3RhdGUgPT0gSGlnaGxpZ2h0Qm90aCkKICAgICAg
ICAgcmV0dXJuICFzZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25FbmQgPT0gZW5kOwogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKaW5kZXggMmNmMGI4N2UxY2ZjM2JiNzk2MTdmODE5NTc5
OTg1NzI1YjE4NDZlMC4uZmM0YzMzMjEwNTU5NmU0N2MzYWYyMmJiYjQ5MDc3YjM2YjNmOGZjNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKQEAgLTU1LDcgKzU1
LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG1pbmltdW1SZXBsYWNl
ZEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIDBfbHU7IH0KIAotICAgIHZvaWQgc2V0U2VsZWN0aW9u
U3RhdGUoU2VsZWN0aW9uU3RhdGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3Rh
dGUoSGlnaGxpZ2h0U3RhdGUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc1NlbGVjdGVkKCkgY29u
c3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rp
b25JbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5o
CmluZGV4IGM4OGRmNWM5NmQ2YzMzMjBjMDFhZDQzYzM1MTg5NjAxOWFhN2YxODcuLjUzNmYwZTc5
NTFjMjNkYzJhMWQzYTFiMTFjYjlhODM2YjIyYzM3NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaApAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBS
ZW5kZXJTZWxlY3Rpb25JbmZvQmFzZSB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQgUmVuZGVyU2Vs
ZWN0aW9uSW5mb0Jhc2UoUmVuZGVyT2JqZWN0JiByZW5kZXJlcik7CiAgICAgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludENv
bnRhaW5lcjsgfQotICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBz
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
cmVwYWludFJlY3RhbmdsZShjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVjdCk7CkBAIC00NCw3
ICs0NCw3IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiBtX3JlcGFp
bnRDb250YWluZXI7CiAKIHByaXZhdGU6Ci0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0
ZSBtX3N0YXRlOworICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgbV9zdGF0ZTsKIH07
CiAKIC8vIFRoaXMgc3RydWN0IGlzIHVzZWQgd2hlbiB0aGUgc2VsZWN0aW9uIGNoYW5nZXMgdG8g
Y2FjaGUgdGhlIG9sZCBhbmQgbmV3IHN0YXRlIG9mIHRoZSBzZWxlY3Rpb24gZm9yIGVhY2ggUmVu
ZGVyT2JqZWN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4IDQ0
ODkwOTBjZTBmN2ZlZWUwYTdkNmU0NDkwNzQ1NTYzNzMwMDhkODYuLjAwYmQzOWI5ZmQxNjY2ZjQ1
M2U1NGExNGM5ODRlYTkxMTQ1MDA2YjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHAKQEAgLTEwOTIsOSArMTA5Miw5IEBAIEludFBvaW50IFJlbmRlclRleHQ6OmZpcnN0
UnVuTG9jYXRpb24oKSBjb25zdAogICAgIHJldHVybiBJbnRQb2ludChmaXJzdC0+cmVjdCgpLmxv
Y2F0aW9uKCkpOwogfQogCi12b2lkIFJlbmRlclRleHQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVj
dGlvblN0YXRlIHN0YXRlKQordm9pZCBSZW5kZXJUZXh0OjpzZXRTZWxlY3Rpb25TdGF0ZShIaWdo
bGlnaHRTdGF0ZSBzdGF0ZSkKIHsKLSAgICBpZiAoc3RhdGUgIT0gU2VsZWN0aW9uTm9uZSkKKyAg
ICBpZiAoc3RhdGUgIT0gSGlnaGxpZ2h0Tm9uZSkKICAgICAgICAgZW5zdXJlTGluZUJveGVzKCk7
CiAKICAgICBSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKHN0YXRlKTsKQEAgLTE0NDYs
NyArMTQ0Niw3IEBAIExheW91dFJlY3QgUmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3Rz
Rm9yTGluZUJveGVzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPCiAgICAgQVNTRVJUKCFuZWVkc0xh
eW91dCgpKTsKICAgICBBU1NFUlQoIXNpbXBsZUxpbmVMYXlvdXQoKSk7CiAKLSAgICBpZiAoc2Vs
ZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Ob25lKQorICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgp
ID09IEhpZ2hsaWdodE5vbmUpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAgICAgaWYg
KCFjb250YWluaW5nQmxvY2soKSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKQEAgLTE0
NTUsMTYgKzE0NTUsMTYgQEAgTGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9u
UmVjdHNGb3JMaW5lQm94ZXMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE8KICAgICAvLyBXZSBpbmNs
dWRlIGEgc2VsZWN0aW9uIHdoaWxlIGVuZFBvcyA+IDAKICAgICB1bnNpZ25lZCBzdGFydE9mZnNl
dDsKICAgICB1bnNpZ25lZCBlbmRPZmZzZXQ7Ci0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0g
U2VsZWN0aW9uSW5zaWRlKSB7CisgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0
SW5zaWRlKSB7CiAgICAgICAgIC8vIFdlIGFyZSBmdWxseSBzZWxlY3RlZC4KICAgICAgICAgc3Rh
cnRPZmZzZXQgPSAwOwogICAgICAgICBlbmRPZmZzZXQgPSB0ZXh0KCkubGVuZ3RoKCk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgc3RhcnRPZmZzZXQgPSB2aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnRP
ZmZzZXQoKTsKICAgICAgICAgZW5kT2Zmc2V0ID0gdmlldygpLnNlbGVjdGlvbigpLmVuZE9mZnNl
dCgpOwotICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25TdGFydCkKKyAg
ICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhcnQpCiAgICAgICAgICAg
ICBlbmRPZmZzZXQgPSB0ZXh0KCkubGVuZ3RoKCk7Ci0gICAgICAgIGVsc2UgaWYgKHNlbGVjdGlv
blN0YXRlKCkgPT0gU2VsZWN0aW9uRW5kKQorICAgICAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0
ZSgpID09IEhpZ2hsaWdodEVuZCkKICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKICAgICB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDdjN2ExZDc2Y2YyMWY3
NjZiMTNlZjUzZWY2MGUwMTVjZTJlOTJlMDEuLmIwODA3MjRkNzgxZjM3YTk2YTE0NTgxNmYzZWYw
NWJiMmE5YTAyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtMjA3
LDcgKzIwNyw3IEBAIHByaXZhdGU6CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQ
b2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVyKikg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSBm
aW5hbDsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBmaW5hbDsK
ICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVy
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQg
PSB0cnVlKSBmaW5hbDsKICAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCos
IHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUg
PSBudWxscHRyKSBvdmVycmlkZTsKICAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1JlY3RG
b3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIp
IGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRMaW5lQm94ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRM
aW5lQm94ZXMuY3BwCmluZGV4IDIwNGRkNjQ4Zjg4OGQzNjNkMGYzYjJlNjdkOWYzNjVkYmIyZjhk
OGEuLjYxZjUxOGI1NGUyMmZlNThjMzZmM2RmYjI5YjNmOGI5YzEyMzNmZDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKQEAgLTM0Miwy
MiArMzQyLDIyIEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0TGluZUJveGVzOjpwb3NpdGlv
bkZvclBvaW50KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyCiAgICAgcmV0dXJuIHJlbmRlcmVy
LmNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RSRUFNKTsKIH0KIAotdm9pZCBSZW5kZXJU
ZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwgUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3ZvaWQgUmVuZGVyVGV4dExpbmVCb3hl
czo6c2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyVGV4dCYgcmVuZGVyZXIsIFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uSW5zaWRlIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkg
eworICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEluc2lkZSB8fCBzdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUpIHsKICAgICAgICAgZm9yIChhdXRvKiBi
b3ggPSBtX2ZpcnN0OyBib3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkKLSAgICAgICAgICAg
IGJveC0+cm9vdCgpLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25JbnNpZGUpOworICAgICAgICAgICAgYm94LT5yb290KCkuc2V0SGFzU2VsZWN0
ZWRDaGlsZHJlbihzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEluc2lkZSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0YXJ0ID0gcmVuZGVyZXIudmlldygpLnNl
bGVjdGlvbigpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgYXV0byBlbmQgPSByZW5kZXJlci52aWV3KCku
c2VsZWN0aW9uKCkuZW5kT2Zmc2V0KCk7Ci0gICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uU3RhcnQpIHsKKyAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGFydCkgewogICAgICAgICBlbmQgPSByZW5kZXJlci50ZXh0KCkubGVuZ3RoKCk7CiAgICAg
ICAgIC8vIHRvIGhhbmRsZSBzZWxlY3Rpb24gZnJvbSBlbmQgb2YgdGV4dCB0byBlbmQgb2YgbGlu
ZQogICAgICAgICBpZiAoc3RhcnQgJiYgc3RhcnQgPT0gZW5kKQogICAgICAgICAgICAgc3RhcnQg
PSBlbmQgLSAxOwotICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25FbmQpCisgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEVu
ZCkKICAgICAgICAgc3RhcnQgPSAwOwogCiAgICAgZm9yIChhdXRvKiBib3ggPSBtX2ZpcnN0OyBi
b3g7IGJveCA9IGJveC0+bmV4dFRleHRCb3goKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgKaW5kZXggZTlhNjYwNTQ5ZDE4ZTNlN2M2MzUyMGMx
NWNlMjMzMTViNWY4ZTYxYS4uMmViNWRkMzYwYTc0MGRmM2RjNWU5N2I3NzkxZDUyZTY3OWQxODNi
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94
ZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5o
CkBAIC01OCw3ICs1OCw3IEBAIHB1YmxpYzoKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlv
bkZvclBvaW50KGNvbnN0IFJlbmRlclRleHQmLCBjb25zdCBMYXlvdXRQb2ludCYpIGNvbnN0Owog
Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiwgUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSk7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0Jiwg
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSk7CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25S
ZWN0Rm9yUmFuZ2UodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCk7CiAgICAgdm9pZCBjb2xs
ZWN0U2VsZWN0aW9uUmVjdHNGb3JSYW5nZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBW
ZWN0b3I8TGF5b3V0UmVjdD4mIHJlY3RzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lTWFjLm1tCmluZGV4IGNkOGFmNmUyYTc4NWYwMTY5MjQ3YjBkMWYyY2FhNzdjOTNj
NjE0MGYuLjI2NDIwZjBhZGUyZmZjOTE3NjIzYjE2MjM2ZTViMTY0ZjY2MzVlODIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KQEAgLTI5MDcsNyArMjkwNyw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50QXR0YWNobWVudChjb25zdCBSZW5kZXJPYmpl
Y3QmIHJlbmRlcmVyLCBjb25zdCBQYWludEluCiAgICAgY29uc3QgUmVuZGVyQXR0YWNobWVudCYg
YXR0YWNobWVudCA9IGRvd25jYXN0PFJlbmRlckF0dGFjaG1lbnQ+KHJlbmRlcmVyKTsKIAogICAg
IGF1dG8gbGF5b3V0U3R5bGUgPSBBdHRhY2htZW50TGF5b3V0U3R5bGU6Ok5vblNlbGVjdGVkOwot
ICAgIGlmIChhdHRhY2htZW50LnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25Ob25lICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxlY3Rpb24pCisg
ICAgaWYgKGF0dGFjaG1lbnQuc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodE5vbmUgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbikKICAg
ICAgICAgbGF5b3V0U3R5bGUgPSBBdHRhY2htZW50TGF5b3V0U3R5bGU6OlNlbGVjdGVkOwogCiAg
ICAgQXR0YWNobWVudExheW91dCBsYXlvdXQoYXR0YWNobWVudCwgbGF5b3V0U3R5bGUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKaW5kZXggMTg0MmIzMGZhMzM0ZDJmYzY2Zjk5
NzFhZTYxMDZjMmZlYzVkYjkyZi4uMWZiN2RmYmRkMWFlNDQ2MTdjYmE1ZjI3YWIwYWE1MjhjY2Ex
MzllYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0yMiwxMCArMjIs
MTAgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAi
SGlnaGxpZ2h0RGF0YS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlckJs
b2NrRmxvdy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUgIlNlbGVjdGlv
blJhbmdlRGF0YS5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6
CiAgICAgLy8gUmV0dXJuIHRoZSByZW5kZXJlciB3aG9zZSBiYWNrZ3JvdW5kIHN0eWxlIGlzIHVz
ZWQgdG8gcGFpbnQgdGhlIHJvb3QgYmFja2dyb3VuZC4KICAgICBSZW5kZXJFbGVtZW50KiByZW5k
ZXJlckZvclJvb3RCYWNrZ3JvdW5kKCkgY29uc3Q7CiAKLSAgICBTZWxlY3Rpb25SYW5nZURhdGEm
IHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgSGlnaGxpZ2h0RGF0YSYg
c2VsZWN0aW9uKCkgeyByZXR1cm4gbV9zZWxlY3Rpb247IH0KIAogICAgIGJvb2wgcHJpbnRpbmco
KSBjb25zdDsKIApAQCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9y
ZW5kZXJlckNvdW50IHsgMSB9OwogCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVnaW9u
PiBtX2FjY3VtdWxhdGVkUmVwYWludFJlZ2lvbjsKLSAgICBTZWxlY3Rpb25SYW5nZURhdGEgbV9z
ZWxlY3Rpb247CisgICAgSGlnaGxpZ2h0RGF0YSBtX3NlbGVjdGlvbjsKIAogICAgIFdlYWtQdHI8
UmVuZGVyTGF5ZXI+IG1fc3R5bGVDaGFuZ2VMYXllck11dGF0aW9uUm9vdDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCA3ZDc3NTM4MmUzMzI2MTNkYzZm
NjdlMjNlODJhZTZkNzE1NGFmNjA1Li4zZjZmMzNiNzUyYjViODYzNzk3YzRhMWE4MjI3ODVkMmMz
NGQ4NWFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAt
MzQ2LDcgKzM0Niw3IEBAIEludFJlY3QgUmVuZGVyV2lkZ2V0Ojp3aW5kb3dDbGlwUmVjdCgpIGNv
bnN0CiAgICAgcmV0dXJuIGludGVyc2VjdGlvbih2aWV3KCkuZnJhbWVWaWV3KCkuY29udGVudHNU
b1dpbmRvdyhtX2NsaXBSZWN0KSwgdmlldygpLmZyYW1lVmlldygpLndpbmRvd0NsaXBSZWN0KCkp
OwogfQogCi12b2lkIFJlbmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3Rh
dGUgc3RhdGUpCit2b2lkIFJlbmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0
U3RhdGUgc3RhdGUpCiB7CiAgICAgLy8gVGhlIHNlbGVjdGlvbiBzdGF0ZSBmb3Igb3VyIGNvbnRh
aW5pbmcgYmxvY2sgaGllcmFyY2h5IGlzIHVwZGF0ZWQgYnkgdGhlIGJhc2UgY2xhc3MgY2FsbC4K
ICAgICBSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCmluZGV4IDhhZTNkMmM2NWIyZDQ0ZTUyNjAwYTAy
YzdhNjNmNzM0NTQ5ZDE5NmMuLjM3MDA5NmZmZGQ2MjAwMjEzMTg3OTA5YzJhZDkyYzg3MTRmOGVi
NTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKQEAgLTkzLDcgKzkz
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxjdWxhdGlv
bigpIGNvbnN0IGZpbmFsOwogICAgIFJlbmRlckJveCogZW1iZWRkZWRDb250ZW50Qm94KCkgY29u
c3QgZmluYWw7CiAKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSBm
aW5hbDsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBmaW5hbDsK
ICAgICB2b2lkIHNldE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wpIGZpbmFsOwogCiAgICAgYm9vbCBz
ZXRXaWRnZXRHZW9tZXRyeShjb25zdCBMYXlvdXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAKaW5kZXggNzhjMWEwZWEwNGQ5NmNkNzhiNzA5MDhlYThh
YmJkYzE4MTk4OTQxNi4uODc0ODY5OTU5Yzc2NzY5NWRkODYyMjE2MzU5ZTA0OThhMjFhZGY3YyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtNDIzLDcg
KzQyMyw3IEBAIExheW91dFVuaXQgUm9vdElubGluZUJveDo6bGluZVNuYXBBZGp1c3RtZW50KExh
eW91dFVuaXQgZGVsdGEpIGNvbnN0CiBHYXBSZWN0cyBSb290SW5saW5lQm94OjpsaW5lU2VsZWN0
aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290Qmxv
Y2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2Nr
LAogICAgIExheW91dFVuaXQgc2VsVG9wLCBMYXlvdXRVbml0IHNlbEhlaWdodCwgY29uc3QgTG9n
aWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYgY2FjaGUsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJ
bmZvKQogewotICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgbGluZVN0YXRlID0gc2Vs
ZWN0aW9uU3RhdGUoKTsKKyAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIGxpbmVTdGF0
ZSA9IHNlbGVjdGlvblN0YXRlKCk7CiAKICAgICBib29sIGxlZnRHYXAsIHJpZ2h0R2FwOwogICAg
IGJsb2NrRmxvdygpLmdldFNlbGVjdGlvbkdhcEluZm8obGluZVN0YXRlLCBsZWZ0R2FwLCByaWdo
dEdhcCk7CkBAIC00NTEsOSArNDUxLDkgQEAgR2FwUmVjdHMgUm9vdElubGluZUJveDo6bGluZVNl
bGVjdGlvbkdhcChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAgICBp
ZiAoZmlyc3RCb3ggJiYgZmlyc3RCb3ggIT0gbGFzdEJveCkgewogICAgICAgICAvLyBOb3cgZmls
bCBpbiBhbnkgZ2FwcyBvbiB0aGUgbGluZSB0aGF0IG9jY3VycmVkIGJldHdlZW4gdHdvIHNlbGVj
dGVkIGVsZW1lbnRzLgogICAgICAgICBMYXlvdXRVbml0IGxhc3RMb2dpY2FsTGVmdCB7IGZpcnN0
Qm94LT5sb2dpY2FsUmlnaHQoKSB9OwotICAgICAgICBib29sIGlzUHJldmlvdXNCb3hTZWxlY3Rl
ZCA9IGZpcnN0Qm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
Tm9uZTsKKyAgICAgICAgYm9vbCBpc1ByZXZpb3VzQm94U2VsZWN0ZWQgPSBmaXJzdEJveC0+c2Vs
ZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmU7CiAgICAgICAgIGZv
ciAoSW5saW5lQm94KiBib3ggPSBmaXJzdEJveC0+bmV4dExlYWZPbkxpbmUoKTsgYm94OyBib3gg
PSBib3gtPm5leHRMZWFmT25MaW5lKCkpIHsKLSAgICAgICAgICAgIGlmIChib3gtPnNlbGVjdGlv
blN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CisgICAgICAgICAgICBp
ZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9uZSkg
ewogICAgICAgICAgICAgICAgIExheW91dFJlY3QgbG9naWNhbFJlY3QgeyBsYXN0TG9naWNhbExl
ZnQsIHNlbFRvcCwgTGF5b3V0VW5pdChib3gtPmxvZ2ljYWxMZWZ0KCkgLSBsYXN0TG9naWNhbExl
ZnQpLCBzZWxIZWlnaHQgfTsKICAgICAgICAgICAgICAgICBsb2dpY2FsUmVjdC5tb3ZlKHJlbmRl
cmVyKCkuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBM
YXlvdXRTaXplKG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCksIG9mZnNldEZyb21Sb290Qmxv
Y2sud2lkdGgoKSkpOwogICAgICAgICAgICAgICAgIExheW91dFJlY3QgZ2FwUmVjdCA9IHJvb3RC
bG9jay5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24s
IGxvZ2ljYWxSZWN0KTsKQEAgLTQ2Nyw3ICs0NjcsNyBAQCBHYXBSZWN0cyBSb290SW5saW5lQm94
OjpsaW5lU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBv
aQogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGJveCA9PSBsYXN0Qm94KQogICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaXNQcmV2aW91c0JveFNlbGVjdGVkID0gYm94
LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKyAgICAg
ICAgICAgIGlzUHJldmlvdXNCb3hTZWxlY3RlZCA9IGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTUyNywy
NCArNTI3LDIzIEBAIEludFJlY3QgUm9vdElubGluZUJveDo6Y29tcHV0ZUNhcmV0UmVjdChmbG9h
dCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1bnNpZ25lZCBjYXJlCiAgICAgcmV0dXJuIGJsb2NrU3R5
bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEludFJlY3QobGVmdCwgdG9wLCBjYXJldFdp
ZHRoLCBoZWlnaHQpIDogSW50UmVjdCh0b3AsIGxlZnQsIGhlaWdodCwgY2FyZXRXaWR0aCk7CiB9
CiAKLVJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgUm9vdElubGluZUJveDo6c2VsZWN0aW9u
U3RhdGUoKQorUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBSb290SW5saW5lQm94OjpzZWxl
Y3Rpb25TdGF0ZSgpCiB7CiAgICAgLy8gV2FsayBvdmVyIGFsbCBvZiB0aGUgc2VsZWN0ZWQgYm94
ZXMuCi0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSA9IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uTm9uZTsKKyAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHN0YXRl
ID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lOwogICAgIGZvciAoSW5saW5lQm94KiBib3gg
PSBmaXJzdExlYWZEZXNjZW5kYW50KCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGVhZk9uTGluZSgp
KSB7Ci0gICAgICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgYm94U3RhdGUgPSBib3gt
PnNlbGVjdGlvblN0YXRlKCk7Ci0gICAgICAgIGlmICgoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25TdGFydCAmJiBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkg
fHwKLSAgICAgICAgICAgIChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAm
JiBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KSkKLSAgICAgICAgICAgIHN0
YXRlID0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoOwotICAgICAgICBlbHNlIGlmIChzdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUgfHwKLSAgICAgICAgICAgICAgICAgKChi
b3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0IHx8IGJveFN0YXRlID09IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKSAmJgotICAgICAgICAgICAgICAgICAgKHN0YXRlID09
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvbkluc2lkZSkpKQorICAgICAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIGJv
eFN0YXRlID0gYm94LT5zZWxlY3Rpb25TdGF0ZSgpOworICAgICAgICBpZiAoKGJveFN0YXRlID09
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhcnQgJiYgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRFbmQpCisgICAgICAgICAgICB8fCAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRFbmQgJiYgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGFydCkpCisg
ICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Qm90aDsKKyAgICAgICAg
ZWxzZSBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lIHx8ICgoYm94U3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGFydCB8fCBib3hTdGF0ZSA9PSBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodEVuZCkKKyAgICAgICAgICAgICYmIChzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodE5vbmUgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRJbnNp
ZGUpKSkKICAgICAgICAgICAgIHN0YXRlID0gYm94U3RhdGU7Ci0gICAgICAgIGVsc2UgaWYgKGJv
eFN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSAmJiBzdGF0ZSA9PSBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvblN0YXJ0KSB7CisgICAgICAgIGVsc2UgaWYgKGJveFN0YXRlID09IFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9uZSAmJiBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodFN0YXJ0KSB7CiAgICAgICAgICAgICAvLyBXZSBhcmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBz
ZWxlY3Rpb24uCi0gICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90
aDsKKyAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRCb3RoOwogICAg
ICAgICB9Ci0gICAgICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgp
CisgICAgICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEJvdGgpCiAgICAg
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTU1NCw3ICs1NTMsNyBAQCBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXRlIFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblN0YXRlKCkKIElubGluZUJv
eCogUm9vdElubGluZUJveDo6Zmlyc3RTZWxlY3RlZEJveCgpCiB7CiAgICAgZm9yIChhdXRvKiBi
b3ggPSBmaXJzdExlYWZEZXNjZW5kYW50KCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGVhZk9uTGlu
ZSgpKSB7Ci0gICAgICAgIGlmIChib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25Ob25lKQorICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBib3g7CiAgICAg
fQogICAgIHJldHVybiBudWxscHRyOwpAQCAtNTYzLDcgKzU2Miw3IEBAIElubGluZUJveCogUm9v
dElubGluZUJveDo6Zmlyc3RTZWxlY3RlZEJveCgpCiBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6
Omxhc3RTZWxlY3RlZEJveCgpCiB7CiAgICAgZm9yIChhdXRvKiBib3ggPSBsYXN0TGVhZkRlc2Nl
bmRhbnQoKTsgYm94OyBib3ggPSBib3gtPnByZXZpb3VzTGVhZk9uTGluZSgpKSB7Ci0gICAgICAg
IGlmIChib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25l
KQorICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGln
aGxpZ2h0Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBib3g7CiAgICAgfQogICAgIHJldHVybiBu
dWxscHRyOwpAQCAtNjY0LDcgKzY2Myw3IEBAIExheW91dFVuaXQgUm9vdElubGluZUJveDo6c2Vs
ZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpIGNvbnN0CiAgICAgTGF5b3V0VW5p
dCB0b3AgPSBzZWxlY3Rpb25Ub3AoKTsKIAogICAgIGF1dG8gYmxvY2tTZWxlY3Rpb25TdGF0ZSA9
IHJvb3RCb3guYmxvY2tGbG93KCkuc2VsZWN0aW9uU3RhdGUoKTsKLSAgICBpZiAoYmxvY2tTZWxl
Y3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSAmJiBibG9ja1NlbGVj
dGlvblN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKQorICAgIGlmIChibG9ja1Nl
bGVjdGlvblN0YXRlICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0SW5zaWRlICYmIGJsb2NrU2Vs
ZWN0aW9uU3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRFbmQpCiAgICAgICAgIHJldHVy
biB0b3A7CiAKICAgICBMYXlvdXRTaXplIG9mZnNldFRvQmxvY2tCZWZvcmU7CkBAIC02NzcsOCAr
Njc2LDggQEAgTGF5b3V0VW5pdCBSb290SW5saW5lQm94OjpzZWxlY3Rpb25Ub3BBZGp1c3RlZEZv
clByZWNlZGluZ0Jsb2NrKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRvcDsKIAogICAgIGlmIChh
dXRvKiBsYXN0TGluZSA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oKmJsb2NrQmVmb3JlKS5s
YXN0Um9vdEJveCgpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgbGFz
dExpbmVTZWxlY3Rpb25TdGF0ZSA9IGxhc3RMaW5lLT5zZWxlY3Rpb25TdGF0ZSgpOwotICAgICAg
ICBpZiAobGFzdExpbmVTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbklu
c2lkZSAmJiBsYXN0TGluZVNlbGVjdGlvblN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
U3RhcnQpCisgICAgICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgbGFzdExpbmVTZWxl
Y3Rpb25TdGF0ZSA9IGxhc3RMaW5lLT5zZWxlY3Rpb25TdGF0ZSgpOworICAgICAgICBpZiAobGFz
dExpbmVTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEluc2lkZSAmJiBs
YXN0TGluZVNlbGVjdGlvblN0YXRlICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhcnQpCiAg
ICAgICAgICAgICByZXR1cm4gdG9wOwogCiAgICAgICAgIExheW91dFVuaXQgbGFzdExpbmVTZWxl
Y3Rpb25Cb3R0b20gPSBsYXN0TGluZS0+c2VsZWN0aW9uQm90dG9tKCkgKyBvZmZzZXRUb0Jsb2Nr
QmVmb3JlLmhlaWdodCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgK
aW5kZXggMjQ3ZTU1YzA2OWU5ZmU4ODFjYWY0YmZiYzJiNGFlZjE5ZTM2MTdhMy4uZjg5NzZjNmE3
ZDRhNjk3MzQ4NzQ5OTNmMzlkZjM2ZjQ3ODdhZTk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUm9vdElubGluZUJveC5oCkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIHVzaW5n
IElubGluZUJveDo6aGFzU2VsZWN0ZWRDaGlsZHJlbjsKICAgICB1c2luZyBJbmxpbmVCb3g6OnNl
dEhhc1NlbGVjdGVkQ2hpbGRyZW47CiAKLSAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRl
IHNlbGVjdGlvblN0YXRlKCkgZmluYWw7CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZSBzZWxlY3Rpb25TdGF0ZSgpIGZpbmFsOwogICAgIElubGluZUJveCogZmlyc3RTZWxlY3RlZEJv
eCgpOwogICAgIElubGluZUJveCogbGFzdFNlbGVjdGVkQm94KCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk4NDQxOWZkZjFkZGI3M2QwM2NlMzJlY2QwZTZlYmIxMTExNjgyZGUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
ODUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
Ci0gKiAgICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uUmFuZ2VE
YXRhLmgiCi0KLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9u
LmgiCi0jaW5jbHVkZSAiUG9zaXRpb24uaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUg
IlJlbmRlckxheWVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vo
b2xkZXIuaCIKLSNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCi0jaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLW5hbWVzcGFjZSB7IC8vIFNlZSBidWcgIzE3NzgwOC4KLQotc3RydWN0IFNlbGVjdGlvbkRh
dGEgewotICAgIHVzaW5nIFJlbmRlcmVyTWFwID0gSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4+OwotICAgIHVzaW5nIFJlbmRlckJsb2Nr
TWFwID0gSGFzaE1hcDxjb25zdCBSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJC
bG9ja1NlbGVjdGlvbkluZm8+PjsKLQotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNl
dDsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OwotICAgIFJlbmRlcmVyTWFwIHJl
bmRlcmVyczsKLSAgICBSZW5kZXJCbG9ja01hcCBibG9ja3M7Ci19OwotCi1jbGFzcyBTZWxlY3Rp
b25JdGVyYXRvciB7Ci1wdWJsaWM6Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3IoUmVuZGVyT2JqZWN0
KiBzdGFydCkKLSAgICAgICAgOiBtX2N1cnJlbnQoc3RhcnQpCi0gICAgewotICAgICAgICBjaGVj
a0ZvclNwYW5uZXIoKTsKLSAgICB9Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50KCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2N1cnJlbnQ7Ci0gICAgfQotICAgIAotICAg
IFJlbmRlck9iamVjdCogbmV4dCgpCi0gICAgewotICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJl
bnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1fc3Bhbm5lclN0
YWNrLmxhc3QoKS0+c3Bhbm5lcigpOwotICAgICAgICBtX2N1cnJlbnQgPSBtX2N1cnJlbnQtPm5l
eHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsKLSAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0g
ICAgICAgIGlmICghbV9jdXJyZW50ICYmIGN1cnJlbnRTcGFuKSB7Ci0gICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIHBsYWNlaG9sZGVyID0gbV9zcGFubmVyU3RhY2subGFzdCgpOwotICAgICAgICAg
ICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgbV9jdXJyZW50ID0g
cGxhY2Vob2xkZXItPm5leHRJblByZU9yZGVyKCk7Ci0gICAgICAgICAgICBjaGVja0ZvclNwYW5u
ZXIoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9jdXJyZW50OwotICAgIH0KLQotcHJp
dmF0ZToKLSAgICB2b2lkIGNoZWNrRm9yU3Bhbm5lcigpCi0gICAgewotICAgICAgICBpZiAoIWlz
PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPihtX2N1cnJlbnQpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBhdXRvJiBwbGFjZWhvbGRlciA9IGRvd25jYXN0PFJlbmRl
ck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqbV9jdXJyZW50KTsKLSAgICAgICAgbV9z
cGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhvbGRlcik7Ci0gICAgICAgIG1fY3VycmVudCA9IHBs
YWNlaG9sZGVyLnNwYW5uZXIoKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIG1fY3VycmVu
dCB7IG51bGxwdHIgfTsKLSAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vo
b2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQot
Ci1zdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckFmdGVyT2Zmc2V0KGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIG9mZnNldCkKLXsKLSAgICBhdXRvKiBjaGlsZCA9IHJl
bmRlcmVyLmNoaWxkQXQob2Zmc2V0KTsKLSAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IHJlbmRl
cmVyLm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOwotfQotCi1zdGF0aWMgYm9vbCBpc1Zh
bGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29u
c3QgU2VsZWN0aW9uUmFuZ2VEYXRhOjpDb250ZXh0JiBzZWxlY3Rpb24pCi17Ci0gICAgcmV0dXJu
IChyZW5kZXJlci5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCAmcmVuZGVyZXIgPT0gc2VsZWN0aW9u
LnN0YXJ0KCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5lbmQoKSkKLSAgICAgICAgJiYgcmVu
ZGVyZXIuc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUKLSAg
ICAgICAgJiYgcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci19Ci0KLXN0YXRpYyBSZW5kZXJC
bG9jayogY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
ZXIpCi17Ci0gICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Js
b2NrKCk7Ci0gICAgcmV0dXJuIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxs
cHRyIDogY29udGFpbmluZ0Jsb2NrOwotfQotCi1zdGF0aWMgU2VsZWN0aW9uRGF0YSBjb2xsZWN0
KGNvbnN0IFNlbGVjdGlvblJhbmdlRGF0YTo6Q29udGV4dCYgc2VsZWN0aW9uLCBib29sIHJlcGFp
bnREaWZmZXJlbmNlKQotewotICAgIFNlbGVjdGlvbkRhdGEgb2xkU2VsZWN0aW9uRGF0YSB7IHNl
bGVjdGlvbi5zdGFydE9mZnNldCgpLCBzZWxlY3Rpb24uZW5kT2Zmc2V0KCksIHsgfSwgeyB9IH07
Ci0gICAgLy8gQmxvY2tzIGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBzIGJl
dHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBsaW5l
cyBhbmQgYmxvY2tzLgotICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0IHJp
Z2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMgaW5k
aXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UKLSAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVj
dHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQu
Ci0gICAgYXV0byogc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBSZW5kZXJPYmplY3Qq
IHN0b3AgPSBudWxscHRyOwotICAgIGlmIChzZWxlY3Rpb24uZW5kKCkpCi0gICAgICAgIHN0b3Ag
PSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxlY3Rpb24uZW5kKCksIHNlbGVjdGlvbi5lbmRPZmZz
ZXQoKS52YWx1ZSgpKTsKLSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihz
dGFydCk7Ci0gICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKLSAgICAgICAgaWYg
KGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbigqc3RhcnQsIHNlbGVjdGlvbikpIHsKLSAgICAg
ICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBh
bmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgotICAgICAgICAg
ICAgb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVlPFJlbmRl
clNlbGVjdGlvbkluZm8+KCpzdGFydCwgdHJ1ZSkpOwotICAgICAgICAgICAgaWYgKHJlcGFpbnRE
aWZmZXJlbmNlKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvKiBibG9jayA9IGNvbnRhaW5p
bmdCbG9ja0JlbG93Vmlldygqc3RhcnQpOyBibG9jazsgYmxvY2sgPSBjb250YWluaW5nQmxvY2tC
ZWxvd1ZpZXcoKmJsb2NrKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBibG9ja0luZm8g
PSBvbGRTZWxlY3Rpb25EYXRhLmJsb2Nrcy5hZGQoYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52
YWx1ZTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5p
cXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmJsb2NrKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVy
YXRvci5uZXh0KCk7Ci0gICAgfQotICAgIHJldHVybiBvbGRTZWxlY3Rpb25EYXRhOwotfQotCi1T
ZWxlY3Rpb25SYW5nZURhdGE6OlNlbGVjdGlvblJhbmdlRGF0YShSZW5kZXJWaWV3JiB2aWV3KQot
ICAgIDogbV9yZW5kZXJWaWV3KHZpZXcpCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0g
ICAgLCBtX3NlbGVjdGlvblJlY3RHYXRoZXJlcih2aWV3KQotI2VuZGlmCi17Ci19Ci0KLXZvaWQg
U2VsZWN0aW9uUmFuZ2VEYXRhOjpzZXRDb250ZXh0KGNvbnN0IENvbnRleHQmIGNvbnRleHQpCi17
Ci0gICAgQVNTRVJUKGNvbnRleHQuc3RhcnQoKSAmJiBjb250ZXh0LmVuZCgpKTsKLSAgICBtX3Nl
bGVjdGlvbkNvbnRleHQgPSBjb250ZXh0OwotfQotCi1SZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXRlIFNlbGVjdGlvblJhbmdlRGF0YTo6c2VsZWN0aW9uU3RhdGVGb3JSZW5kZXJlcihSZW5kZXJP
YmplY3QmIHJlbmRlcmVyKQotewotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGRsbid0IGhhdmUgdG8g
Y2hlY2sgdGhhdCBhIHJlbmRlcmVyIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgcmVuZGVyIG5vZGUK
LSAgICAvLyBmcm9tIHRoZSByYW5nZS4gVGhpcyBpcyBsaWtlbHkgYmVjYXVzZSB3ZSBhcmVuJ3Qg
dXNpbmcgVmlzaWJsZVBvc2l0aW9ucyB5ZXQuCi0gICAgLy8gUGxhbm5lZCBmaXggaW4gYSBmb2xs
b3d1cDogPHJkYXI6Ly9wcm9ibGVtLzU4MDk1OTIzPgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDU1MjkKLSAgICAKLSAgICBpZiAoJnJlbmRlcmVyID09
IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCgpIHx8IHJlbmRlcmVyLmlzRGVzY2VuZGFudE9mKG1f
c2VsZWN0aW9uQ29udGV4dC5zdGFydCgpKSkgewotICAgICAgICBpZiAobV9zZWxlY3Rpb25Db250
ZXh0LnN0YXJ0KCkgJiYgbV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpICYmIG1fc2VsZWN0aW9uQ29u
dGV4dC5zdGFydCgpID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgICAgIHJl
dHVybiBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGg7Ci0gICAgICAgIGlmIChtX3NlbGVjdGlv
bkNvbnRleHQuc3RhcnQoKSkKLSAgICAgICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvblN0YXJ0OwotICAgIH0KLSAgICBpZiAoJnJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29udGV4
dC5lbmQoKSB8fCByZW5kZXJlci5pc0Rlc2NlbmRhbnRPZihtX3NlbGVjdGlvbkNvbnRleHQuZW5k
KCkpKQotICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQ7Ci0KLSAgICBS
ZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgYXV0byogc2VsZWN0aW9u
RGF0YUVuZCA9IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKTsKLSAgICBpZiAoc2VsZWN0aW9uRGF0
YUVuZCkKLSAgICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqc2VsZWN0
aW9uRGF0YUVuZCwgbV9zZWxlY3Rpb25Db250ZXh0LmVuZE9mZnNldCgpLnZhbHVlKCkpOwotICAg
IFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG1fc2VsZWN0aW9uQ29udGV4dC5z
dGFydCgpKTsKLSAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IG1fc2VsZWN0aW9uQ29u
dGV4dC5zdGFydCgpOyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IG1fc2Vs
ZWN0aW9uQ29udGV4dC5lbmQoKTsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3Iu
bmV4dCgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250
ZXh0LnN0YXJ0KCkgfHwgY3VycmVudFJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+
Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KCZyZW5kZXJlciA9PSBjdXJyZW50UmVuZGVyZXIpCi0gICAgICAgICAgICByZXR1cm4gUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25JbnNpZGU7Ci0gICAgfQotICAgIHJldHVybiBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbk5vbmU7Ci0gICAgCi19Ci0KLXZvaWQgU2VsZWN0aW9uUmFuZ2VEYXRhOjpzZXQo
Y29uc3QgQ29udGV4dCYgc2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQot
ewotICAgIGlmICgoc2VsZWN0aW9uLnN0YXJ0KCkgJiYgIXNlbGVjdGlvbi5lbmQoKSkgfHwgKHNl
bGVjdGlvbi5lbmQoKSAmJiAhc2VsZWN0aW9uLnN0YXJ0KCkpKQotICAgICAgICByZXR1cm47Ci0g
ICAgLy8gSnVzdCByZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBoYXNuJ3QgY2hhbmdlZC4KLSAgICBh
dXRvIGlzQ2FyZXQgPSBtX3JlbmRlclZpZXcuZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7
Ci0gICAgaWYgKHNlbGVjdGlvbiA9PSBtX3NlbGVjdGlvbkNvbnRleHQgJiYgbV9zZWxlY3Rpb25X
YXNDYXJldCA9PSBpc0NhcmV0KQotICAgICAgICByZXR1cm47Ci0jaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpCi0gICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgcmVjdHMgYW5kIGNyZWF0ZSBhIG5v
dGlmaWVyIGZvciB0aGUgbmV3IHJlY3RzIHdlIGFyZSBhYm91dCB0byBnYXRoZXIuCi0gICAgLy8g
VGhlIE5vdGlmaWVyIHVwZGF0ZXMgdGhlIEVkaXRvciB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3Bl
IGFuZCBpcyBkZXN0cm95ZWQuCi0gICAgYXV0byByZWN0Tm90aWZpZXIgPSBtX3NlbGVjdGlvblJl
Y3RHYXRoZXJlci5jbGVhckFuZENyZWF0ZU5vdGlmaWVyKCk7Ci0jZW5kaWYKLSAgICBtX3NlbGVj
dGlvbldhc0NhcmV0ID0gaXNDYXJldDsKLSAgICBhcHBseShzZWxlY3Rpb24sIGJsb2NrUmVwYWlu
dE1vZGUpOwotfQotCi12b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6Y2xlYXIoKQotewotICAgIG1f
cmVuZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0gICAgc2V0
KHsgfSwgU2VsZWN0aW9uUmFuZ2VEYXRhOjpSZXBhaW50TW9kZTo6TmV3TWludXNPbGQpOwotfQot
Ci12b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6cmVwYWludCgpIGNvbnN0Ci17Ci0gICAgSGFzaFNl
dDxSZW5kZXJCbG9jayo+IHByb2Nlc3NlZEJsb2NrczsKLSAgICBSZW5kZXJPYmplY3QqIGVuZCA9
IG51bGxwdHI7Ci0gICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgZW5k
ID0gcmVuZGVyZXJBZnRlck9mZnNldCgqbV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpLCBtX3NlbGVj
dGlvbkNvbnRleHQuZW5kT2Zmc2V0KCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Ig
c2VsZWN0aW9uSXRlcmF0b3IobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkpOwotICAgIGZvciAo
YXV0byogcmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYm
IHJlbmRlcmVyICE9IGVuZDsgcmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsK
LSAgICAgICAgaWYgKCFyZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIg
IT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkgJiYgcmVuZGVyZXIgIT0gbV9zZWxlY3Rpb25D
b250ZXh0LmVuZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChyZW5kZXJl
ci0+c2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqcmVuZGVyZXIs
IHRydWUpLnJlcGFpbnQoKTsKLSAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3Ig
cGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVk
IGFzIHdlbGwuCi0gICAgICAgIGZvciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxv
d1ZpZXcoKnJlbmRlcmVyKTsgYmxvY2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3
KCpibG9jaykpIHsKLSAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9jayku
aXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFJlbmRlclNl
bGVjdGlvbkluZm8oKmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLUludFJlY3QgU2VsZWN0aW9uUmFuZ2VEYXRhOjpjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2li
bGVDb250ZW50IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAotewotICAgIFNlbGVjdGlvbkRh
dGE6OlJlbmRlcmVyTWFwIHJlbmRlcmVyczsKLSAgICBhdXRvKiBzdGFydCA9IG1fc2VsZWN0aW9u
Q29udGV4dC5zdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7Ci0gICAg
aWYgKG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0
ZXJPZmZzZXQoKm1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSwgbV9zZWxlY3Rpb25Db250ZXh0LmVu
ZE9mZnNldCgpLnZhbHVlKCkpOwotICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJh
dG9yKHN0YXJ0KTsKLSAgICB3aGlsZSAoc3RhcnQgJiYgc3RhcnQgIT0gc3RvcCkgewotICAgICAg
ICBpZiAoKHN0YXJ0LT5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCBzdGFydCA9PSBtX3NlbGVjdGlv
bkNvbnRleHQuc3RhcnQoKSB8fCBzdGFydCA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkpCi0g
ICAgICAgICAgICAmJiBzdGFydC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvbk5vbmUpIHsKLSAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9y
IHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5l
ZCBhcyB3ZWxsLgotICAgICAgICAgICAgcmVuZGVyZXJzLnNldChzdGFydCwgbWFrZVVuaXF1ZTxS
ZW5kZXJTZWxlY3Rpb25JbmZvPigqc3RhcnQsIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBU
b1Zpc2libGVDb250ZW50OjpZZXMpKTsKLSAgICAgICAgICAgIGF1dG8qIGJsb2NrID0gc3RhcnQt
PmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxSZW5k
ZXJWaWV3PigqYmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clNlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSByZW5kZXJlcnMuYWRkKGJsb2NrLCBudWxscHRy
KS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVu
aXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqYmxvY2ssIGNsaXBUb1Zpc2libGVDb250ZW50ID09
IENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpOwotICAgICAgICAgICAgICAgIGJsb2NrID0gYmxv
Y2stPmNvbnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAg
IHN0YXJ0ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpOwotICAgIH0KLQotICAgIC8vIE5vdyBj
cmVhdGUgYSBzaW5nbGUgYm91bmRpbmcgYm94IHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgd2hvbGUg
c2VsZWN0aW9uLgotICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdDsKLSAgICBmb3IgKGF1dG8m
IGluZm8gOiByZW5kZXJlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9u
SW5mbzo6cmVjdCgpIGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5l
ciwgc28gbWFwIHRvIHBhZ2UgY29vcmRpbmF0ZXMuCi0gICAgICAgIExheW91dFJlY3QgY3VycmVu
dFJlY3QgPSBpbmZvLT5yZWN0KCk7Ci0gICAgICAgIGlmIChhdXRvKiByZXBhaW50Q29udGFpbmVy
ID0gaW5mby0+cmVwYWludENvbnRhaW5lcigpKSB7Ci0gICAgICAgICAgICBGbG9hdFF1YWQgYWJz
UXVhZCA9IHJlcGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGN1
cnJlbnRSZWN0KSk7Ci0gICAgICAgICAgICBjdXJyZW50UmVjdCA9IGFic1F1YWQuZW5jbG9zaW5n
Qm91bmRpbmdCb3goKTsKLSAgICAgICAgfQotICAgICAgICBzZWxlY3Rpb25SZWN0LnVuaXRlKGN1
cnJlbnRSZWN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJl
Y3QpOwotfQotCi12b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6YXBwbHkoY29uc3QgQ29udGV4dCYg
bmV3U2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQotewotICAgIGF1dG8g
b2xkU2VsZWN0aW9uRGF0YSA9IGNvbGxlY3QobV9zZWxlY3Rpb25Db250ZXh0LCBibG9ja1JlcGFp
bnRNb2RlID09IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOwotICAgIC8vIFJlbW92ZSBjdXJyZW50
IHNlbGVjdGlvbi4KLSAgICBmb3IgKGF1dG8qIHJlbmRlcmVyIDogb2xkU2VsZWN0aW9uRGF0YS5y
ZW5kZXJlcnMua2V5cygpKQotICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5l
ZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpOwotICAgIG1fc2VsZWN0aW9uQ29udGV4
dCA9IG5ld1NlbGVjdGlvbjsKLSAgICBhdXRvKiBzZWxlY3Rpb25TdGFydCA9IG1fc2VsZWN0aW9u
Q29udGV4dC5zdGFydCgpOwotICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uIHN0YXR1cyBvZiBh
bGwgb2JqZWN0cyBiZXR3ZWVuIHNlbGVjdGlvblN0YXJ0IGFuZCBzZWxlY3Rpb25FbmQKLSAgICBp
ZiAoc2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0
LmVuZCgpKQotICAgICAgICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRl
ZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpOwotICAgIGVsc2UgewotICAgICAgICBpZiAo
c2VsZWN0aW9uU3RhcnQpCi0gICAgICAgICAgICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9u
U3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgaWYg
KGF1dG8qIGVuZCA9IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgICAgIGVuZC0+
c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCk7Ci0g
ICAgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQgPSBudWxscHRyOwotICAgIGF1
dG8qIHNlbGVjdGlvbkRhdGFFbmQgPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCk7Ci0gICAgaWYg
KHNlbGVjdGlvbkRhdGFFbmQpCi0gICAgICAgIHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJP
ZmZzZXQoKnNlbGVjdGlvbkRhdGFFbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRPZmZzZXQoKS52
YWx1ZSgpKTsKLSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rp
b25TdGFydCk7Ci0gICAgZm9yIChhdXRvKiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFy
dDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1
cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAo
Y3VycmVudFJlbmRlcmVyID09IHNlbGVjdGlvblN0YXJ0IHx8IGN1cnJlbnRSZW5kZXJlciA9PSBt
X3NlbGVjdGlvbkNvbnRleHQuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
aWYgKCFjdXJyZW50UmVuZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5l
ZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSk7Ci0gICAgfQotCi0gICAgaWYgKGJs
b2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpCi0gICAgICAgIG1fcmVuZGVy
Vmlldy5sYXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotCi0gICAgLy8g
Tm93IHRoYXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3
IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQKLSAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3
IG9iamVjdHMgbGlzdC4KLSAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCBuZXdTZWxlY3Rl
ZFJlbmRlcmVyczsKLSAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJCbG9ja01hcCBuZXdTZWxlY3Rl
ZEJsb2NrczsKLSAgICBzZWxlY3Rpb25JdGVyYXRvciA9IFNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVj
dGlvblN0YXJ0KTsKLSAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0
YXJ0OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsg
Y3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlm
IChpc1ZhbGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24oKmN1cnJlbnRSZW5kZXJlciwgbV9zZWxlY3Rp
b25Db250ZXh0KSkgewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlv
bkluZm8+IHNlbGVjdGlvbkluZm8gPSBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpj
dXJyZW50UmVuZGVyZXIsIHRydWUpOwotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAg
ICAgICAgICAgZm9yIChhdXRvJiByZWN0IDogc2VsZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0
aW9uUmVjdHMoKSkKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRS
ZWN0KHNlbGVjdGlvbkluZm8tPnJlcGFpbnRDb250YWluZXIoKSwgcmVjdCk7Ci0gICAgICAgICAg
ICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKLSAgICAgICAgICAg
ICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5zZXRUZXh0T25seShmYWxzZSk7Ci0jZW5kaWYK
LSAgICAgICAgICAgIG5ld1NlbGVjdGVkUmVuZGVyZXJzLnNldChjdXJyZW50UmVuZGVyZXIsIFdU
Rk1vdmUoc2VsZWN0aW9uSW5mbykpOwotICAgICAgICAgICAgYXV0byogY29udGFpbmluZ0Jsb2Nr
ID0gY3VycmVudFJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxl
IChjb250YWluaW5nQmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7
Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
bz4mIGJsb2NrSW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBt
YWtlVW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7Ci0g
ICAgICAgICAgICAgICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWlu
aW5nQmxvY2soKTsKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAgICAgICAgICAg
ICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFpbnRD
b250YWluZXIoKSwgYmxvY2tJbmZvLT5yZWN0cygpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE1v
ZGU6Ok5vdGhpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEhhdmUgYW55IG9mIHRoZSBv
bGQgc2VsZWN0ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9u
PwotICAgIGZvciAoYXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8gOiBvbGRTZWxlY3Rpb25EYXRh
LnJlbmRlcmVycykgewotICAgICAgICBhdXRvKiByZW5kZXJlciA9IHNlbGVjdGVkUmVuZGVyZXJJ
bmZvLmtleTsKLSAgICAgICAgYXV0byogbmV3SW5mbyA9IG5ld1NlbGVjdGVkUmVuZGVyZXJzLmdl
dChyZW5kZXJlcik7Ci0gICAgICAgIGF1dG8qIG9sZEluZm8gPSBzZWxlY3RlZFJlbmRlcmVySW5m
by52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3QoKSAh
PSBuZXdJbmZvLT5yZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgp
Ci0gICAgICAgICAgICB8fCAobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkgPT0gcmVuZGVyZXIg
JiYgb2xkU2VsZWN0aW9uRGF0YS5zdGFydE9mZnNldCAhPSBtX3NlbGVjdGlvbkNvbnRleHQuc3Rh
cnRPZmZzZXQoKSkKLSAgICAgICAgICAgIHx8IChtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkgPT0g
cmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0YS5lbmRPZmZzZXQgIT0gbV9zZWxlY3Rpb25Db250
ZXh0LmVuZE9mZnNldCgpKSkgewotICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwotICAg
ICAgICAgICAgaWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50
KCk7Ci0gICAgICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJlcnMucmVtb3ZlKHJlbmRlcmVy
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFueSBuZXcgb2Jq
ZWN0cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGljdCwg
YW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGZvciAoYXV0byYgc2VsZWN0ZWRS
ZW5kZXJlckluZm8gOiBuZXdTZWxlY3RlZFJlbmRlcmVycykKLSAgICAgICAgc2VsZWN0ZWRSZW5k
ZXJlckluZm8udmFsdWUtPnJlcGFpbnQoKTsKLQotICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQg
YmxvY2tzIGNoYW5nZWQ/Ci0gICAgZm9yIChhdXRvJiBzZWxlY3RlZEJsb2NrSW5mbyA6IG9sZFNl
bGVjdGlvbkRhdGEuYmxvY2tzKSB7Ci0gICAgICAgIGF1dG8qIGJsb2NrID0gc2VsZWN0ZWRCbG9j
a0luZm8ua2V5OwotICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuZ2V0
KGJsb2NrKTsKLSAgICAgICAgYXV0byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVl
LmdldCgpOwotICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJ
bmZvLT5yZWN0cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgewot
ICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8p
IHsKLSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAg
bmV3U2VsZWN0ZWRCbG9ja3MucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZv
dW5kIGluIHRoZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRl
ZC4KLSAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9ja3Mp
Ci0gICAgICAgIHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
ZWxlY3Rpb25SYW5nZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25S
YW5nZURhdGEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2MTNkOTIyNDRhZjFh
NGRhZjlhZjEwZTE2NGY0Mjg3NDc3YTNiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VE
YXRhLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotIC8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KA
nSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0g
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
Ci0jaW5jbHVkZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1zdHJ1Y3QgT2xkU2VsZWN0aW9uRGF0YTsKLSAgICAKLWNsYXNzIFNlbGVj
dGlvblJhbmdlRGF0YSB7Ci1wdWJsaWM6Ci0gICAgU2VsZWN0aW9uUmFuZ2VEYXRhKFJlbmRlclZp
ZXcmKTsKLSAgICAKLSAgICBjbGFzcyBDb250ZXh0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENv
bnRleHQoKSA9IGRlZmF1bHQ7Ci0gICAgICAgIENvbnRleHQoUmVuZGVyT2JqZWN0KiBzdGFydCwg
UmVuZGVyT2JqZWN0KiBlbmQsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZz
ZXQpCi0gICAgICAgICAgICA6IG1fc3RhcnQobWFrZVdlYWtQdHIoc3RhcnQpKQotICAgICAgICAg
ICAgLCBtX2VuZChtYWtlV2Vha1B0cihlbmQpKQotICAgICAgICAgICAgLCBtX3N0YXJ0T2Zmc2V0
KHN0YXJ0T2Zmc2V0KQotICAgICAgICAgICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCi0gICAg
ICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0LmdldCgpOyB9Ci0gICAgICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29u
c3QgeyByZXR1cm4gbV9lbmQuZ2V0KCk7IH0KLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHN0
YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQotICAgICAgICBPcHRp
b25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0K
LQotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29udGV4dCYgb3RoZXIpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBtX3N0YXJ0ID09IG90aGVyLm1fc3RhcnQgJiYg
bV9lbmQgPT0gb3RoZXIubV9lbmQgJiYgbV9zdGFydE9mZnNldCA9PSBvdGhlci5tX3N0YXJ0T2Zm
c2V0ICYmIG1fZW5kT2Zmc2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OwotICAgICAgICB9Ci0KLSAg
ICBwcml2YXRlOgotICAgICAgICBXZWFrUHRyPFJlbmRlck9iamVjdD4gbV9zdGFydDsKLSAgICAg
ICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fZW5kOwotICAgICAgICBPcHRpb25hbDx1bnNpZ25l
ZD4gbV9zdGFydE9mZnNldDsKLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fZW5kT2Zmc2V0
OwotICAgIH07Ci0gICAgCi0gICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IENvbnRleHQmKTsKLSAg
ICAKLSAgICBlbnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9ST2xkLCBOZXdNaW51c09sZCwg
Tm90aGluZyB9OwotICAgIHZvaWQgc2V0KGNvbnN0IENvbnRleHQmLCBSZXBhaW50TW9kZSA9IFJl
cGFpbnRNb2RlOjpOZXdYT1JPbGQpOwotICAgIGNvbnN0IENvbnRleHQmIGdldCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dDsgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCgpOyB9Ci0gICAgUmVuZGVy
T2JqZWN0KiBlbmQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCk7IH0K
LQotICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBBU1NFUlQobV9zZWxlY3Rpb25D
b250ZXh0LnN0YXJ0T2Zmc2V0KCkpOyByZXR1cm4gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0T2Zm
c2V0KCkudmFsdWVPcigwKTsgfQotICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsgQVNT
RVJUKG1fc2VsZWN0aW9uQ29udGV4dC5lbmRPZmZzZXQoKSk7IHJldHVybiBtX3NlbGVjdGlvbkNv
bnRleHQuZW5kT2Zmc2V0KCkudmFsdWVPcigwKTsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotICAg
IEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNp
YmxlQ29udGVudDo6Tm8pOyB9Ci0gICAgSW50UmVjdCBib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29u
dGVudCgpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6
Olllcyk7IH0KLSAgICB2b2lkIHJlcGFpbnQoKSBjb25zdDsKLSAgICAKLSAgICBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0
Jik7Ci0KLXByaXZhdGU6Ci0gICAgZW51bSBjbGFzcyBDbGlwVG9WaXNpYmxlQ29udGVudCB7IFll
cywgTm8gfTsKLSAgICBJbnRSZWN0IGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQp
IGNvbnN0OwotICAgIHZvaWQgYXBwbHkoY29uc3QgQ29udGV4dCYsIFJlcGFpbnRNb2RlKTsKLQot
ICAgIGNvbnN0IFJlbmRlclZpZXcmIG1fcmVuZGVyVmlldzsKLSNpZiBFTkFCTEUoU0VSVklDRV9D
T05UUk9MUykKLSAgICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVy
ZXI7Ci0jZW5kaWYKLSAgICBDb250ZXh0IG1fc2VsZWN0aW9uQ29udGV4dDsKLSAgICBib29sIG1f
c2VsZWN0aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCmluZGV4
IGYxMGRjMGJjYzc5YWE0ZDU0NDIxNjlhODFmNzEwYzVlYmQwODAxYWQuLmZhOTQ0OWUzYmE3NTU0
OGRmODA5NTI1YmZlNGEzYzVjM2M0M2IwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvU2ltcGxlTGluZUxheW91dC5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBBdm9pZGFuY2VSZWFz
b25GbGFncyBjYW5Vc2VGb3JXaXRoUmVhc29uKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywg
SW5jbHVkZVJlYQogICAgIC8vIFRoaXMgY3VycmVudGx5IGNvdmVycyA8YmxvY2tmbG93PiN0ZXh0
PC9ibG9ja2Zsb3c+LCA8YmxvY2tmbG93PiN0ZXh0PGJyPjwvYmxvY2tmbG93PiBhbmQgbXV0aXBs
ZSAoc2libGluZykgUmVuZGVyVGV4dCBjYXNlcy4KICAgICAvLyBUaGUgPGJsb2NrZmxvdz48aW5s
aW5lPiN0ZXh0PC9pbmxpbmU+PC9ibG9ja2Zsb3c+IGNhc2UgaXMgYWxzbyBwb3B1bGFyIGFuZCBz
aG91bGQgYmUgcmVsYXRpdmVseSBlYXN5IHRvIGNvdmVyLgogICAgIGZvciAoY29uc3QgYXV0byog
Y2hpbGQgPSBmbG93LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7Ci0gICAgICAgIGlmIChjaGlsZC0+
c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCisgICAgICAg
IGlmIChjaGlsZC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5v
bmUpCiAgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dDaGls
ZElzU2VsZWN0ZWQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICAgICAgaWYgKGlzPFJl
bmRlclRleHQ+KCpjaGlsZCkpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHJlbmRlclRleHQg
PSBkb3duY2FzdDxSZW5kZXJUZXh0PigqY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggNTVjMmI3OTk5YjI1YTExMzAx
ODMyNWFmNzU1NmY4ZjgzNjI0N2VjMS4uZjc1ODkwMDJlMDQwMmE4NWZmMWM0NDYwZTBiYmE4NjZl
NDc1N2IyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guY3BwCkBAIC0xODksNyArMTg5LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8pCiAKICAgICAvLyBE
ZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2UncmUgc2VsZWN0ZWQuCiAgICAgYm9vbCBwYWludFNl
bGVjdGVkVGV4dE9ubHkgPSBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9u
OwotICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgYm9vbCBoYXNTZWxlY3Rpb24gPSBzZWxlY3Rpb25TdGF0
ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9uZTsKICAgICBpZiAoIWhhc1NlbGVjdGlv
biB8fCBwYWludFNlbGVjdGVkVGV4dE9ubHkpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQ3LDcg
KzI0Nyw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNlCiAKICAgICBib29sIHBhaW50U2VsZWN0
ZWRUZXh0T25seSA9IHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpTZWxlY3Rpb247CiAg
ICAgYm9vbCBzaG91bGRQYWludFNlbGVjdGlvbkhpZ2hsaWdodCA9ICEocGFpbnRJbmZvLnBhaW50
QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6U2tpcFNlbGVjdGlvbkhpZ2hsaWdodCkp
OwotICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIXBhcmVudFJlbmRlcmVyLmRvY3VtZW50KCkucHJp
bnRpbmcoKSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9u
ZTsKKyAgICBib29sIGhhc1NlbGVjdGlvbiA9ICFwYXJlbnRSZW5kZXJlci5kb2N1bWVudCgpLnBy
aW50aW5nKCkgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5v
bmU7CiAgICAgaWYgKCFoYXNTZWxlY3Rpb24gJiYgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQogICAg
ICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jv
b3RJbmxpbmVCb3guY3BwCmluZGV4IGJmNWYzYWRmYjM2ZDg4NDExZTI2M2ViYWExOGE1N2IzYTgy
NWMxOTQuLjA1ODM1OGEyMGM4YmVlMTExY2Q5ZGQxYTdjYzllMDEwOTNkYjA1MmMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcApAQCAt
NTUsNyArNTUsNyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZQogICAgIEFTU0VSVCghcGFpbnRJ
bmZvLmNvbnRleHQoKS5wYWludGluZ0Rpc2FibGVkKCkpOwogCiAgICAgYm9vbCBpc1ByaW50aW5n
ID0gcmVuZGVyU1ZHVGV4dCgpLmRvY3VtZW50KCkucHJpbnRpbmcoKTsKLSAgICBib29sIGhhc1Nl
bGVjdGlvbiA9ICFpc1ByaW50aW5nICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25Ob25lOworICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYg
c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmU7CiAgICAgYm9v
bCBzaG91bGRQYWludFNlbGVjdGlvbkhpZ2hsaWdodCA9ICEocGFpbnRJbmZvLnBhaW50QmVoYXZp
b3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6U2tpcFNlbGVjdGlvbkhpZ2hsaWdodCkpOwogCiAg
ICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7CmRpZmYgLS1naXQgYS9DaGFu
Z2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggMTI5MDRlNTJjMTMxY2ViMzA1M2JiNDQyYzc2YmMwY2I5
ZTgwNDkxMS4uZGU3NjU3NTJhOWYxYWU1YjU4MTY0MjljMWQ3ZjkzODYwNjc5MjE2ZCAxMDA2NDQK
LS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIwLTAx
LTE2ICBNZWdhbiBHYXJkbmVyICA8bWVnYW5fZ2FyZG5lckBhcHBsZS5jb20+CisKKyAgICAgICAg
UmVuYW1lIFNlbGVjdGlvbkRhdGEgY2xhc3NlcyBhbmQgc3RydWN0dXJlcyBIaWdobGlnaHREYXRh
LCBldGMgdG8gYmUgbW9yZSBpbmNsdXNpdmUgZm9yIHRoZWlyIG5ldyB1c2UgY2FzZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjM0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdpdGggdGhlIG5ldyBI
aWdobGlnaHQgQVBJLCB3ZSB3aWxsIGJlIHVzaW5nIHRoZXNlIGRhdGEgc3RydWN0dXJlcyB0byBz
dXBwb3J0IEhpZ2hsaWdodHMgYXMgd2VsbCBhcyBTZWxlY3Rpb24sIAorICAgICAgICByZW5hbWUg
dG8gSGlnaGxpZ2h0LCBhcyBhIFNlbGVjdGlvbiBpcyBhIHR5cGUgb2YgSGlnaGxpZ2h0LgorCisg
ICAgICAgICogV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvQWxsIFNv
dXJjZS54Y3NjaGVtZToKKwogMjAyMC0wMS0xMCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5j
b20+CiAKICAgICAgICAgW1dlYkdMXSBDbGFyaWZ5IFVTRV9PUEVOR0xfRVNfMwpkaWZmIC0tZ2l0
IGEvV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvQWxsIFNvdXJjZS54
Y3NjaGVtZSBiL1dlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0FsbCBT
b3VyY2UueGNzY2hlbWUKaW5kZXggZTFjOTc0Y2FmM2IxYWY1ZjZmMGNmZTU3NzA0YTU2N2UyODNj
NTA5ZC4uYjc1ZjRiZDE5OWQ4YWU1NmViZmYzNzdjOGYyMjgxMzFhOGViMzI3YiAxMDA2NDQKLS0t
IGEvV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMvQWxsIFNvdXJjZS54
Y3NjaGVtZQkKKysrIGIvV2ViS2l0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0YS94Y3NjaGVtZXMv
QWxsIFNvdXJjZS54Y3NjaGVtZQkKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAgICAgICAgIDxCdWls
ZGFibGVSZWZlcmVuY2UKICAgICAgICAgICAgICAgIEJ1aWxkYWJsZUlkZW50aWZpZXIgPSAicHJp
bWFyeSIKICAgICAgICAgICAgICAgIEJsdWVwcmludElkZW50aWZpZXIgPSAiRkIzOUQwRDAxMjAw
RjBFMzAwMDg4RTY5IgotICAgICAgICAgICAgICAgQnVpbGRhYmxlTmFtZSA9ICJsaWJBTkdMRS1z
aGFyZWQuZHlsaWIiCisgICAgICAgICAgICAgICBCdWlsZGFibGVOYW1lID0gImxpYkFOR0xFLmEi
CiAgICAgICAgICAgICAgICBCbHVlcHJpbnROYW1lID0gIkFOR0xFIgogICAgICAgICAgICAgICAg
UmVmZXJlbmNlZENvbnRhaW5lciA9ICJjb250YWluZXI6U291cmNlL1RoaXJkUGFydHkvQU5HTEUv
QU5HTEUueGNvZGVwcm9qIj4KICAgICAgICAgICAgIDwvQnVpbGRhYmxlUmVmZXJlbmNlPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>387923</attachid>
            <date>2020-01-16 08:22:45 -0800</date>
            <delta_ts>2020-02-10 10:35:19 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206340-20200116082244.patch</filename>
            <type>text/plain</type>
            <size>122802</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0NjY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmFjNzM1MmQwNTI0NjE5
OTQ5MTI4ZGU3Y2M0NTZjZGM2NmQ0NTY1Zi4uYzRjY2Q3ZTMxMjYwMmZjNDMwMzk2ODM2YjRlNzg2
ODQ4MTRiNmJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNCBAQAorMjAyMC0wMS0xNiAgTWVn
YW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBT
ZWxlY3Rpb25EYXRhIGNsYXNzZXMgYW5kIHN0cnVjdHVyZXMgSGlnaGxpZ2h0RGF0YSwgZXRjIHRv
IGJlIG1vcmUgaW5jbHVzaXZlIGZvciB0aGVpciBuZXcgdXNlIGNhc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYzNDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgb25seSwgbm8gYmVoYXZp
b3VyIGNoYW5nZS4KKworICAgICAgICBXaXRoIHRoZSBuZXcgSGlnaGxpZ2h0IEFQSSwgd2Ugd2ls
bCBiZSB1c2luZyB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBIaWdobGlnaHRzIGFz
IHdlbGwgYXMgU2VsZWN0aW9uLCAKKyAgICAgICAgcmVuYW1lIHRvIEhpZ2hsaWdodCwgYXMgYSBT
ZWxlY3Rpb24gaXMgYSB0eXBlIG9mIEhpZ2hsaWdodC4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRnJhbWVT
ZWxlY3Rpb25TdGF0ZTo6flNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9Db21w
bGV4TGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4TGluZUxheW91dDo6
Y29uc3RydWN0TGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L0VsbGlwc2lzQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5j
cHAuCisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRh
OjpIaWdobGlnaHREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNldFJl
bmRlclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNlbGVjdGlvblN0
YXRlRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhpZ2hsaWdodERhdGE6OnJlcGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGln
aGxpZ2h0RGF0YTo6Y29sbGVjdEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIaWdo
bGlnaHREYXRhOjphcHBseSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlOjpSZW5kZXJS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6b3Bl
cmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpnZXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c3RhcnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhpZ2hsaWdodERhdGE6OnN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhpZ2hsaWdodERhdGE6OmVuZE9mZnNldCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNlbGVjdGlvblN0YXRl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6c2Vs
ZWN0aW9uU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6dmVyaWZ5U2VsZWN0aW9uU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y2xh
bXBlZFN0YXJ0RW5kRm9yU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6aGlnaGxpZ2h0U3RhcnRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRzRm9ySGlnaGxpZ2h0cyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNob3VsZFBhaW50U2Vs
ZWN0aW9uR2FwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0
aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25H
YXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRTZWxlY3Rpb25HYXBJbmZv
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjppbmxpbmVTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aW5lQnJlYWs6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU2VsZWN0
aW9uQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3RCaXRmaWVsZHM6OlJlbmRlck9i
amVjdEJpdGZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OlJlbmRlck9i
amVjdEJpdGZpZWxkczo6c2VsZWN0aW9uU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3RCaXRmaWVsZHM6OnNldFNlbGVjdGlvblN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlcGxhY2VkOjpzaG91bGREcmF3U2VsZWN0aW9uVGludCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5m
by5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VsZWN0aW9uSW5mb0Jhc2U6OnN0YXRlIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRM
aW5lQm94ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2V0
U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50QXR0YWNobWVudCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpsaW5lU2Vs
ZWN0aW9uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmZpcnN0U2VsZWN0ZWRCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6bGFzdFNlbGVjdGVkQm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJl
Y2VkaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yV2l0aFJlYXNvbik6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6
OnBhaW50KToKKwogMjAyMC0wMS0xNSAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnku
Y29tPgogCiAgICAgICAgIFtMRkNdIEZpeCBDTWFrZSBCdWlsZApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKaW5k
ZXggODUyY2FjZmMwOWRjYmM1MDQ1YzJlYmZhYTZlYmE0NDJiMWE0ZWRlNC4uYjAwY2RhNDcxYjNi
YzEzM2MyYzBjMGFhMDc0Yjg5NzA1OWUwODYzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCkBAIC0xMjgx
LDYgKzEyODEsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAg
cmVuZGVyaW5nL0V2ZW50UmVnaW9uLmgKICAgICByZW5kZXJpbmcvRmxvYXRpbmdPYmplY3RzLmgK
ICAgICByZW5kZXJpbmcvR2FwUmVjdHMuaAorICAgIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmgK
ICAgICByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgKICAgICByZW5kZXJpbmcvSGl0VGVzdFJl
cXVlc3QuaAogICAgIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKQEAgLTEzMzYsNyArMTMzNyw2
IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICByZW5kZXJpbmcv
UmVuZGVyV2lkZ2V0LmgKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5oCiAgICAgcmVuZGVy
aW5nL1Njcm9sbEFsaWdubWVudC5oCi0gICAgcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5o
CiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuaAogICAgIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0Q292ZXJhZ2UuaAogICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0Nv
bnRlbnRzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNmU4ZTIxMzA4MmU0MWQ5YWM3Njk4NTUxODYwMjhk
ZmQ5OTRlZjdlNy4uNzdlZjIwMmRlZTA3Y2Q5ODAzYjQ5NWM2ZDkxMGYyYjM1ZTdmNWUyNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKQEAgLTIxOTYsNyArMjE5Niw3IEBAIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNw
cAogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmNw
cAogcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5jcHAKLXJlbmRlcmluZy9TZWxlY3Rpb25SYW5n
ZURhdGEuY3BwCityZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0LmNwcAogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAKIHJl
bmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDkwOTVkNTI1M2Fk
ZWY1YjFkMWY0MjQ1Y2JhM2M5NjBmZjE5ODhjMDEuLjc2NjMxMzY5MjAwMDZlOGE0ODEyOGU3OGFl
NjJiOGFhYmRhM2JlMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTQxNjAsNyArNDE2MCw3IEBACiAJCUNEQ0M5QkNGMjIzODdF
OUEwMEZGQjUxQyAvKiBNZWRpYUNhcGFiaWxpdGllc0RlY29kaW5nSW5mby5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQzlCQ0UyMjM4N0U5QTAwRkZC
NTFDIC8qIE1lZGlhQ2FwYWJpbGl0aWVzRGVjb2RpbmdJbmZvLmggKi87IH07CiAJCUNEQ0M5QkQx
MjIzODdFQUEwMEZGQjUxQyAvKiBNZWRpYUNhcGFiaWxpdGllc0VuY29kaW5nSW5mby5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQzlCRDAyMjM4N0VB
QTAwRkZCNTFDIC8qIE1lZGlhQ2FwYWJpbGl0aWVzRW5jb2RpbmdJbmZvLmggKi87IH07CiAJCUNE
Q0Q0MUU4MUMzRERCMEEwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0Q0MUU2MUMzRERCMDkwMDk2
NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0
aW9uUmFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBDRENGQUJCQjE4QzBBRTMxMDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RDRkFCQkQx
OEMwQUY3ODAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1MCAvKiBIaWdo
bGlnaHREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQ0RENzA4OTcxODM1OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RENzA4OTUxODM1OUY2RjAwMkIz
REM2IC8qIFNhbXBsZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUNEREMxRTdBMThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IENEREMxRTc5MThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCAq
LzsgfTsKIAkJQ0RERTAyRUQxOEIzRUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVkZvdW5kYXRp
b25PYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
Q0RERTAyRUIxOEIzRUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1t
ICovOyB9OwpAQCAtMTQwMzYsOCArMTQwMzYsOCBAQAogCQlDRENENDFFNTFDM0REQjA5MDA5NjVE
OTkgLyogUGFyc2VkQ29udGVudFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFBhcnNlZENvbnRlbnRSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VkQ29udGVudFJhbmdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0NDQSAvKiBF
dmVudFRhcmdldEZhY3RvcnkuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRUYXJnZXRG
YWN0b3J5LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRENGQUJCQjE4QzBBRTMx
MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNlbGVjdGlvblJhbmdlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQlDRENGQUJCQzE4QzBBRjE5MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdGlvblJhbmdlRGF0YS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1
MCAvKiBIaWdobGlnaHREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhp
Z2hsaWdodERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDRkFCQkMxOEMw
QUYxOTAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSGlnaGxpZ2h0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNERDFFNTI1MTY3QkE1NjQwMENFODIwQiAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlv
bi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRh
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREQ3MDg5NDE4MzU5RjZFMDAy
QjNEQzYgLyogU2FtcGxlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNhbXBsZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERDcwODk1
MTgzNTlGNkYwMDJCM0RDNiAvKiBTYW1wbGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU2FtcGxlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzcx
Nyw2ICsyNzcxNyw4IEBACiAJCQkJRTExMkY0NkYxRTNBODVEODAwRDZDREZEIC8qIEdyaWQuaCAq
LywKIAkJCQlFMTJERTcxNTFFNEI3NDg3MDBGOUFDQ0YgLyogR3JpZFRyYWNrU2l6aW5nQWxnb3Jp
dGhtLmNwcCAqLywKIAkJCQlFMTJERTcxNjFFNEI3NDg3MDBGOUFDQ0YgLyogR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmggKi8sCisJCQkJQ0RDRkFCQkMxOEMwQUYxOTAwNkY4NDUwIC8qIEhpZ2hs
aWdodERhdGEuY3BwICovLAorCQkJCUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1MCAvKiBIaWdobGln
aHREYXRhLmggKi8sCiAJCQkJNDk2OUIwRjAxM0QwQjMzRjAwREYzNTIxIC8qIEhpdFRlc3RpbmdU
cmFuc2Zvcm1TdGF0ZS5jcHAgKi8sCiAJCQkJNDk2OUIwRjExM0QwQjMzRjAwREYzNTIxIC8qIEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oICovLAogCQkJCTJEODI4N0Y0MTZFNEEwMzgwMDg2QkQw
MCAvKiBIaXRUZXN0TG9jYXRpb24uY3BwICovLApAQCAtMjc5MzksOCArMjc5NDEsNiBAQAogCQkJ
CUE4Q0ZGNURBMEExNTVBMDUwMDBBNDIzNCAvKiBSb290SW5saW5lQm94LmggKi8sCiAJCQkJNUQ5
MjVCNjUwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEFsaWdubWVudC5jcHAgKi8sCiAJCQkJNUQ5
MjVCNjYwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEFsaWdubWVudC5oICovLAotCQkJCUNEQ0ZB
QkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovLAotCQkJCUNE
Q0ZBQkJCMThDMEFFMzEwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLywKIAkJCQlF
NDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8sCiAJCQkJ
RTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLywKIAkJCQkx
MUUwNjdFQjFFNjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAq
LywKQEAgLTMwMTAyLDYgKzMwMTAyLDcgQEAKIAkJCQlGNTVCM0RDMDEyNTFGMTJEMDAzRUYyNjkg
LyogSGlkZGVuSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5QzFENTRGNkMx
MDBERDdDNjggLyogSElER2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOUUxRDU0
RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
Q0RDRkFCQkQxOEMwQUY3ODAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDOTREMTU0MEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0b3J5LmggaW4gSGVhZGVycyAq
LywKIAkJCQk5N0RDRTIwMjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTUxNzQxRDExMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRl
bS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjI3OSw3ICszMjI4MCw2IEBACiAJCQkJOTc0RDJEQTUx
NDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQky
RDVCQzQyNzE2Rjg4MkVFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRl
ZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RDRkFCQkQxOEMwQUY3ODAwNkY4NDUwIC8q
IFNlbGVjdGlvblJhbmdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkVBODA3QzkwRjcxNEEw
MzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDA1Qzg5
MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKaW5kZXggMDBhYzk4
ZmUxNjhjZGYzMzAzYzFmOTdiZWI4MzhjNGExZDZmZTRiNC4uYmRlZWExZTZjYjU5ZmY4NzQwMTg1
ZGQ5ZTVjMTkwYTUwZWUzN2FhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0ltYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3Bw
CkBAIC0xNDUsMTIgKzE0NSwxMiBAQCBzdHJ1Y3QgU2NvcGVkRnJhbWVTZWxlY3Rpb25TdGF0ZSB7
CiAgICAgewogICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLmNvbnRlbnRSZW5k
ZXJlcigpKSB7CiAgICAgICAgICAgICBBU1NFUlQoc2VsZWN0aW9uKTsKLSAgICAgICAgICAgIHJl
bmRlclZpZXctPnNlbGVjdGlvbigpLnNldChzZWxlY3Rpb24udmFsdWUoKSwgU2VsZWN0aW9uUmFu
Z2VEYXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5z
ZWxlY3Rpb24oKS5zZXQoc2VsZWN0aW9uLnZhbHVlKCksIEhpZ2hsaWdodERhdGE6OlJlcGFpbnRN
b2RlOjpOb3RoaW5nKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGNvbnN0IEZyYW1lJiBmcmFt
ZTsKLSAgICBPcHRpb25hbDxTZWxlY3Rpb25SYW5nZURhdGE6OkNvbnRleHQ+IHNlbGVjdGlvbjsK
KyAgICBPcHRpb25hbDxIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZT4gc2VsZWN0aW9uOwogfTsK
IAogI2lmICFQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMTg3LDcgKzE4Nyw3IEBAIERyYWdJbWFn
ZVJlZiBjcmVhdGVEcmFnSW1hZ2VGb3JSYW5nZShGcmFtZSYgZnJhbWUsIFJhbmdlJiByYW5nZSwg
Ym9vbCBmb3JjZUJsYWNrCiAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gc3RhcnQuZGVwcmVjYXRlZEVk
aXRpbmdPZmZzZXQoKTsKICAgICBpbnQgZW5kT2Zmc2V0ID0gZW5kLmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCk7CiAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDAp
OwotICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7IHN0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVy
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oZW5kT2Zmc2V0KSB9LCBTZWxlY3Rpb25SYW5nZURhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5n
KTsKKyAgICB2aWV3LT5zZWxlY3Rpb24oKS5zZXQoeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJl
ciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGVuZE9mZnNldCkgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOwog
ICAgIC8vIFdlIGNhcHR1cmUgdXNpbmcgc25hcHNob3RGcmFtZVJlY3QoKSBiZWNhdXNlIHdlIGZh
a2UgdXAgdGhlIHNlbGVjdGlvbiB1c2luZwogICAgIC8vIEZyYW1lVmlldyBidXQgc25hcHNob3RT
ZWxlY3Rpb24oKSB1c2VzIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUgRnJhbWUgaXRzZWxmLgogICAg
IHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tU25hcHNob3Qoc25hcHNob3RGcmFtZVJlY3QoZnJh
bWUsIHZpZXctPnNlbGVjdGlvbigpLmJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50KCksIG9w
dGlvbnMpLCBudWxscHRyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9D
b21wbGV4TGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExp
bmVMYXlvdXQuY3BwCmluZGV4IGY2ZmQxNmI1NDlmMWE3NDgwNGQ2ZmY2MzFjOTMzMTcxODYwMjUw
NWMuLjk0M2ZmNWY0MmI3NTQ1Nzg0OWNlNGUwNTM5N2NlMDRlNTczM2QwYWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcApAQCAtMzEwLDcgKzMx
MCw3IEBAIFJvb3RJbmxpbmVCb3gqIENvbXBsZXhMaW5lTGF5b3V0Ojpjb25zdHJ1Y3RMaW5lKEJp
ZGlSdW5MaXN0PEJpZGlSdW4+JiBiaWRpUnVucywKICAgICAgICAgSW5saW5lQm94KiBib3ggPSBj
cmVhdGVJbmxpbmVCb3hGb3JSZW5kZXJlcigmci0+cmVuZGVyZXIoKSwgaXNPbmx5UnVuKTsKICAg
ICAgICAgci0+c2V0Qm94KGJveCk7CiAKLSAgICAgICAgaWYgKCFyb290SGFzU2VsZWN0ZWRDaGls
ZHJlbiAmJiBib3gtPnJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbk5vbmUpCisgICAgICAgIGlmICghcm9vdEhhc1NlbGVjdGVkQ2hpbGRyZW4gJiYg
Ym94LT5yZW5kZXJlcigpLnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGln
aHROb25lKQogICAgICAgICAgICAgcm9vdEhhc1NlbGVjdGVkQ2hpbGRyZW4gPSB0cnVlOwogICAg
ICAgICAKICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBwYXJlbnQgYm94IHlldCwgb3IgaWYgdGhl
IHJ1biBpcyBub3Qgc2ltcGx5IGEgc2libGluZywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxs
aXBzaXNCb3guY3BwCmluZGV4IDIyNzRlN2I0YmZhNmYxMWVlZTc0ZTQzZTU0YWQwMjVhYTdiZjFi
NjAuLmY0MDZiMTBjYTQ1MGM1Y2Y5ZDc1NGQ3ZjA2NjAyMmRiMDhmMjFlYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcApAQCAtNjAsNyArNjAsNyBAQCB2b2lkIEVs
bGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0LCBMYQogICAgIH0KIAogICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0g
bGluZVN0eWxlLmZvbnRDYXNjYWRlKCk7Ci0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CisgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lKSB7CiAgICAgICAgIHBhaW50U2VsZWN0aW9uKGNv
bnRleHQsIHBhaW50T2Zmc2V0LCBsaW5lU3R5bGUsIGZvbnQpOwogCiAgICAgICAgIC8vIFNlbGVj
dCB0aGUgY29ycmVjdCBjb2xvciBmb3IgcGFpbnRpbmcgdGhlIHRleHQuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9FbGxpcHNpc0JveC5oCmluZGV4IDNmOThiN2Q4N2ZlMjJkNTI5MzI4NzczMGM4NmJj
MjI4OGNhNDA2YTYuLmM4OGRmMDY3NDhjOWI4NjQ3YzBlMjk4MjM5YzgwN2ZiMzdjM2MyMGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCkBAIC0zMyw3ICszMyw3IEBAIHB1
YmxpYzoKICAgICBFbGxpcHNpc0JveChSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBBdG9tU3RyaW5n
JiBlbGxpcHNpc1N0ciwgSW5saW5lRmxvd0JveCogcGFyZW50LCBpbnQgd2lkdGgsIGludCBoZWln
aHQsIGludCB5LCBib29sIGZpcnN0TGluZSwgYm9vbCBpc0hvcml6b250YWwsIElubGluZUJveCog
bWFya3VwQm94KTsKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50
JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwog
ICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlv
dXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lQm90dG9tLCBIaXRUZXN0QWN0aW9uKSBmaW5hbDsKLSAgICB2b2lkIHNldFNlbGVjdGlv
blN0YXRlKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgcykgeyBtX3NlbGVjdGlvblN0YXRl
ID0gczsgfQorICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZSBzKSB7IG1fc2VsZWN0aW9uU3RhdGUgPSBzOyB9CiAgICAgSW50UmVjdCBzZWxlY3Rp
b25SZWN0KCk7CiAKICAgICBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdygpIGNvbnN0IHsgcmV0
dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oSW5saW5lQm94OjpyZW5kZXJlcigpKTsgfQpA
QCAtNDEsMTIgKzQxLDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBwYWludE1hcmt1
cEJveChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVu
aXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBjb25zdCBSZW5kZXJTdHlsZSYpOwog
ICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQotICAgIFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBvdmVycmlkZSB7IHJldHVybiBt
X3NlbGVjdGlvblN0YXRlOyB9CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxl
Y3Rpb25TdGF0ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhdGU7IH0KICAgICB2
b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50Jiwg
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYpOwogICAgIElubGluZUJveCog
bWFya3VwQm94KCkgY29uc3Q7CiAKICAgICBib29sIG1fc2hvdWxkUGFpbnRNYXJrdXBCb3g7Ci0g
ICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBtX3NlbGVjdGlvblN0YXRlIHsgUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25Ob25lIH07CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZSBtX3NlbGVjdGlvblN0YXRlIHsgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lIH07CiAgICAg
aW50IG1faGVpZ2h0OwogICAgIEF0b21TdHJpbmcgbV9zdHI7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwZDFlN2EyZTI0MjlkNTBm
ZDljMDBkODIyZWE3NjNhYjk2ZjM3M2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKQEAgLTAsMCArMSwzODUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9M
REVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisg
KiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkhpZ2hsaWdodERhdGEuaCIKKworI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKKyNpbmNsdWRlICJQb3NpdGlvbi5o
IgorI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRl
ICJSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIlJlbmRl
ck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKKyNpbmNsdWRlICJWaXNpYmxlU2Vs
ZWN0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIHsgLy8gU2VlIGJ1
ZyAjMTc3ODA4LgorCitzdHJ1Y3QgU2VsZWN0aW9uRGF0YSB7CisgICAgdXNpbmcgUmVuZGVyZXJN
YXAgPSBIYXNoTWFwPFJlbmRlck9iamVjdCosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rp
b25JbmZvPj47CisgICAgdXNpbmcgUmVuZGVyQmxvY2tNYXAgPSBIYXNoTWFwPGNvbnN0IFJlbmRl
ckJsb2NrKiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4+OworCisg
ICAgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0T2Zmc2V0OworICAgIE9wdGlvbmFsPHVuc2lnbmVk
PiBlbmRPZmZzZXQ7CisgICAgUmVuZGVyZXJNYXAgcmVuZGVyZXJzOworICAgIFJlbmRlckJsb2Nr
TWFwIGJsb2NrczsKK307CisKK2NsYXNzIFNlbGVjdGlvbkl0ZXJhdG9yIHsKK3B1YmxpYzoKKyAg
ICBTZWxlY3Rpb25JdGVyYXRvcihSZW5kZXJPYmplY3QqIHN0YXJ0KQorICAgICAgICA6IG1fY3Vy
cmVudChzdGFydCkKKyAgICB7CisgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOworICAgIH0KKyAg
ICAKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fY3VycmVudDsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBuZXh0KCkKKyAg
ICB7CisgICAgICAgIFJlbmRlck9iamVjdCogY3VycmVudFNwYW4gPSBtX3NwYW5uZXJTdGFjay5p
c0VtcHR5KCkgPyBudWxscHRyIDogbV9zcGFubmVyU3RhY2subGFzdCgpLT5zcGFubmVyKCk7Cisg
ICAgICAgIG1fY3VycmVudCA9IG1fY3VycmVudC0+bmV4dEluUHJlT3JkZXIoY3VycmVudFNwYW4p
OworICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICAgICAgaWYgKCFtX2N1cnJlbnQgJiYg
Y3VycmVudFNwYW4pIHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGxhY2Vob2xkZXIgPSBt
X3NwYW5uZXJTdGFjay5sYXN0KCk7CisgICAgICAgICAgICBtX3NwYW5uZXJTdGFjay5yZW1vdmVM
YXN0KCk7CisgICAgICAgICAgICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci0+bmV4dEluUHJlT3Jk
ZXIoKTsKKyAgICAgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBtX2N1cnJlbnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgY2hlY2tGb3JT
cGFubmVyKCkKKyAgICB7CisgICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVy
UGxhY2Vob2xkZXI+KG1fY3VycmVudCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1
dG8mIHBsYWNlaG9sZGVyID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vo
b2xkZXI+KCptX2N1cnJlbnQpOworICAgICAgICBtX3NwYW5uZXJTdGFjay5hcHBlbmQoJnBsYWNl
aG9sZGVyKTsKKyAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigpOworICAg
IH0KKworICAgIFJlbmRlck9iamVjdCogbV9jdXJyZW50IHsgbnVsbHB0ciB9OworICAgIFZlY3Rv
cjxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcio+IG1fc3Bhbm5lclN0YWNrOwor
fTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3N0YXRpYyBSZW5kZXJPYmplY3QqIHJl
bmRlcmVyQWZ0ZXJPZmZzZXQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgdW5zaWduZWQg
b2Zmc2V0KQoreworICAgIGF1dG8qIGNoaWxkID0gcmVuZGVyZXIuY2hpbGRBdChvZmZzZXQpOwor
ICAgIHJldHVybiBjaGlsZCA/IGNoaWxkIDogcmVuZGVyZXIubmV4dEluUHJlT3JkZXJBZnRlckNo
aWxkcmVuKCk7Cit9CisKK3N0YXRpYyBib29sIGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbihj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBIaWdobGlnaHREYXRhOjpSZW5kZXJS
YW5nZSYgc2VsZWN0aW9uKQoreworICAgIHJldHVybiAocmVuZGVyZXIuY2FuQmVTZWxlY3Rpb25M
ZWFmKCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5zdGFydCgpIHx8ICZyZW5kZXJlciA9PSBz
ZWxlY3Rpb24uZW5kKCkpCisgICAgICAgICYmIHJlbmRlcmVyLnNlbGVjdGlvblN0YXRlKCkgIT0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lCisgICAgICAgICYmIHJlbmRlcmVyLmNvbnRhaW5p
bmdCbG9jaygpOworfQorCitzdGF0aWMgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9ja0JlbG93
Vmlldyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGF1dG8qIGNvbnRhaW5p
bmdCbG9jayA9IHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpOworICAgIHJldHVybiBpczxSZW5k
ZXJWaWV3Pihjb250YWluaW5nQmxvY2spID8gbnVsbHB0ciA6IGNvbnRhaW5pbmdCbG9jazsKK30K
Kworc3RhdGljIFNlbGVjdGlvbkRhdGEgY29sbGVjdChjb25zdCBIaWdobGlnaHREYXRhOjpSZW5k
ZXJSYW5nZSYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQoreworICAgIFNlbGVj
dGlvbkRhdGEgb2xkU2VsZWN0aW9uRGF0YSB7IHNlbGVjdGlvbi5zdGFydE9mZnNldCgpLCBzZWxl
Y3Rpb24uZW5kT2Zmc2V0KCksIHsgfSwgeyB9IH07CisgICAgLy8gQmxvY2tzIGNvbnRhaW4gc2Vs
ZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBs
ZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgorICAgIC8vIEluIG9y
ZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVm
dCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UK
KyAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2
ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCisgICAgYXV0byogc3RhcnQgPSBzZWxlY3Rp
b24uc3RhcnQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAgIGlmIChz
ZWxlY3Rpb24uZW5kKCkpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxl
Y3Rpb24uZW5kKCksIHNlbGVjdGlvbi5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBTZWxlY3Rp
b25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUgKHN0YXJ0ICYm
IHN0YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlv
bigqc3RhcnQsIHNlbGVjdGlvbikpIHsKKyAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9u
c2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBi
ZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAgb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJl
cnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFydCwgdHJ1
ZSkpOworICAgICAgICAgICAgaWYgKHJlcGFpbnREaWZmZXJlbmNlKSB7CisgICAgICAgICAgICAg
ICAgZm9yIChhdXRvKiBibG9jayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldygqc3RhcnQpOyBi
bG9jazsgYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKmJsb2NrKSkgeworICAgICAg
ICAgICAgICAgICAgICBhdXRvJiBibG9ja0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLmJsb2Nrcy5h
ZGQoYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGJsb2NrSW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5m
bz4oKmJsb2NrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7CisgICAgfQorICAgIHJl
dHVybiBvbGRTZWxlY3Rpb25EYXRhOworfQorCitIaWdobGlnaHREYXRhOjpIaWdobGlnaHREYXRh
KFJlbmRlclZpZXcmIHZpZXcpCisgICAgOiBtX3JlbmRlclZpZXcodmlldykKKyNpZiBFTkFCTEUo
U0VSVklDRV9DT05UUk9MUykKKyAgICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKHZpZXcpCisj
ZW5kaWYKK3sKK30KKwordm9pZCBIaWdobGlnaHREYXRhOjpzZXRSZW5kZXJSYW5nZShjb25zdCBS
ZW5kZXJSYW5nZSYgcmVuZGVyUmFuZ2UpCit7CisgICAgQVNTRVJUKHJlbmRlclJhbmdlLnN0YXJ0
KCkgJiYgcmVuZGVyUmFuZ2UuZW5kKCkpOworICAgIG1fcmVuZGVyUmFuZ2UgPSByZW5kZXJSYW5n
ZTsKK30KKworUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBIaWdobGlnaHREYXRhOjpzZWxl
Y3Rpb25TdGF0ZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgLy8g
RklYTUU6IHdlIHNob3VsZGxuJ3QgaGF2ZSB0byBjaGVjayB0aGF0IGEgcmVuZGVyZXIgaXMgYSBk
ZXNjZW5kYW50IG9mIHRoZSByZW5kZXIgbm9kZQorICAgIC8vIGZyb20gdGhlIHJhbmdlLiBUaGlz
IGlzIGxpa2VseSBiZWNhdXNlIHdlIGFyZW4ndCB1c2luZyBWaXNpYmxlUG9zaXRpb25zIHlldC4K
KyAgICAvLyBQbGFubmVkIGZpeCBpbiBhIGZvbGxvd3VwOiA8cmRhcjovL3Byb2JsZW0vNTgwOTU5
MjM+CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTUy
OQorICAgIAorICAgIGlmICgmcmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5nZS5zdGFydCgpIHx8IHJl
bmRlcmVyLmlzRGVzY2VuZGFudE9mKG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSkpIHsKKyAgICAgICAg
aWYgKG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSAmJiBtX3JlbmRlclJhbmdlLmVuZCgpICYmIG1fcmVu
ZGVyUmFuZ2Uuc3RhcnQoKSA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAgICAgICAgcmV0
dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Qm90aDsKKyAgICAgICAgaWYgKG1fcmVuZGVyUmFu
Z2Uuc3RhcnQoKSkKKyAgICAgICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXJ0OworICAgIH0KKyAgICBpZiAoJnJlbmRlcmVyID09IG1fcmVuZGVyUmFuZ2UuZW5kKCkgfHwg
cmVuZGVyZXIuaXNEZXNjZW5kYW50T2YobV9yZW5kZXJSYW5nZS5lbmQoKSkpCisgICAgICAgIHJl
dHVybiBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEVuZDsKKworICAgIFJlbmRlck9iamVjdCogc2Vs
ZWN0aW9uRW5kID0gbnVsbHB0cjsKKyAgICBhdXRvKiBzZWxlY3Rpb25EYXRhRW5kID0gbV9yZW5k
ZXJSYW5nZS5lbmQoKTsKKyAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKKyAgICAgICAgc2VsZWN0
aW9uRW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqc2VsZWN0aW9uRGF0YUVuZCwgbV9yZW5kZXJS
YW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rp
b25JdGVyYXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOworICAgIGZvciAoYXV0byogY3VycmVu
dFJlbmRlcmVyID0gbV9yZW5kZXJSYW5nZS5zdGFydCgpOyBjdXJyZW50UmVuZGVyZXIgJiYgY3Vy
cmVudFJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2UuZW5kKCk7IGN1cnJlbnRSZW5kZXJlciA9IHNl
bGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgeworICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09
IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSB8fCBjdXJyZW50UmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5n
ZS5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWN1cnJlbnRSZW5k
ZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKCZyZW5kZXJlciA9PSBjdXJyZW50UmVuZGVyZXIpCisgICAgICAgICAgICByZXR1cm4g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRJbnNpZGU7CisgICAgfQorICAgIHJldHVybiBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodE5vbmU7CisgICAgCit9CisKK3ZvaWQgSGlnaGxpZ2h0RGF0YTo6c2V0
KGNvbnN0IFJlbmRlclJhbmdlJiBzZWxlY3Rpb24sIFJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1v
ZGUpCit7CisgICAgaWYgKChzZWxlY3Rpb24uc3RhcnQoKSAmJiAhc2VsZWN0aW9uLmVuZCgpKSB8
fCAoc2VsZWN0aW9uLmVuZCgpICYmICFzZWxlY3Rpb24uc3RhcnQoKSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAvLyBKdXN0IHJldHVybiBpZiB0aGUgc2VsZWN0aW9uIGhhc24ndCBjaGFuZ2VkLgor
ICAgIGF1dG8gaXNDYXJldCA9IG1fcmVuZGVyVmlldy5mcmFtZSgpLnNlbGVjdGlvbigpLmlzQ2Fy
ZXQoKTsKKyAgICBpZiAoc2VsZWN0aW9uID09IG1fcmVuZGVyUmFuZ2UgJiYgbV9zZWxlY3Rpb25X
YXNDYXJldCA9PSBpc0NhcmV0KQorICAgICAgICByZXR1cm47CisjaWYgRU5BQkxFKFNFUlZJQ0Vf
Q09OVFJPTFMpCisgICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgcmVjdHMgYW5kIGNyZWF0ZSBhIG5v
dGlmaWVyIGZvciB0aGUgbmV3IHJlY3RzIHdlIGFyZSBhYm91dCB0byBnYXRoZXIuCisgICAgLy8g
VGhlIE5vdGlmaWVyIHVwZGF0ZXMgdGhlIEVkaXRvciB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3Bl
IGFuZCBpcyBkZXN0cm95ZWQuCisgICAgYXV0byByZWN0Tm90aWZpZXIgPSBtX3NlbGVjdGlvblJl
Y3RHYXRoZXJlci5jbGVhckFuZENyZWF0ZU5vdGlmaWVyKCk7CisjZW5kaWYKKyAgICBtX3NlbGVj
dGlvbldhc0NhcmV0ID0gaXNDYXJldDsKKyAgICBhcHBseShzZWxlY3Rpb24sIGJsb2NrUmVwYWlu
dE1vZGUpOworfQorCit2b2lkIEhpZ2hsaWdodERhdGE6OmNsZWFyKCkKK3sKKyAgICBtX3JlbmRl
clZpZXcubGF5ZXIoKS0+cmVwYWludEJsb2NrU2VsZWN0aW9uR2FwcygpOworICAgIHNldCh7IH0s
IEhpZ2hsaWdodERhdGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09sZCk7Cit9CisKK3ZvaWQgSGln
aGxpZ2h0RGF0YTo6cmVwYWludCgpIGNvbnN0Cit7CisgICAgSGFzaFNldDxSZW5kZXJCbG9jayo+
IHByb2Nlc3NlZEJsb2NrczsKKyAgICBSZW5kZXJPYmplY3QqIGVuZCA9IG51bGxwdHI7CisgICAg
aWYgKG1fcmVuZGVyUmFuZ2UuZW5kKCkpCisgICAgICAgIGVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZz
ZXQoKm1fcmVuZGVyUmFuZ2UuZW5kKCksIG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWUo
KSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3IobV9yZW5kZXJSYW5n
ZS5zdGFydCgpKTsKKyAgICBmb3IgKGF1dG8qIHJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3Iu
Y3VycmVudCgpOyByZW5kZXJlciAmJiByZW5kZXJlciAhPSBlbmQ7IHJlbmRlcmVyID0gc2VsZWN0
aW9uSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgIGlmICghcmVuZGVyZXItPmNhbkJlU2VsZWN0
aW9uTGVhZigpICYmIHJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSAmJiByZW5kZXJl
ciAhPSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGlmIChyZW5kZXJlci0+c2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dE5vbmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5m
bygqcmVuZGVyZXIsIHRydWUpLnJlcGFpbnQoKTsKKyAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNw
b25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0
IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAgIGZvciAoYXV0byogYmxvY2sgPSBjb250YWlu
aW5nQmxvY2tCZWxvd1ZpZXcoKnJlbmRlcmVyKTsgYmxvY2s7IGJsb2NrID0gY29udGFpbmluZ0Js
b2NrQmVsb3dWaWV3KCpibG9jaykpIHsKKyAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tz
LmFkZChibG9jaykuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK0ludFJlY3QgSGlnaGxpZ2h0RGF0YTo6Y29sbGVjdEJvdW5kcyhDbGlw
VG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKK3sKKyAgICBTZWxl
Y3Rpb25EYXRhOjpSZW5kZXJlck1hcCByZW5kZXJlcnM7CisgICAgYXV0byogc3RhcnQgPSBtX3Jl
bmRlclJhbmdlLnN0YXJ0KCk7CisgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKKyAg
ICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJP
ZmZzZXQoKm1fcmVuZGVyUmFuZ2UuZW5kKCksIG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFs
dWUoKSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOwor
ICAgIHdoaWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7CisgICAgICAgIGlmICgoc3RhcnQt
PmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8IHN0YXJ0ID09IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSB8
fCBzdGFydCA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAgICAgICAgJiYgc3RhcnQtPnNl
bGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lKSB7CisgICAgICAg
ICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5k
IG1hcmdpbiBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KKyAgICAgICAgICAg
IHJlbmRlcmVycy5zZXQoc3RhcnQsIG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKnN0
YXJ0LCBjbGlwVG9WaXNpYmxlQ29udGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKSk7
CisgICAgICAgICAgICBhdXRvKiBibG9jayA9IHN0YXJ0LT5jb250YWluaW5nQmxvY2soKTsKKyAg
ICAgICAgICAgIHdoaWxlIChibG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmJsb2NrKSkgeworICAg
ICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJ
bmZvID0gcmVuZGVyZXJzLmFkZChibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOworICAg
ICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5m
bz4oKmJsb2NrLCBjbGlwVG9WaXNpYmxlQ29udGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6
WWVzKTsKKyAgICAgICAgICAgICAgICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2soKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGFydCA9IHNlbGVjdGlvbkl0ZXJh
dG9yLm5leHQoKTsKKyAgICB9CisKKyAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5kaW5n
IGJveCByZWN0IHRoYXQgZW5jbG9zZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KKyAgICBMYXlvdXRS
ZWN0IHNlbGVjdGlvblJlY3Q7CisgICAgZm9yIChhdXRvJiBpbmZvIDogcmVuZGVyZXJzLnZhbHVl
cygpKSB7CisgICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUg
Y29vcmRpbmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3Jk
aW5hdGVzLgorICAgICAgICBMYXlvdXRSZWN0IGN1cnJlbnRSZWN0ID0gaW5mby0+cmVjdCgpOwor
ICAgICAgICBpZiAoYXV0byogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFpbnRDb250YWlu
ZXIoKSkgeworICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1YWQgPSByZXBhaW50Q29udGFpbmVy
LT5sb2NhbFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjdXJyZW50UmVjdCkpOworICAgICAgICAg
ICAgY3VycmVudFJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7CisgICAgICAg
IH0KKyAgICAgICAgc2VsZWN0aW9uUmVjdC51bml0ZShjdXJyZW50UmVjdCk7CisgICAgfQorICAg
IHJldHVybiBzbmFwcGVkSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKK30KKwordm9pZCBIaWdobGln
aHREYXRhOjphcHBseShjb25zdCBSZW5kZXJSYW5nZSYgbmV3U2VsZWN0aW9uLCBSZXBhaW50TW9k
ZSBibG9ja1JlcGFpbnRNb2RlKQoreworICAgIGF1dG8gb2xkU2VsZWN0aW9uRGF0YSA9IGNvbGxl
Y3QobV9yZW5kZXJSYW5nZSwgYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TW9kZTo6TmV3WE9S
T2xkKTsKKyAgICAvLyBSZW1vdmUgY3VycmVudCBzZWxlY3Rpb24uCisgICAgZm9yIChhdXRvKiBy
ZW5kZXJlciA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzLmtleXMoKSkKKyAgICAgICAgcmVu
ZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRO
b25lKTsKKyAgICBtX3JlbmRlclJhbmdlID0gbmV3U2VsZWN0aW9uOworICAgIGF1dG8qIHNlbGVj
dGlvblN0YXJ0ID0gbV9yZW5kZXJSYW5nZS5zdGFydCgpOworICAgIC8vIFVwZGF0ZSB0aGUgc2Vs
ZWN0aW9uIHN0YXR1cyBvZiBhbGwgb2JqZWN0cyBiZXR3ZWVuIHNlbGVjdGlvblN0YXJ0IGFuZCBz
ZWxlY3Rpb25FbmQKKyAgICBpZiAoc2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgPT0g
bV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgc2VsZWN0aW9uU3RhcnQtPnNldFNlbGVjdGlv
blN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRCb3RoKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0KQorICAgICAgICAgICAgc2VsZWN0aW9uU3RhcnQt
PnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGFydCk7
CisgICAgICAgIGlmIChhdXRvKiBlbmQgPSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAgICAg
ICAgZW5kLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
RW5kKTsKKyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCA9IG51bGxwdHI7
CisgICAgYXV0byogc2VsZWN0aW9uRGF0YUVuZCA9IG1fcmVuZGVyUmFuZ2UuZW5kKCk7CisgICAg
aWYgKHNlbGVjdGlvbkRhdGFFbmQpCisgICAgICAgIHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0
ZXJPZmZzZXQoKnNlbGVjdGlvbkRhdGFFbmQsIG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFs
dWUoKSk7CisgICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9u
U3RhcnQpOworICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7
IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJy
ZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGN1
cnJlbnRSZW5kZXJlciA9PSBzZWxlY3Rpb25TdGFydCB8fCBjdXJyZW50UmVuZGVyZXIgPT0gbV9y
ZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWN1
cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgY3VycmVudFJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0SW5zaWRlKTsKKyAgICB9CisKKyAgICBpZiAoYmxvY2tSZXBh
aW50TW9kZSAhPSBSZXBhaW50TW9kZTo6Tm90aGluZykKKyAgICAgICAgbV9yZW5kZXJWaWV3Lmxh
eWVyKCktPmNsZWFyQmxvY2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7CisKKyAgICAvLyBOb3cgdGhh
dCB0aGUgc2VsZWN0aW9uIHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0
cywgd2FsayB0aGVtIGFnYWluIGFuZAorICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0
cyBsaXN0LgorICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlcmVyTWFwIG5ld1NlbGVjdGVkUmVuZGVy
ZXJzOworICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRlckJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tz
OworICAgIHNlbGVjdGlvbkl0ZXJhdG9yID0gU2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3Rh
cnQpOworICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1
cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50
UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGlzVmFs
aWRSZW5kZXJlckZvclNlbGVjdGlvbigqY3VycmVudFJlbmRlcmVyLCBtX3JlbmRlclJhbmdlKSkg
eworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+IHNlbGVj
dGlvbkluZm8gPSBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpjdXJyZW50UmVuZGVy
ZXIsIHRydWUpOworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorICAgICAgICAgICAgZm9y
IChhdXRvJiByZWN0IDogc2VsZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0aW9uUmVjdHMoKSkK
KyAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRSZWN0KHNlbGVjdGlv
bkluZm8tPnJlcGFpbnRDb250YWluZXIoKSwgcmVjdCk7CisgICAgICAgICAgICBpZiAoIWN1cnJl
bnRSZW5kZXJlci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKKyAgICAgICAgICAgICAgICBtX3NlbGVj
dGlvblJlY3RHYXRoZXJlci5zZXRUZXh0T25seShmYWxzZSk7CisjZW5kaWYKKyAgICAgICAgICAg
IG5ld1NlbGVjdGVkUmVuZGVyZXJzLnNldChjdXJyZW50UmVuZGVyZXIsIFdURk1vdmUoc2VsZWN0
aW9uSW5mbykpOworICAgICAgICAgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gY3VycmVudFJl
bmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKKyAgICAgICAgICAgIHdoaWxlIChjb250YWluaW5n
QmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7CisgICAgICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5m
byA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJl
bmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7CisgICAgICAgICAgICAg
ICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKTsK
KyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAgICAgICAgICAgICBtX3NlbGVjdGlv
blJlY3RHYXRoZXJlci5hZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFpbnRDb250YWluZXIoKSwg
YmxvY2tJbmZvLT5yZWN0cygpKTsKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE1vZGU6Ok5vdGhpbmcp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgc2VsZWN0ZWQg
b2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uPworICAgIGZvciAo
YXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8gOiBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVycykg
eworICAgICAgICBhdXRvKiByZW5kZXJlciA9IHNlbGVjdGVkUmVuZGVyZXJJbmZvLmtleTsKKyAg
ICAgICAgYXV0byogbmV3SW5mbyA9IG5ld1NlbGVjdGVkUmVuZGVyZXJzLmdldChyZW5kZXJlcik7
CisgICAgICAgIGF1dG8qIG9sZEluZm8gPSBzZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS5nZXQo
KTsKKyAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3QoKSAhPSBuZXdJbmZvLT5y
ZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpCisgICAgICAgICAg
ICB8fCAobV9yZW5kZXJSYW5nZS5zdGFydCgpID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRh
dGEuc3RhcnRPZmZzZXQgIT0gbV9yZW5kZXJSYW5nZS5zdGFydE9mZnNldCgpKQorICAgICAgICAg
ICAgfHwgKG1fcmVuZGVyUmFuZ2UuZW5kKCkgPT0gcmVuZGVyZXIgJiYgb2xkU2VsZWN0aW9uRGF0
YS5lbmRPZmZzZXQgIT0gbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKSkpIHsKKyAgICAgICAgICAg
IG9sZEluZm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7CisgICAgICAg
ICAgICAgICAgbmV3SW5mby0+cmVwYWludCgpOworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVk
UmVuZGVyZXJzLnJlbW92ZShyZW5kZXJlcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBBbnkgbmV3IG9iamVjdHMgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQg
aW4gdGhlIG9sZCBvYmplY3RzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4K
KyAgICBmb3IgKGF1dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDogbmV3U2VsZWN0ZWRSZW5kZXJl
cnMpCisgICAgICAgIHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLT5yZXBhaW50KCk7CisKKyAg
ICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIGJsb2NrcyBjaGFuZ2VkPworICAgIGZvciAoYXV0byYg
c2VsZWN0ZWRCbG9ja0luZm8gOiBvbGRTZWxlY3Rpb25EYXRhLmJsb2NrcykgeworICAgICAgICBh
dXRvKiBibG9jayA9IHNlbGVjdGVkQmxvY2tJbmZvLmtleTsKKyAgICAgICAgYXV0byogbmV3SW5m
byA9IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9jayk7CisgICAgICAgIGF1dG8qIG9sZEluZm8g
PSBzZWxlY3RlZEJsb2NrSW5mby52YWx1ZS5nZXQoKTsKKyAgICAgICAgaWYgKCFuZXdJbmZvIHx8
IG9sZEluZm8tPnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0ZSgp
ICE9IG5ld0luZm8tPnN0YXRlKCkpIHsKKyAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQoKTsK
KyAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7CisgICAgICAgICAgICAgICAgbmV3SW5mby0+cmVw
YWludCgpOworICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkQmxvY2tzLnJlbW92ZShibG9jayk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbnkgbmV3IGJsb2Nr
cyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJsb2NrcyBkaWN0LCBhbmQg
c28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgZm9yIChhdXRvJiBzZWxlY3RlZEJsb2Nr
SW5mbyA6IG5ld1NlbGVjdGVkQmxvY2tzKQorICAgICAgICBzZWxlY3RlZEJsb2NrSW5mby52YWx1
ZS0+cmVwYWludCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mYTA0MmQwNWU2YjZlYzFiZmFh
OGNlNjY2NWNhMGM5ZjJhNThhOWUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaApAQCAtMCwwICsxLDEwNyBAQAorIC8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxB
UyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQor
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiUmVuZGVyU2VsZWN0aW9uSW5mby5oIgorCisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09O
VFJPTFMpCisjaW5jbHVkZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgiCisjZW5kaWYKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgT2xkU2VsZWN0aW9uRGF0YTsKKyAgICAKK2NsYXNz
IEhpZ2hsaWdodERhdGEgeworcHVibGljOgorICAgIEhpZ2hsaWdodERhdGEoUmVuZGVyVmlldyYp
OworICAgIAorICAgIGNsYXNzIFJlbmRlclJhbmdlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJl
bmRlclJhbmdlKCkgPSBkZWZhdWx0OworICAgICAgICBSZW5kZXJSYW5nZShSZW5kZXJPYmplY3Qq
IHN0YXJ0LCBSZW5kZXJPYmplY3QqIGVuZCwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVk
IGVuZE9mZnNldCkKKyAgICAgICAgICAgIDogbV9zdGFydChtYWtlV2Vha1B0cihzdGFydCkpCisg
ICAgICAgICAgICAsIG1fZW5kKG1ha2VXZWFrUHRyKGVuZCkpCisgICAgICAgICAgICAsIG1fc3Rh
cnRPZmZzZXQoc3RhcnRPZmZzZXQpCisgICAgICAgICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNl
dCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQuZ2V0KCk7IH0KKyAgICAgICAgUmVuZGVyT2JqZWN0KiBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5nZXQoKTsgfQorICAgICAgICBPcHRpb25hbDx1bnNp
Z25lZD4gc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CisgICAg
ICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBlbmRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9m
ZnNldDsgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZW5kZXJSYW5nZSYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3N0YXJ0ID09IG90aGVy
Lm1fc3RhcnQgJiYgbV9lbmQgPT0gb3RoZXIubV9lbmQgJiYgbV9zdGFydE9mZnNldCA9PSBvdGhl
ci5tX3N0YXJ0T2Zmc2V0ICYmIG1fZW5kT2Zmc2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OworICAg
ICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBXZWFrUHRyPFJlbmRlck9iamVjdD4gbV9z
dGFydDsKKyAgICAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fZW5kOworICAgICAgICBPcHRp
b25hbDx1bnNpZ25lZD4gbV9zdGFydE9mZnNldDsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+
IG1fZW5kT2Zmc2V0OworICAgIH07CisgICAgCisgICAgdm9pZCBzZXRSZW5kZXJSYW5nZShjb25z
dCBSZW5kZXJSYW5nZSYpOworICAgIAorICAgIGVudW0gY2xhc3MgUmVwYWludE1vZGUgeyBOZXdY
T1JPbGQsIE5ld01pbnVzT2xkLCBOb3RoaW5nIH07CisgICAgdm9pZCBzZXQoY29uc3QgUmVuZGVy
UmFuZ2UmLCBSZXBhaW50TW9kZSA9IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOworICAgIGNvbnN0
IFJlbmRlclJhbmdlJiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclJhbmdlOyB9CisKKyAg
ICBSZW5kZXJPYmplY3QqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJSYW5nZS5zdGFy
dCgpOyB9CisgICAgUmVuZGVyT2JqZWN0KiBlbmQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclJh
bmdlLmVuZCgpOyB9CisKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgpIGNvbnN0IHsgQVNTRVJU
KG1fcmVuZGVyUmFuZ2Uuc3RhcnRPZmZzZXQoKSk7IHJldHVybiBtX3JlbmRlclJhbmdlLnN0YXJ0
T2Zmc2V0KCkudmFsdWVPcigwKTsgfQorICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsg
QVNTRVJUKG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkpOyByZXR1cm4gbV9yZW5kZXJSYW5nZS5l
bmRPZmZzZXQoKS52YWx1ZU9yKDApOyB9CisKKyAgICB2b2lkIGNsZWFyKCk7CisgICAgSW50UmVj
dCBib3VuZHMoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250
ZW50OjpObyk7IH0KKyAgICBJbnRSZWN0IGJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50KCkg
Y29uc3QgeyByZXR1cm4gY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKTsg
fQorICAgIHZvaWQgcmVwYWludCgpIGNvbnN0OworICAgIAorICAgIFJlbmRlck9iamVjdDo6SGln
aGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QmKTsKKwor
cHJpdmF0ZToKKyAgICBlbnVtIGNsYXNzIENsaXBUb1Zpc2libGVDb250ZW50IHsgWWVzLCBObyB9
OworICAgIEludFJlY3QgY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3Q7
CisgICAgdm9pZCBhcHBseShjb25zdCBSZW5kZXJSYW5nZSYsIFJlcGFpbnRNb2RlKTsKKworICAg
IGNvbnN0IFJlbmRlclZpZXcmIG1fcmVuZGVyVmlldzsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05U
Uk9MUykKKyAgICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7
CisjZW5kaWYKKyAgICBSZW5kZXJSYW5nZSBtX3JlbmRlclJhbmdlOworICAgIGJvb2wgbV9zZWxl
Y3Rpb25XYXNDYXJldCB7IGZhbHNlIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCmluZGV4IDg3OTc3NGEwYjgwMTMwY2Mw
NTc3ZTIyZWNmYWE0MDIzZDEyNWE0NTMuLjFhNDU3OWIyOTI0NDBlZGQ0ZjZlZGMzZDYzNjAwNDcy
YWRmZDgxNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3gu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guY3BwCkBAIC0yNTcs
NyArMjU3LDcgQEAgSW5saW5lQm94KiBJbmxpbmVCb3g6OnByZXZpb3VzTGVhZk9uTGluZUlnbm9y
aW5nTGluZUJyZWFrKCkgY29uc3QKICAgICByZXR1cm4gbGVhZjsKIH0KIAotUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVCb3g6OnNlbGVjdGlvblN0YXRlKCkKK1JlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGUgSW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7CiAgICAgcmV0
dXJuIG1fcmVuZGVyZXIuc2VsZWN0aW9uU3RhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVCb3guaAppbmRleCAyYWIxMTI1YjZkYWRiZGNiNmJiMzIyMTMzZDc4MjUxNGQzMzhlYWJj
Li41OWExMWQ2YTQ4YTgzMzhkN2UwYmE1ZTY0NDE3MjliMWY0Nzk5ZWI0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZUJveC5oCkBAIC0yMzAsNyArMjMwLDcgQEAgcHVibGljOgogCiAgICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGRpcnR5TGluZUJveGVzKCk7CiAgICAgCi0gICAg
V0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVj
dGlvblN0YXRlKCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0
dWFsIGJvb2wgY2FuQWNjb21tb2RhdGVFbGxpcHNpcyhib29sIGx0ciwgaW50IGJsb2NrRWRnZSwg
aW50IGVsbGlwc2lzV2lkdGgpIGNvbnN0OwogICAgIC8vIHZpc2libGVMZWZ0RWRnZSwgdmlzaWJs
ZVJpZ2h0RWRnZSBhcmUgaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVtLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCmluZGV4IGMzMTY0OTRiZGIzNmQ5
MTdiYWRkN2I2NTBlMGJlYjlkOWZiZWI4MjIuLjZmNTc3YWE0NTc4OTRjZWI5YzJiZDg3OTZmM2Yw
ZmMxMzZiOTEwMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVG
bG93Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5j
cHAKQEAgLTE1MDUsOSArMTUwNSw5IEBAIElubGluZUJveCogSW5saW5lRmxvd0JveDo6bGFzdExl
YWZEZXNjZW5kYW50KCkgY29uc3QKICAgICByZXR1cm4gbGVhZjsKIH0KIAotUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVGbG93Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCitSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlIElubGluZUZsb3dCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsK
LSAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOworICAgIHJldHVybiBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmU7CiB9CiAKIGJvb2wgSW5saW5lRmxvd0JveDo6Y2FuQWNj
b21tb2RhdGVFbGxpcHNpcyhib29sIGx0ciwgaW50IGJsb2NrRWRnZSwgaW50IGVsbGlwc2lzV2lk
dGgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAppbmRleCBk
MzZhMTViNzQ5N2Q2Y2E0ZTAyZDk4ODU4MzllYjRkNDdhYWM2ZTdmLi40MDU1NWZmNTRlMDMxMGZm
NzlkZDljZTkzMjFkYmEyZjBhYTc5OTc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmgKQEAgLTIwMSw3ICsyMDEsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBy
ZW1vdmVDaGlsZChJbmxpbmVCb3gqIGNoaWxkKTsKIAotICAgIFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBvdmVycmlkZTsKKyAgICBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgb3ZlcnJpZGU7CiAKICAgICBib29sIGNhbkFj
Y29tbW9kYXRlRWxsaXBzaXMoYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dp
ZHRoKSBjb25zdCBmaW5hbDsKICAgICBmbG9hdCBwbGFjZUVsbGlwc2lzQm94KGJvb2wgbHRyLCBm
bG9hdCBibG9ja0xlZnRFZGdlLCBmbG9hdCBibG9ja1JpZ2h0RWRnZSwgZmxvYXQgZWxsaXBzaXNX
aWR0aCwgZmxvYXQgJnRydW5jYXRlZFdpZHRoLCBib29sJikgb3ZlcnJpZGU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXggOTY2OTcyOGE3OTYwYmJiNDkz
OWY1MjUxNjYyNGNiNmU5MDRlMDAyNS4uZTM4MzZjMzM1MTFkOTZhMjE2MWE0ZjUzYmRmYWFjOTIx
OTljMWI5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcApA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkV2ZW50UmVnaW9uLmgiCiAjaW5jbHVkZSAiRnJh
bWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIaWdobGlnaHRE
YXRhLmgiCiAjaW5jbHVkZSAiSGlnaGxpZ2h0TWFwLmgiCiAjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCkBAIC00OSw3ICs1MCw2IEBACiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRNYXJrZXIuaCIKICNp
bmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uUmFu
Z2VEYXRhLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHREZWNvcmF0aW9uUGFp
bnRlci5oIgogI2luY2x1ZGUgIlRleHRQYWludFN0eWxlLmgiCkBAIC0xNTQsNTQgKzE1NCw1NCBA
QCBib29sIElubGluZVRleHRCb3g6OmlzU2VsZWN0ZWQodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwg
dW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbgogICAgIHJldHVybiBjbGFtcGVkT2Zmc2V0KHN0YXJ0
UG9zaXRpb24pIDwgY2xhbXBlZE9mZnNldChlbmRQb3NpdGlvbik7CiB9CiAKLVJlbmRlck9iamVj
dDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUoKQorUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7
CiAgICAgYXV0byBzdGF0ZSA9IHZlcmlmeVNlbGVjdGlvblN0YXRlKHJlbmRlcmVyKCkuc2VsZWN0
aW9uU3RhdGUoKSwgcmVuZGVyZXIoKS52aWV3KCkuc2VsZWN0aW9uKCkpOwogICAgIAogICAgIC8v
IEZJWE1FOiB0aGlzIGNvZGUgbXV0YXRlcyBzZWxlY3Rpb24gc3RhdGUsIGJ1dCBpdCdzIHVzZWQg
YXQgYSBzaW1wbGUgZ2V0dGVyIGVsc2V3aGVyZQotICAgIC8vIGluIHRoaXMgZmlsZS4gVGhpcyBj
b2RlIHNob3VsZCBsaWtlbHkgbGl2ZSBpbiBTZWxlY3Rpb25SYW5nZURhdGEsIG9yIHNvbWV3aGVy
ZSBlbHNlLgorICAgIC8vIGluIHRoaXMgZmlsZS4gVGhpcyBjb2RlIHNob3VsZCBsaWtlbHkgbGl2
ZSBpbiBIaWdobGlnaHREYXRhLCBvciBzb21ld2hlcmUgZWxzZS4KICAgICAvLyA8cmRhcjovL3By
b2JsZW0vNTgxMjU5Nzg+CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwNTUyOAogICAgIC8vIElmIHRoZXJlIGFyZSBlbGxpcHNpcyBmb2xsb3dpbmcsIG1h
a2Ugc3VyZSB0aGVpciBzZWxlY3Rpb24gaXMgdXBkYXRlZC4KICAgICBpZiAobV90cnVuY2F0aW9u
ICE9IGNOb1RydW5jYXRpb24gJiYgcm9vdCgpLmVsbGlwc2lzQm94KCkpIHsKICAgICAgICAgRWxs
aXBzaXNCb3gqIGVsbGlwc2lzID0gcm9vdCgpLmVsbGlwc2lzQm94KCk7Ci0gICAgICAgIGlmIChz
dGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKKyAgICAgICAgaWYgKHN0YXRl
ICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9uZSkgewogICAgICAgICAgICAgYXV0byBbc2Vs
ZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZF0gPSBzZWxlY3Rpb25TdGFydEVuZCgpOwogICAgICAg
ICAgICAgLy8gVGhlIGVsbGlwc2lzIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHNlbGVjdGVk
IGlmIHRoZSBlbmQgb2YKICAgICAgICAgICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUg
YmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uIGFuZCB0aGUKICAgICAgICAgICAgIC8vIGJlZ2lu
bmluZyBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlZm9yZSBvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZQogICAgICAgICAgICAgLy8gdHJ1bmNhdGlvbi4KICAgICAgICAgICAgIGVsbGlwc2lzLT5zZXRT
ZWxlY3Rpb25TdGF0ZShzZWxlY3Rpb25FbmQgPj0gbV90cnVuY2F0aW9uICYmIHNlbGVjdGlvblN0
YXJ0IDw9IG1fdHJ1bmNhdGlvbiA/Ci0gICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25JbnNpZGUgOiBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpOworICAgICAgICAgICAg
ICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0SW5zaWRlIDogUmVuZGVyT2JqZWN0OjpIaWdobGln
aHROb25lKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBlbGxpcHNpcy0+c2V0U2VsZWN0
aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKTsKKyAgICAgICAgICAgIGVsbGlw
c2lzLT5zZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUpOwogICAg
IH0KICAgICAKICAgICByZXR1cm4gc3RhdGU7CiB9CiAKLVJlbmRlck9iamVjdDo6U2VsZWN0aW9u
U3RhdGUgSW5saW5lVGV4dEJveDo6dmVyaWZ5U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSBzdGF0ZSwgU2VsZWN0aW9uUmFuZ2VEYXRhJiBzZWxlY3Rpb24pIGNvbnN0
CitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIElubGluZVRleHRCb3g6OnZlcmlmeVNlbGVj
dGlvblN0YXRlKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc3RhdGUsIEhpZ2hsaWdodERh
dGEmIHNlbGVjdGlvbikgY29uc3QKIHsKLSAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGFydCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCB8fCBz
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpIHsKKyAgICBpZiAoc3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGFydCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodEVuZCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEJvdGgpIHsKICAg
ICAgICAgYXV0byBzdGFydE9mZnNldCA9IHNlbGVjdGlvbi5zdGFydE9mZnNldCgpOwogICAgICAg
ICBhdXRvIGVuZE9mZnNldCA9IHNlbGVjdGlvbi5lbmRPZmZzZXQoKTsKICAgICAgICAgLy8gVGhl
IHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5lIGJyZWFrIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFz
dCBpdHMgZW5kLgogICAgICAgICBBU1NFUlQoc3RhcnQoKSArIGxlbigpID49IChpc0xpbmVCcmVh
aygpID8gMSA6IDApKTsKICAgICAgICAgdW5zaWduZWQgbGFzdFNlbGVjdGFibGUgPSBzdGFydCgp
ICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKTsKIAotICAgICAgICBib29sIHN0YXJ0
ID0gKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kICYmIHN0YXJ0T2Zmc2V0ID49
IG1fc3RhcnQgJiYgc3RhcnRPZmZzZXQgPCBtX3N0YXJ0ICsgbV9sZW4pOwotICAgICAgICBib29s
IGVuZCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0ICYmIGVuZE9mZnNl
dCA+IG1fc3RhcnQgJiYgZW5kT2Zmc2V0IDw9IGxhc3RTZWxlY3RhYmxlKTsKKyAgICAgICAgYm9v
bCBzdGFydCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEVuZCAmJiBzdGFydE9m
ZnNldCA+PSBtX3N0YXJ0ICYmIHN0YXJ0T2Zmc2V0IDwgbV9zdGFydCArIG1fbGVuKTsKKyAgICAg
ICAgYm9vbCBlbmQgPSAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGFydCAmJiBl
bmRPZmZzZXQgPiBtX3N0YXJ0ICYmIGVuZE9mZnNldCA8PSBsYXN0U2VsZWN0YWJsZSk7CiAgICAg
ICAgIGlmIChzdGFydCAmJiBlbmQpCi0gICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uQm90aDsKKyAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRCb3RoOwogICAgICAgICBlbHNlIGlmIChzdGFydCkKLSAgICAgICAgICAgIHN0YXRlID0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydDsKKyAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGFydDsKICAgICAgICAgZWxzZSBpZiAoZW5kKQotICAgICAgICAgICAg
c3RhdGUgPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZDsKLSAgICAgICAgZWxzZSBpZiAoKHN0
YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kIHx8IHN0YXJ0T2Zmc2V0IDwgbV9zdGFy
dCkKLSAgICAgICAgICAgICYmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0
IHx8IGVuZE9mZnNldCA+IGxhc3RTZWxlY3RhYmxlKSkKLSAgICAgICAgICAgIHN0YXRlID0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGU7Ci0gICAgICAgIGVsc2UgaWYgKHN0YXRlID09IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkKLSAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25Ob25lOworICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodEVuZDsKKyAgICAgICAgZWxzZSBpZiAoKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGln
aGxpZ2h0RW5kIHx8IHN0YXJ0T2Zmc2V0IDwgbV9zdGFydCkKKyAgICAgICAgICAgICYmIChzdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXJ0IHx8IGVuZE9mZnNldCA+IGxhc3RTZWxl
Y3RhYmxlKSkKKyAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRJbnNp
ZGU7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Qm90
aCkKKyAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lOwogICAg
IH0KIAogICAgIHJldHVybiBzdGF0ZTsKQEAgLTQ5Miw3ICs0OTIsNyBAQCB2b2lkIElubGluZVRl
eHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQsCiAgICAgYm9vbCBpc1ByaW50aW5nID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLnBy
aW50aW5nKCk7CiAgICAgCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlJ3JlIHNl
bGVjdGVkLgotICAgIGJvb2wgaGF2ZVNlbGVjdGlvbiA9ICFpc1ByaW50aW5nICYmIHBhaW50SW5m
by5waGFzZSAhPSBQYWludFBoYXNlOjpUZXh0Q2xpcCAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKyAgICBib29sIGhhdmVTZWxlY3Rpb24gPSAhaXNQ
cmludGluZyAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6VGV4dENsaXAgJiYgc2Vs
ZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmU7CiAgICAgaWYgKCFo
YXZlU2VsZWN0aW9uICYmIHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNlOjpTZWxlY3Rpb24p
IHsKICAgICAgICAgLy8gV2hlbiBvbmx5IHBhaW50aW5nIHRoZSBzZWxlY3Rpb24sIGRvbid0IGJv
dGhlciB0byBwYWludCBpZiB0aGVyZSBpcyBub25lLgogICAgICAgICByZXR1cm47CkBAIC02ODQs
MTQgKzY4NCwxNCBAQCB1bnNpZ25lZCBJbmxpbmVUZXh0Qm94OjpjbGFtcGVkT2Zmc2V0KHVuc2ln
bmVkIHgpIGNvbnN0CiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gSW5saW5lVGV4dEJveDo6Y2xhbXBlZFN0YXJ0RW5kRm9yU3RhdGUodW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxl
Y3Rpb25TdGF0ZSkgY29uc3QKK3N0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElubGluZVRl
eHRCb3g6OmNsYW1wZWRTdGFydEVuZEZvclN0YXRlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBl
bmQsIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUpIGNvbnN0CiB7
Ci0gICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRl
KQorICAgIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEluc2lk
ZSkKICAgICAgICAgcmV0dXJuIHsgMCwgY2xhbXBlZE9mZnNldChtX3N0YXJ0ICsgbV9sZW4pIH07
CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
U3RhcnQpCisgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhcnQpCiAgICAgICAgIGVuZCA9IHJlbmRlcmVyKCkudGV4dCgpLmxlbmd0aCgpOwotICAgIGVs
c2UgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKQorICAg
IGVsc2UgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0RW5kKQog
ICAgICAgICBzdGFydCA9IDA7CiAgICAgcmV0dXJuIHsgY2xhbXBlZE9mZnNldChzdGFydCksIGNs
YW1wZWRPZmZzZXQoZW5kKSB9OwogfQpAQCAtNzAzLDEyICs3MDMsMTIgQEAgc3RkOjpwYWlyPHVu
c2lnbmVkLCB1bnNpZ25lZD4gSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQoKSBjb25z
dAogICAgIHJldHVybiBjbGFtcGVkU3RhcnRFbmRGb3JTdGF0ZShyZW5kZXJlcigpLnZpZXcoKS5z
ZWxlY3Rpb24oKS5zdGFydE9mZnNldCgpLCByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKS5l
bmRPZmZzZXQoKSwgc2VsZWN0aW9uU3RhdGUpOwogfQogCi1zdGQ6OnBhaXI8dW5zaWduZWQsIHVu
c2lnbmVkPiBJbmxpbmVUZXh0Qm94OjpoaWdobGlnaHRTdGFydEVuZChTZWxlY3Rpb25SYW5nZURh
dGEgJnJhbmdlRGF0YSkgY29uc3QKK3N0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElubGlu
ZVRleHRCb3g6OmhpZ2hsaWdodFN0YXJ0RW5kKEhpZ2hsaWdodERhdGEgJnJhbmdlRGF0YSkgY29u
c3QKIHsKICAgICBhdXRvIHN0YXRlID0gcmFuZ2VEYXRhLnNlbGVjdGlvblN0YXRlRm9yUmVuZGVy
ZXIocmVuZGVyZXIoKSk7CiAgICAgc3RhdGUgPSB2ZXJpZnlTZWxlY3Rpb25TdGF0ZShzdGF0ZSwg
cmFuZ2VEYXRhKTsKICAgICAKLSAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25Ob25lKQorICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUpCiAg
ICAgICAgIHJldHVybiB7MCwgMH07CiAgICAgCiAgICAgcmV0dXJuIGNsYW1wZWRTdGFydEVuZEZv
clN0YXRlKHJhbmdlRGF0YS5zdGFydE9mZnNldCgpLCByYW5nZURhdGEuZW5kT2Zmc2V0KCksIHN0
YXRlKTsKQEAgLTEwNTUsOCArMTA1NSw4IEBAIFZlY3RvcjxNYXJrZWRUZXh0PiBJbmxpbmVUZXh0
Qm94Ojpjb2xsZWN0TWFya2VkVGV4dHNGb3JIaWdobGlnaHRzKFRleHRQYWludFBoYXNlCiAgICAg
ICAgICAgICAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0ID49IDAgJiYgZW5kT2Zmc2V0ID49IDApOwog
ICAgICAgICAgICAgICAgIGlmICghc3RhcnRSZW5kZXJlciB8fCAhZW5kUmVuZGVyZXIpCiAgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGF1dG8gaGlnaGxpZ2h0
RGF0YSA9IFNlbGVjdGlvblJhbmdlRGF0YShyZW5kZXJlcigpLnZpZXcoKSk7Ci0gICAgICAgICAg
ICAgICAgaGlnaGxpZ2h0RGF0YS5zZXRDb250ZXh0KHtzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJl
ciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KGVuZE9mZnNldCl9KTsKKyAgICAgICAgICAgICAgICBhdXRvIGhpZ2hsaWdodERhdGEgPSBI
aWdobGlnaHREYXRhKHJlbmRlcmVyKCkudmlldygpKTsKKyAgICAgICAgICAgICAgICBoaWdobGln
aHREYXRhLnNldFJlbmRlclJhbmdlKHtzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9m
ZnNldCl9KTsKICAgICAgICAgICAgICAgICBhdXRvIFtoaWdobGlnaHRTdGFydCwgaGlnaGxpZ2h0
RW5kXSA9IGhpZ2hsaWdodFN0YXJ0RW5kKGhpZ2hsaWdodERhdGEpOwogICAgICAgICAgICAgICAg
IGlmIChoaWdobGlnaHRTdGFydCA8IGhpZ2hsaWdodEVuZCkKICAgICAgICAgICAgICAgICAgICAg
bWFya2VkVGV4dHMuYXBwZW5kKHsgaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZCwgTWFya2Vk
VGV4dDo6SGlnaGxpZ2h0LCBudWxscHRyLCBoaWdobGlnaHQua2V5IH0pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggNDYyMThiNmY2YzQ5MTY3MGFiMjkzZjlm
MThjNmQxNTA2NGE5YWY0MC4uNDJkNzQ1NWM4NTZjZmJmNjU5NDBjMTYyZjY4NDExMmFhODM5NGI5
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0xMjEsNyAr
MTIxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJl
Y3QodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3Q7CiAgICAgYm9vbCBp
c1NlbGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0aW9uKSBj
b25zdDsKICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBzZWxlY3Rpb25TdGFydEVu
ZCgpIGNvbnN0OwotICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGhpZ2hsaWdodFN0
YXJ0RW5kKFNlbGVjdGlvblJhbmdlRGF0YSYpIGNvbnN0OworICAgIHN0ZDo6cGFpcjx1bnNpZ25l
ZCwgdW5zaWduZWQ+IGhpZ2hsaWdodFN0YXJ0RW5kKEhpZ2hsaWdodERhdGEmKSBjb25zdDsKIAog
cHJvdGVjdGVkOgogICAgIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQm
LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSkgb3ZlcnJpZGU7CkBA
IC0xMzQsMTEgKzEzNCwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgZXh0cmFjdExpbmUoKSBmaW5h
bDsKICAgICB2b2lkIGF0dGFjaExpbmUoKSBmaW5hbDsKICAgICAKLSAgICBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXRlIHZlcmlmeVNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uU3RhdGUsIFNlbGVjdGlvblJhbmdlRGF0YSYpIGNvbnN0OwotICAgIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+IGNsYW1wZWRTdGFydEVuZEZvclN0YXRlKHVuc2lnbmVkLCB1bnNpZ25l
ZCwgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSkgY29uc3Q7CisgICAgUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZSB2ZXJpZnlTZWxlY3Rpb25TdGF0ZShSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodFN0YXRlLCBIaWdobGlnaHREYXRhJikgY29uc3Q7CisgICAgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gY2xhbXBlZFN0YXJ0RW5kRm9yU3RhdGUodW5zaWduZWQsIHVuc2lnbmVkLCBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlKSBjb25zdDsKIAogcHVibGljOgotICAgIFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBmaW5hbDsKKyAgICBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgZmluYWw7CiAKIHByaXZh
dGU6CiAgICAgdm9pZCBjbGVhclRydW5jYXRpb24oKSBmaW5hbCB7IG1fdHJ1bmNhdGlvbiA9IGNO
b1RydW5jYXRpb247IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCmlu
ZGV4IDJmM2ZhOTViM2VjMDQ0NzFlYzE4M2U1MTc1ZjVkN2FhYTYxNTBhZmQuLjNhYjEwMmFhMjU0
ZjczOTUwNmIwZjcxOGY0NjUzMmI5ZTEyZTBlOWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcApAQCAtMTQwMCw3ICsxNDAwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6
c2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgY29uc3QKICAgICBpZiAoc2V0dGluZ3MoKS5zZWxl
Y3Rpb25QYWludGluZ1dpdGhvdXRTZWxlY3Rpb25HYXBzRW5hYmxlZCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25l
ICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYgaXNTZWxl
Y3Rpb25Sb290KCk7CisgICAgcmV0dXJuIHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0Tm9u
ZSAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlICYmIGlzU2Vs
ZWN0aW9uUm9vdCgpOwogfQogCiBib29sIFJlbmRlckJsb2NrOjppc1NlbGVjdGlvblJvb3QoKSBj
b25zdApAQCAtMTU1MCw3ICsxNTUwLDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlv
bkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHIKICAgICAg
ICAgcmVzdWx0ID0gYmxvY2tTZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2lj
YWxQb3NpdGlvbiwgb2Zmc2V0RnJvbVJvb3RCbG9jaywgbGFzdExvZ2ljYWxUb3AsIGxhc3RMb2dp
Y2FsTGVmdCwgbGFzdExvZ2ljYWxSaWdodCwgY2FjaGUsIHBhaW50SW5mbyk7CiAKICAgICAvLyBG
aWxsIHRoZSB2ZXJ0aWNhbCBnYXAgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbSBvZiBvdXIgYmxv
Y2sgaWYgdGhlIHNlbGVjdGlvbiBleHRlbmRzIHBhc3Qgb3VyIGJsb2NrLgotICAgIGlmICgmcm9v
dEJsb2NrID09IHRoaXMgJiYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uQm90aCAmJiBz
ZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbkVuZCkgJiYgIWlzUnVieUJhc2UoKSAmJiAhaXNS
dWJ5VGV4dCgpKSB7CisgICAgaWYgKCZyb290QmxvY2sgPT0gdGhpcyAmJiAoc2VsZWN0aW9uU3Rh
dGUoKSAhPSBIaWdobGlnaHRCb3RoICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0RW5k
KSAmJiAhaXNSdWJ5QmFzZSgpICYmICFpc1J1YnlUZXh0KCkpIHsKICAgICAgICAgcmVzdWx0LnVu
aXRlQ2VudGVyKGJsb2NrU2VsZWN0aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQ
b3NpdGlvbiwgb2Zmc2V0RnJvbVJvb3RCbG9jaywKICAgICAgICAgICAgIGxhc3RMb2dpY2FsVG9w
LCBsYXN0TG9naWNhbExlZnQsIGxhc3RMb2dpY2FsUmlnaHQsIGxvZ2ljYWxIZWlnaHQoKSwgY2Fj
aGUsIHBhaW50SW5mbykpOwogICAgIH0KQEAgLTE1NzEsNyArMTU3MSw3IEBAIEdhcFJlY3RzIFJl
bmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29u
c3QgTGF5b3V0UG9pCiAKICAgICAvLyBKdW1wIHJpZ2h0IHRvIHRoZSBmaXJzdCBibG9jayBjaGls
ZCB0aGF0IGNvbnRhaW5zIHNvbWUgc2VsZWN0ZWQgb2JqZWN0cy4KICAgICBSZW5kZXJCb3gqIGN1
cnI7Ci0gICAgZm9yIChjdXJyID0gZmlyc3RDaGlsZEJveCgpOyBjdXJyICYmIGN1cnItPnNlbGVj
dGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZTsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nQm94
KCkpIHsgfQorICAgIGZvciAoY3VyciA9IGZpcnN0Q2hpbGRCb3goKTsgY3VyciAmJiBjdXJyLT5z
ZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodE5vbmU7IGN1cnIgPSBjdXJyLT5uZXh0U2libGlu
Z0JveCgpKSB7IH0KICAgICAKICAgICBpZiAoIWN1cnIpCiAgICAgICAgIHJldHVybiByZXN1bHQ7
CkBAIC0xNTc5LDggKzE1NzksOCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rp
b25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaQogICAgIExvZ2lj
YWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMgY2hpbGRDYWNoZSgqdGhpcywgY2FjaGUpOwogCiAgICAg
Zm9yIChib29sIHNhd1NlbGVjdGlvbkVuZCA9IGZhbHNlOyBjdXJyICYmICFzYXdTZWxlY3Rpb25F
bmQ7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZ0JveCgpKSB7Ci0gICAgICAgIFNlbGVjdGlvblN0
YXRlIGNoaWxkU3RhdGUgPSBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpOwotICAgICAgICBpZiAoY2hp
bGRTdGF0ZSA9PSBTZWxlY3Rpb25Cb3RoIHx8IGNoaWxkU3RhdGUgPT0gU2VsZWN0aW9uRW5kKQor
ICAgICAgICBIaWdobGlnaHRTdGF0ZSBjaGlsZFN0YXRlID0gY3Vyci0+c2VsZWN0aW9uU3RhdGUo
KTsKKyAgICAgICAgaWYgKGNoaWxkU3RhdGUgPT0gSGlnaGxpZ2h0Qm90aCB8fCBjaGlsZFN0YXRl
ID09IEhpZ2hsaWdodEVuZCkKICAgICAgICAgICAgIHNhd1NlbGVjdGlvbkVuZCA9IHRydWU7CiAK
ICAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSkKQEAg
LTE1OTUsMTAgKzE1OTUsMTAgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9u
R2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAgICAgICAgfQog
CiAgICAgICAgIGJvb2wgcGFpbnRzT3duU2VsZWN0aW9uID0gY3Vyci0+c2hvdWxkUGFpbnRTZWxl
Y3Rpb25HYXBzKCkgfHwgY3Vyci0+aXNUYWJsZSgpOyAvLyBGSVhNRTogRXZlbnR1YWxseSB3ZSB3
b24ndCBzcGVjaWFsLWNhc2UgdGFibGUgbGlrZSB0aGlzLgotICAgICAgICBib29sIGZpbGxCbG9j
a0dhcHMgPSAocGFpbnRzT3duU2VsZWN0aW9uIHx8IChjdXJyLT5jYW5CZVNlbGVjdGlvbkxlYWYo
KSAmJiBjaGlsZFN0YXRlICE9IFNlbGVjdGlvbk5vbmUpKSAmJiAhaXNSdWJ5QmFzZSgpICYmICFp
c1J1YnlUZXh0KCk7CisgICAgICAgIGJvb2wgZmlsbEJsb2NrR2FwcyA9IChwYWludHNPd25TZWxl
Y3Rpb24gfHwgKGN1cnItPmNhbkJlU2VsZWN0aW9uTGVhZigpICYmIGNoaWxkU3RhdGUgIT0gSGln
aGxpZ2h0Tm9uZSkpICYmICFpc1J1YnlCYXNlKCkgJiYgIWlzUnVieVRleHQoKTsKICAgICAgICAg
aWYgKGZpbGxCbG9ja0dhcHMpIHsKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZmlsbCB0aGUg
dmVydGljYWwgZ2FwIGFib3ZlIHRoaXMgb2JqZWN0LgotICAgICAgICAgICAgaWYgKGNoaWxkU3Rh
dGUgPT0gU2VsZWN0aW9uRW5kIHx8IGNoaWxkU3RhdGUgPT0gU2VsZWN0aW9uSW5zaWRlKSB7Cisg
ICAgICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9PSBIaWdobGlnaHRFbmQgfHwgY2hpbGRTdGF0ZSA9
PSBIaWdobGlnaHRJbnNpZGUpIHsKICAgICAgICAgICAgICAgICAvLyBGaWxsIHRoZSBnYXAgYWJv
dmUgdGhlIG9iamVjdC4KICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGVDZW50ZXIoYmxvY2tT
ZWxlY3Rpb25HYXAocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBvZmZzZXRG
cm9tUm9vdEJsb2NrLAogICAgICAgICAgICAgICAgICAgICBsYXN0TG9naWNhbFRvcCwgbGFzdExv
Z2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBjdXJyLT5sb2dpY2FsVG9wKCksIGNhY2hlLCBw
YWludEluZm8pKTsKQEAgLTE2MDYsOCArMTYwNiw4IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpi
bG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9p
CiAKICAgICAgICAgICAgIC8vIE9ubHkgZmlsbCBzaWRlIGdhcHMgZm9yIG9iamVjdHMgdGhhdCBw
YWludCB0aGVpciBvd24gc2VsZWN0aW9uIGlmIHdlIGtub3cgZm9yIHN1cmUgdGhlIHNlbGVjdGlv
biBpcyBnb2luZyB0byBleHRlbmQgYWxsIHRoZSB3YXkgKnBhc3QqCiAgICAgICAgICAgICAvLyBv
dXIgb2JqZWN0LiAgV2Uga25vdyB0aGlzIGlmIHRoZSBzZWxlY3Rpb24gZGlkIG5vdCBlbmQgaW5z
aWRlIG91ciBvYmplY3QuCi0gICAgICAgICAgICBpZiAocGFpbnRzT3duU2VsZWN0aW9uICYmIChj
aGlsZFN0YXRlID09IFNlbGVjdGlvblN0YXJ0IHx8IHNhd1NlbGVjdGlvbkVuZCkpCi0gICAgICAg
ICAgICAgICAgY2hpbGRTdGF0ZSA9IFNlbGVjdGlvbk5vbmU7CisgICAgICAgICAgICBpZiAocGFp
bnRzT3duU2VsZWN0aW9uICYmIChjaGlsZFN0YXRlID09IEhpZ2hsaWdodFN0YXJ0IHx8IHNhd1Nl
bGVjdGlvbkVuZCkpCisgICAgICAgICAgICAgICAgY2hpbGRTdGF0ZSA9IEhpZ2hsaWdodE5vbmU7
CiAKICAgICAgICAgICAgIC8vIEZpbGwgc2lkZSBnYXBzIG9uIHRoaXMgb2JqZWN0IGJhc2VkIG9m
ZiBpdHMgc3RhdGUuCiAgICAgICAgICAgICBib29sIGxlZnRHYXAsIHJpZ2h0R2FwOwpAQCAtMTYy
NCw3ICsxNjI0LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwcyhS
ZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAgICAgICAgICAgIGxhc3RM
b2dpY2FsVG9wID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9v
dEJsb2NrKSArIGN1cnItPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgICAgIGxhc3RMb2dpY2Fs
TGVmdCA9IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+bG9naWNh
bEJvdHRvbSgpLCBjYWNoZSk7CiAgICAgICAgICAgICBsYXN0TG9naWNhbFJpZ2h0ID0gbG9naWNh
bFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+bG9naWNhbEJvdHRvbSgpLCBj
YWNoZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGRTdGF0ZSAhPSBTZWxlY3Rpb25Ob25lICYm
IGlzPFJlbmRlckJsb2NrPigqY3VycikpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZFN0YXRl
ICE9IEhpZ2hsaWdodE5vbmUgJiYgaXM8UmVuZGVyQmxvY2s+KCpjdXJyKSkgewogICAgICAgICAg
ICAgLy8gV2UgbXVzdCBiZSBhIGJsb2NrIHRoYXQgaGFzIHNvbWUgc2VsZWN0ZWQgb2JqZWN0IGlu
c2lkZSBpdCwgc28gcmVjdXIuCiAgICAgICAgICAgICByZXN1bHQudW5pdGUoZG93bmNhc3Q8UmVu
ZGVyQmxvY2s+KCpjdXJyKS5zZWxlY3Rpb25HYXBzKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2lj
YWxQb3NpdGlvbiwgTGF5b3V0U2l6ZShvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkgKyBjdXJy
LT54KCksIG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCkgKyBjdXJyLT55KCkpLAogICAgICAg
ICAgICAgICAgIGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9naWNhbExlZnQsIGxhc3RMb2dpY2FsUmln
aHQsIGNoaWxkQ2FjaGUsIHBhaW50SW5mbykpOwpAQCAtMTY4OCwxNSArMTY4OCwxMSBAQCBMYXlv
dXRSZWN0IFJlbmRlckJsb2NrOjpsb2dpY2FsUmlnaHRTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2sm
IHJvb3RCbG9jaywgY29uc3QgTAogICAgIHJldHVybiBnYXBSZWN0OwogfQogCi12b2lkIFJlbmRl
ckJsb2NrOjpnZXRTZWxlY3Rpb25HYXBJbmZvKFNlbGVjdGlvblN0YXRlIHN0YXRlLCBib29sJiBs
ZWZ0R2FwLCBib29sJiByaWdodEdhcCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmdldFNlbGVjdGlvbkdh
cEluZm8oSGlnaGxpZ2h0U3RhdGUgc3RhdGUsIGJvb2wmIGxlZnRHYXAsIGJvb2wmIHJpZ2h0R2Fw
KQogewogICAgIGJvb2wgbHRyID0gc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7Ci0g
ICAgbGVmdEdhcCA9IChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSkgfHwK
LSAgICAgICAgICAgICAgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kICYmIGx0
cikgfHwKLSAgICAgICAgICAgICAgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
cnQgJiYgIWx0cik7Ci0gICAgcmlnaHRHYXAgPSAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25JbnNpZGUpIHx8Ci0gICAgICAgICAgICAgICAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGFydCAmJiBsdHIpIHx8Ci0gICAgICAgICAgICAgICAoc3RhdGUgPT0gUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25FbmQgJiYgIWx0cik7CisgICAgbGVmdEdhcCA9IChzdGF0ZSA9PSBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodEluc2lkZSkgfHwgKHN0YXRlID09IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0RW5kICYmIGx0cikgfHwgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhcnQgJiYgIWx0cik7CisgICAgcmlnaHRHYXAgPSAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRJbnNpZGUpIHx8IChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXJ0
ICYmIGx0cikgfHwgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0RW5kICYmICFsdHIp
OwogfQogCiBMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNl
dChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBMYXlvdXRVbml0IHBvc2l0aW9uLCBjb25zdCBMb2dp
Y2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzJiBjYWNoZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgKaW5kZXggYTA1MTUxNzI0MmI3NmY3NWJjMmMxZjEwNTEyMGRmMWFkZTYzYzc4
ZS4uZGYwMTlmNzY0NWM5OTExNWFmMWIxMWVhMGM2MWNmYjJhM2Q3ZGJlYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIFJlbmRlckJveE1vZGVsT2JqZWN0KiBzZWxPYmosIExheW91dFVuaXQgbG9naWNhbExl
ZnQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0LCBjb25z
dCBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVzJiwgY29uc3QgUGFpbnRJbmZvKik7CiAgICAg
TGF5b3V0UmVjdCBsb2dpY2FsUmlnaHRTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2smIHJvb3RCbG9j
aywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0IExh
eW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAgIFJlbmRlckJveE1vZGVsT2Jq
ZWN0KiBzZWxPYmosIExheW91dFVuaXQgbG9naWNhbFJpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxU
b3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNl
dENhY2hlcyYsIGNvbnN0IFBhaW50SW5mbyopOwotICAgIHZvaWQgZ2V0U2VsZWN0aW9uR2FwSW5m
byhTZWxlY3Rpb25TdGF0ZSwgYm9vbCYgbGVmdEdhcCwgYm9vbCYgcmlnaHRHYXApOworICAgIHZv
aWQgZ2V0U2VsZWN0aW9uR2FwSW5mbyhIaWdobGlnaHRTdGF0ZSwgYm9vbCYgbGVmdEdhcCwgYm9v
bCYgcmlnaHRHYXApOwogICAgIGJvb2wgaXNTZWxlY3Rpb25Sb290KCkgY29uc3Q7CiAKICAgICBM
YXlvdXRSZWN0IGxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3QoY29uc3QgTGF5b3V0UG9pbnQmIHBo
eXNpY2FsUG9zaXRpb24sIGNvbnN0IExheW91dFJlY3QmIGxvZ2ljYWxSZWN0KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKaW5kZXggYjgyMGFhN2U2MWYz
OTY2ZmM4Mzc2YWZlYmExMjZiYWUxYjY2Nzc0MS4uNjhlNDdlYzQyYzRkNTQ5ZDYxMDFhNmJkNjhm
ZjJhZDMwYjk5ZmNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHAKQEAgLTMxNzQsOSArMzE3NCw5IEBAIE9wdGlvbmFsPGludD4gUmVuZGVyQmxvY2tG
bG93OjppbmxpbmVCbG9ja0Jhc2VsaW5lKExpbmVEaXJlY3Rpb25Nb2RlIGxpbmVEaXJlY3RpCiAg
ICAgcmV0dXJuIHN0eWxlKCkub3ZlcmZsb3dZKCkgPT0gT3ZlcmZsb3c6OlZpc2libGUgPyBsYXN0
QmFzZWxpbmUgOiBzdGQ6Om1pbihib3hIZWlnaHQsIGxhc3RCYXNlbGluZSk7CiB9CiAKLXZvaWQg
UmVuZGVyQmxvY2tGbG93OjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkK
K3ZvaWQgUmVuZGVyQmxvY2tGbG93OjpzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSBz
dGF0ZSkKIHsKLSAgICBpZiAoc3RhdGUgIT0gU2VsZWN0aW9uTm9uZSkKKyAgICBpZiAoc3RhdGUg
IT0gSGlnaGxpZ2h0Tm9uZSkKICAgICAgICAgZW5zdXJlTGluZUJveGVzKCk7CiAgICAgUmVuZGVy
Qm94TW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKHN0YXRlKTsKIH0KQEAgLTMxODgsNyAr
MzE4OCw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrRmxvdzo6aW5saW5lU2VsZWN0aW9uR2FwcyhS
ZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvCiAKICAgICBHYXBSZWN0cyByZXN1bHQ7
CiAKLSAgICBib29sIGNvbnRhaW5zU3RhcnQgPSBzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlv
blN0YXJ0IHx8IHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uQm90aDsKKyAgICBib29sIGNv
bnRhaW5zU3RhcnQgPSBzZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodFN0YXJ0IHx8IHNlbGVj
dGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0Qm90aDsKIAogICAgIGlmICghaGFzTGluZXMoKSkgewog
ICAgICAgICBpZiAoY29udGFpbnNTdGFydCkgewpAQCAtMzIxMCw3ICszMjEwLDcgQEAgR2FwUmVj
dHMgUmVuZGVyQmxvY2tGbG93OjppbmxpbmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290
QmxvY2ssIGNvbnN0IExheW8KICAgICAgICAgTGF5b3V0VW5pdCBzZWxIZWlnaHQgPSBjdXJyLT5z
ZWxlY3Rpb25IZWlnaHRBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCk7CiAKICAgICAgICAgaWYg
KCFjb250YWluc1N0YXJ0ICYmICFsYXN0U2VsZWN0ZWRMaW5lICYmCi0gICAgICAgICAgICBzZWxl
Y3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvblN0YXJ0ICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gU2Vs
ZWN0aW9uQm90aCAmJiAhaXNSdWJ5QmFzZSgpKQorICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUo
KSAhPSBIaWdobGlnaHRTdGFydCAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodEJvdGgg
JiYgIWlzUnVieUJhc2UoKSkKICAgICAgICAgICAgIHJlc3VsdC51bml0ZUNlbnRlcihibG9ja1Nl
bGVjdGlvbkdhcChyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIG9mZnNldEZy
b21Sb290QmxvY2ssIGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9naWNhbExlZnQsIGxhc3RMb2dpY2Fs
UmlnaHQsIHNlbFRvcCwgY2FjaGUsIHBhaW50SW5mbykpOwogICAgICAgICAKICAgICAgICAgTGF5
b3V0UmVjdCBsb2dpY2FsUmVjdCB7IExheW91dFVuaXQoY3Vyci0+bG9naWNhbExlZnQoKSksIHNl
bFRvcCwgTGF5b3V0VW5pdChjdXJyLT5sb2dpY2FsV2lkdGgoKSksIHNlbFRvcCArIHNlbEhlaWdo
dCB9OwpAQCAtMzIyNyw3ICszMjI3LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2tGbG93Ojppbmxp
bmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW8KICAgICAg
ICAgLy8gVmlzaWJsZVNlbGVjdGlvbiBtdXN0IHN0YXJ0IGp1c3QgYWZ0ZXIgb3VyIGxhc3QgbGlu
ZS4KICAgICAgICAgbGFzdFNlbGVjdGVkTGluZSA9IGxhc3RSb290Qm94KCk7CiAKLSAgICBpZiAo
bGFzdFNlbGVjdGVkTGluZSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbkVuZCAmJiBz
ZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbkJvdGgpIHsKKyAgICBpZiAobGFzdFNlbGVjdGVk
TGluZSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodEVuZCAmJiBzZWxlY3Rpb25TdGF0
ZSgpICE9IEhpZ2hsaWdodEJvdGgpIHsKICAgICAgICAgLy8gVXBkYXRlIG91ciBsYXN0WSB0byBi
ZSB0aGUgYm90dG9tIG9mIHRoZSBsYXN0IHNlbGVjdGVkIGxpbmUuCiAgICAgICAgIGxhc3RMb2dp
Y2FsVG9wID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJs
b2NrKSArIGxhc3RTZWxlY3RlZExpbmUtPnNlbGVjdGlvbkJvdHRvbSgpOwogICAgICAgICBsYXN0
TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdFNlbGVjdGlvbk9mZnNldChyb290QmxvY2ssIGxhc3RT
ZWxlY3RlZExpbmUtPnNlbGVjdGlvbkJvdHRvbSgpLCBjYWNoZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXggMjc3NzY3ZGUyZDk3ZDM1ODQyZTA2NWE5
YjMxMTNjMmI1M2Y5YTJiNy4uYjQyOWI3NjkyMWI3OGNhMjNiMjQ1OGIwNDI4YzhhOWJiMmI4Mzgy
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaApAQCAtNTU5
LDcgKzU1OSw3IEBAIHByaXZhdGU6CiAgICAgaW50IG1fd2lkdGhGb3JUZXh0QXV0b3NpemluZzsK
ICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudEZvclRleHRBdXRvc2l6aW5nIDogMjsKICNlbmRpZgot
ICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIGZpbmFsOworICAgIHZv
aWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIGZpbmFsOwogCiBwdWJsaWM6CiAg
ICAgLy8gRklYTUUtQkxPQ0tGTE9XOiBUaGVzZSBjYW4gYmUgbWFkZSBwcm90ZWN0ZWQgYWdhaW4g
b25jZSBhbGwgY2FsbGVycyBoYXZlIGJlZW4gbW92ZWQgaGVyZS4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCmluZGV4IDgwMTcyMWRiNTI1
YzQwNDNmMDEwZDFhNzAxMmNlZTBiYzZiMjdiMjMuLjUwODQ1N2U4OGZhMzRlZTgyYTlhM2MzZjc0
ODIyZmNiN2ZmYmIzMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCb3hNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcApAQCAtMTI5LDE0ICsxMjksMTQgQEAgc3RhdGljIEZpcnN0TGV0
dGVyUmVtYWluaW5nVGV4dE1hcCYgZmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0TWFwKCkKICAgICBy
ZXR1cm4gbWFwOwogfQogCi12b2lkIFJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25T
dGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3ZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNl
dFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQogewotICAgIGlmIChzdGF0ZSA9
PSBTZWxlY3Rpb25JbnNpZGUgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lKQor
ICAgIGlmIChzdGF0ZSA9PSBIaWdobGlnaHRJbnNpZGUgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBI
aWdobGlnaHROb25lKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoKHN0YXRlID09IFNlbGVj
dGlvblN0YXJ0ICYmIHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uRW5kKQotICAgICAgICB8
fCAoc3RhdGUgPT0gU2VsZWN0aW9uRW5kICYmIHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9u
U3RhcnQpKQotICAgICAgICBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0
ZShTZWxlY3Rpb25Cb3RoKTsKKyAgICBpZiAoKHN0YXRlID09IEhpZ2hsaWdodFN0YXJ0ICYmIHNl
bGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0RW5kKQorICAgICAgICB8fCAoc3RhdGUgPT0gSGln
aGxpZ2h0RW5kICYmIHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhcnQpKQorICAgICAg
ICBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRCb3Ro
KTsKICAgICBlbHNlCiAgICAgICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnNldFNlbGVjdGlv
blN0YXRlKHN0YXRlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaAppbmRleCBlNjBkM2MyYjM2ZTVhZTg1MmNiMzIwZDdkYjJlMTU5NWE5MTE5
ZTlmLi5hYzU5M2NhZjEzOWYxMWY4N2JjODU5NTViZDVkYWFhZDUwZGExYjY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaApAQCAtMjE1LDcg
KzIxNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoTWFw
Q29vcmRpbmF0ZXNGbGFncywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdCBvdmVycmlkZTsKIAotICAg
IHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIG92ZXJyaWRlOworICAgIHZv
aWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIG92ZXJyaWRlOwogCiAgICAgYm9v
bCBjYW5IYXZlQm94SW5mb0luRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiAhaXNGbG9hdGluZygp
ICYmICFpc1JlcGxhY2VkKCkgJiYgIWlzSW5saW5lKCkgJiYgIWlzVGFibGVDZWxsKCkgJiYgaXNS
ZW5kZXJCbG9jaygpICYmICFpc1JlbmRlclNWR0Jsb2NrKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAppbmRleCA3NDA5MGFlN2NhNTg2MjM4MTEx
MGY1ZDc1NjkzYmY0Y2E3NTU0ZDljLi43NjRlYzM2OWUyZDExNzNmYzRmOWZlY2IwYTAzNGI2OTRh
OGIwNzRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJy
ZWFrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNw
cApAQCAtMTQ3LDE0ICsxNDcsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckxpbmVCcmVhazo6
cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmQKICAgICByZXR1
cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwogfQogCi12b2lkIFJlbmRl
ckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCit2b2lk
IFJlbmRlckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUp
CiB7Ci0gICAgaWYgKHN0YXRlICE9IFNlbGVjdGlvbk5vbmUpCisgICAgaWYgKHN0YXRlICE9IEhp
Z2hsaWdodE5vbmUpCiAgICAgICAgIGVuc3VyZUxpbmVCb3hlcygpOwogICAgIFJlbmRlckJveE1v
ZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7CiAgICAgaWYgKCFtX2lubGluZUJv
eFdyYXBwZXIpCiAgICAgICAgIHJldHVybjsKLSAgICBtX2lubGluZUJveFdyYXBwZXItPnJvb3Qo
KS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlICE9IFNlbGVjdGlvbk5vbmUpOworICAgIG1f
aW5saW5lQm94V3JhcHBlci0+cm9vdCgpLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3RhdGUgIT0g
SGlnaGxpZ2h0Tm9uZSk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyTGluZUJyZWFrOjpsb2NhbENh
cmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91
dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaW5lQnJlYWsuaAppbmRleCBlZGZlZmY1NTNiM2Y3NGQ4NGQ0ZGU4OTA3NzRmZmVlMjRl
ZTNiM2NiLi4yNDI5ZjU4ZjgzOTUzZmZiNTg2OTRiNzRjYTllNDE5NDQyZDU5Yzg5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCkBAIC02OCw3ICs2OCw3IEBA
IHByaXZhdGU6CiAgICAgaW50IGNhcmV0TWF4T2Zmc2V0KCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
Ym9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCBvdmVycmlkZTsKICAgICBMYXlvdXRSZWN0
IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRV
bml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpIG92ZXJyaWRlOwotICAgIHZvaWQgc2V0U2VsZWN0
aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2VsZWN0aW9u
U3RhdGUoSGlnaGxpZ2h0U3RhdGUpIG92ZXJyaWRlOwogCiAgICAgTGF5b3V0VW5pdCBsaW5lSGVp
Z2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkg
Y29uc3Qgb3ZlcnJpZGU7CiAgICAgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBi
b29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUpIGNvbnN0
IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RNYXJrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIu
Y3BwCmluZGV4IGNlMDE5YmFhM2JkNTVhMTZlZTI0ZmFlZTZlOTc2NjI2YmNiZWFlZDQuLjNmNzdh
OGEyOTM4ZTBhMTNlMDFlMTNmYmI2N2U0NTI4NjNlZjVhNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKQEAgLTExNDcsNyArMTE0Nyw3IEBAIHZv
aWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExh
eW91dFBvaW50JiBwYWludE9mZnNlCiAgICAgaWYgKGlzSW1hZ2UoKSkgewogICAgICAgICBpZiAo
UmVmUHRyPEltYWdlPiBtYXJrZXJJbWFnZSA9IG1faW1hZ2UtPmltYWdlKHRoaXMsIG1hcmtlclJl
Y3Quc2l6ZSgpKSkKICAgICAgICAgICAgIGNvbnRleHQuZHJhd0ltYWdlKCptYXJrZXJJbWFnZSwg
bWFya2VyUmVjdCk7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5v
bmUpIHsKKyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0Tm9uZSkgewog
ICAgICAgICAgICAgTGF5b3V0UmVjdCBzZWxSZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0KCk7CiAg
ICAgICAgICAgICBzZWxSZWN0Lm1vdmVCeShib3hPcmlnaW4pOwogICAgICAgICAgICAgY29udGV4
dC5maWxsUmVjdChzbmFwcGVkSW50UmVjdChzZWxSZWN0KSwgbV9saXN0SXRlbS0+c2VsZWN0aW9u
QmFja2dyb3VuZENvbG9yKCkpOwpAQCAtMTE1NSw3ICsxMTU1LDcgQEAgdm9pZCBSZW5kZXJMaXN0
TWFya2VyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChzZWxlY3Rpb25TdGF0
ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKKyAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBIaWdo
bGlnaHROb25lKSB7CiAgICAgICAgIExheW91dFJlY3Qgc2VsUmVjdCA9IGxvY2FsU2VsZWN0aW9u
UmVjdCgpOwogICAgICAgICBzZWxSZWN0Lm1vdmVCeShib3hPcmlnaW4pOwogICAgICAgICBjb250
ZXh0LmZpbGxSZWN0KHNuYXBwZWRJbnRSZWN0KHNlbFJlY3QpLCBtX2xpc3RJdGVtLT5zZWxlY3Rp
b25CYWNrZ3JvdW5kQ29sb3IoKSk7CkBAIC0xODMzLDIwICsxODMzLDIwIEBAIEZsb2F0UmVjdCBS
ZW5kZXJMaXN0TWFya2VyOjpnZXRSZWxhdGl2ZU1hcmtlclJlY3QoKQogICAgIHJldHVybiByZWxh
dGl2ZVJlY3Q7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6c2V0U2VsZWN0aW9uU3RhdGUo
U2VsZWN0aW9uU3RhdGUgc3RhdGUpCit2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnNldFNlbGVjdGlv
blN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQogewogICAgIC8vIFRoZSBzZWxlY3Rpb24gc3Rh
dGUgZm9yIG91ciBjb250YWluaW5nIGJsb2NrIGhpZXJhcmNoeSBpcyB1cGRhdGVkIGJ5IHRoZSBi
YXNlIGNsYXNzIGNhbGwuCiAgICAgUmVuZGVyQm94OjpzZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7
CiAKICAgICBpZiAobV9pbmxpbmVCb3hXcmFwcGVyICYmIGNhblVwZGF0ZVNlbGVjdGlvbk9uUm9v
dExpbmVCb3hlcygpKQotICAgICAgICBtX2lubGluZUJveFdyYXBwZXItPnJvb3QoKS5zZXRIYXNT
ZWxlY3RlZENoaWxkcmVuKHN0YXRlICE9IFNlbGVjdGlvbk5vbmUpOworICAgICAgICBtX2lubGlu
ZUJveFdyYXBwZXItPnJvb3QoKS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlICE9IEhpZ2hs
aWdodE5vbmUpOwogfQogCiBMYXlvdXRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OnNlbGVjdGlvblJl
Y3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRlbnQpCiB7CiAgICAgQVNTRVJUKCFuZWVkc0xheW91
dCgpKTsKIAotICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmUgfHwgIWlu
bGluZUJveFdyYXBwZXIoKSkKKyAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRO
b25lIHx8ICFpbmxpbmVCb3hXcmFwcGVyKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7
CiAKICAgICBSb290SW5saW5lQm94JiByb290Qm94ID0gaW5saW5lQm94V3JhcHBlcigpLT5yb290
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtl
ci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAppbmRleCAx
NDMwNGFlNWQ4YTJiNTVhMTgzZjMyM2IxMzlhZDMzNzI1YTljZWUxLi42OTYxOGMxNGQwMTY0OWY2
MzA1ZDk4MDE0MmYxYWQ2MTVjZDhhYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlz
SW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJu
ICFpc0ltYWdlKCk7IH0KIAotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3Rh
dGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUp
IG92ZXJyaWRlOwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3Qg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNp
YmxlQ29udGVudCA9IHRydWUpIG92ZXJyaWRlOwogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFm
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDk4Y2RkOGJlZmRiYTFiYTc4MmMwM2U2YjI1MjFk
Y2E4MDc1ZmNkYWIuLmEyMjhiMDE1Njc2NjQ4NThlOTVkOTNjMzVkODQ2YTAyNGQzMGYxZmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xNDUwLDEwICsx
NDUwLDEwIEBAIFJlbmRlckVsZW1lbnQqIFJlbmRlck9iamVjdDo6Y29udGFpbmVyKGNvbnN0IFJl
bmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojpp
c1NlbGVjdGlvbkJvcmRlcigpIGNvbnN0CiB7Ci0gICAgU2VsZWN0aW9uU3RhdGUgc3QgPSBzZWxl
Y3Rpb25TdGF0ZSgpOwotICAgIHJldHVybiBzdCA9PSBTZWxlY3Rpb25TdGFydAotICAgICAgICB8
fCBzdCA9PSBTZWxlY3Rpb25FbmQKLSAgICAgICAgfHwgc3QgPT0gU2VsZWN0aW9uQm90aAorICAg
IEhpZ2hsaWdodFN0YXRlIHN0ID0gc2VsZWN0aW9uU3RhdGUoKTsKKyAgICByZXR1cm4gc3QgPT0g
SGlnaGxpZ2h0U3RhcnQKKyAgICAgICAgfHwgc3QgPT0gSGlnaGxpZ2h0RW5kCisgICAgICAgIHx8
IHN0ID09IEhpZ2hsaWdodEJvdGgKICAgICAgICAgfHwgdmlldygpLnNlbGVjdGlvbigpLnN0YXJ0
KCkgPT0gdGhpcwogICAgICAgICB8fCB2aWV3KCkuc2VsZWN0aW9uKCkuZW5kKCkgPT0gdGhpczsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBmNWQ2OWU5M2I0
ODVlYmMyNDI2OTIyYzFkOTRlMjYxOGM5NDgxZjMzLi5kZWY2OWRlM2VhMmQ0MzM4ODk5MmI1Zjkz
ZmRhM2I2MzZjOTQyMGI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CkBAIC02NCw3ICs2NCw3IEBAIGNsYXNzIFJlbmRlckxheWVyTW9kZWxPYmplY3Q7CiBjbGFzcyBS
ZW5kZXJGcmFnbWVudENvbnRhaW5lcjsKIGNsYXNzIFJlbmRlclRoZW1lOwogY2xhc3MgUmVuZGVy
VHJlZUJ1aWxkZXI7Ci1jbGFzcyBTZWxlY3Rpb25SYW5nZURhdGE7CitjbGFzcyBIaWdobGlnaHRE
YXRhOwogY2xhc3MgVHJhbnNmb3JtU3RhdGU7CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKQEAg
LTY5MywxOSArNjkzLDE5IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNGbG9hdGluZ09yT3V0T2ZG
bG93UG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0dXJuIChpc0Zsb2F0aW5nKCkgfHwgaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpOyB9CiAKLSAgICBlbnVtIFNlbGVjdGlvblN0YXRlIHsKLSAgICAgICAg
U2VsZWN0aW9uTm9uZSwgLy8gVGhlIG9iamVjdCBpcyBub3Qgc2VsZWN0ZWQuCi0gICAgICAgIFNl
bGVjdGlvblN0YXJ0LCAvLyBUaGUgb2JqZWN0IGVpdGhlciBjb250YWlucyB0aGUgc3RhcnQgb2Yg
YSBzZWxlY3Rpb24gcnVuIG9yIGlzIHRoZSBzdGFydCBvZiBhIHJ1bgotICAgICAgICBTZWxlY3Rp
b25JbnNpZGUsIC8vIFRoZSBvYmplY3QgaXMgZnVsbHkgZW5jb21wYXNzZWQgYnkgYSBzZWxlY3Rp
b24gcnVuCi0gICAgICAgIFNlbGVjdGlvbkVuZCwgLy8gVGhlIG9iamVjdCBlaXRoZXIgY29udGFp
bnMgdGhlIGVuZCBvZiBhIHNlbGVjdGlvbiBydW4gb3IgaXMgdGhlIGVuZCBvZiBhIHJ1bgotICAg
ICAgICBTZWxlY3Rpb25Cb3RoIC8vIFRoZSBvYmplY3QgY29udGFpbnMgYW4gZW50aXJlIHJ1biBv
ciBpcyB0aGUgc29sZSBzZWxlY3RlZCBvYmplY3QgaW4gdGhhdCBydW4KKyAgICBlbnVtIEhpZ2hs
aWdodFN0YXRlIHsKKyAgICAgICAgSGlnaGxpZ2h0Tm9uZSwgLy8gVGhlIG9iamVjdCBpcyBub3Qg
c2VsZWN0ZWQuCisgICAgICAgIEhpZ2hsaWdodFN0YXJ0LCAvLyBUaGUgb2JqZWN0IGVpdGhlciBj
b250YWlucyB0aGUgc3RhcnQgb2YgYSBzZWxlY3Rpb24gcnVuIG9yIGlzIHRoZSBzdGFydCBvZiBh
IHJ1bgorICAgICAgICBIaWdobGlnaHRJbnNpZGUsIC8vIFRoZSBvYmplY3QgaXMgZnVsbHkgZW5j
b21wYXNzZWQgYnkgYSBzZWxlY3Rpb24gcnVuCisgICAgICAgIEhpZ2hsaWdodEVuZCwgLy8gVGhl
IG9iamVjdCBlaXRoZXIgY29udGFpbnMgdGhlIGVuZCBvZiBhIHNlbGVjdGlvbiBydW4gb3IgaXMg
dGhlIGVuZCBvZiBhIHJ1bgorICAgICAgICBIaWdobGlnaHRCb3RoIC8vIFRoZSBvYmplY3QgY29u
dGFpbnMgYW4gZW50aXJlIHJ1biBvciBpcyB0aGUgc29sZSBzZWxlY3RlZCBvYmplY3QgaW4gdGhh
dCBydW4KICAgICB9OwogCiAgICAgLy8gVGhlIGN1cnJlbnQgc2VsZWN0aW9uIHN0YXRlIGZvciBh
biBvYmplY3QuICBGb3IgYmxvY2tzLCB0aGUgc3RhdGUgcmVmZXJzIHRvIHRoZSBzdGF0ZSBvZiB0
aGUgbGVhZgotICAgIC8vIGRlc2NlbmRhbnRzIChhcyBkZXNjcmliZWQgYWJvdmUgaW4gdGhlIFNl
bGVjdGlvblN0YXRlIGVudW0gZGVjbGFyYXRpb24pLgotICAgIFNlbGVjdGlvblN0YXRlIHNlbGVj
dGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuc2VsZWN0aW9uU3RhdGUoKTsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0
ZSkgeyBtX2JpdGZpZWxkcy5zZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7IH0KLSAgICBpbmxpbmUg
dm9pZCBzZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvblN0YXRlKTsKKyAgICAvLyBk
ZXNjZW5kYW50cyAoYXMgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBIaWdobGlnaHRTdGF0ZSBlbnVt
IGRlY2xhcmF0aW9uKS4KKyAgICBIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYml0ZmllbGRzLnNlbGVjdGlvblN0YXRlKCk7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpIHsgbV9iaXRmaWVsZHMu
c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOyB9CisgICAgaW5saW5lIHZvaWQgc2V0U2VsZWN0aW9u
U3RhdGVJZk5lZWRlZChIaWdobGlnaHRTdGF0ZSk7CiAgICAgYm9vbCBjYW5VcGRhdGVTZWxlY3Rp
b25PblJvb3RMaW5lQm94ZXMoKTsKIAogICAgIC8vIEEgc2luZ2xlIHJlY3RhbmdsZSB0aGF0IGVu
Y29tcGFzc2VzIGFsbCBvZiB0aGUgc2VsZWN0ZWQgb2JqZWN0cyB3aXRoaW4gdGhpcyBvYmplY3Qu
ICBVc2VkIHRvIGRldGVybWluZSB0aGUgdGlnaHRlc3QKQEAgLTg5NSw3ICs4OTUsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgLCBtX2NoaWxkcmVuSW5saW5lKGZhbHNlKQogICAgICAgICAgICAg
LCBtX2lzRXhjbHVkZWRGcm9tTm9ybWFsTGF5b3V0KGZhbHNlKQogICAgICAgICAgICAgLCBtX3Bv
c2l0aW9uZWRTdGF0ZShJc1N0YXRpY2FsbHlQb3NpdGlvbmVkKQotICAgICAgICAgICAgLCBtX3Nl
bGVjdGlvblN0YXRlKFNlbGVjdGlvbk5vbmUpCisgICAgICAgICAgICAsIG1fc2VsZWN0aW9uU3Rh
dGUoSGlnaGxpZ2h0Tm9uZSkKICAgICAgICAgICAgICwgbV9mcmFnbWVudGVkRmxvd1N0YXRlKE5v
dEluc2lkZUZyYWdtZW50ZWRGbG93KQogICAgICAgICAgICAgLCBtX2JveERlY29yYXRpb25TdGF0
ZShOb0JveERlY29yYXRpb25zKQogICAgICAgICB7CkBAIC05NTEsOCArOTUxLDggQEAgcHJpdmF0
ZToKICAgICAgICAgfQogICAgICAgICB2b2lkIGNsZWFyUG9zaXRpb25lZFN0YXRlKCkgeyBtX3Bv
c2l0aW9uZWRTdGF0ZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihQb3NpdGlvblR5cGU6OlN0YXRp
Yyk7IH0KIAotICAgICAgICBBTFdBWVNfSU5MSU5FIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0
YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8U2VsZWN0aW9uU3RhdGU+KG1fc2VsZWN0
aW9uU3RhdGUpOyB9Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRTZWxlY3Rpb25TdGF0
ZShTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSkgeyBtX3NlbGVjdGlvblN0YXRlID0gc2Vs
ZWN0aW9uU3RhdGU7IH0KKyAgICAgICAgQUxXQVlTX0lOTElORSBIaWdobGlnaHRTdGF0ZSBzZWxl
Y3Rpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEhpZ2hsaWdodFN0YXRlPiht
X3NlbGVjdGlvblN0YXRlKTsgfQorICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0U2VsZWN0
aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUpIHsgbV9zZWxlY3Rpb25TdGF0
ZSA9IHNlbGVjdGlvblN0YXRlOyB9CiAgICAgICAgIAogICAgICAgICBBTFdBWVNfSU5MSU5FIEZy
YWdtZW50ZWRGbG93U3RhdGUgZnJhZ21lbnRlZEZsb3dTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRpY19jYXN0PEZyYWdtZW50ZWRGbG93U3RhdGU+KG1fZnJhZ21lbnRlZEZsb3dTdGF0ZSk7IH0K
ICAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldEZyYWdtZW50ZWRGbG93U3RhdGUoRnJhZ21l
bnRlZEZsb3dTdGF0ZSBmcmFnbWVudGVkRmxvd1N0YXRlKSB7IG1fZnJhZ21lbnRlZEZsb3dTdGF0
ZSA9IGZyYWdtZW50ZWRGbG93U3RhdGU7IH0KQEAgLTEwNjcsNyArMTA2Nyw3IEBAIGlubGluZSBi
b29sIFJlbmRlck9iamVjdDo6cHJlc2VydmVzTmV3bGluZSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0
eWxlKCkucHJlc2VydmVOZXdsaW5lKCk7CiB9CiAKLWlubGluZSB2b2lkIFJlbmRlck9iamVjdDo6
c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK2lubGluZSB2
b2lkIFJlbmRlck9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChIaWdobGlnaHRTdGF0
ZSBzdGF0ZSkKIHsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBzdGF0ZSkKICAgICAgICAg
cmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKaW5k
ZXggMzM4YzMyM2NjODNjZThkNWNiZTY2Zjc5NWM5YTRiMzIxMmQ0ODZkMi4uNDQ0YjNhMDExNDQy
NjQwNzM2NDhmMmIxNDI2OTFiZjJkZjY4ZjY4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyUmVwbGFjZWQuY3BwCkBAIC0xMzMsNyArMTMzLDcgQEAgdm9pZCBSZW5kZXJSZXBs
YWNlZDo6aW50cmluc2ljU2l6ZUNoYW5nZWQoKQogCiBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91
bGREcmF3U2VsZWN0aW9uVGludCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHNlbGVjdGlvblN0YXRl
KCkgIT0gU2VsZWN0aW9uTm9uZSAmJiAhZG9jdW1lbnQoKS5wcmludGluZygpOworICAgIHJldHVy
biBzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodE5vbmUgJiYgIWRvY3VtZW50KCkucHJpbnRp
bmcoKTsKIH0KIAogaW5saW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50Q29udGFpbnNSZXBs
YWNlZEVsZW1lbnQoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJrZXIqPiYgbWFya2Vy
cywgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTIwMyw3ICsyMDMsNyBAQCB2b2lkIFJlbmRl
clJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQm
IHBhaW50T2Zmc2V0KQogICAgIAogICAgIGJvb2wgZHJhd1NlbGVjdGlvblRpbnQgPSBzaG91bGRE
cmF3U2VsZWN0aW9uVGludCgpOwogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFz
ZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlv
bk5vbmUpCisgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodE5vbmUpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRyYXdTZWxlY3Rpb25UaW50ID0gZmFsc2U7CiAg
ICAgfQpAQCAtNjQ4LDcgKzY0OCw3IEBAIExheW91dFJlY3QgUmVuZGVyUmVwbGFjZWQ6OmxvY2Fs
U2VsZWN0aW9uUmVjdChib29sIGNoZWNrV2hldGhlclNlbGVjdGVkKSBjb25zdAogICAgIHJldHVy
biBMYXlvdXRSZWN0KG5ld0xvZ2ljYWxUb3AsIDBfbHUsIHJvb3RCb3guc2VsZWN0aW9uSGVpZ2h0
KCksIGhlaWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0aW9uU3Rh
dGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCit2b2lkIFJlbmRlclJlcGxhY2VkOjpzZXRTZWxlY3Rp
b25TdGF0ZShIaWdobGlnaHRTdGF0ZSBzdGF0ZSkKIHsKICAgICAvLyBUaGUgc2VsZWN0aW9uIHN0
YXRlIGZvciBvdXIgY29udGFpbmluZyBibG9jayBoaWVyYXJjaHkgaXMgdXBkYXRlZCBieSB0aGUg
YmFzZSBjbGFzcyBjYWxsLgogICAgIFJlbmRlckJveDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUp
OwpAQCAtNjU5LDIxICs2NTksMjEgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0aW9u
U3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCiAKIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OmlzU2Vs
ZWN0ZWQoKSBjb25zdAogewotICAgIFNlbGVjdGlvblN0YXRlIHN0YXRlID0gc2VsZWN0aW9uU3Rh
dGUoKTsKLSAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uTm9uZSkKKyAgICBIaWdobGlnaHRTdGF0
ZSBzdGF0ZSA9IHNlbGVjdGlvblN0YXRlKCk7CisgICAgaWYgKHN0YXRlID09IEhpZ2hsaWdodE5v
bmUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uSW5z
aWRlKQorICAgIGlmIChzdGF0ZSA9PSBIaWdobGlnaHRJbnNpZGUpCiAgICAgICAgIHJldHVybiB0
cnVlOwogCiAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFy
dE9mZnNldCgpOwogICAgIGF1dG8gc2VsZWN0aW9uRW5kID0gdmlldygpLnNlbGVjdGlvbigpLmVu
ZE9mZnNldCgpOwotICAgIGlmIChzdGF0ZSA9PSBTZWxlY3Rpb25TdGFydCkKKyAgICBpZiAoc3Rh
dGUgPT0gSGlnaGxpZ2h0U3RhcnQpCiAgICAgICAgIHJldHVybiAhc2VsZWN0aW9uU3RhcnQ7CiAK
ICAgICB1bnNpZ25lZCBlbmQgPSBlbGVtZW50KCktPmhhc0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQo
KS0+Y291bnRDaGlsZE5vZGVzKCkgOiAxOwotICAgIGlmIChzdGF0ZSA9PSBTZWxlY3Rpb25FbmQp
CisgICAgaWYgKHN0YXRlID09IEhpZ2hsaWdodEVuZCkKICAgICAgICAgcmV0dXJuIHNlbGVjdGlv
bkVuZCA9PSBlbmQ7Ci0gICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbkJvdGgpCisgICAgaWYgKHN0
YXRlID09IEhpZ2hsaWdodEJvdGgpCiAgICAgICAgIHJldHVybiAhc2VsZWN0aW9uU3RhcnQgJiYg
c2VsZWN0aW9uRW5kID09IGVuZDsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCmluZGV4
IDJjZjBiODdlMWNmYzNiYjc5NjE3ZjgxOTU3OTk4NTcyNWIxODQ2ZTAuLmZjNGMzMzIxMDU1OTZl
NDdjM2FmMjJiYmI0OTA3N2IzNmIzZjhmYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJSZXBsYWNlZC5oCkBAIC01NSw3ICs1NSw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1
YWwgTGF5b3V0VW5pdCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiAwX2x1
OyB9CiAKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSBvdmVycmlk
ZTsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBvdmVycmlkZTsK
IAogICAgIGJvb2wgaXNTZWxlY3RlZCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaAppbmRleCBjODhkZjVjOTZkNmMzMzIwYzAxYWQ0
M2MzNTE4OTYwMTlhYTdmMTg3Li41MzZmMGU3OTUxYzIzZGMyYTFkM2ExYjExY2I5YTgzNmIyMmMz
NzZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9u
SW5mby5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZv
LmgKQEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgUmVuZGVyU2VsZWN0aW9uSW5mb0Jhc2UgewogcHVi
bGljOgogICAgIGV4cGxpY2l0IFJlbmRlclNlbGVjdGlvbkluZm9CYXNlKFJlbmRlck9iamVjdCYg
cmVuZGVyZXIpOwogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIo
KSBjb25zdCB7IHJldHVybiBtX3JlcGFpbnRDb250YWluZXI7IH0KLSAgICBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRl
OyB9CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHJlcGFpbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0
UmVjdCYgcmVwYWludFJlY3QpOwpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdCogbV9yZXBhaW50Q29udGFpbmVyOwogCiBwcml2YXRlOgotICAg
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgbV9zdGF0ZTsKKyAgICBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlIG1fc3RhdGU7CiB9OwogCiAvLyBUaGlzIHN0cnVjdCBpcyB1c2VkIHdo
ZW4gdGhlIHNlbGVjdGlvbiBjaGFuZ2VzIHRvIGNhY2hlIHRoZSBvbGQgYW5kIG5ldyBzdGF0ZSBv
ZiB0aGUgc2VsZWN0aW9uIGZvciBlYWNoIFJlbmRlck9iamVjdC4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0LmNwcAppbmRleCA0NDg5MDkwY2UwZjdmZWVlMGE3ZDZlNDQ5MDc0NTU2
MzczMDA4ZDg2Li4wMGJkMzliOWZkMTY2NmY0NTNlNTRhMTRjOTg0ZWE5MTE0NTAwNmIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xMDkyLDkgKzEwOTIsOSBA
QCBJbnRQb2ludCBSZW5kZXJUZXh0OjpmaXJzdFJ1bkxvY2F0aW9uKCkgY29uc3QKICAgICByZXR1
cm4gSW50UG9pbnQoZmlyc3QtPnJlY3QoKS5sb2NhdGlvbigpKTsKIH0KIAotdm9pZCBSZW5kZXJU
ZXh0OjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3ZvaWQgUmVuZGVy
VGV4dDo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYg
KHN0YXRlICE9IFNlbGVjdGlvbk5vbmUpCisgICAgaWYgKHN0YXRlICE9IEhpZ2hsaWdodE5vbmUp
CiAgICAgICAgIGVuc3VyZUxpbmVCb3hlcygpOwogCiAgICAgUmVuZGVyT2JqZWN0OjpzZXRTZWxl
Y3Rpb25TdGF0ZShzdGF0ZSk7CkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBMYXlvdXRSZWN0IFJlbmRl
clRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXll
ck1vZGVsTwogICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAgICAgQVNTRVJUKCFzaW1wbGVM
aW5lTGF5b3V0KCkpOwogCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9u
ZSkKKyAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHROb25lKQogICAgICAgICBy
ZXR1cm4gTGF5b3V0UmVjdCgpOwogICAgIGlmICghY29udGFpbmluZ0Jsb2NrKCkpCiAgICAgICAg
IHJldHVybiBMYXlvdXRSZWN0KCk7CkBAIC0xNDU1LDE2ICsxNDU1LDE2IEBAIExheW91dFJlY3Qg
UmVuZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKGNvbnN0IFJlbmRl
ckxheWVyTW9kZWxPCiAgICAgLy8gV2UgaW5jbHVkZSBhIHNlbGVjdGlvbiB3aGlsZSBlbmRQb3Mg
PiAwCiAgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQ7CiAgICAgdW5zaWduZWQgZW5kT2Zmc2V0Owot
ICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkluc2lkZSkgeworICAgIGlmIChz
ZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodEluc2lkZSkgewogICAgICAgICAvLyBXZSBhcmUg
ZnVsbHkgc2VsZWN0ZWQuCiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKICAgICAgICAgZW5kT2Zm
c2V0ID0gdGV4dCgpLmxlbmd0aCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHN0YXJ0T2Zmc2V0
ID0gdmlldygpLnNlbGVjdGlvbigpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgICAgIGVuZE9mZnNldCA9
IHZpZXcoKS5zZWxlY3Rpb24oKS5lbmRPZmZzZXQoKTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgPT0gU2VsZWN0aW9uU3RhcnQpCisgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09
IEhpZ2hsaWdodFN0YXJ0KQogICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGV4dCgpLmxlbmd0aCgp
OwotICAgICAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkVuZCkKKyAg
ICAgICAgZWxzZSBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRFbmQpCiAgICAgICAg
ICAgICBzdGFydE9mZnNldCA9IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuaAppbmRleCA3YzdhMWQ3NmNmMjFmNzY2YjEzZWY1M2VmNjBlMDE1Y2UyZTkyZTAxLi5i
MDgwNzI0ZDc4MWYzN2E5NmExNDU4MTZmM2VmMDViYjJhOWEwMmU1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmgKQEAgLTIwNyw3ICsyMDcsNyBAQCBwcml2YXRlOgogCiAgICAg
VmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgTGF5b3V0UG9pbnQmLCBjb25z
dCBSZW5kZXJGcmFnbWVudENvbnRhaW5lciopIG92ZXJyaWRlOwogCi0gICAgdm9pZCBzZXRTZWxl
Y3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSkgZmluYWw7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25T
dGF0ZShIaWdobGlnaHRTdGF0ZSkgZmluYWw7CiAgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0
Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBib29sIGNsaXBUb1Zpc2libGVDb250ZW50ID0gdHJ1ZSkgZmluYWw7CiAgICAgTGF5b3V0UmVj
dCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0
VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gbnVsbHB0cikgb3ZlcnJpZGU7CiAgICAgTGF5
b3V0UmVjdCBjbGlwcGVkT3ZlcmZsb3dSZWN0Rm9yUmVwYWludChjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyKSBjb25zdCBmaW5hbDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAppbmRleCAyMDRkZDY0OGY4
ODhkMzYzZDBmM2IyZTY3ZDlmMzY1ZGJiMmY4ZDhhLi42MWY1MThiNTRlMjJmZTU4YzM2ZjNkZmIy
OWIzZjhiOWMxMjMzZmQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dExpbmVCb3hlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRMaW5lQm94ZXMuY3BwCkBAIC0zNDIsMjIgKzM0MiwyMiBAQCBWaXNpYmxlUG9zaXRpb24g
UmVuZGVyVGV4dExpbmVCb3hlczo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBSZW5kZXJUZXh0JiBy
ZW5kZXJlcgogICAgIHJldHVybiByZW5kZXJlci5jcmVhdGVWaXNpYmxlUG9zaXRpb24oMCwgRE9X
TlNUUkVBTSk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dExpbmVCb3hlczo6c2V0U2VsZWN0aW9uU3Rh
dGUoUmVuZGVyVGV4dCYgcmVuZGVyZXIsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc3Rh
dGUpCit2b2lkIFJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRl
eHQmIHJlbmRlcmVyLCBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHN0YXRlKQogewotICAg
IGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSB8fCBzdGF0ZSA9PSBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKKyAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRJbnNpZGUgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRO
b25lKSB7CiAgICAgICAgIGZvciAoYXV0byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gt
Pm5leHRUZXh0Qm94KCkpCi0gICAgICAgICAgICBib3gtPnJvb3QoKS5zZXRIYXNTZWxlY3RlZENo
aWxkcmVuKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKTsKKyAgICAgICAg
ICAgIGJveC0+cm9vdCgpLnNldEhhc1NlbGVjdGVkQ2hpbGRyZW4oc3RhdGUgPT0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRJbnNpZGUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0
byBzdGFydCA9IHJlbmRlcmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydE9mZnNldCgpOwogICAg
IGF1dG8gZW5kID0gcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLmVuZE9mZnNldCgpOwotICAg
IGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KSB7CisgICAgaWYgKHN0
YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhcnQpIHsKICAgICAgICAgZW5kID0gcmVu
ZGVyZXIudGV4dCgpLmxlbmd0aCgpOwogICAgICAgICAvLyB0byBoYW5kbGUgc2VsZWN0aW9uIGZy
b20gZW5kIG9mIHRleHQgdG8gZW5kIG9mIGxpbmUKICAgICAgICAgaWYgKHN0YXJ0ICYmIHN0YXJ0
ID09IGVuZCkKICAgICAgICAgICAgIHN0YXJ0ID0gZW5kIC0gMTsKLSAgICB9IGVsc2UgaWYgKHN0
YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKQorICAgIH0gZWxzZSBpZiAoc3RhdGUg
PT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRFbmQpCiAgICAgICAgIHN0YXJ0ID0gMDsKIAogICAg
IGZvciAoYXV0byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJv
eGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCmlu
ZGV4IGU5YTY2MDU0OWQxOGUzZTdjNjM1MjBjMTVjZTIzMzE1YjVmOGU2MWEuLjJlYjVkZDM2MGE3
NDBkZjNkYzVlOTdiNzc5MWQ1MmU2NzlkMTgzYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuaApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAK
ICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBSZW5kZXJUZXh0Jiwg
Y29uc3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUo
UmVuZGVyVGV4dCYsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUpOworICAgIHZvaWQgc2V0
U2VsZWN0aW9uU3RhdGUoUmVuZGVyVGV4dCYsIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUp
OwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1
bnNpZ25lZCBlbmQpOwogICAgIHZvaWQgY29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UodW5z
aWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cyk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCBjZDhhZjZl
MmE3ODVmMDE2OTI0N2IwZDFmMmNhYTc3YzkzYzYxNDBmLi4yNjQyMGYwYWRlMmZmYzkxNzYyM2Ix
NjIzNmU1YjE2NGY2NjM1ZTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRo
ZW1lTWFjLm1tCkBAIC0yOTA3LDcgKzI5MDcsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWlu
dEF0dGFjaG1lbnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbgog
ICAgIGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQgPSBkb3duY2FzdDxSZW5kZXJB
dHRhY2htZW50PihyZW5kZXJlcik7CiAKICAgICBhdXRvIGxheW91dFN0eWxlID0gQXR0YWNobWVu
dExheW91dFN0eWxlOjpOb25TZWxlY3RlZDsKLSAgICBpZiAoYXR0YWNobWVudC5zZWxlY3Rpb25T
dGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSAmJiBwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKQorICAgIGlmIChhdHRhY2htZW50LnNlbGVjdGlvblN0
YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lICYmIHBhaW50SW5mby5waGFzZSAh
PSBQYWludFBoYXNlOjpTZWxlY3Rpb24pCiAgICAgICAgIGxheW91dFN0eWxlID0gQXR0YWNobWVu
dExheW91dFN0eWxlOjpTZWxlY3RlZDsKIAogICAgIEF0dGFjaG1lbnRMYXlvdXQgbGF5b3V0KGF0
dGFjaG1lbnQsIGxheW91dFN0eWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5o
CmluZGV4IDE4NDJiMzBmYTMzNGQyZmM2NmY5OTcxYWU2MTA2YzJmZWM1ZGI5MmYuLjFmYjdkZmJk
ZDFhZTQ0NjE3Y2JhNWYyN2FiMGFhNTI4Y2NhMTM5ZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJWaWV3LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclZpZXcuaApAQCAtMjIsMTAgKzIyLDEwIEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1
ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhpZ2hsaWdodERhdGEuaCIKICNpbmNsdWRlICJS
ZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJSZW5kZXJX
aWRnZXQuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKICNpbmNsdWRlIDxtZW1v
cnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQu
aD4KQEAgLTc4LDcgKzc4LDcgQEAgcHVibGljOgogICAgIC8vIFJldHVybiB0aGUgcmVuZGVyZXIg
d2hvc2UgYmFja2dyb3VuZCBzdHlsZSBpcyB1c2VkIHRvIHBhaW50IHRoZSByb290IGJhY2tncm91
bmQuCiAgICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXJGb3JSb290QmFja2dyb3VuZCgpIGNvbnN0
OwogCi0gICAgU2VsZWN0aW9uUmFuZ2VEYXRhJiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3NlbGVj
dGlvbjsgfQorICAgIEhpZ2hsaWdodERhdGEmIHNlbGVjdGlvbigpIHsgcmV0dXJuIG1fc2VsZWN0
aW9uOyB9CiAKICAgICBib29sIHByaW50aW5nKCkgY29uc3Q7CiAKQEAgLTIyMCw3ICsyMjAsNyBA
QCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fcmVuZGVyZXJDb3VudCB7IDEgfTsKIAogICAgIG11
dGFibGUgc3RkOjp1bmlxdWVfcHRyPFJlZ2lvbj4gbV9hY2N1bXVsYXRlZFJlcGFpbnRSZWdpb247
Ci0gICAgU2VsZWN0aW9uUmFuZ2VEYXRhIG1fc2VsZWN0aW9uOworICAgIEhpZ2hsaWdodERhdGEg
bV9zZWxlY3Rpb247CiAKICAgICBXZWFrUHRyPFJlbmRlckxheWVyPiBtX3N0eWxlQ2hhbmdlTGF5
ZXJNdXRhdGlvblJvb3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAKaW5kZXggN2Q3NzUzODJlMzMyNjEzZGM2ZjY3ZTIzZTgyYWU2ZDcxNTRhZjYwNS4uM2Y2ZjMz
Yjc1MmI1Yjg2Mzc5N2M0YTFhODIyNzg1ZDJjMzRkODVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKQEAgLTM0Niw3ICszNDYsNyBAQCBJbnRSZWN0IFJlbmRl
cldpZGdldDo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAogICAgIHJldHVybiBpbnRlcnNlY3Rpb24o
dmlldygpLmZyYW1lVmlldygpLmNvbnRlbnRzVG9XaW5kb3cobV9jbGlwUmVjdCksIHZpZXcoKS5m
cmFtZVZpZXcoKS53aW5kb3dDbGlwUmVjdCgpKTsKIH0KIAotdm9pZCBSZW5kZXJXaWRnZXQ6OnNl
dFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQordm9pZCBSZW5kZXJXaWRnZXQ6
OnNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKQogewogICAgIC8vIFRoZSBz
ZWxlY3Rpb24gc3RhdGUgZm9yIG91ciBjb250YWluaW5nIGJsb2NrIGhpZXJhcmNoeSBpcyB1cGRh
dGVkIGJ5IHRoZSBiYXNlIGNsYXNzIGNhbGwuCiAgICAgUmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVj
dGlvblN0YXRlKHN0YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJXaWRnZXQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaApp
bmRleCA4YWUzZDJjNjViMmQ0NGU1MjYwMGEwMmM3YTYzZjczNDU0OWQxOTZjLi4zNzAwOTZmZmRk
NjIwMDIxMzE4NzkwOWMyYWQ5MmM4NzE0ZjhlYjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5oCkBAIC05Myw3ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBuZWVk
c1ByZWZlcnJlZFdpZHRoc1JlY2FsY3VsYXRpb24oKSBjb25zdCBmaW5hbDsKICAgICBSZW5kZXJC
b3gqIGVtYmVkZGVkQ29udGVudEJveCgpIGNvbnN0IGZpbmFsOwogCi0gICAgdm9pZCBzZXRTZWxl
Y3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSkgZmluYWw7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25T
dGF0ZShIaWdobGlnaHRTdGF0ZSkgZmluYWw7CiAgICAgdm9pZCBzZXRPdmVybGFwVGVzdFJlc3Vs
dChib29sKSBmaW5hbDsKIAogICAgIGJvb2wgc2V0V2lkZ2V0R2VvbWV0cnkoY29uc3QgTGF5b3V0
UmVjdCYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4
IDc4YzFhMGVhMDRkOTZjZDc4YjcwOTA4ZWE4YWJiZGMxODE5ODk0MTYuLjg3NDg2OTk1OWM3Njc2
OTVkZDg2MjIxNjM1OWUwNDk4YTIxYWRmN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9Sb290SW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Um9vdElubGluZUJveC5jcHAKQEAgLTQyMyw3ICs0MjMsNyBAQCBMYXlvdXRVbml0IFJvb3RJbmxp
bmVCb3g6OmxpbmVTbmFwQWRqdXN0bWVudChMYXlvdXRVbml0IGRlbHRhKSBjb25zdAogR2FwUmVj
dHMgUm9vdElubGluZUJveDo6bGluZVNlbGVjdGlvbkdhcChSZW5kZXJCbG9jayYgcm9vdEJsb2Nr
LCBjb25zdCBMYXlvdXRQb2ludCYgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgY29uc3QgTGF5
b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaywKICAgICBMYXlvdXRVbml0IHNlbFRvcCwgTGF5
b3V0VW5pdCBzZWxIZWlnaHQsIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmIGNh
Y2hlLCBjb25zdCBQYWludEluZm8qIHBhaW50SW5mbykKIHsKLSAgICBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvblN0YXRlIGxpbmVTdGF0ZSA9IHNlbGVjdGlvblN0YXRlKCk7CisgICAgUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZSBsaW5lU3RhdGUgPSBzZWxlY3Rpb25TdGF0ZSgpOwogCiAgICAg
Ym9vbCBsZWZ0R2FwLCByaWdodEdhcDsKICAgICBibG9ja0Zsb3coKS5nZXRTZWxlY3Rpb25HYXBJ
bmZvKGxpbmVTdGF0ZSwgbGVmdEdhcCwgcmlnaHRHYXApOwpAQCAtNDUxLDkgKzQ1MSw5IEBAIEdh
cFJlY3RzIFJvb3RJbmxpbmVCb3g6OmxpbmVTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2smIHJvb3RC
bG9jaywgY29uc3QgTGF5b3V0UG9pCiAgICAgaWYgKGZpcnN0Qm94ICYmIGZpcnN0Qm94ICE9IGxh
c3RCb3gpIHsKICAgICAgICAgLy8gTm93IGZpbGwgaW4gYW55IGdhcHMgb24gdGhlIGxpbmUgdGhh
dCBvY2N1cnJlZCBiZXR3ZWVuIHR3byBzZWxlY3RlZCBlbGVtZW50cy4KICAgICAgICAgTGF5b3V0
VW5pdCBsYXN0TG9naWNhbExlZnQgeyBmaXJzdEJveC0+bG9naWNhbFJpZ2h0KCkgfTsKLSAgICAg
ICAgYm9vbCBpc1ByZXZpb3VzQm94U2VsZWN0ZWQgPSBmaXJzdEJveC0+c2VsZWN0aW9uU3RhdGUo
KSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgICAgIGJvb2wgaXNQcmV2aW91
c0JveFNlbGVjdGVkID0gZmlyc3RCb3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHROb25lOwogICAgICAgICBmb3IgKElubGluZUJveCogYm94ID0gZmlyc3RCb3gt
Pm5leHRMZWFmT25MaW5lKCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGVhZk9uTGluZSgpKSB7Ci0g
ICAgICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uTm9uZSkgeworICAgICAgICAgICAgaWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUpIHsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0
IGxvZ2ljYWxSZWN0IHsgbGFzdExvZ2ljYWxMZWZ0LCBzZWxUb3AsIExheW91dFVuaXQoYm94LT5s
b2dpY2FsTGVmdCgpIC0gbGFzdExvZ2ljYWxMZWZ0KSwgc2VsSGVpZ2h0IH07CiAgICAgICAgICAg
ICAgICAgbG9naWNhbFJlY3QubW92ZShyZW5kZXJlcigpLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBvZmZzZXRGcm9tUm9vdEJsb2NrIDogTGF5b3V0U2l6ZShvZmZzZXRGcm9tUm9vdEJsb2Nr
LmhlaWdodCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkpKTsKICAgICAgICAgICAgICAg
ICBMYXlvdXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2subG9naWNhbFJlY3RUb1BoeXNpY2FsUmVj
dChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBsb2dpY2FsUmVjdCk7CkBAIC00NjcsNyArNDY3
LDcgQEAgR2FwUmVjdHMgUm9vdElubGluZUJveDo6bGluZVNlbGVjdGlvbkdhcChSZW5kZXJCbG9j
ayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChib3ggPT0gbGFzdEJveCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGlzUHJldmlvdXNCb3hTZWxlY3RlZCA9IGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgICAgICAgICBpc1ByZXZpb3VzQm94U2VsZWN0ZWQg
PSBib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC01MjcsMjQgKzUyNywyMyBAQCBJbnRSZWN0IFJvb3RJbmxp
bmVCb3g6OmNvbXB1dGVDYXJldFJlY3QoZmxvYXQgbG9naWNhbExlZnRQb3NpdGlvbiwgdW5zaWdu
ZWQgY2FyZQogICAgIHJldHVybiBibG9ja1N0eWxlLmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBJbnRSZWN0KGxlZnQsIHRvcCwgY2FyZXRXaWR0aCwgaGVpZ2h0KSA6IEludFJlY3QodG9wLCBs
ZWZ0LCBoZWlnaHQsIGNhcmV0V2lkdGgpOwogfQogCi1SZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXRlIFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblN0YXRlKCkKK1JlbmRlck9iamVjdDo6SGlnaGxp
Z2h0U3RhdGUgUm9vdElubGluZUJveDo6c2VsZWN0aW9uU3RhdGUoKQogewogICAgIC8vIFdhbGsg
b3ZlciBhbGwgb2YgdGhlIHNlbGVjdGVkIGJveGVzLgotICAgIFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uU3RhdGUgc3RhdGUgPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0Tm9u
ZTsKICAgICBmb3IgKElubGluZUJveCogYm94ID0gZmlyc3RMZWFmRGVzY2VuZGFudCgpOyBib3g7
IGJveCA9IGJveC0+bmV4dExlYWZPbkxpbmUoKSkgewotICAgICAgICBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvblN0YXRlIGJveFN0YXRlID0gYm94LT5zZWxlY3Rpb25TdGF0ZSgpOwotICAgICAgICBp
ZiAoKGJveFN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQgJiYgc3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpIHx8Ci0gICAgICAgICAgICAoYm94U3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQgJiYgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25TdGFydCkpCi0gICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
Qm90aDsKLSAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25O
b25lIHx8Ci0gICAgICAgICAgICAgICAgICgoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25TdGFydCB8fCBib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkgJiYK
LSAgICAgICAgICAgICAgICAgIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUg
fHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpKSkKKyAgICAgICAgUmVu
ZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBib3hTdGF0ZSA9IGJveC0+c2VsZWN0aW9uU3RhdGUo
KTsKKyAgICAgICAgaWYgKChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXJ0
ICYmIHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0RW5kKQorICAgICAgICAgICAgfHwg
KGJveFN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0RW5kICYmIHN0YXRlID09IFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0U3RhcnQpKQorICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodEJvdGg7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0Tm9uZSB8fCAoKGJveFN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhcnQgfHwgYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRFbmQpCisgICAgICAg
ICAgICAmJiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lIHx8IHN0YXRlID09
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0SW5zaWRlKSkpCiAgICAgICAgICAgICBzdGF0ZSA9IGJv
eFN0YXRlOwotICAgICAgICBlbHNlIGlmIChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvbk5vbmUgJiYgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCkgeworICAg
ICAgICBlbHNlIGlmIChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUgJiYg
c3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGFydCkgewogICAgICAgICAgICAgLy8g
V2UgYXJlIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLgotICAgICAgICAgICAgc3RhdGUg
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGg7CisgICAgICAgICAgICBzdGF0ZSA9IFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0Qm90aDsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoKQorICAgICAgICBpZiAoc3RhdGUgPT0gUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRCb3RoKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC01
NTQsNyArNTUzLDcgQEAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBSb290SW5saW5lQm94
OjpzZWxlY3Rpb25TdGF0ZSgpCiBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6OmZpcnN0U2VsZWN0
ZWRCb3goKQogewogICAgIGZvciAoYXV0byogYm94ID0gZmlyc3RMZWFmRGVzY2VuZGFudCgpOyBi
b3g7IGJveCA9IGJveC0+bmV4dExlYWZPbkxpbmUoKSkgewotICAgICAgICBpZiAoYm94LT5zZWxl
Y3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKKyAgICAgICAgaWYg
KGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUpCiAg
ICAgICAgICAgICByZXR1cm4gYm94OwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU2
Myw3ICs1NjIsNyBAQCBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6OmZpcnN0U2VsZWN0ZWRCb3go
KQogSW5saW5lQm94KiBSb290SW5saW5lQm94OjpsYXN0U2VsZWN0ZWRCb3goKQogewogICAgIGZv
ciAoYXV0byogYm94ID0gbGFzdExlYWZEZXNjZW5kYW50KCk7IGJveDsgYm94ID0gYm94LT5wcmV2
aW91c0xlYWZPbkxpbmUoKSkgewotICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKKyAgICAgICAgaWYgKGJveC0+c2VsZWN0aW9u
U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodE5vbmUpCiAgICAgICAgICAgICByZXR1
cm4gYm94OwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTY2NCw3ICs2NjMsNyBAQCBM
YXlvdXRVbml0IFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5n
QmxvY2soKSBjb25zdAogICAgIExheW91dFVuaXQgdG9wID0gc2VsZWN0aW9uVG9wKCk7CiAKICAg
ICBhdXRvIGJsb2NrU2VsZWN0aW9uU3RhdGUgPSByb290Qm94LmJsb2NrRmxvdygpLnNlbGVjdGlv
blN0YXRlKCk7Ci0gICAgaWYgKGJsb2NrU2VsZWN0aW9uU3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25JbnNpZGUgJiYgYmxvY2tTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvbkVuZCkKKyAgICBpZiAoYmxvY2tTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodEluc2lkZSAmJiBibG9ja1NlbGVjdGlvblN0YXRlICE9IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0RW5kKQogICAgICAgICByZXR1cm4gdG9wOwogCiAgICAgTGF5b3V0U2l6ZSBvZmZz
ZXRUb0Jsb2NrQmVmb3JlOwpAQCAtNjc3LDggKzY3Niw4IEBAIExheW91dFVuaXQgUm9vdElubGlu
ZUJveDo6c2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpIGNvbnN0CiAgICAg
ICAgIHJldHVybiB0b3A7CiAKICAgICBpZiAoYXV0byogbGFzdExpbmUgPSBkb3duY2FzdDxSZW5k
ZXJCbG9ja0Zsb3c+KCpibG9ja0JlZm9yZSkubGFzdFJvb3RCb3goKSkgewotICAgICAgICBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUgPSBsYXN0TGlu
ZS0+c2VsZWN0aW9uU3RhdGUoKTsKLSAgICAgICAgaWYgKGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUg
IT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUgJiYgbGFzdExpbmVTZWxlY3Rpb25TdGF0
ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KQorICAgICAgICBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlIGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUgPSBsYXN0TGluZS0+c2VsZWN0
aW9uU3RhdGUoKTsKKyAgICAgICAgaWYgKGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUgIT0gUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRJbnNpZGUgJiYgbGFzdExpbmVTZWxlY3Rpb25TdGF0ZSAhPSBSZW5k
ZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXJ0KQogICAgICAgICAgICAgcmV0dXJuIHRvcDsKIAogICAg
ICAgICBMYXlvdXRVbml0IGxhc3RMaW5lU2VsZWN0aW9uQm90dG9tID0gbGFzdExpbmUtPnNlbGVj
dGlvbkJvdHRvbSgpICsgb2Zmc2V0VG9CbG9ja0JlZm9yZS5oZWlnaHQoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oCmluZGV4IDI0N2U1NWMwNjllOWZlODgxY2FmNGJm
YmMyYjRhZWYxOWUzNjE3YTMuLmY4OTc2YzZhN2Q0YTY5NzM0ODc0OTkzZjM5ZGYzNmY0Nzg3YWU5
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaApAQCAtMTI2LDcg
KzEyNiw3IEBAIHB1YmxpYzoKICAgICB1c2luZyBJbmxpbmVCb3g6Omhhc1NlbGVjdGVkQ2hpbGRy
ZW47CiAgICAgdXNpbmcgSW5saW5lQm94OjpzZXRIYXNTZWxlY3RlZENoaWxkcmVuOwogCi0gICAg
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGZpbmFsOworICAg
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBmaW5hbDsKICAg
ICBJbmxpbmVCb3gqIGZpcnN0U2VsZWN0ZWRCb3goKTsKICAgICBJbmxpbmVCb3gqIGxhc3RTZWxl
Y3RlZEJveCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0
aW9uUmFuZ2VEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5n
ZURhdGEuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ODQ0MTlmZGYxZGRiNzNk
MDNjZTMyZWNkMGU2ZWJiMTExMTY4MmRlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURh
dGEuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTQgSWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAq
ICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFT
IElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0g
KiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIlNlbGVjdGlvblJhbmdlRGF0YS5oIgotCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJGcmFtZVNlbGVjdGlvbi5oIgotI2luY2x1ZGUgIlBvc2l0aW9uLmgiCi0j
aW5jbHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJMYXllci5oIgotI2luY2x1ZGUgIlJl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyLmgiCi0jaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rp
b24uaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1uYW1lc3BhY2UgeyAvLyBTZWUgYnVnICMx
Nzc4MDguCi0KLXN0cnVjdCBTZWxlY3Rpb25EYXRhIHsKLSAgICB1c2luZyBSZW5kZXJlck1hcCA9
IEhhc2hNYXA8UmVuZGVyT2JqZWN0Kiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbklu
Zm8+PjsKLSAgICB1c2luZyBSZW5kZXJCbG9ja01hcCA9IEhhc2hNYXA8Y29uc3QgUmVuZGVyQmxv
Y2sqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPj47Ci0KLSAgICBP
cHRpb25hbDx1bnNpZ25lZD4gc3RhcnRPZmZzZXQ7Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IGVu
ZE9mZnNldDsKLSAgICBSZW5kZXJlck1hcCByZW5kZXJlcnM7Ci0gICAgUmVuZGVyQmxvY2tNYXAg
YmxvY2tzOwotfTsKLQotY2xhc3MgU2VsZWN0aW9uSXRlcmF0b3IgewotcHVibGljOgotICAgIFNl
bGVjdGlvbkl0ZXJhdG9yKFJlbmRlck9iamVjdCogc3RhcnQpCi0gICAgICAgIDogbV9jdXJyZW50
KHN0YXJ0KQotICAgIHsKLSAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgfQotICAgIAot
ICAgIFJlbmRlck9iamVjdCogY3VycmVudCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV9jdXJyZW50OwotICAgIH0KLSAgICAKLSAgICBSZW5kZXJPYmplY3QqIG5leHQoKQotICAgIHsK
LSAgICAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50U3BhbiA9IG1fc3Bhbm5lclN0YWNrLmlzRW1w
dHkoKSA/IG51bGxwdHIgOiBtX3NwYW5uZXJTdGFjay5sYXN0KCktPnNwYW5uZXIoKTsKLSAgICAg
ICAgbV9jdXJyZW50ID0gbV9jdXJyZW50LT5uZXh0SW5QcmVPcmRlcihjdXJyZW50U3Bhbik7Ci0g
ICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOwotICAgICAgICBpZiAoIW1fY3VycmVudCAmJiBjdXJy
ZW50U3BhbikgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwbGFjZWhvbGRlciA9IG1fc3Bh
bm5lclN0YWNrLmxhc3QoKTsKLSAgICAgICAgICAgIG1fc3Bhbm5lclN0YWNrLnJlbW92ZUxhc3Qo
KTsKLSAgICAgICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLT5uZXh0SW5QcmVPcmRlcigp
OwotICAgICAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIG1fY3VycmVudDsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBjaGVja0ZvclNwYW5u
ZXIoKQotICAgIHsKLSAgICAgICAgaWYgKCFpczxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFj
ZWhvbGRlcj4obV9jdXJyZW50KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgYXV0byYg
cGxhY2Vob2xkZXIgPSBkb3duY2FzdDxSZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRl
cj4oKm1fY3VycmVudCk7Ci0gICAgICAgIG1fc3Bhbm5lclN0YWNrLmFwcGVuZCgmcGxhY2Vob2xk
ZXIpOwotICAgICAgICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci5zcGFubmVyKCk7Ci0gICAgfQot
Ci0gICAgUmVuZGVyT2JqZWN0KiBtX2N1cnJlbnQgeyBudWxscHRyIH07Ci0gICAgVmVjdG9yPFJl
bmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyKj4gbV9zcGFubmVyU3RhY2s7Ci19Owot
Ci19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQotc3RhdGljIFJlbmRlck9iamVjdCogcmVuZGVy
ZXJBZnRlck9mZnNldChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCB1bnNpZ25lZCBvZmZz
ZXQpCi17Ci0gICAgYXV0byogY2hpbGQgPSByZW5kZXJlci5jaGlsZEF0KG9mZnNldCk7Ci0gICAg
cmV0dXJuIGNoaWxkID8gY2hpbGQgOiByZW5kZXJlci5uZXh0SW5QcmVPcmRlckFmdGVyQ2hpbGRy
ZW4oKTsKLX0KLQotc3RhdGljIGJvb2wgaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0IFNlbGVjdGlvblJhbmdlRGF0YTo6Q29udGV4
dCYgc2VsZWN0aW9uKQotewotICAgIHJldHVybiAocmVuZGVyZXIuY2FuQmVTZWxlY3Rpb25MZWFm
KCkgfHwgJnJlbmRlcmVyID09IHNlbGVjdGlvbi5zdGFydCgpIHx8ICZyZW5kZXJlciA9PSBzZWxl
Y3Rpb24uZW5kKCkpCi0gICAgICAgICYmIHJlbmRlcmVyLnNlbGVjdGlvblN0YXRlKCkgIT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lCi0gICAgICAgICYmIHJlbmRlcmVyLmNvbnRhaW5pbmdC
bG9jaygpOwotfQotCi1zdGF0aWMgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9ja0JlbG93Vmll
dyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQotewotICAgIGF1dG8qIGNvbnRhaW5pbmdC
bG9jayA9IHJlbmRlcmVyLmNvbnRhaW5pbmdCbG9jaygpOwotICAgIHJldHVybiBpczxSZW5kZXJW
aWV3Pihjb250YWluaW5nQmxvY2spID8gbnVsbHB0ciA6IGNvbnRhaW5pbmdCbG9jazsKLX0KLQot
c3RhdGljIFNlbGVjdGlvbkRhdGEgY29sbGVjdChjb25zdCBTZWxlY3Rpb25SYW5nZURhdGE6OkNv
bnRleHQmIHNlbGVjdGlvbiwgYm9vbCByZXBhaW50RGlmZmVyZW5jZSkKLXsKLSAgICBTZWxlY3Rp
b25EYXRhIG9sZFNlbGVjdGlvbkRhdGEgeyBzZWxlY3Rpb24uc3RhcnRPZmZzZXQoKSwgc2VsZWN0
aW9uLmVuZE9mZnNldCgpLCB7IH0sIHsgfSB9OwotICAgIC8vIEJsb2NrcyBjb250YWluIHNlbGVj
dGVkIG9iamVjdHMgYW5kIGZpbGwgZ2FwcyBiZXR3ZWVuIHRoZW0sIGVpdGhlciBvbiB0aGUgbGVm
dCwgcmlnaHQsIG9yIGluIGJldHdlZW4gbGluZXMgYW5kIGJsb2Nrcy4KLSAgICAvLyBJbiBvcmRl
ciB0byBnZXQgdGhlIHJlcGFpbnQgcmVjdCByaWdodCwgd2UgaGF2ZSB0byBleGFtaW5lIGxlZnQs
IG1pZGRsZSwgYW5kIHJpZ2h0IHJlY3RzIGluZGl2aWR1YWxseSwgc2luY2Ugb3RoZXJ3aXNlCi0g
ICAgLy8gdGhlIHVuaW9uIG9mIHRob3NlIHJlY3RzIG1pZ2h0IHJlbWFpbiB0aGUgc2FtZSBldmVu
IHdoZW4gY2hhbmdlcyBoYXZlIG9jY3VycmVkLgotICAgIGF1dG8qIHN0YXJ0ID0gc2VsZWN0aW9u
LnN0YXJ0KCk7Ci0gICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKLSAgICBpZiAoc2Vs
ZWN0aW9uLmVuZCgpKQotICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlck9mZnNldCgqc2VsZWN0
aW9uLmVuZCgpLCBzZWxlY3Rpb24uZW5kT2Zmc2V0KCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9u
SXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOwotICAgIHdoaWxlIChzdGFydCAmJiBz
dGFydCAhPSBzdG9wKSB7Ci0gICAgICAgIGlmIChpc1ZhbGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24o
KnN0YXJ0LCBzZWxlY3Rpb24pKSB7Ci0gICAgICAgICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNp
YmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdpbiBnYXBzLiBUaGV5IG11c3QgYmUg
ZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAgICAgIG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJz
LnNldChzdGFydCwgbWFrZVVuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqc3RhcnQsIHRydWUp
KTsKLSAgICAgICAgICAgIGlmIChyZXBhaW50RGlmZmVyZW5jZSkgewotICAgICAgICAgICAgICAg
IGZvciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKnN0YXJ0KTsgYmxv
Y2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9jaykpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byYgYmxvY2tJbmZvID0gb2xkU2VsZWN0aW9uRGF0YS5ibG9ja3MuYWRk
KGJsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChibG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+
KCpibG9jayk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgICAgIHN0YXJ0ID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpOwotICAgIH0KLSAgICByZXR1
cm4gb2xkU2VsZWN0aW9uRGF0YTsKLX0KLQotU2VsZWN0aW9uUmFuZ2VEYXRhOjpTZWxlY3Rpb25S
YW5nZURhdGEoUmVuZGVyVmlldyYgdmlldykKLSAgICA6IG1fcmVuZGVyVmlldyh2aWV3KQotI2lm
IEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICwgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIo
dmlldykKLSNlbmRpZgotewotfQotCi12b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6c2V0Q29udGV4
dChjb25zdCBDb250ZXh0JiBjb250ZXh0KQotewotICAgIEFTU0VSVChjb250ZXh0LnN0YXJ0KCkg
JiYgY29udGV4dC5lbmQoKSk7Ci0gICAgbV9zZWxlY3Rpb25Db250ZXh0ID0gY29udGV4dDsKLX0K
LQotUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBTZWxlY3Rpb25SYW5nZURhdGE6OnNlbGVj
dGlvblN0YXRlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICAvLyBG
SVhNRTogd2Ugc2hvdWxkbG4ndCBoYXZlIHRvIGNoZWNrIHRoYXQgYSByZW5kZXJlciBpcyBhIGRl
c2NlbmRhbnQgb2YgdGhlIHJlbmRlciBub2RlCi0gICAgLy8gZnJvbSB0aGUgcmFuZ2UuIFRoaXMg
aXMgbGlrZWx5IGJlY2F1c2Ugd2UgYXJlbid0IHVzaW5nIFZpc2libGVQb3NpdGlvbnMgeWV0Lgot
ICAgIC8vIFBsYW5uZWQgZml4IGluIGEgZm9sbG93dXA6IDxyZGFyOi8vcHJvYmxlbS81ODA5NTky
Mz4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NTI5
Ci0gICAgCi0gICAgaWYgKCZyZW5kZXJlciA9PSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKSB8
fCByZW5kZXJlci5pc0Rlc2NlbmRhbnRPZihtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKSkpIHsK
LSAgICAgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCgpICYmIG1fc2VsZWN0aW9uQ29u
dGV4dC5lbmQoKSAmJiBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKSA9PSBtX3NlbGVjdGlvbkNv
bnRleHQuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25C
b3RoOwotICAgICAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydDsKLSAgICB9Ci0gICAgaWYgKCZy
ZW5kZXJlciA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkgfHwgcmVuZGVyZXIuaXNEZXNjZW5k
YW50T2YobV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uRW5kOwotCi0gICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQgPSBu
dWxscHRyOwotICAgIGF1dG8qIHNlbGVjdGlvbkRhdGFFbmQgPSBtX3NlbGVjdGlvbkNvbnRleHQu
ZW5kKCk7Ci0gICAgaWYgKHNlbGVjdGlvbkRhdGFFbmQpCi0gICAgICAgIHNlbGVjdGlvbkVuZCA9
IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKnNlbGVjdGlvbkRhdGFFbmQsIG1fc2VsZWN0aW9uQ29udGV4
dC5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKLSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25J
dGVyYXRvcihtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKSk7Ci0gICAgZm9yIChhdXRvKiBjdXJy
ZW50UmVuZGVyZXIgPSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKTsgY3VycmVudFJlbmRlcmVy
ICYmIGN1cnJlbnRSZW5kZXJlciAhPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCk7IGN1cnJlbnRS
ZW5kZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoY3VycmVu
dFJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCgpIHx8IGN1cnJlbnRSZW5kZXJl
ciA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICgmcmVuZGVyZXIgPT0gY3VycmVudFJlbmRlcmVy
KQotICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlOwotICAg
IH0KLSAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOwotICAgIAotfQotCi12
b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6c2V0KGNvbnN0IENvbnRleHQmIHNlbGVjdGlvbiwgUmVw
YWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKLXsKLSAgICBpZiAoKHNlbGVjdGlvbi5zdGFydCgp
ICYmICFzZWxlY3Rpb24uZW5kKCkpIHx8IChzZWxlY3Rpb24uZW5kKCkgJiYgIXNlbGVjdGlvbi5z
dGFydCgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxl
Y3Rpb24gaGFzbid0IGNoYW5nZWQuCi0gICAgYXV0byBpc0NhcmV0ID0gbV9yZW5kZXJWaWV3LmZy
YW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJldCgpOwotICAgIGlmIChzZWxlY3Rpb24gPT0gbV9zZWxl
Y3Rpb25Db250ZXh0ICYmIG1fc2VsZWN0aW9uV2FzQ2FyZXQgPT0gaXNDYXJldCkKLSAgICAgICAg
cmV0dXJuOwotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIC8vIENsZWFyIHRoZSBj
dXJyZW50IHJlY3RzIGFuZCBjcmVhdGUgYSBub3RpZmllciBmb3IgdGhlIG5ldyByZWN0cyB3ZSBh
cmUgYWJvdXQgdG8gZ2F0aGVyLgotICAgIC8vIFRoZSBOb3RpZmllciB1cGRhdGVzIHRoZSBFZGl0
b3Igd2hlbiBpdCBnb2VzIG91dCBvZiBzY29wZSBhbmQgaXMgZGVzdHJveWVkLgotICAgIGF1dG8g
cmVjdE5vdGlmaWVyID0gbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuY2xlYXJBbmRDcmVhdGVOb3Rp
ZmllcigpOwotI2VuZGlmCi0gICAgbV9zZWxlY3Rpb25XYXNDYXJldCA9IGlzQ2FyZXQ7Ci0gICAg
YXBwbHkoc2VsZWN0aW9uLCBibG9ja1JlcGFpbnRNb2RlKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25S
YW5nZURhdGE6OmNsZWFyKCkKLXsKLSAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+cmVwYWludEJs
b2NrU2VsZWN0aW9uR2FwcygpOwotICAgIHNldCh7IH0sIFNlbGVjdGlvblJhbmdlRGF0YTo6UmVw
YWludE1vZGU6Ok5ld01pbnVzT2xkKTsKLX0KLQotdm9pZCBTZWxlY3Rpb25SYW5nZURhdGE6OnJl
cGFpbnQoKSBjb25zdAotewotICAgIEhhc2hTZXQ8UmVuZGVyQmxvY2sqPiBwcm9jZXNzZWRCbG9j
a3M7Ci0gICAgUmVuZGVyT2JqZWN0KiBlbmQgPSBudWxscHRyOwotICAgIGlmIChtX3NlbGVjdGlv
bkNvbnRleHQuZW5kKCkpCi0gICAgICAgIGVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKm1fc2Vs
ZWN0aW9uQ29udGV4dC5lbmQoKSwgbV9zZWxlY3Rpb25Db250ZXh0LmVuZE9mZnNldCgpLnZhbHVl
KCkpOwotICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG1fc2VsZWN0aW9u
Q29udGV4dC5zdGFydCgpKTsKLSAgICBmb3IgKGF1dG8qIHJlbmRlcmVyID0gc2VsZWN0aW9uSXRl
cmF0b3IuY3VycmVudCgpOyByZW5kZXJlciAmJiByZW5kZXJlciAhPSBlbmQ7IHJlbmRlcmVyID0g
c2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmICghcmVuZGVyZXItPmNhbkJl
U2VsZWN0aW9uTGVhZigpICYmIHJlbmRlcmVyICE9IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCgp
ICYmIHJlbmRlcmVyICE9IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBpZiAocmVuZGVyZXItPnNlbGVjdGlvblN0YXRlKCkgPT0gUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25Ob25lKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFJl
bmRlclNlbGVjdGlvbkluZm8oKnJlbmRlcmVyLCB0cnVlKS5yZXBhaW50KCk7Ci0gICAgICAgIC8v
IEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2lu
IGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgotICAgICAgICBmb3IgKGF1dG8q
IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpyZW5kZXJlcik7IGJsb2NrOyBibG9j
ayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93VmlldygqYmxvY2spKSB7Ci0gICAgICAgICAgICBpZiAo
IXByb2Nlc3NlZEJsb2Nrcy5hZGQoYmxvY2spLmlzTmV3RW50cnkpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKCpibG9jaywgdHJ1ZSkucmVw
YWludCgpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1JbnRSZWN0IFNlbGVjdGlvblJhbmdlRGF0
YTo6Y29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVu
dCkgY29uc3QKLXsKLSAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCByZW5kZXJlcnM7Ci0g
ICAgYXV0byogc3RhcnQgPSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKTsKLSAgICBSZW5kZXJP
YmplY3QqIHN0b3AgPSBudWxscHRyOwotICAgIGlmIChtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkp
Ci0gICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCptX3NlbGVjdGlvbkNvbnRleHQu
ZW5kKCksIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKLSAgICBTZWxl
Y3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7Ci0gICAgd2hpbGUgKHN0YXJ0
ICYmIHN0YXJ0ICE9IHN0b3ApIHsKLSAgICAgICAgaWYgKChzdGFydC0+Y2FuQmVTZWxlY3Rpb25M
ZWFmKCkgfHwgc3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkgfHwgc3RhcnQgPT0g
bV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpKQotICAgICAgICAgICAgJiYgc3RhcnQtPnNlbGVjdGlv
blN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7Ci0gICAgICAgICAgICAv
LyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5kIG1hcmdp
biBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAgICAgIHJlbmRl
cmVycy5zZXQoc3RhcnQsIG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKnN0YXJ0LCBj
bGlwVG9WaXNpYmxlQ29udGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKSk7Ci0gICAg
ICAgICAgICBhdXRvKiBibG9jayA9IHN0YXJ0LT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAg
ICAgIHdoaWxlIChibG9jayAmJiAhaXM8UmVuZGVyVmlldz4oKmJsb2NrKSkgewotICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0g
cmVuZGVyZXJzLmFkZChibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAg
ICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmJs
b2NrLCBjbGlwVG9WaXNpYmxlQ29udGVudCA9PSBDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKTsK
LSAgICAgICAgICAgICAgICBibG9jayA9IGJsb2NrLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzdGFydCA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5l
eHQoKTsKLSAgICB9Ci0KLSAgICAvLyBOb3cgY3JlYXRlIGEgc2luZ2xlIGJvdW5kaW5nIGJveCBy
ZWN0IHRoYXQgZW5jbG9zZXMgdGhlIHdob2xlIHNlbGVjdGlvbi4KLSAgICBMYXlvdXRSZWN0IHNl
bGVjdGlvblJlY3Q7Ci0gICAgZm9yIChhdXRvJiBpbmZvIDogcmVuZGVyZXJzLnZhbHVlcygpKSB7
Ci0gICAgICAgIC8vIFJlbmRlclNlbGVjdGlvbkluZm86OnJlY3QoKSBpcyBpbiB0aGUgY29vcmRp
bmF0ZXMgb2YgdGhlIHJlcGFpbnRDb250YWluZXIsIHNvIG1hcCB0byBwYWdlIGNvb3JkaW5hdGVz
LgotICAgICAgICBMYXlvdXRSZWN0IGN1cnJlbnRSZWN0ID0gaW5mby0+cmVjdCgpOwotICAgICAg
ICBpZiAoYXV0byogcmVwYWludENvbnRhaW5lciA9IGluZm8tPnJlcGFpbnRDb250YWluZXIoKSkg
ewotICAgICAgICAgICAgRmxvYXRRdWFkIGFic1F1YWQgPSByZXBhaW50Q29udGFpbmVyLT5sb2Nh
bFRvQWJzb2x1dGVRdWFkKEZsb2F0UmVjdChjdXJyZW50UmVjdCkpOwotICAgICAgICAgICAgY3Vy
cmVudFJlY3QgPSBhYnNRdWFkLmVuY2xvc2luZ0JvdW5kaW5nQm94KCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgc2VsZWN0aW9uUmVjdC51bml0ZShjdXJyZW50UmVjdCk7Ci0gICAgfQotICAgIHJldHVy
biBzbmFwcGVkSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKLX0KLQotdm9pZCBTZWxlY3Rpb25SYW5n
ZURhdGE6OmFwcGx5KGNvbnN0IENvbnRleHQmIG5ld1NlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxv
Y2tSZXBhaW50TW9kZSkKLXsKLSAgICBhdXRvIG9sZFNlbGVjdGlvbkRhdGEgPSBjb2xsZWN0KG1f
c2VsZWN0aW9uQ29udGV4dCwgYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TW9kZTo6TmV3WE9S
T2xkKTsKLSAgICAvLyBSZW1vdmUgY3VycmVudCBzZWxlY3Rpb24uCi0gICAgZm9yIChhdXRvKiBy
ZW5kZXJlciA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzLmtleXMoKSkKLSAgICAgICAgcmVu
ZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25O
b25lKTsKLSAgICBtX3NlbGVjdGlvbkNvbnRleHQgPSBuZXdTZWxlY3Rpb247Ci0gICAgYXV0byog
c2VsZWN0aW9uU3RhcnQgPSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKTsKLSAgICAvLyBVcGRh
dGUgdGhlIHNlbGVjdGlvbiBzdGF0dXMgb2YgYWxsIG9iamVjdHMgYmV0d2VlbiBzZWxlY3Rpb25T
dGFydCBhbmQgc2VsZWN0aW9uRW5kCi0gICAgaWYgKHNlbGVjdGlvblN0YXJ0ICYmIHNlbGVjdGlv
blN0YXJ0ID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgc2VsZWN0aW9uU3Rh
cnQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3Ro
KTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHNlbGVjdGlvblN0YXJ0KQotICAgICAgICAgICAg
c2VsZWN0aW9uU3RhcnQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGlmIChhdXRvKiBlbmQgPSBtX3NlbGVjdGlvbkNvbnRl
eHQuZW5kKCkpCi0gICAgICAgICAgICBlbmQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpOwotICAgIH0KLQotICAgIFJlbmRlck9iamVjdCogc2Vs
ZWN0aW9uRW5kID0gbnVsbHB0cjsKLSAgICBhdXRvKiBzZWxlY3Rpb25EYXRhRW5kID0gbV9zZWxl
Y3Rpb25Db250ZXh0LmVuZCgpOwotICAgIGlmIChzZWxlY3Rpb25EYXRhRW5kKQotICAgICAgICBz
ZWxlY3Rpb25FbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxlY3Rpb25EYXRhRW5kLCBtX3Nl
bGVjdGlvbkNvbnRleHQuZW5kT2Zmc2V0KCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0
b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOwotICAgIGZvciAoYXV0byogY3Vy
cmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50
UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVy
YXRvci5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSBzZWxlY3Rpb25T
dGFydCB8fCBjdXJyZW50UmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5jYW5CZVNl
bGVjdGlvbkxlYWYoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjdXJyZW50UmVu
ZGVyZXItPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25J
bnNpZGUpOwotICAgIH0KLQotICAgIGlmIChibG9ja1JlcGFpbnRNb2RlICE9IFJlcGFpbnRNb2Rl
OjpOb3RoaW5nKQotICAgICAgICBtX3JlbmRlclZpZXcubGF5ZXIoKS0+Y2xlYXJCbG9ja1NlbGVj
dGlvbkdhcHNCb3VuZHMoKTsKLQotICAgIC8vIE5vdyB0aGF0IHRoZSBzZWxlY3Rpb24gc3RhdGUg
aGFzIGJlZW4gdXBkYXRlZCBmb3IgdGhlIG5ldyBvYmplY3RzLCB3YWxrIHRoZW0gYWdhaW4gYW5k
Ci0gICAgLy8gcHV0IHRoZW0gaW4gdGhlIG5ldyBvYmplY3RzIGxpc3QuCi0gICAgU2VsZWN0aW9u
RGF0YTo6UmVuZGVyZXJNYXAgbmV3U2VsZWN0ZWRSZW5kZXJlcnM7Ci0gICAgU2VsZWN0aW9uRGF0
YTo6UmVuZGVyQmxvY2tNYXAgbmV3U2VsZWN0ZWRCbG9ja3M7Ci0gICAgc2VsZWN0aW9uSXRlcmF0
b3IgPSBTZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7Ci0gICAgZm9yIChhdXRvKiBj
dXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVudFJlbmRlcmVyICYmIGN1cnJl
bnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvbkl0
ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9u
KCpjdXJyZW50UmVuZGVyZXIsIG1fc2VsZWN0aW9uQ29udGV4dCkpIHsKLSAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiBzZWxlY3Rpb25JbmZvID0gbWFrZVVu
aXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqY3VycmVudFJlbmRlcmVyLCB0cnVlKTsKLSNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHNl
bGVjdGlvbkluZm8tPmNvbGxlY3RlZFNlbGVjdGlvblJlY3RzKCkpCi0gICAgICAgICAgICAgICAg
bV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuYWRkUmVjdChzZWxlY3Rpb25JbmZvLT5yZXBhaW50Q29u
dGFpbmVyKCksIHJlY3QpOwotICAgICAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmlzVGV4
dE9yTGluZUJyZWFrKCkpCi0gICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIu
c2V0VGV4dE9ubHkoZmFsc2UpOwotI2VuZGlmCi0gICAgICAgICAgICBuZXdTZWxlY3RlZFJlbmRl
cmVycy5zZXQoY3VycmVudFJlbmRlcmVyLCBXVEZNb3ZlKHNlbGVjdGlvbkluZm8pKTsKLSAgICAg
ICAgICAgIGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9IGN1cnJlbnRSZW5kZXJlci0+Y29udGFpbmlu
Z0Jsb2NrKCk7Ci0gICAgICAgICAgICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrICYmICFpczxSZW5k
ZXJWaWV3PigqY29udGFpbmluZ0Jsb2NrKSkgewotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJs
b2Nrcy5hZGQoY29udGFpbmluZ0Jsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7Ci0gICAg
ICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlv
bkluZm8+KCpjb250YWluaW5nQmxvY2spOwotICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9j
ayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0jaWYgRU5BQkxFKFNFUlZJ
Q0VfQ09OVFJPTFMpCi0gICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuYWRk
R2FwUmVjdHMoYmxvY2tJbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIGJsb2NrSW5mby0+cmVjdHMo
KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChi
bG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMgY2hhbmdlZCBj
b21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KLSAgICBmb3IgKGF1dG8mIHNlbGVjdGVkUmVu
ZGVyZXJJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMpIHsKLSAgICAgICAgYXV0byog
cmVuZGVyZXIgPSBzZWxlY3RlZFJlbmRlcmVySW5mby5rZXk7Ci0gICAgICAgIGF1dG8qIG5ld0lu
Zm8gPSBuZXdTZWxlY3RlZFJlbmRlcmVycy5nZXQocmVuZGVyZXIpOwotICAgICAgICBhdXRvKiBv
bGRJbmZvID0gc2VsZWN0ZWRSZW5kZXJlckluZm8udmFsdWUuZ2V0KCk7Ci0gICAgICAgIGlmICgh
bmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8t
PnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKQotICAgICAgICAgICAgfHwgKG1fc2VsZWN0aW9u
Q29udGV4dC5zdGFydCgpID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRhdGEuc3RhcnRPZmZz
ZXQgIT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0T2Zmc2V0KCkpCi0gICAgICAgICAgICB8fCAo
bV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRhdGEu
ZW5kT2Zmc2V0ICE9IG1fc2VsZWN0aW9uQ29udGV4dC5lbmRPZmZzZXQoKSkpIHsKLSAgICAgICAg
ICAgIG9sZEluZm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAg
ICAgICAgICAgICAgbmV3SW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVj
dGVkUmVuZGVyZXJzLnJlbW92ZShyZW5kZXJlcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICAvLyBBbnkgbmV3IG9iamVjdHMgdGhhdCByZW1haW4gd2VyZSBub3QgZm91
bmQgaW4gdGhlIG9sZCBvYmplY3RzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRl
ZC4KLSAgICBmb3IgKGF1dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDogbmV3U2VsZWN0ZWRSZW5k
ZXJlcnMpCi0gICAgICAgIHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLT5yZXBhaW50KCk7Ci0K
LSAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIGJsb2NrcyBjaGFuZ2VkPwotICAgIGZvciAoYXV0
byYgc2VsZWN0ZWRCbG9ja0luZm8gOiBvbGRTZWxlY3Rpb25EYXRhLmJsb2NrcykgewotICAgICAg
ICBhdXRvKiBibG9jayA9IHNlbGVjdGVkQmxvY2tJbmZvLmtleTsKLSAgICAgICAgYXV0byogbmV3
SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmdldChibG9jayk7Ci0gICAgICAgIGF1dG8qIG9sZElu
Zm8gPSBzZWxlY3RlZEJsb2NrSW5mby52YWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFuZXdJbmZv
IHx8IG9sZEluZm8tPnJlY3RzKCkgIT0gbmV3SW5mby0+cmVjdHMoKSB8fCBvbGRJbmZvLT5zdGF0
ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkpIHsKLSAgICAgICAgICAgIG9sZEluZm8tPnJlcGFpbnQo
KTsKLSAgICAgICAgICAgIGlmIChuZXdJbmZvKSB7Ci0gICAgICAgICAgICAgICAgbmV3SW5mby0+
cmVwYWludCgpOwotICAgICAgICAgICAgICAgIG5ld1NlbGVjdGVkQmxvY2tzLnJlbW92ZShibG9j
ayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBBbnkgbmV3IGJs
b2NrcyB0aGF0IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIGJsb2NrcyBkaWN0LCBh
bmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCi0gICAgZm9yIChhdXRvJiBzZWxlY3RlZEJs
b2NrSW5mbyA6IG5ld1NlbGVjdGVkQmxvY2tzKQotICAgICAgICBzZWxlY3RlZEJsb2NrSW5mby52
YWx1ZS0+cmVwYWludCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGFjNjEzZDkyMjQ0YWYxYTRkYWY5YWYxMGUxNjRmNDI4NzQ3N2EzYmIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA3
ICswLDAgQEAKLSAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAg
ICBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8uaCIKLQot
I2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotI2luY2x1ZGUgIlNlbGVjdGlvblJlY3RHYXRo
ZXJlci5oIgotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RydWN0IE9sZFNlbGVj
dGlvbkRhdGE7Ci0gICAgCi1jbGFzcyBTZWxlY3Rpb25SYW5nZURhdGEgewotcHVibGljOgotICAg
IFNlbGVjdGlvblJhbmdlRGF0YShSZW5kZXJWaWV3Jik7Ci0gICAgCi0gICAgY2xhc3MgQ29udGV4
dCB7Ci0gICAgcHVibGljOgotICAgICAgICBDb250ZXh0KCkgPSBkZWZhdWx0OwotICAgICAgICBD
b250ZXh0KFJlbmRlck9iamVjdCogc3RhcnQsIFJlbmRlck9iamVjdCogZW5kLCB1bnNpZ25lZCBz
dGFydE9mZnNldCwgdW5zaWduZWQgZW5kT2Zmc2V0KQotICAgICAgICAgICAgOiBtX3N0YXJ0KG1h
a2VXZWFrUHRyKHN0YXJ0KSkKLSAgICAgICAgICAgICwgbV9lbmQobWFrZVdlYWtQdHIoZW5kKSkK
LSAgICAgICAgICAgICwgbV9zdGFydE9mZnNldChzdGFydE9mZnNldCkKLSAgICAgICAgICAgICwg
bV9lbmRPZmZzZXQoZW5kT2Zmc2V0KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICBS
ZW5kZXJPYmplY3QqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC5nZXQoKTsgfQotICAg
ICAgICBSZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLmdldCgpOyB9Ci0g
ICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1f
c3RhcnRPZmZzZXQ7IH0KLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IGVuZE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5kT2Zmc2V0OyB9Ci0KLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENvbnRleHQmIG90aGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zdGFydCA9PSBvdGhlci5tX3N0YXJ0ICYmIG1fZW5kID09IG90aGVyLm1fZW5kICYmIG1fc3Rh
cnRPZmZzZXQgPT0gb3RoZXIubV9zdGFydE9mZnNldCAmJiBtX2VuZE9mZnNldCA9PSBvdGhlci5t
X2VuZE9mZnNldDsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgV2Vha1B0cjxS
ZW5kZXJPYmplY3Q+IG1fc3RhcnQ7Ci0gICAgICAgIFdlYWtQdHI8UmVuZGVyT2JqZWN0PiBtX2Vu
ZDsKLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fc3RhcnRPZmZzZXQ7Ci0gICAgICAgIE9w
dGlvbmFsPHVuc2lnbmVkPiBtX2VuZE9mZnNldDsKLSAgICB9OwotICAgIAotICAgIHZvaWQgc2V0
Q29udGV4dChjb25zdCBDb250ZXh0Jik7Ci0gICAgCi0gICAgZW51bSBjbGFzcyBSZXBhaW50TW9k
ZSB7IE5ld1hPUk9sZCwgTmV3TWludXNPbGQsIE5vdGhpbmcgfTsKLSAgICB2b2lkIHNldChjb25z
dCBDb250ZXh0JiwgUmVwYWludE1vZGUgPSBSZXBhaW50TW9kZTo6TmV3WE9ST2xkKTsKLSAgICBj
b25zdCBDb250ZXh0JiBnZXQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQ7IH0K
LQotICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNv
bnRleHQuc3RhcnQoKTsgfQotICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpOyB9Ci0KLSAgICB1bnNpZ25lZCBzdGFydE9mZnNldCgp
IGNvbnN0IHsgQVNTRVJUKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydE9mZnNldCgpKTsgcmV0dXJu
IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydE9mZnNldCgpLnZhbHVlT3IoMCk7IH0KLSAgICB1bnNp
Z25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IEFTU0VSVChtX3NlbGVjdGlvbkNvbnRleHQuZW5kT2Zm
c2V0KCkpOyByZXR1cm4gbV9zZWxlY3Rpb25Db250ZXh0LmVuZE9mZnNldCgpLnZhbHVlT3IoMCk7
IH0KLQotICAgIHZvaWQgY2xlYXIoKTsKLSAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0IHsgcmV0
dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Ok5vKTsgfQotICAgIEludFJl
Y3QgYm91bmRzQ2xpcHBlZFRvVmlzaWJsZUNvbnRlbnQoKSBjb25zdCB7IHJldHVybiBjb2xsZWN0
Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50OjpZZXMpOyB9Ci0gICAgdm9pZCByZXBhaW50KCkg
Y29uc3Q7Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25T
dGF0ZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCYpOwotCi1wcml2YXRlOgotICAgIGVudW0gY2xh
c3MgQ2xpcFRvVmlzaWJsZUNvbnRlbnQgeyBZZXMsIE5vIH07Ci0gICAgSW50UmVjdCBjb2xsZWN0
Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdDsKLSAgICB2b2lkIGFwcGx5KGNvbnN0
IENvbnRleHQmLCBSZXBhaW50TW9kZSk7Ci0KLSAgICBjb25zdCBSZW5kZXJWaWV3JiBtX3JlbmRl
clZpZXc7Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgU2VsZWN0aW9uUmVjdEdh
dGhlcmVyIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyOwotI2VuZGlmCi0gICAgQ29udGV4dCBtX3Nl
bGVjdGlvbkNvbnRleHQ7Ci0gICAgYm9vbCBtX3NlbGVjdGlvbldhc0NhcmV0IHsgZmFsc2UgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0LmNwcAppbmRleCBmMTBkYzBiY2M3OWFhNGQ1NDQyMTY5YTgxZjcx
MGM1ZWJkMDgwMWFkLi5mYTk0NDllM2JhNzU1NDhkZjgwOTUyNWJmZTRhM2M1YzNjNDNiMDU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCkBAIC0z
MDcsNyArMzA3LDcgQEAgQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yV2l0aFJlYXNvbihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEluY2x1ZGVSZWEKICAgICAvLyBUaGlzIGN1cnJl
bnRseSBjb3ZlcnMgPGJsb2NrZmxvdz4jdGV4dDwvYmxvY2tmbG93PiwgPGJsb2NrZmxvdz4jdGV4
dDxicj48L2Jsb2NrZmxvdz4gYW5kIG11dGlwbGUgKHNpYmxpbmcpIFJlbmRlclRleHQgY2FzZXMu
CiAgICAgLy8gVGhlIDxibG9ja2Zsb3c+PGlubGluZT4jdGV4dDwvaW5saW5lPjwvYmxvY2tmbG93
PiBjYXNlIGlzIGFsc28gcG9wdWxhciBhbmQgc2hvdWxkIGJlIHJlbGF0aXZlbHkgZWFzeSB0byBj
b3Zlci4KICAgICBmb3IgKGNvbnN0IGF1dG8qIGNoaWxkID0gZmxvdy5maXJzdENoaWxkKCk7IGNo
aWxkOykgewotICAgICAgICBpZiAoY2hpbGQtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25Ob25lKQorICAgICAgICBpZiAoY2hpbGQtPnNlbGVjdGlvblN0YXRlKCkg
IT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lKQogICAgICAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChGbG93Q2hpbGRJc1NlbGVjdGVkLCByZWFzb25zLCBpbmNsdWRl
UmVhc29ucyk7CiAgICAgICAgIGlmIChpczxSZW5kZXJUZXh0PigqY2hpbGQpKSB7CiAgICAgICAg
ICAgICBjb25zdCBhdXRvJiByZW5kZXJUZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxk
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4
dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCmluZGV4IDU1YzJiNzk5OWIyNWExMTMwMTgzMjVhZjc1NTZmOGY4MzYyNDdlYzEuLmY3NTg5
MDAyZTA0MDJhODVmZjFjNDQ2MGUwYmJhODY2ZTQ3NTdiMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcApAQCAtMTg5LDcgKzE4OSw3
IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50
SW5mbyYgcGFpbnRJbmZvKQogCiAgICAgLy8gRGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlJ3Jl
IHNlbGVjdGVkLgogICAgIGJvb2wgcGFpbnRTZWxlY3RlZFRleHRPbmx5ID0gcGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2U6OlNlbGVjdGlvbjsKLSAgICBib29sIGhhc1NlbGVjdGlvbiA9IHNl
bGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOworICAgIGJvb2wg
aGFzU2VsZWN0aW9uID0gc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dE5vbmU7CiAgICAgaWYgKCFoYXNTZWxlY3Rpb24gfHwgcGFpbnRTZWxlY3RlZFRleHRPbmx5KQog
ICAgICAgICByZXR1cm47CiAKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIFNWR0lubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRP
ZmZzZQogCiAgICAgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkgPSBwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uOwogICAgIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25I
aWdobGlnaHQgPSAhKHBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZp
b3I6OlNraXBTZWxlY3Rpb25IaWdobGlnaHQpKTsKLSAgICBib29sIGhhc1NlbGVjdGlvbiA9ICFw
YXJlbnRSZW5kZXJlci5kb2N1bWVudCgpLnByaW50aW5nKCkgJiYgc2VsZWN0aW9uU3RhdGUoKSAh
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgYm9vbCBoYXNTZWxlY3Rpb24gPSAh
cGFyZW50UmVuZGVyZXIuZG9jdW1lbnQoKS5wcmludGluZygpICYmIHNlbGVjdGlvblN0YXRlKCkg
IT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHROb25lOwogICAgIGlmICghaGFzU2VsZWN0aW9uICYm
IHBhaW50U2VsZWN0ZWRUZXh0T25seSkKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAppbmRleCBiZjVmM2Fk
ZmIzNmQ4ODQxMWUyNjNlYmFhMThhNTdiM2E4MjVjMTk0Li4wNTgzNThhMjBjOGJlZTExMWNkOWRk
MWE3Y2M5ZTAxMDkzZGIwNTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dmcvU1ZHUm9vdElubGluZUJveC5jcHAKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBTVkdSb290SW5s
aW5lQm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBh
aW50T2Zmc2UKICAgICBBU1NFUlQoIXBhaW50SW5mby5jb250ZXh0KCkucGFpbnRpbmdEaXNhYmxl
ZCgpKTsKIAogICAgIGJvb2wgaXNQcmludGluZyA9IHJlbmRlclNWR1RleHQoKS5kb2N1bWVudCgp
LnByaW50aW5nKCk7Ci0gICAgYm9vbCBoYXNTZWxlY3Rpb24gPSAhaXNQcmludGluZyAmJiBzZWxl
Y3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKyAgICBib29sIGhh
c1NlbGVjdGlvbiA9ICFpc1ByaW50aW5nICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHROb25lOwogICAgIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25IaWdobGln
aHQgPSAhKHBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OlNr
aXBTZWxlY3Rpb25IaWdobGlnaHQpKTsKIAogICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhw
YWludEluZm8pOwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDEyOTA0
ZTUyYzEzMWNlYjMwNTNiYjQ0MmM3NmJjMGNiOWU4MDQ5MTEuLmRlNzY1NzUyYTlmMWFlNWI1ODE2
NDI5YzFkN2Y5Mzg2MDY3OTIxNmQgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMC0wMS0xNiAgTWVnYW4gR2FyZG5lciAgPG1lZ2FuX2dh
cmRuZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBTZWxlY3Rpb25EYXRhIGNsYXNzZXMg
YW5kIHN0cnVjdHVyZXMgSGlnaGxpZ2h0RGF0YSwgZXRjIHRvIGJlIG1vcmUgaW5jbHVzaXZlIGZv
ciB0aGVpciBuZXcgdXNlIGNhc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMDYzNDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXaXRoIHRoZSBuZXcgSGlnaGxpZ2h0IEFQSSwgd2Ugd2lsbCBiZSB1c2lu
ZyB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBIaWdobGlnaHRzIGFzIHdlbGwgYXMg
U2VsZWN0aW9uLCAKKyAgICAgICAgcmVuYW1lIHRvIEhpZ2hsaWdodCwgYXMgYSBTZWxlY3Rpb24g
aXMgYSB0eXBlIG9mIEhpZ2hsaWdodC4KKworICAgICAgICAqIFdlYktpdC54Y3dvcmtzcGFjZS94
Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0FsbCBTb3VyY2UueGNzY2hlbWU6CisKIDIwMjAtMDEtMTAg
IERlYW4gSmFja3NvbiAgPGRpbm9AYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJHTF0gQ2xhcmlm
eSBVU0VfT1BFTkdMX0VTXzMKZGlmZiAtLWdpdCBhL1dlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJl
ZGRhdGEveGNzY2hlbWVzL0FsbCBTb3VyY2UueGNzY2hlbWUgYi9XZWJLaXQueGN3b3Jrc3BhY2Uv
eGNzaGFyZWRkYXRhL3hjc2NoZW1lcy9BbGwgU291cmNlLnhjc2NoZW1lCmluZGV4IGUxYzk3NGNh
ZjNiMWFmNWY2ZjBjZmU1NzcwNGE1NjdlMjgzYzUwOWQuLmI3NWY0YmQxOTlkOGFlNTZlYmZmMzc3
YzhmMjI4MTMxYThlYjMyN2IgMTAwNjQ0Ci0tLSBhL1dlYktpdC54Y3dvcmtzcGFjZS94Y3NoYXJl
ZGRhdGEveGNzY2hlbWVzL0FsbCBTb3VyY2UueGNzY2hlbWUJCisrKyBiL1dlYktpdC54Y3dvcmtz
cGFjZS94Y3NoYXJlZGRhdGEveGNzY2hlbWVzL0FsbCBTb3VyY2UueGNzY2hlbWUJCkBAIC01Nyw3
ICs1Nyw3IEBACiAgICAgICAgICAgICA8QnVpbGRhYmxlUmVmZXJlbmNlCiAgICAgICAgICAgICAg
ICBCdWlsZGFibGVJZGVudGlmaWVyID0gInByaW1hcnkiCiAgICAgICAgICAgICAgICBCbHVlcHJp
bnRJZGVudGlmaWVyID0gIkZCMzlEMEQwMTIwMEYwRTMwMDA4OEU2OSIKLSAgICAgICAgICAgICAg
IEJ1aWxkYWJsZU5hbWUgPSAibGliQU5HTEUtc2hhcmVkLmR5bGliIgorICAgICAgICAgICAgICAg
QnVpbGRhYmxlTmFtZSA9ICJsaWJBTkdMRS5hIgogICAgICAgICAgICAgICAgQmx1ZXByaW50TmFt
ZSA9ICJBTkdMRSIKICAgICAgICAgICAgICAgIFJlZmVyZW5jZWRDb250YWluZXIgPSAiY29udGFp
bmVyOlNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvaiI+CiAgICAgICAgICAg
ICA8L0J1aWxkYWJsZVJlZmVyZW5jZT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388470</attachid>
            <date>2020-01-22 14:28:47 -0800</date>
            <delta_ts>2020-02-10 10:35:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206340-20200122142846.patch</filename>
            <type>text/plain</type>
            <size>125459</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjExNjhlNWVlOTA0MzU5
MmUyNGYyZGFlZTNiZWQ0ZGZiMmUzMDNhMS4uZTI3ZGYwMzIwODNlNjNmMzE1ODk4ODA1NzAxNTIw
M2U3YjgzMWU4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNCBAQAorMjAyMC0wMS0xNiAgTWVn
YW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBT
ZWxlY3Rpb25EYXRhIGNsYXNzZXMgYW5kIHN0cnVjdHVyZXMgSGlnaGxpZ2h0RGF0YSwgZXRjIHRv
IGJlIG1vcmUgaW5jbHVzaXZlIGZvciB0aGVpciBuZXcgdXNlIGNhc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYzNDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW5hbWUgb25seSwgbm8gYmVoYXZp
b3VyIGNoYW5nZS4KKworICAgICAgICBXaXRoIHRoZSBuZXcgSGlnaGxpZ2h0IEFQSSwgd2Ugd2ls
bCBiZSB1c2luZyB0aGVzZSBkYXRhIHN0cnVjdHVyZXMgdG8gc3VwcG9ydCBIaWdobGlnaHRzIGFz
IHdlbGwgYXMgU2VsZWN0aW9uLCAKKyAgICAgICAgcmVuYW1lIHRvIEhpZ2hsaWdodCwgYXMgYSBT
ZWxlY3Rpb24gaXMgYSB0eXBlIG9mIEhpZ2hsaWdodC4KKworICAgICAgICAqIFNvdXJjZXMudHh0
OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiBwbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NvcGVkRnJhbWVT
ZWxlY3Rpb25TdGF0ZTo6flNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Y3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UpOgorICAgICAgICAqIHJlbmRlcmluZy9Db21w
bGV4TGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4TGluZUxheW91dDo6
Y29uc3RydWN0TGluZSk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5n
L0VsbGlwc2lzQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5j
cHAuCisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Y29sbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRh
OjpIaWdobGlnaHREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNldFJl
bmRlclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNlbGVjdGlvblN0
YXRlRm9yUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OkhpZ2hsaWdodERhdGE6OnJlcGFpbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGln
aGxpZ2h0RGF0YTo6Y29sbGVjdEJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIaWdo
bGlnaHREYXRhOjphcHBseSk6CisgICAgICAgICogcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaDog
UmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEu
aC4KKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OlJlbmRlclJhbmdlOjpSZW5kZXJS
YW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6b3Bl
cmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpnZXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6c3RhcnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6ZW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkhpZ2hsaWdodERhdGE6OnN0YXJ0T2Zmc2V0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhpZ2hsaWdodERhdGE6OmVuZE9mZnNldCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVCb3g6OnNlbGVjdGlvblN0YXRl
KToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lRmxvd0JveDo6c2Vs
ZWN0aW9uU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94Lmg6CisgICAg
ICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6dmVyaWZ5U2VsZWN0aW9uU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y2xh
bXBlZFN0YXJ0RW5kRm9yU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4
dEJveDo6aGlnaGxpZ2h0U3RhcnRFbmQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5l
VGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRzRm9ySGlnaGxpZ2h0cyBjb25zdCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNob3VsZFBhaW50U2Vs
ZWN0aW9uR2FwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2VsZWN0
aW9uR2Fwcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25H
YXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpnZXRTZWxlY3Rpb25HYXBJbmZv
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxv
dzo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
OjppbmxpbmVTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJveE1vZGVsT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0Lmg6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aW5lQnJlYWs6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGluZUJyZWFrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmlzU2VsZWN0
aW9uQm9yZGVyIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3RCaXRmaWVsZHM6OlJlbmRlck9i
amVjdEJpdGZpZWxkcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OlJlbmRlck9i
amVjdEJpdGZpZWxkczo6c2VsZWN0aW9uU3RhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmplY3RCaXRmaWVsZHM6OnNldFNlbGVjdGlvblN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclJlcGxhY2VkOjpzaG91bGREcmF3U2VsZWN0aW9uVGludCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBsYWNlZDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyUmVwbGFjZWQ6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJlcGxhY2VkOjppc1NlbGVjdGVkIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyUmVwbGFjZWQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5m
by5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU2VsZWN0aW9uSW5mb0Jhc2U6OnN0YXRlIGNv
bnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0OjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRM
aW5lQm94ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dExpbmVCb3hlczo6c2V0
U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50QXR0YWNobWVudCk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclZpZXcuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUm9v
dElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpsaW5lU2Vs
ZWN0aW9uR2FwKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OmZpcnN0U2VsZWN0ZWRCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6bGFzdFNlbGVjdGVkQm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblRvcEFkanVzdGVkRm9yUHJl
Y2VkaW5nQmxvY2sgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94Lmg6
CisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yV2l0aFJlYXNvbik6CisgICAgICAgICog
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdSb290SW5saW5lQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jvb3RJbmxpbmVCb3g6
OnBhaW50KToKKwogMjAyMC0wMS0yMiAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgog
CiAgICAgICAgIFtMRkNdIERvIG5vdCBjcmVhdGUgYSBGb3JtYXR0aW5nQ29udGV4dCB0byBjb21w
dXRlIGludHJpbnNpYyB3aWR0aCB1bmxlc3MgdGhlcmUncyBzb21lIGNvbnRlbnQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVy
cy5jbWFrZQppbmRleCBmMjRhZmE5ZDExMjE2ZDllMjI0Yjk5Y2FkYjg1M2U4MDNjYjU5MDNkLi4y
NmUwMmMyYWQwYjdmYzRiMDdlZDQyOGE2OGJmNTZlM2ViNjY2MGI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKQEAgLTEyODcsNiArMTI4Nyw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKICAgICByZW5kZXJpbmcvRXZlbnRSZWdpb24uaAogICAgIHJlbmRlcmluZy9GbG9hdGlu
Z09iamVjdHMuaAogICAgIHJlbmRlcmluZy9HYXBSZWN0cy5oCisgICAgcmVuZGVyaW5nL0hpZ2hs
aWdodERhdGEuaAogICAgIHJlbmRlcmluZy9IaXRUZXN0TG9jYXRpb24uaAogICAgIHJlbmRlcmlu
Zy9IaXRUZXN0UmVxdWVzdC5oCiAgICAgcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuaApAQCAtMTM0
Miw3ICsxMzQzLDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAg
IHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAogICAgIHJlbmRlcmluZy9Sb290SW5saW5lQm94LmgK
ICAgICByZW5kZXJpbmcvU2Nyb2xsQWxpZ25tZW50LmgKLSAgICByZW5kZXJpbmcvU2VsZWN0aW9u
UmFuZ2VEYXRhLmgKICAgICByZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5oCiAgICAgcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5oCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVM
YXlvdXRGbG93Q29udGVudHMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBmNjc1ODAxNGFiNzI2N2IzZGM4
MWUyZWYzZGEyMThlZTdkNzMwZjJkLi41YzZjNWRiMjE1N2UyM2M1MjIxMDIxYzliMzJhM2MyODJi
YjZkNjgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMjA5Nyw2ICsyMDk3LDcgQEAgcmVuZGVyaW5nL0dy
aWQuY3BwCiByZW5kZXJpbmcvR3JpZEJhc2VsaW5lQWxpZ25tZW50LmNwcAogcmVuZGVyaW5nL0dy
aWRMYXlvdXRGdW5jdGlvbnMuY3BwCiByZW5kZXJpbmcvR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGht
LmNwcAorcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCiByZW5kZXJpbmcvSGl0VGVzdExvY2F0
aW9uLmNwcAogcmVuZGVyaW5nL0hpdFRlc3RSZXN1bHQuY3BwCiByZW5kZXJpbmcvSGl0VGVzdGlu
Z1RyYW5zZm9ybVN0YXRlLmNwcApAQCAtMjE5OCw3ICsyMTk5LDYgQEAgcmVuZGVyaW5nL1JlbmRl
clZpZXcuY3BwCiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAogcmVuZGVyaW5nL1Jvb3RJbmxp
bmVCb3guY3BwCiByZW5kZXJpbmcvU2Nyb2xsQWxpZ25tZW50LmNwcAotcmVuZGVyaW5nL1NlbGVj
dGlvblJhbmdlRGF0YS5jcHAKIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAogcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAKIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMzODZmNzMyNWQ2MWQzNjM2NDkzMzQwYjY1MmY0YTJm
MTM5ZjVlMmMuLmExNDQxYmMyZWZlNTcyMTVkNjYxMTMzYjk3Mjk5MmYwYjI4N2JkOTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTQxNjgsNyArNDE2OCw3IEBACiAJCUNEQ0M5QkNGMjIzODdFOUEwMEZGQjUxQyAvKiBNZWRpYUNh
cGFiaWxpdGllc0RlY29kaW5nSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RDQzlCQ0UyMjM4N0U5QTAwRkZCNTFDIC8qIE1lZGlhQ2FwYWJpbGl0
aWVzRGVjb2RpbmdJbmZvLmggKi87IH07CiAJCUNEQ0M5QkQxMjIzODdFQUEwMEZGQjUxQyAvKiBN
ZWRpYUNhcGFiaWxpdGllc0VuY29kaW5nSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQzlCRDAyMjM4N0VBQTAwRkZCNTFDIC8qIE1lZGlhQ2Fw
YWJpbGl0aWVzRW5jb2RpbmdJbmZvLmggKi87IH07CiAJCUNEQ0Q0MUU4MUMzRERCMEEwMDk2NUQ5
OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IENEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50
UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRENGQUJCQjE4QzBBRTMx
MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQ0RDRkFCQkQxOEMwQUY3ODAwNkY4NDUwIC8qIEhp
Z2hsaWdodERhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IENEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1MCAvKiBIaWdobGlnaHREYXRhLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQ0RENzA4OTcxODM1OUY2
RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gQ0RENzA4OTUxODM1OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUNEREMxRTdB
MThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEREMxRTc5MThBOTUyRjMwMDI3
QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCAqLzsgfTsKIAkJQ0RERTAyRUQxOEIz
RUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RERTAyRUIxOEIzRUQ2RDAwQ0Y3
RkYxIC8qIENETVNlc3Npb25BVkZvdW5kYXRpb25PYmpDLm1tICovOyB9OwpAQCAtMTQwNjUsOCAr
MTQwNjUsOCBAQAogCQlDRENENDFFNTFDM0REQjA5MDA5NjVEOTkgLyogUGFyc2VkQ29udGVudFJh
bmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlZENvbnRl
bnRSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0Q0MUU2MUMzRERC
MDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gUGFyc2VkQ29udGVudFJhbmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0N0NDQSAvKiBFdmVudFRhcmdldEZhY3RvcnkuaW4g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZlbnRUYXJnZXRGYWN0b3J5LmluOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQlDRENGQUJCQjE4QzBBRTMxMDA2Rjg0NTAgLyogU2VsZWN0aW9u
UmFuZ2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdGlvblJh
bmdlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRENGQUJCQzE4QzBBRjE5
MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFNlbGVjdGlvblJhbmdlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1MCAvKiBIaWdobGlnaHREYXRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhpZ2hsaWdodERhdGEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RDRkFCQkMxOEMwQUYxOTAwNkY4NDUwIC8qIEhpZ2hs
aWdodERhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGlnaGxp
Z2h0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERDFFNTI1MTY3QkE1
NjQwMENFODIwQiAvKiBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tSZXByZXNlbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlDREQ3MDg5NDE4MzU5RjZFMDAyQjNEQzYgLyogU2FtcGxlTWFwLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNhbXBsZU1hcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNERDcwODk1MTgzNTlGNkYwMDJCM0RDNiAvKiBT
YW1wbGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxlTWFwLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzc3MCw2ICsyNzc3MCw4IEBACiAJCQkJ
RTExMkY0NkYxRTNBODVEODAwRDZDREZEIC8qIEdyaWQuaCAqLywKIAkJCQlFMTJERTcxNTFFNEI3
NDg3MDBGOUFDQ0YgLyogR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmNwcCAqLywKIAkJCQlFMTJE
RTcxNjFFNEI3NDg3MDBGOUFDQ0YgLyogR3JpZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmggKi8sCisJ
CQkJQ0RDRkFCQkMxOEMwQUYxOTAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuY3BwICovLAorCQkJ
CUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1MCAvKiBIaWdobGlnaHREYXRhLmggKi8sCiAJCQkJNDk2
OUIwRjAxM0QwQjMzRjAwREYzNTIxIC8qIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAgKi8s
CiAJCQkJNDk2OUIwRjExM0QwQjMzRjAwREYzNTIxIC8qIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0
ZS5oICovLAogCQkJCTJEODI4N0Y0MTZFNEEwMzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24u
Y3BwICovLApAQCAtMjc5OTIsOCArMjc5OTQsNiBAQAogCQkJCUE4Q0ZGNURBMEExNTVBMDUwMDBB
NDIzNCAvKiBSb290SW5saW5lQm94LmggKi8sCiAJCQkJNUQ5MjVCNjUwRjY0RDRERDAwQjg0N0Yw
IC8qIFNjcm9sbEFsaWdubWVudC5jcHAgKi8sCiAJCQkJNUQ5MjVCNjYwRjY0RDRERDAwQjg0N0Yw
IC8qIFNjcm9sbEFsaWdubWVudC5oICovLAotCQkJCUNEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAv
KiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICovLAotCQkJCUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1
MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAqLywKIAkJCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1
RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAgKi8sCiAJCQkJRTQ4OTQ0QTExODBCNTdEODAwRjE2
NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLywKIAkJCQkxMUUwNjdFQjFFNjI0NjEzMDAxNjJE
MTYgLyogU2ltcGxlTGluZUxheW91dENvdmVyYWdlLmNwcCAqLywKQEAgLTMwMTU2LDYgKzMwMTU2
LDcgQEAKIAkJCQlGNTVCM0RDMDEyNTFGMTJEMDAzRUYyNjkgLyogSGlkZGVuSW5wdXRUeXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5QzFENTRGNkMxMDBERDdDNjggLyogSElER2FtZXBh
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1QkUxOUUxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdh
bWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQ0RDRkFCQkQxOEMwQUY3ODAwNkY4
NDUwIC8qIEhpZ2hsaWdodERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTREMTU0MEMyNzVD
OEIwMDZCQzYxNyAvKiBIaXN0b3J5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0RDRTIwMjEwODA3
Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUx
NzQxRDExMEIwNzI1OUEwMEVENDQyQyAvKiBIaXN0b3J5SXRlbS5oIGluIEhlYWRlcnMgKi8sCkBA
IC0zMjM0MSw3ICszMjM0Miw2IEBACiAJCQkJOTc0RDJEQTUxNDZBNTM1RDAwRDUxRjhCIC8qIFNl
Y3VyaXR5UG9saWN5LmggaW4gSGVhZGVycyAqLywKIAkJCQkyRDVCQzQyNzE2Rjg4MkVFMDA3MDQ4
RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8qIFNlZ21lbnRlZFN0cmluZy5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJQ0RDRkFCQkQxOEMwQUY3ODAwNkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkVBODA3QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlv
blJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNDA1Qzg5MTkwQjAxNDQwMDc1NEY5NCAvKiBT
ZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0NEI0QkI0MTQxNjUw
RDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNrZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAppbmRleCBmMWU5YTBkMGQzZmEzMmNjNzEz
MTdiMGZhZWZiZDViYjI1YmFjMDliLi4yZDQxYjczMmYwZGZhOTc2NjAyOTRlYTBlZGViYjE1Yzk4
YzY2ZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAt
NDM2LDcgKzQzNiw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldE5lZWRzU2VsZWN0aW9uVXBk
YXRlKFJldmVhbFNlbGVjdGlvbkFmdGVyVXBkYXRlIHJldmVhbE1vCiAgICAgICAgIG1fc2VsZWN0
aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJldmVhbE1vZGU6OlJldmVhbDsKICAgICBtX3BlbmRp
bmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9m
cmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCi0gICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFy
KCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiB9CiAKIHZv
aWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFuZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRT
dGF0ZUNoYW5nZUludGVudCYgaW50ZW50KQpAQCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgRHJhZ0Nh
cmV0Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJlbW92ZWQoTm9kZSYgbm9kZSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKFJlbmRlclZpZXcqIHZpZXcgPSBub2RlLmRvY3VtZW50KCkucmVuZGVy
VmlldygpKQotICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOworICAgICAgICB2aWV3
LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogCiAgICAgY2xlYXIoKTsKIH0KQEAgLTU1
Nyw3ICs1NTcsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0
aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJlbW92ZWQsIGJvbwogCiAgICAgaWYgKGNsZWFyUmVu
ZGVyVHJlZVNlbGVjdGlvbikgewogICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IG5vZGUu
ZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpIHsKLSAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVj
dGlvbigpLmNsZWFyKCk7CisgICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5jbGVh
clNlbGVjdGlvbigpOwogCiAgICAgICAgICAgICAvLyBUcmlnZ2VyIGEgc2VsZWN0aW9uIHVwZGF0
ZSBzbyB0aGUgc2VsZWN0aW9uIHdpbGwgYmUgc2V0IGFnYWluLgogICAgICAgICAgICAgbV9zZWxl
Y3Rpb25SZXZlYWxJbnRlbnQgPSBBWFRleHRTdGF0ZUNoYW5nZUludGVudCgpOwpAQCAtMTU3MCw3
ICsxNTcwLDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkK
ICNlbmRpZgogCiAgICAgaWYgKGF1dG8qIHZpZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIo
KSkKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKKyAgICAgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKIAogICAgIHNldFNlbGVjdGlvbldpdGhvdXRVcGRh
dGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVjdGlvbigpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0
aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVkZWQsIENoYXJhY3RlckdyYW51bGFyaXR5
KTsKICAgICBtX3ByZXZpb3VzQ2FyZXROb2RlID0gbnVsbHB0cjsKQEAgLTIxNTQsNyArMjE1NCw3
IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogI2VuZGlmCiAKICAg
ICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCku
Y2xlYXIoKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjE3OSw3ICsyMTc5LDcgQEAgdm9pZCBGcmFtZVNl
bGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgpCiAgICAgICAgIFJlbmRlck9iamVjdCogZW5kUmVu
ZGVyZXIgPSBlbmRQb3MuZGVwcmVjYXRlZE5vZGUoKS0+cmVuZGVyZXIoKTsKICAgICAgICAgaW50
IGVuZE9mZnNldCA9IGVuZFBvcy5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgICAgICBB
U1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBlbmRPZmZzZXQgPj0gMCk7Ci0gICAgICAgIHZpZXct
PnNlbGVjdGlvbigpLnNldCh7IHN0YXJ0UmVuZGVyZXIsIGVuZFJlbmRlcmVyLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0
KSB9KTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHsgc3RhcnRSZW5k
ZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZVZpZXcuY3BwCmluZGV4IDIyNWE1ZGFlYTU1ZmMwM2ZkMGUxOGE1Mjc4NzQyMTM5ZGVi
ZjIwODguLmQ5OGVkMjA2Y2Q1NDVkNWE2ZGFhYjk5NmYzYzZiNzIwMTU3YzhmZmEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQyNDcsNyArNDI0Nyw3IEBAIHZvaWQgRnJhbWVWaWV3
OjpwYWludENvbnRlbnRzRm9yU25hcHNob3QoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25z
dCBJbnRSZWN0CiAgICAgaWYgKHNob3VsZFBhaW50U2VsZWN0aW9uID09IEV4Y2x1ZGVTZWxlY3Rp
b24pIHsKICAgICAgICAgZm9yIChhdXRvKiBmcmFtZSA9IG1fZnJhbWUucHRyKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KG1fZnJhbWUucHRyKCkpKSB7CiAgICAg
ICAgICAgICBpZiAoYXV0byogcmVuZGVyVmlldyA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkK
LSAgICAgICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5jbGVhcigpOworICAgICAg
ICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiAgICAg
ICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJ
bWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IDAw
YWM5OGZlMTY4Y2RmMzMwM2MxZjk3YmViODM4YzRhMWQ2ZmU0YjQuLjhiOTA1ZjQyYmQyYzg3MTEw
ZTE1ZThiNzUxMGRhZDUxN2FhMzkxMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RyYWdJbWFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdl
LmNwcApAQCAtMTQ1LDEyICsxNDUsMTIgQEAgc3RydWN0IFNjb3BlZEZyYW1lU2VsZWN0aW9uU3Rh
dGUgewogICAgIHsKICAgICAgICAgaWYgKGF1dG8qIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50
UmVuZGVyZXIoKSkgewogICAgICAgICAgICAgQVNTRVJUKHNlbGVjdGlvbik7Ci0gICAgICAgICAg
ICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5zZXQoc2VsZWN0aW9uLnZhbHVlKCksIFNlbGVjdGlv
blJhbmdlRGF0YTo6UmVwYWludE1vZGU6Ok5vdGhpbmcpOworICAgICAgICAgICAgcmVuZGVyVmll
dy0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbi52YWx1ZSgpLCBIaWdobGlnaHRE
YXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBjb25z
dCBGcmFtZSYgZnJhbWU7Ci0gICAgT3B0aW9uYWw8U2VsZWN0aW9uUmFuZ2VEYXRhOjpDb250ZXh0
PiBzZWxlY3Rpb247CisgICAgT3B0aW9uYWw8SGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2U+IHNl
bGVjdGlvbjsKIH07CiAKICNpZiAhUExBVEZPUk0oSU9TX0ZBTUlMWSkKQEAgLTE4Nyw3ICsxODcs
NyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBS
YW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFjawogICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0
LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CiAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAgIEFTU0VSVChzdGFydE9mZnNldCA+PSAwICYmIGVu
ZE9mZnNldCA+PSAwKTsKLSAgICB2aWV3LT5zZWxlY3Rpb24oKS5zZXQoeyBzdGFydFJlbmRlcmVy
LCBlbmRSZW5kZXJlciwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCkgfSwgU2VsZWN0aW9uUmFuZ2VEYXRhOjpSZXBhaW50
TW9kZTo6Tm90aGluZyk7CisgICAgdmlldy0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHsgc3Rh
cnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNl
dCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpIH0sIEhpZ2hsaWdodERhdGE6OlJl
cGFpbnRNb2RlOjpOb3RoaW5nKTsKICAgICAvLyBXZSBjYXB0dXJlIHVzaW5nIHNuYXBzaG90RnJh
bWVSZWN0KCkgYmVjYXVzZSB3ZSBmYWtlIHVwIHRoZSBzZWxlY3Rpb24gdXNpbmcKICAgICAvLyBG
cmFtZVZpZXcgYnV0IHNuYXBzaG90U2VsZWN0aW9uKCkgdXNlcyB0aGUgc2VsZWN0aW9uIGZyb20g
dGhlIEZyYW1lIGl0c2VsZi4KICAgICByZXR1cm4gY3JlYXRlRHJhZ0ltYWdlRnJvbVNuYXBzaG90
KHNuYXBzaG90RnJhbWVSZWN0KGZyYW1lLCB2aWV3LT5zZWxlY3Rpb24oKS5ib3VuZHNDbGlwcGVk
VG9WaXNpYmxlQ29udGVudCgpLCBvcHRpb25zKSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5b3V0LmNwcAppbmRleCBmNmZkMTZiNTQ5ZjFhNzQ4
MDRkNmZmNjMxYzkzMzE3MTg2MDI1MDVjLi4yOWViZTU2YWYwOTExMmIzMWU1MzY5ZmU4OWVhNzg5
NzRiZjc3ZTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExp
bmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxh
eW91dC5jcHAKQEAgLTMxMCw3ICszMTAsNyBAQCBSb290SW5saW5lQm94KiBDb21wbGV4TGluZUxh
eW91dDo6Y29uc3RydWN0TGluZShCaWRpUnVuTGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsCiAgICAg
ICAgIElubGluZUJveCogYm94ID0gY3JlYXRlSW5saW5lQm94Rm9yUmVuZGVyZXIoJnItPnJlbmRl
cmVyKCksIGlzT25seVJ1bik7CiAgICAgICAgIHItPnNldEJveChib3gpOwogCi0gICAgICAgIGlm
ICghcm9vdEhhc1NlbGVjdGVkQ2hpbGRyZW4gJiYgYm94LT5yZW5kZXJlcigpLnNlbGVjdGlvblN0
YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKQorICAgICAgICBpZiAoIXJvb3RI
YXNTZWxlY3RlZENoaWxkcmVuICYmIGJveC0+cmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpICE9
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCiAgICAgICAgICAgICByb290SGFz
U2VsZWN0ZWRDaGlsZHJlbiA9IHRydWU7CiAgICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBoYXZl
IG5vIHBhcmVudCBib3ggeWV0LCBvciBpZiB0aGUgcnVuIGlzIG5vdCBzaW1wbHkgYSBzaWJsaW5n
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKaW5kZXggMjI3NGU3YjRi
ZmE2ZjExZWVlNzRlNDNlNTRhZDAyNWFhN2JmMWI2MC4uYjU4NDkxOWQ0ZmQ3MDFmZTBjZTIwY2Y2
ZDJhZDNkMTVmNGVlNDNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3gu
Y3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYg
cGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExhCiAgICAgfQogCiAg
ICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQgPSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKLSAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsK
KyAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRl
OjpOb25lKSB7CiAgICAgICAgIHBhaW50U2VsZWN0aW9uKGNvbnRleHQsIHBhaW50T2Zmc2V0LCBs
aW5lU3R5bGUsIGZvbnQpOwogCiAgICAgICAgIC8vIFNlbGVjdCB0aGUgY29ycmVjdCBjb2xvciBm
b3IgcGFpbnRpbmcgdGhlIHRleHQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5o
CmluZGV4IDNmOThiN2Q4N2ZlMjJkNTI5MzI4NzczMGM4NmJjMjI4OGNhNDA2YTYuLjRmYTJkNTBm
NzI0NzVmMTcyM2M0MWY5NmE5MDBiY2ViNmY0ODA4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9FbGxpcHNpc0JveC5oCkBAIC0zMyw3ICszMyw3IEBAIHB1YmxpYzoKICAgICBFbGxpcHNpc0Jv
eChSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBBdG9tU3RyaW5nJiBlbGxpcHNpc1N0ciwgSW5saW5l
Rmxvd0JveCogcGFyZW50LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCB5LCBib29sIGZpcnN0
TGluZSwgYm9vbCBpc0hvcml6b250YWwsIElubGluZUJveCogbWFya3VwQm94KTsKICAgICB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9w
LCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwogICAgIGJvb2wgbm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0
aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRP
ZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0
QWN0aW9uKSBmaW5hbDsKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uU3RhdGUgcykgeyBtX3NlbGVjdGlvblN0YXRlID0gczsgfQorICAgIHZvaWQgc2V0
U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzKSB7IG1fc2VsZWN0
aW9uU3RhdGUgPSBzOyB9CiAgICAgSW50UmVjdCBzZWxlY3Rpb25SZWN0KCk7CiAKICAgICBSZW5k
ZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdygpIGNvbnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJs
b2NrRmxvdz4oSW5saW5lQm94OjpyZW5kZXJlcigpKTsgfQpAQCAtNDEsMTIgKzQxLDEyIEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBwYWludE1hcmt1cEJveChQYWludEluZm8mLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5p
dCBsaW5lQm90dG9tLCBjb25zdCBSZW5kZXJTdHlsZSYpOwogICAgIGludCBoZWlnaHQoKSBjb25z
dCB7IHJldHVybiBtX2hlaWdodDsgfQotICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUg
c2VsZWN0aW9uU3RhdGUoKSBvdmVycmlkZSB7IHJldHVybiBtX3NlbGVjdGlvblN0YXRlOyB9Cisg
ICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIG92ZXJyaWRl
IHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhdGU7IH0KICAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBGb250Q2FzY2FkZSYpOwogICAgIElubGluZUJveCogbWFya3VwQm94KCkgY29uc3Q7CiAK
ICAgICBib29sIG1fc2hvdWxkUGFpbnRNYXJrdXBCb3g7Ci0gICAgUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25TdGF0ZSBtX3NlbGVjdGlvblN0YXRlIHsgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25l
IH07CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBtX3NlbGVjdGlvblN0YXRlIHsg
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSB9OwogICAgIGludCBtX2hlaWdodDsK
ICAgICBBdG9tU3RyaW5nIG1fc3RyOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9IaWdobGlnaHREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdo
bGlnaHREYXRhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNWE0ZTU3ZDk1NTU2NWE4NGIzZmJhYWFjYWM4YjJl
Y2JiMmVlYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hp
Z2hsaWdodERhdGEuY3BwCkBAIC0wLDAgKzEsMzc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KA
nSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisg
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJIaWdobGlnaHREYXRhLmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5jbHVkZSAiUG9zaXRpb24uaCIKKyNpbmNsdWRlICJS
YW5nZS5oIgorI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVzcGFjZSB7IC8vIFNlZSBidWcgIzE3NzgwOC4KKwor
c3RydWN0IFNlbGVjdGlvbkRhdGEgeworICAgIHVzaW5nIFJlbmRlcmVyTWFwID0gSGFzaE1hcDxS
ZW5kZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4+OworICAg
IHVzaW5nIFJlbmRlckJsb2NrTWFwID0gSGFzaE1hcDxjb25zdCBSZW5kZXJCbG9jayosIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+PjsKKworICAgIE9wdGlvbmFsPHVu
c2lnbmVkPiBzdGFydE9mZnNldDsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0Owor
ICAgIFJlbmRlcmVyTWFwIHJlbmRlcmVyczsKKyAgICBSZW5kZXJCbG9ja01hcCBibG9ja3M7Cit9
OworCitjbGFzcyBIaWdobGlnaHRJdGVyYXRvciB7CitwdWJsaWM6CisgICAgSGlnaGxpZ2h0SXRl
cmF0b3IoUmVuZGVyT2JqZWN0KiBzdGFydCkKKyAgICAgICAgOiBtX2N1cnJlbnQoc3RhcnQpCisg
ICAgeworICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICB9CisgICAgCisgICAgUmVuZGVy
T2JqZWN0KiBjdXJyZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnQ7
CisgICAgfQorICAgIAorICAgIFJlbmRlck9iamVjdCogbmV4dCgpCisgICAgeworICAgICAgICBS
ZW5kZXJPYmplY3QqIGN1cnJlbnRTcGFuID0gbV9zcGFubmVyU3RhY2suaXNFbXB0eSgpID8gbnVs
bHB0ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bhbm5lcigpOworICAgICAgICBtX2N1cnJl
bnQgPSBtX2N1cnJlbnQtPm5leHRJblByZU9yZGVyKGN1cnJlbnRTcGFuKTsKKyAgICAgICAgY2hl
Y2tGb3JTcGFubmVyKCk7CisgICAgICAgIGlmICghbV9jdXJyZW50ICYmIGN1cnJlbnRTcGFuKSB7
CisgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBsYWNlaG9sZGVyID0gbV9zcGFubmVyU3RhY2su
bGFzdCgpOworICAgICAgICAgICAgbV9zcGFubmVyU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXItPm5leHRJblByZU9yZGVyKCk7CisgICAgICAg
ICAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9jdXJy
ZW50OworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNoZWNrRm9yU3Bhbm5lcigpCisgICAg
eworICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPiht
X2N1cnJlbnQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiBwbGFjZWhvbGRl
ciA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqbV9jdXJy
ZW50KTsKKyAgICAgICAgbV9zcGFubmVyU3RhY2suYXBwZW5kKCZwbGFjZWhvbGRlcik7CisgICAg
ICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5uZXIoKTsKKyAgICB9CisKKyAgICBSZW5k
ZXJPYmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8UmVuZGVyTXVsdGlD
b2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5uZXJTdGFjazsKK307CisKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCitzdGF0aWMgUmVuZGVyT2JqZWN0KiByZW5kZXJlckFmdGVyT2Zm
c2V0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAg
ICBhdXRvKiBjaGlsZCA9IHJlbmRlcmVyLmNoaWxkQXQob2Zmc2V0KTsKKyAgICByZXR1cm4gY2hp
bGQgPyBjaGlsZCA6IHJlbmRlcmVyLm5leHRJblByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOworfQor
CitzdGF0aWMgYm9vbCBpc1ZhbGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24oY29uc3QgUmVuZGVyT2Jq
ZWN0JiByZW5kZXJlciwgY29uc3QgSGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2UmIHNlbGVjdGlv
bikKK3sKKyAgICByZXR1cm4gKHJlbmRlcmVyLmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8ICZyZW5k
ZXJlciA9PSBzZWxlY3Rpb24uc3RhcnQoKSB8fCAmcmVuZGVyZXIgPT0gc2VsZWN0aW9uLmVuZCgp
KQorICAgICAgICAmJiByZW5kZXJlci5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGU6Ok5vbmUKKyAgICAgICAgJiYgcmVuZGVyZXIuY29udGFpbmluZ0Jsb2Nr
KCk7Cit9CisKK3N0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgYXV0byogY29udGFpbmluZ0Jsb2Nr
ID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7CisgICAgcmV0dXJuIGlzPFJlbmRlclZpZXc+
KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmluZ0Jsb2NrOworfQorCitzdGF0
aWMgU2VsZWN0aW9uRGF0YSBjb2xsZWN0U2VsZWN0aW9uRGF0YShjb25zdCBIaWdobGlnaHREYXRh
OjpSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQoreworICAg
IFNlbGVjdGlvbkRhdGEgb2xkU2VsZWN0aW9uRGF0YSB7IHNlbGVjdGlvbi5zdGFydE9mZnNldCgp
LCBzZWxlY3Rpb24uZW5kT2Zmc2V0KCksIHsgfSwgeyB9IH07CisgICAgLy8gQmxvY2tzIGNvbnRh
aW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9u
IHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgorICAgIC8v
IEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1p
bmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhl
cndpc2UKKyAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBz
YW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCisgICAgYXV0byogc3RhcnQgPSBz
ZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAg
IGlmIChzZWxlY3Rpb24uZW5kKCkpCisgICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVyT2Zmc2V0
KCpzZWxlY3Rpb24uZW5kKCksIHNlbGVjdGlvbi5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBI
aWdobGlnaHRJdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUgKHN0
YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKKyAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNl
bGVjdGlvbigqc3RhcnQsIHNlbGVjdGlvbikpIHsKKyAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUg
cmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkg
bXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgorICAgICAgICAgICAgb2xkU2VsZWN0aW9uRGF0YS5y
ZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFy
dCwgdHJ1ZSkpOworICAgICAgICAgICAgaWYgKHJlcGFpbnREaWZmZXJlbmNlKSB7CisgICAgICAg
ICAgICAgICAgZm9yIChhdXRvKiBibG9jayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldygqc3Rh
cnQpOyBibG9jazsgYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKmJsb2NrKSkgewor
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBibG9ja0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLmJs
b2Nrcy5hZGQoYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGJsb2NrSW5mbykKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0
aW9uSW5mbz4oKmJsb2NrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7CisgICAgfQor
ICAgIHJldHVybiBvbGRTZWxlY3Rpb25EYXRhOworfQorCitIaWdobGlnaHREYXRhOjpIaWdobGln
aHREYXRhKFJlbmRlclZpZXcmIHZpZXcpCisgICAgOiBtX3JlbmRlclZpZXcodmlldykKKyNpZiBF
TkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKHZp
ZXcpCisjZW5kaWYKK3sKK30KKwordm9pZCBIaWdobGlnaHREYXRhOjpzZXRSZW5kZXJSYW5nZShj
b25zdCBSZW5kZXJSYW5nZSYgcmVuZGVyUmFuZ2UpCit7CisgICAgQVNTRVJUKHJlbmRlclJhbmdl
LnN0YXJ0KCkgJiYgcmVuZGVyUmFuZ2UuZW5kKCkpOworICAgIG1fcmVuZGVyUmFuZ2UgPSByZW5k
ZXJSYW5nZTsKK30KKworUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBIaWdobGlnaHREYXRh
OjpoaWdobGlnaHRTdGF0ZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7Cisg
ICAgaWYgKCZyZW5kZXJlciA9PSBtX3JlbmRlclJhbmdlLnN0YXJ0KCkpIHsKKyAgICAgICAgaWYg
KG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSAmJiBtX3JlbmRlclJhbmdlLmVuZCgpICYmIG1fcmVuZGVy
UmFuZ2Uuc3RhcnQoKSA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJu
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGg7CisgICAgICAgIGlmIChtX3JlbmRl
clJhbmdlLnN0YXJ0KCkpCisgICAgICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZTo6U3RhcnQ7CisgICAgfQorICAgIGlmICgmcmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5n
ZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVu
ZDsKKworICAgIFJlbmRlck9iamVjdCogaGlnaGxpZ2h0RW5kID0gbnVsbHB0cjsKKyAgICBhdXRv
KiBoaWdobGlnaHREYXRhRW5kID0gbV9yZW5kZXJSYW5nZS5lbmQoKTsKKyAgICBpZiAoaGlnaGxp
Z2h0RGF0YUVuZCkKKyAgICAgICAgaGlnaGxpZ2h0RW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgq
aGlnaGxpZ2h0RGF0YUVuZCwgbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAg
ICBIaWdobGlnaHRJdGVyYXRvciBoaWdobGlnaHRJdGVyYXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0
KCkpOworICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gbV9yZW5kZXJSYW5nZS5zdGFy
dCgpOyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2Uu
ZW5kKCk7IGN1cnJlbnRSZW5kZXJlciA9IGhpZ2hsaWdodEl0ZXJhdG9yLm5leHQoKSkgeworICAg
ICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSB8fCBjdXJy
ZW50UmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCZyZW5kZXJlciA9PSBjdXJyZW50UmVu
ZGVyZXIpCisgICAgICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
SW5zaWRlOworICAgIH0KKyAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Tm9uZTsKK30KKwordm9pZCBIaWdobGlnaHREYXRhOjpzZXRTZWxlY3Rpb24oY29uc3QgUmVuZGVy
UmFuZ2UmIHNlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3sKKyAgICBp
ZiAoKHNlbGVjdGlvbi5zdGFydCgpICYmICFzZWxlY3Rpb24uZW5kKCkpIHx8IChzZWxlY3Rpb24u
ZW5kKCkgJiYgIXNlbGVjdGlvbi5zdGFydCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEp1
c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24gaGFzbid0IGNoYW5nZWQuCisgICAgYXV0byBpc0Nh
cmV0ID0gbV9yZW5kZXJWaWV3LmZyYW1lKCkuc2VsZWN0aW9uKCkuaXNDYXJldCgpOworICAgIGlm
IChzZWxlY3Rpb24gPT0gbV9yZW5kZXJSYW5nZSAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09IGlz
Q2FyZXQpCisgICAgICAgIHJldHVybjsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAg
ICAvLyBDbGVhciB0aGUgY3VycmVudCByZWN0cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRo
ZSBuZXcgcmVjdHMgd2UgYXJlIGFib3V0IHRvIGdhdGhlci4KKyAgICAvLyBUaGUgTm90aWZpZXIg
dXBkYXRlcyB0aGUgRWRpdG9yIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ry
b3llZC4KKyAgICBhdXRvIHJlY3ROb3RpZmllciA9IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNs
ZWFyQW5kQ3JlYXRlTm90aWZpZXIoKTsKKyNlbmRpZgorICAgIG1fc2VsZWN0aW9uV2FzQ2FyZXQg
PSBpc0NhcmV0OworICAgIGFwcGx5U2VsZWN0aW9uKHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50TW9k
ZSk7Cit9CisKK3ZvaWQgSGlnaGxpZ2h0RGF0YTo6Y2xlYXJTZWxlY3Rpb24oKQoreworICAgIG1f
cmVuZGVyVmlldy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgc2V0
U2VsZWN0aW9uKHsgfSwgSGlnaGxpZ2h0RGF0YTo6UmVwYWludE1vZGU6Ok5ld01pbnVzT2xkKTsK
K30KKwordm9pZCBIaWdobGlnaHREYXRhOjpyZXBhaW50KCkgY29uc3QKK3sKKyAgICBIYXNoU2V0
PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxvY2tzOworICAgIFJlbmRlck9iamVjdCogZW5kID0g
bnVsbHB0cjsKKyAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgZW5kID0gcmVu
ZGVyZXJBZnRlck9mZnNldCgqbV9yZW5kZXJSYW5nZS5lbmQoKSwgbV9yZW5kZXJSYW5nZS5lbmRP
ZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBIaWdobGlnaHRJdGVyYXRvciBoaWdobGlnaHRJdGVyYXRv
cihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOworICAgIGZvciAoYXV0byogcmVuZGVyZXIgPSBoaWdo
bGlnaHRJdGVyYXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYmIHJlbmRlcmVyICE9IGVuZDsgcmVu
ZGVyZXIgPSBoaWdobGlnaHRJdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKCFyZW5kZXJl
ci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIgIT0gbV9yZW5kZXJSYW5nZS5zdGFy
dCgpICYmIHJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgaWYgKHJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqcmVuZGVyZXIsIHRydWUpLnJlcGFpbnQoKTsKKyAgICAg
ICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBt
YXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAgIGZvciAo
YXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKnJlbmRlcmVyKTsgYmxvY2s7
IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9jaykpIHsKKyAgICAgICAgICAg
IGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRyeSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIFJlbmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVl
KS5yZXBhaW50KCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK0ludFJlY3QgSGlnaGxpZ2h0RGF0
YTo6Y29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVu
dCkgY29uc3QKK3sKKyAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCByZW5kZXJlcnM7Cisg
ICAgYXV0byogc3RhcnQgPSBtX3JlbmRlclJhbmdlLnN0YXJ0KCk7CisgICAgUmVuZGVyT2JqZWN0
KiBzdG9wID0gbnVsbHB0cjsKKyAgICBpZiAobV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAg
c3RvcCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKm1fcmVuZGVyUmFuZ2UuZW5kKCksIG1fcmVuZGVy
UmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWUoKSk7CisgICAgSGlnaGxpZ2h0SXRlcmF0b3IgaGlnaGxp
Z2h0SXRlcmF0b3Ioc3RhcnQpOworICAgIHdoaWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7
CisgICAgICAgIGlmICgoc3RhcnQtPmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8IHN0YXJ0ID09IG1f
cmVuZGVyUmFuZ2Uuc3RhcnQoKSB8fCBzdGFydCA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAg
ICAgICAgICAgJiYgc3RhcnQtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZTo6Tm9uZSkgeworICAgICAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJs
ZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4
YW1pbmVkIGFzIHdlbGwuCisgICAgICAgICAgICByZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5p
cXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFydCwgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPT0g
Q2xpcFRvVmlzaWJsZUNvbnRlbnQ6OlllcykpOworICAgICAgICAgICAgYXV0byogYmxvY2sgPSBz
dGFydC0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICB3aGlsZSAoYmxvY2sgJiYgIWlz
PFJlbmRlclZpZXc+KCpibG9jaykpIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2NrSW5mbyA9IHJlbmRlcmVycy5hZGQoYmxvY2ssIG51
bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBt
YWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpibG9jaywgY2xpcFRvVmlzaWJsZUNvbnRl
bnQgPT0gQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Olllcyk7CisgICAgICAgICAgICAgICAgYmxvY2sg
PSBibG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgc3RhcnQgPSBoaWdobGlnaHRJdGVyYXRvci5uZXh0KCk7CisgICAgfQorCisgICAgLy8g
Tm93IGNyZWF0ZSBhIHNpbmdsZSBib3VuZGluZyBib3ggcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSB3
aG9sZSBzZWxlY3Rpb24uCisgICAgTGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0OworICAgIGZvciAo
YXV0byYgaW5mbyA6IHJlbmRlcmVycy52YWx1ZXMoKSkgeworICAgICAgICAvLyBSZW5kZXJTZWxl
Y3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29u
dGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29yZGluYXRlcy4KKyAgICAgICAgTGF5b3V0UmVjdCBj
dXJyZW50UmVjdCA9IGluZm8tPnJlY3QoKTsKKyAgICAgICAgaWYgKGF1dG8qIHJlcGFpbnRDb250
YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFpbmVyKCkpIHsKKyAgICAgICAgICAgIEZsb2F0UXVh
ZCBhYnNRdWFkID0gcmVwYWludENvbnRhaW5lci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJl
Y3QoY3VycmVudFJlY3QpKTsKKyAgICAgICAgICAgIGN1cnJlbnRSZWN0ID0gYWJzUXVhZC5lbmNs
b3NpbmdCb3VuZGluZ0JveCgpOworICAgICAgICB9CisgICAgICAgIHNlbGVjdGlvblJlY3QudW5p
dGUoY3VycmVudFJlY3QpOworICAgIH0KKyAgICByZXR1cm4gc25hcHBlZEludFJlY3Qoc2VsZWN0
aW9uUmVjdCk7Cit9CisKK3ZvaWQgSGlnaGxpZ2h0RGF0YTo6YXBwbHlTZWxlY3Rpb24oY29uc3Qg
UmVuZGVyUmFuZ2UmIG5ld1NlbGVjdGlvbiwgUmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkK
K3sKKyAgICBhdXRvIG9sZFNlbGVjdGlvbkRhdGEgPSBjb2xsZWN0U2VsZWN0aW9uRGF0YShtX3Jl
bmRlclJhbmdlLCBibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOwor
ICAgIC8vIFJlbW92ZSBjdXJyZW50IHNlbGVjdGlvbi4KKyAgICBmb3IgKGF1dG8qIHJlbmRlcmVy
IDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMua2V5cygpKQorICAgICAgICByZW5kZXJlci0+
c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpO
b25lKTsKKyAgICBtX3JlbmRlclJhbmdlID0gbmV3U2VsZWN0aW9uOworICAgIGF1dG8qIHNlbGVj
dGlvblN0YXJ0ID0gbV9yZW5kZXJSYW5nZS5zdGFydCgpOworICAgIC8vIFVwZGF0ZSB0aGUgc2Vs
ZWN0aW9uIHN0YXR1cyBvZiBhbGwgb2JqZWN0cyBiZXR3ZWVuIHNlbGVjdGlvblN0YXJ0IGFuZCBz
ZWxlY3Rpb25FbmQKKyAgICBpZiAoc2VsZWN0aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgPT0g
bV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgc2VsZWN0aW9uU3RhcnQtPnNldFNlbGVjdGlv
blN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aCk7CisgICAg
ZWxzZSB7CisgICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCkKKyAgICAgICAgICAgIHNlbGVjdGlv
blN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGU6OlN0YXJ0KTsKKyAgICAgICAgaWYgKGF1dG8qIGVuZCA9IG1fcmVuZGVyUmFuZ2UuZW5k
KCkpCisgICAgICAgICAgICBlbmQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKTsKKyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIHNl
bGVjdGlvbkVuZCA9IG51bGxwdHI7CisgICAgYXV0byogc2VsZWN0aW9uRGF0YUVuZCA9IG1fcmVu
ZGVyUmFuZ2UuZW5kKCk7CisgICAgaWYgKHNlbGVjdGlvbkRhdGFFbmQpCisgICAgICAgIHNlbGVj
dGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKnNlbGVjdGlvbkRhdGFFbmQsIG1fcmVuZGVy
UmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWUoKSk7CisgICAgSGlnaGxpZ2h0SXRlcmF0b3Igc2VsZWN0
aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOworICAgIGZvciAoYXV0byogY3VycmVudFJlbmRl
cmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIg
IT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0
KCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRSZW5kZXJlciA9PSBzZWxlY3Rpb25TdGFydCB8fCBj
dXJyZW50UmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY3VycmVudFJlbmRlcmVyLT5zZXRTZWxl
Y3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSk7
CisgICAgfQorCisgICAgaWYgKGJsb2NrUmVwYWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhp
bmcpCisgICAgICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fw
c0JvdW5kcygpOworCisgICAgLy8gTm93IHRoYXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVl
biB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQKKyAgICAv
LyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMgbGlzdC4KKyAgICBTZWxlY3Rpb25EYXRhOjpS
ZW5kZXJlck1hcCBuZXdTZWxlY3RlZFJlbmRlcmVyczsKKyAgICBTZWxlY3Rpb25EYXRhOjpSZW5k
ZXJCbG9ja01hcCBuZXdTZWxlY3RlZEJsb2NrczsKKyAgICBzZWxlY3Rpb25JdGVyYXRvciA9IEhp
Z2hsaWdodEl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnRS
ZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRl
cmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3Iu
bmV4dCgpKSB7CisgICAgICAgIGlmIChpc1ZhbGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24oKmN1cnJl
bnRSZW5kZXJlciwgbV9yZW5kZXJSYW5nZSkpIHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiBzZWxlY3Rpb25JbmZvID0gbWFrZVVuaXF1ZTxSZW5kZXJT
ZWxlY3Rpb25JbmZvPigqY3VycmVudFJlbmRlcmVyLCB0cnVlKTsKKyNpZiBFTkFCTEUoU0VSVklD
RV9DT05UUk9MUykKKyAgICAgICAgICAgIGZvciAoYXV0byYgcmVjdCA6IHNlbGVjdGlvbkluZm8t
PmNvbGxlY3RlZFNlbGVjdGlvblJlY3RzKCkpCisgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25S
ZWN0R2F0aGVyZXIuYWRkUmVjdChzZWxlY3Rpb25JbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIHJl
Y3QpOworICAgICAgICAgICAgaWYgKCFjdXJyZW50UmVuZGVyZXItPmlzVGV4dE9yTGluZUJyZWFr
KCkpCisgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuc2V0VGV4dE9ubHko
ZmFsc2UpOworI2VuZGlmCisgICAgICAgICAgICBuZXdTZWxlY3RlZFJlbmRlcmVycy5zZXQoY3Vy
cmVudFJlbmRlcmVyLCBXVEZNb3ZlKHNlbGVjdGlvbkluZm8pKTsKKyAgICAgICAgICAgIGF1dG8q
IGNvbnRhaW5pbmdCbG9jayA9IGN1cnJlbnRSZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7Cisg
ICAgICAgICAgICB3aGlsZSAoY29udGFpbmluZ0Jsb2NrICYmICFpczxSZW5kZXJWaWV3PigqY29u
dGFpbmluZ0Jsb2NrKSkgeworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJC
bG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY29u
dGFpbmluZ0Jsb2NrLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICAgICAg
aWYgKGJsb2NrSW5mbykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1ZTxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpjb250
YWluaW5nQmxvY2spOworICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5p
bmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
CisgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuYWRkR2FwUmVjdHMoYmxv
Y2tJbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIGJsb2NrSW5mby0+cmVjdHMoKSk7CisjZW5kaWYK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChibG9ja1JlcGFpbnRN
b2RlID09IFJlcGFpbnRNb2RlOjpOb3RoaW5nKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBI
YXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVkIG9iamVjdHMgY2hhbmdlZCBjb21wYXJlZCB0byB0
aGUgbmV3IHNlbGVjdGlvbj8KKyAgICBmb3IgKGF1dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDog
b2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMpIHsKKyAgICAgICAgYXV0byogcmVuZGVyZXIgPSBz
ZWxlY3RlZFJlbmRlcmVySW5mby5rZXk7CisgICAgICAgIGF1dG8qIG5ld0luZm8gPSBuZXdTZWxl
Y3RlZFJlbmRlcmVycy5nZXQocmVuZGVyZXIpOworICAgICAgICBhdXRvKiBvbGRJbmZvID0gc2Vs
ZWN0ZWRSZW5kZXJlckluZm8udmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICghbmV3SW5mbyB8fCBv
bGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0g
bmV3SW5mby0+c3RhdGUoKQorICAgICAgICAgICAgfHwgKG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSA9
PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRhLnN0YXJ0T2Zmc2V0ICE9IG1fcmVuZGVyUmFu
Z2Uuc3RhcnRPZmZzZXQoKSkKKyAgICAgICAgICAgIHx8IChtX3JlbmRlclJhbmdlLmVuZCgpID09
IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRhdGEuZW5kT2Zmc2V0ICE9IG1fcmVuZGVyUmFuZ2Uu
ZW5kT2Zmc2V0KCkpKSB7CisgICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7CisgICAgICAg
ICAgICBpZiAobmV3SW5mbykgeworICAgICAgICAgICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsK
KyAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZFJlbmRlcmVycy5yZW1vdmUocmVuZGVyZXIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQW55IG5ldyBvYmplY3Rz
IHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQg
c28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQuCisgICAgZm9yIChhdXRvJiBzZWxlY3RlZFJlbmRl
cmVySW5mbyA6IG5ld1NlbGVjdGVkUmVuZGVyZXJzKQorICAgICAgICBzZWxlY3RlZFJlbmRlcmVy
SW5mby52YWx1ZS0+cmVwYWludCgpOworCisgICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9j
a3MgY2hhbmdlZD8KKyAgICBmb3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0
aW9uRGF0YS5ibG9ja3MpIHsKKyAgICAgICAgYXV0byogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5m
by5rZXk7CisgICAgICAgIGF1dG8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxv
Y2spOworICAgICAgICBhdXRvKiBvbGRJbmZvID0gc2VsZWN0ZWRCbG9ja0luZm8udmFsdWUuZ2V0
KCk7CisgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8t
PnJlY3RzKCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7CisgICAg
ICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICBpZiAobmV3SW5mbykgewor
ICAgICAgICAgICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICBuZXdT
ZWxlY3RlZEJsb2Nrcy5yZW1vdmUoYmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQW55IG5ldyBibG9ja3MgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQg
aW4gdGhlIG9sZCBibG9ja3MgZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgor
ICAgIGZvciAoYXV0byYgc2VsZWN0ZWRCbG9ja0luZm8gOiBuZXdTZWxlY3RlZEJsb2NrcykKKyAg
ICAgICAgc2VsZWN0ZWRCbG9ja0luZm8udmFsdWUtPnJlcGFpbnQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hs
aWdodERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYTdlODQ5NGRmYmQ0M2FhYzY4NTkxYjA2ZGNmZDk0YTNlNzM5NDI1MQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmgKQEAg
LTAsMCArMSwxMDcgQEAKKyAvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
CisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8u
aCIKKworI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQorI2luY2x1ZGUgIlNlbGVjdGlvblJl
Y3RHYXRoZXJlci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IE9s
ZFNlbGVjdGlvbkRhdGE7CisgICAgCitjbGFzcyBIaWdobGlnaHREYXRhIHsKK3B1YmxpYzoKKyAg
ICBIaWdobGlnaHREYXRhKFJlbmRlclZpZXcmKTsKKyAgICAKKyAgICBjbGFzcyBSZW5kZXJSYW5n
ZSB7CisgICAgcHVibGljOgorICAgICAgICBSZW5kZXJSYW5nZSgpID0gZGVmYXVsdDsKKyAgICAg
ICAgUmVuZGVyUmFuZ2UoUmVuZGVyT2JqZWN0KiBzdGFydCwgUmVuZGVyT2JqZWN0KiBlbmQsIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCisgICAgICAgICAgICA6IG1f
c3RhcnQobWFrZVdlYWtQdHIoc3RhcnQpKQorICAgICAgICAgICAgLCBtX2VuZChtYWtlV2Vha1B0
cihlbmQpKQorICAgICAgICAgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQorICAgICAg
ICAgICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LmdldCgp
OyB9CisgICAgICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQuZ2V0
KCk7IH0KKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGFydE9mZnNldDsgfQorICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zm
c2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KKworICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgUmVuZGVyUmFuZ2UmIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9zdGFydCA9PSBvdGhlci5tX3N0YXJ0ICYmIG1fZW5kID09IG90aGVyLm1f
ZW5kICYmIG1fc3RhcnRPZmZzZXQgPT0gb3RoZXIubV9zdGFydE9mZnNldCAmJiBtX2VuZE9mZnNl
dCA9PSBvdGhlci5tX2VuZE9mZnNldDsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1fc3RhcnQ7CisgICAgICAgIFdlYWtQdHI8UmVuZGVy
T2JqZWN0PiBtX2VuZDsKKyAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fc3RhcnRPZmZzZXQ7
CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX2VuZE9mZnNldDsKKyAgICB9OworICAgIAor
ICAgIHZvaWQgc2V0UmVuZGVyUmFuZ2UoY29uc3QgUmVuZGVyUmFuZ2UmKTsKKyAgICAKKyAgICBl
bnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9ST2xkLCBOZXdNaW51c09sZCwgTm90aGluZyB9
OworICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNvbnN0IFJlbmRlclJhbmdlJiwgUmVwYWludE1vZGUg
PSBSZXBhaW50TW9kZTo6TmV3WE9ST2xkKTsKKyAgICBjb25zdCBSZW5kZXJSYW5nZSYgZ2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9yZW5kZXJSYW5nZTsgfQorCisgICAgUmVuZGVyT2JqZWN0KiBzdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKTsgfQorICAgIFJlbmRlck9i
amVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJSYW5nZS5lbmQoKTsgfQorCisgICAg
dW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlbmRlclJhbmdlLnN0YXJ0
T2Zmc2V0KCkpOyByZXR1cm4gbV9yZW5kZXJSYW5nZS5zdGFydE9mZnNldCgpLnZhbHVlT3IoMCk7
IH0KKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQoKSBjb25zdCB7IEFTU0VSVChtX3JlbmRlclJhbmdl
LmVuZE9mZnNldCgpKTsgcmV0dXJuIG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWVPcigw
KTsgfQorCisgICAgdm9pZCBjbGVhclNlbGVjdGlvbigpOworICAgIEludFJlY3QgYm91bmRzKCkg
Y29uc3QgeyByZXR1cm4gY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8pOyB9
CisgICAgSW50UmVjdCBib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29udGVudCgpIGNvbnN0IHsgcmV0
dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Olllcyk7IH0KKyAgICB2b2lk
IHJlcGFpbnQoKSBjb25zdDsKKyAgICAKKyAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRl
IGhpZ2hsaWdodFN0YXRlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0Jik7CisKK3ByaXZhdGU6Cisg
ICAgZW51bSBjbGFzcyBDbGlwVG9WaXNpYmxlQ29udGVudCB7IFllcywgTm8gfTsKKyAgICBJbnRS
ZWN0IGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0OworICAgIHZvaWQg
YXBwbHlTZWxlY3Rpb24oY29uc3QgUmVuZGVyUmFuZ2UmLCBSZXBhaW50TW9kZSk7CisKKyAgICBj
b25zdCBSZW5kZXJWaWV3JiBtX3JlbmRlclZpZXc7CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJP
TFMpCisgICAgU2VsZWN0aW9uUmVjdEdhdGhlcmVyIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyOwor
I2VuZGlmCisgICAgUmVuZGVyUmFuZ2UgbV9yZW5kZXJSYW5nZTsKKyAgICBib29sIG1fc2VsZWN0
aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAppbmRleCA4Nzk3NzRhMGI4MDEzMGNjMDU3
N2UyMmVjZmFhNDAyM2QxMjVhNDUzLi4xYTQ1NzliMjkyNDQwZWRkNGY2ZWRjM2Q2MzYwMDQ3MmFk
ZmQ4MTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcApAQCAtMjU3LDcg
KzI1Nyw3IEBAIElubGluZUJveCogSW5saW5lQm94OjpwcmV2aW91c0xlYWZPbkxpbmVJZ25vcmlu
Z0xpbmVCcmVhaygpIGNvbnN0CiAgICAgcmV0dXJuIGxlYWY7CiB9CiAKLVJlbmRlck9iamVjdDo6
U2VsZWN0aW9uU3RhdGUgSW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSgpCitSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlIElubGluZUJveDo6c2VsZWN0aW9uU3RhdGUoKQogewogICAgIHJldHVy
biBtX3JlbmRlcmVyLnNlbGVjdGlvblN0YXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lQm94LmgKaW5kZXggMmFiMTEyNWI2ZGFkYmRjYjZiYjMyMjEzM2Q3ODI1MTRkMzM4ZWFiYy4u
NTlhMTFkNmE0OGE4MzM4ZDdlMGJhNWU2NDQxNzI5YjFmNDc5OWViNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9JbmxpbmVCb3guaApAQCAtMjMwLDcgKzIzMCw3IEBAIHB1YmxpYzoKIAogICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBkaXJ0eUxpbmVCb3hlcygpOwogICAgIAotICAgIFdF
QkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rp
b25TdGF0ZSgpOworICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVh
bCBib29sIGNhbkFjY29tbW9kYXRlRWxsaXBzaXMoYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGlu
dCBlbGxpcHNpc1dpZHRoKSBjb25zdDsKICAgICAvLyB2aXNpYmxlTGVmdEVkZ2UsIHZpc2libGVS
aWdodEVkZ2UgYXJlIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAppbmRleCBjMzE2NDk0YmRiMzZkOTE3
YmFkZDdiNjUwZTBiZWI5ZDlmYmViODIyLi4zYWIxYTk1YjdjNTAxMmQwMGViYWUzZGNmNWJkNDIy
ZmY1MWIxZjUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxv
d0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3Bw
CkBAIC0xNTA1LDkgKzE1MDUsOSBAQCBJbmxpbmVCb3gqIElubGluZUZsb3dCb3g6Omxhc3RMZWFm
RGVzY2VuZGFudCgpIGNvbnN0CiAgICAgcmV0dXJuIGxlYWY7CiB9CiAKLVJlbmRlck9iamVjdDo6
U2VsZWN0aW9uU3RhdGUgSW5saW5lRmxvd0JveDo6c2VsZWN0aW9uU3RhdGUoKQorUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZSBJbmxpbmVGbG93Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7Ci0g
ICAgcmV0dXJuIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKyAgICByZXR1cm4gUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKIH0KIAogYm9vbCBJbmxpbmVGbG93Qm94Ojpj
YW5BY2NvbW1vZGF0ZUVsbGlwc2lzKGJvb2wgbHRyLCBpbnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBz
aXNXaWR0aCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCmlu
ZGV4IGQzNmExNWI3NDk3ZDZjYTRlMDJkOTg4NTgzOWViNGQ0N2FhYzZlN2YuLjQwNTU1ZmY1NGUw
MzEwZmY3OWRkOWNlOTMyMWRiYTJmMGFhNzk5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZUZsb3dCb3guaApAQCAtMjAxLDcgKzIwMSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIHJlbW92ZUNoaWxkKElubGluZUJveCogY2hpbGQpOwogCi0gICAgUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIG92ZXJyaWRlOworICAgIFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBvdmVycmlkZTsKIAogICAgIGJvb2wg
Y2FuQWNjb21tb2RhdGVFbGxpcHNpcyhib29sIGx0ciwgaW50IGJsb2NrRWRnZSwgaW50IGVsbGlw
c2lzV2lkdGgpIGNvbnN0IGZpbmFsOwogICAgIGZsb2F0IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBs
dHIsIGZsb2F0IGJsb2NrTGVmdEVkZ2UsIGZsb2F0IGJsb2NrUmlnaHRFZGdlLCBmbG9hdCBlbGxp
cHNpc1dpZHRoLCBmbG9hdCAmdHJ1bmNhdGVkV2lkdGgsIGJvb2wmKSBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCA3M2Y4YzVlMDNkOTZj
ZTRiZmMwZGM5ZTM2ZDQzODc1NWI4Y2E5M2Y2Li5hNGFiNThhMzRmYzg5MmVmYjVhZWRhYTBiMmUz
NWM2ZTJjOWY2ZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3gu
Y3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiRXZlbnRSZWdpb24uaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpZ2hs
aWdodERhdGEuaCIKICNpbmNsdWRlICJIaWdobGlnaHRNYXAuaCIKICNpbmNsdWRlICJIaXRUZXN0
UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKQEAgLTQ5LDcgKzUwLDYgQEAKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5o
IgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTZWxlY3Rp
b25SYW5nZURhdGEuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dERlY29yYXRp
b25QYWludGVyLmgiCiAjaW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKQEAgLTE1NCw1NCArMTU0
LDU0IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6aXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvc2l0
aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uCiAgICAgcmV0dXJuIGNsYW1wZWRPZmZzZXQo
c3RhcnRQb3NpdGlvbikgPCBjbGFtcGVkT2Zmc2V0KGVuZFBvc2l0aW9uKTsKIH0KIAotUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCitS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRl
KCkKIHsKICAgICBhdXRvIHN0YXRlID0gdmVyaWZ5U2VsZWN0aW9uU3RhdGUocmVuZGVyZXIoKS5z
ZWxlY3Rpb25TdGF0ZSgpLCByZW5kZXJlcigpLnZpZXcoKS5zZWxlY3Rpb24oKSk7CiAgICAgCiAg
ICAgLy8gRklYTUU6IHRoaXMgY29kZSBtdXRhdGVzIHNlbGVjdGlvbiBzdGF0ZSwgYnV0IGl0J3Mg
dXNlZCBhdCBhIHNpbXBsZSBnZXR0ZXIgZWxzZXdoZXJlCi0gICAgLy8gaW4gdGhpcyBmaWxlLiBU
aGlzIGNvZGUgc2hvdWxkIGxpa2VseSBsaXZlIGluIFNlbGVjdGlvblJhbmdlRGF0YSwgb3Igc29t
ZXdoZXJlIGVsc2UuCisgICAgLy8gaW4gdGhpcyBmaWxlLiBUaGlzIGNvZGUgc2hvdWxkIGxpa2Vs
eSBsaXZlIGluIEhpZ2hsaWdodERhdGEsIG9yIHNvbWV3aGVyZSBlbHNlLgogICAgIC8vIDxyZGFy
Oi8vcHJvYmxlbS81ODEyNTk3OD4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjA1NTI4CiAgICAgLy8gSWYgdGhlcmUgYXJlIGVsbGlwc2lzIGZvbGxvd2lu
ZywgbWFrZSBzdXJlIHRoZWlyIHNlbGVjdGlvbiBpcyB1cGRhdGVkLgogICAgIGlmIChtX3RydW5j
YXRpb24gIT0gY05vVHJ1bmNhdGlvbiAmJiByb290KCkuZWxsaXBzaXNCb3goKSkgewogICAgICAg
ICBFbGxpcHNpc0JveCogZWxsaXBzaXMgPSByb290KCkuZWxsaXBzaXNCb3goKTsKLSAgICAgICAg
aWYgKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkgeworICAgICAgICBpZiAo
c3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSkgewogICAgICAgICAg
ICAgYXV0byBbc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZF0gPSBzZWxlY3Rpb25TdGFydEVu
ZCgpOwogICAgICAgICAgICAgLy8gVGhlIGVsbGlwc2lzIHNob3VsZCBiZSBjb25zaWRlcmVkIHRv
IGJlIHNlbGVjdGVkIGlmIHRoZSBlbmQgb2YKICAgICAgICAgICAgIC8vIHRoZSBzZWxlY3Rpb24g
aXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0aW9uIGFuZCB0aGUKICAgICAgICAg
ICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgc2VsZWN0aW9uIGlzIGJlZm9yZSBvciBhdCB0aGUgYmVn
aW5uaW5nIG9mIHRoZQogICAgICAgICAgICAgLy8gdHJ1bmNhdGlvbi4KICAgICAgICAgICAgIGVs
bGlwc2lzLT5zZXRTZWxlY3Rpb25TdGF0ZShzZWxlY3Rpb25FbmQgPj0gbV90cnVuY2F0aW9uICYm
IHNlbGVjdGlvblN0YXJ0IDw9IG1fdHJ1bmNhdGlvbiA/Ci0gICAgICAgICAgICAgICAgUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUgOiBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpOwor
ICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSA6IFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpOwogICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIGVsbGlwc2lzLT5zZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
bk5vbmUpOworICAgICAgICAgICAgZWxsaXBzaXMtPnNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpOwogICAgIH0KICAgICAKICAgICByZXR1cm4gc3Rh
dGU7CiB9CiAKLVJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJveDo6dmVy
aWZ5U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSwgU2Vs
ZWN0aW9uUmFuZ2VEYXRhJiBzZWxlY3Rpb24pIGNvbnN0CitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdo
dFN0YXRlIElubGluZVRleHRCb3g6OnZlcmlmeVNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGUgc3RhdGUsIEhpZ2hsaWdodERhdGEmIHNlbGVjdGlvbikgY29uc3QKIHsK
LSAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8fCBzdGF0ZSA9
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvbkJvdGgpIHsKKyAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRT
dGF0ZTo6U3RhcnQgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5k
IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGgpIHsKICAgICAg
ICAgYXV0byBzdGFydE9mZnNldCA9IHNlbGVjdGlvbi5zdGFydE9mZnNldCgpOwogICAgICAgICBh
dXRvIGVuZE9mZnNldCA9IHNlbGVjdGlvbi5lbmRPZmZzZXQoKTsKICAgICAgICAgLy8gVGhlIHBv
c2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5lIGJyZWFrIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFzdCBp
dHMgZW5kLgogICAgICAgICBBU1NFUlQoc3RhcnQoKSArIGxlbigpID49IChpc0xpbmVCcmVhaygp
ID8gMSA6IDApKTsKICAgICAgICAgdW5zaWduZWQgbGFzdFNlbGVjdGFibGUgPSBzdGFydCgpICsg
bGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKTsKIAotICAgICAgICBib29sIHN0YXJ0ID0g
KHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kICYmIHN0YXJ0T2Zmc2V0ID49IG1f
c3RhcnQgJiYgc3RhcnRPZmZzZXQgPCBtX3N0YXJ0ICsgbV9sZW4pOwotICAgICAgICBib29sIGVu
ZCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0ICYmIGVuZE9mZnNldCA+
IG1fc3RhcnQgJiYgZW5kT2Zmc2V0IDw9IGxhc3RTZWxlY3RhYmxlKTsKKyAgICAgICAgYm9vbCBz
dGFydCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQgJiYgc3Rh
cnRPZmZzZXQgPj0gbV9zdGFydCAmJiBzdGFydE9mZnNldCA8IG1fc3RhcnQgKyBtX2xlbik7Cisg
ICAgICAgIGJvb2wgZW5kID0gKHN0YXRlICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6
OlN0YXJ0ICYmIGVuZE9mZnNldCA+IG1fc3RhcnQgJiYgZW5kT2Zmc2V0IDw9IGxhc3RTZWxlY3Rh
YmxlKTsKICAgICAgICAgaWYgKHN0YXJ0ICYmIGVuZCkKLSAgICAgICAgICAgIHN0YXRlID0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoOworICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpCb3RoOwogICAgICAgICBlbHNlIGlmIChzdGFydCkKLSAgICAg
ICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydDsKKyAgICAgICAgICAg
IHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQ7CiAgICAgICAgIGVs
c2UgaWYgKGVuZCkKLSAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25F
bmQ7Ci0gICAgICAgIGVsc2UgaWYgKChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVu
ZCB8fCBzdGFydE9mZnNldCA8IG1fc3RhcnQpCi0gICAgICAgICAgICAmJiAoc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8fCBlbmRPZmZzZXQgPiBsYXN0U2VsZWN0YWJsZSkp
Ci0gICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlOwotICAg
ICAgICBlbHNlIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpCi0gICAg
ICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKyAgICAgICAgICAg
IHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kOworICAgICAgICBlbHNl
IGlmICgoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kIHx8IHN0YXJ0
T2Zmc2V0IDwgbV9zdGFydCkKKyAgICAgICAgICAgICYmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlOjpTdGFydCB8fCBlbmRPZmZzZXQgPiBsYXN0U2VsZWN0YWJsZSkpCisg
ICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZTsK
KyAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Qm90aCkKKyAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Tm9uZTsKICAgICB9CiAKICAgICByZXR1cm4gc3RhdGU7CkBAIC00OTIsNyArNDkyLDcgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIGJvb2wgaXNQcmludGluZyA9IHJlbmRlcmVyKCkuZG9j
dW1lbnQoKS5wcmludGluZygpOwogICAgIAogICAgIC8vIERldGVybWluZSB3aGV0aGVyIG9yIG5v
dCB3ZSdyZSBzZWxlY3RlZC4KLSAgICBib29sIGhhdmVTZWxlY3Rpb24gPSAhaXNQcmludGluZyAm
JiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZTo6VGV4dENsaXAgJiYgc2VsZWN0aW9uU3Rh
dGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgYm9vbCBoYXZlU2VsZWN0
aW9uID0gIWlzUHJpbnRpbmcgJiYgcGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlRleHRD
bGlwICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Tm9uZTsKICAgICBpZiAoIWhhdmVTZWxlY3Rpb24gJiYgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2U6OlNlbGVjdGlvbikgewogICAgICAgICAvLyBXaGVuIG9ubHkgcGFpbnRpbmcgdGhlIHNl
bGVjdGlvbiwgZG9uJ3QgYm90aGVyIHRvIHBhaW50IGlmIHRoZXJlIGlzIG5vbmUuCiAgICAgICAg
IHJldHVybjsKQEAgLTY4NCwxNCArNjg0LDE0IEBAIHVuc2lnbmVkIElubGluZVRleHRCb3g6OmNs
YW1wZWRPZmZzZXQodW5zaWduZWQgeCkgY29uc3QKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi1z
dGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0Qm94OjpjbGFtcGVkU3RhcnRF
bmRGb3JTdGF0ZSh1bnNpZ25lZCBzdGFydCwgdW5zaWduZWQgZW5kLCBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKSBjb25zdAorc3RkOjpwYWlyPHVuc2lnbmVkLCB1
bnNpZ25lZD4gSW5saW5lVGV4dEJveDo6Y2xhbXBlZFN0YXJ0RW5kRm9yU3RhdGUodW5zaWduZWQg
c3RhcnQsIHVuc2lnbmVkIGVuZCwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rp
b25TdGF0ZSkgY29uc3QKIHsKLSAgICBpZiAoc2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25JbnNpZGUpCisgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSkKICAgICAgICAgcmV0dXJuIHsgMCwgY2xhbXBlZE9m
ZnNldChtX3N0YXJ0ICsgbV9sZW4pIH07CiAgICAgCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlID09
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQpCisgICAgaWYgKHNlbGVjdGlvblN0YXRlID09
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KQogICAgICAgICBlbmQgPSByZW5k
ZXJlcigpLnRleHQoKS5sZW5ndGgoKTsKLSAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKKyAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSA9
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpCiAgICAgICAgIHN0YXJ0ID0gMDsK
ICAgICByZXR1cm4geyBjbGFtcGVkT2Zmc2V0KHN0YXJ0KSwgY2xhbXBlZE9mZnNldChlbmQpIH07
CiB9CkBAIC03MDMsMTIgKzcwMywxMiBAQCBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJ
bmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCgpIGNvbnN0CiAgICAgcmV0dXJuIGNsYW1w
ZWRTdGFydEVuZEZvclN0YXRlKHJlbmRlcmVyKCkudmlldygpLnNlbGVjdGlvbigpLnN0YXJ0T2Zm
c2V0KCksIHJlbmRlcmVyKCkudmlldygpLnNlbGVjdGlvbigpLmVuZE9mZnNldCgpLCBzZWxlY3Rp
b25TdGF0ZSk7CiB9CiAKLXN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IElubGluZVRleHRC
b3g6OmhpZ2hsaWdodFN0YXJ0RW5kKFNlbGVjdGlvblJhbmdlRGF0YSAmcmFuZ2VEYXRhKSBjb25z
dAorc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gSW5saW5lVGV4dEJveDo6aGlnaGxpZ2h0
U3RhcnRFbmQoSGlnaGxpZ2h0RGF0YSAmcmFuZ2VEYXRhKSBjb25zdAogewotICAgIGF1dG8gc3Rh
dGUgPSByYW5nZURhdGEuc2VsZWN0aW9uU3RhdGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAg
ICBhdXRvIHN0YXRlID0gcmFuZ2VEYXRhLmhpZ2hsaWdodFN0YXRlRm9yUmVuZGVyZXIocmVuZGVy
ZXIoKSk7CiAgICAgc3RhdGUgPSB2ZXJpZnlTZWxlY3Rpb25TdGF0ZShzdGF0ZSwgcmFuZ2VEYXRh
KTsKICAgICAKLSAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKQor
ICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQogICAg
ICAgICByZXR1cm4gezAsIDB9OwogICAgIAogICAgIHJldHVybiBjbGFtcGVkU3RhcnRFbmRGb3JT
dGF0ZShyYW5nZURhdGEuc3RhcnRPZmZzZXQoKSwgcmFuZ2VEYXRhLmVuZE9mZnNldCgpLCBzdGF0
ZSk7CkBAIC0xMDU0LDggKzEwNTQsOCBAQCBWZWN0b3I8TWFya2VkVGV4dD4gSW5saW5lVGV4dEJv
eDo6Y29sbGVjdE1hcmtlZFRleHRzRm9ySGlnaGxpZ2h0cyhUZXh0UGFpbnRQaGFzZQogICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGFydE9mZnNldCA+PSAwICYmIGVuZE9mZnNldCA+PSAwKTsKICAg
ICAgICAgICAgICAgICBpZiAoIXN0YXJ0UmVuZGVyZXIgfHwgIWVuZFJlbmRlcmVyKQogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBhdXRvIGhpZ2hsaWdodERh
dGEgPSBTZWxlY3Rpb25SYW5nZURhdGEocmVuZGVyZXIoKS52aWV3KCkpOwotICAgICAgICAgICAg
ICAgIGhpZ2hsaWdodERhdGEuc2V0Q29udGV4dCh7c3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVk
PihlbmRPZmZzZXQpfSk7CisgICAgICAgICAgICAgICAgYXV0byBoaWdobGlnaHREYXRhID0gSGln
aGxpZ2h0RGF0YShyZW5kZXJlcigpLnZpZXcoKSk7CisgICAgICAgICAgICAgICAgaGlnaGxpZ2h0
RGF0YS5zZXRSZW5kZXJSYW5nZSh7c3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZz
ZXQpfSk7CiAgICAgICAgICAgICAgICAgYXV0byBbaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVu
ZF0gPSBoaWdobGlnaHRTdGFydEVuZChoaWdobGlnaHREYXRhKTsKICAgICAgICAgICAgICAgICBp
ZiAoaGlnaGxpZ2h0U3RhcnQgPCBoaWdobGlnaHRFbmQpCiAgICAgICAgICAgICAgICAgICAgIG1h
cmtlZFRleHRzLmFwcGVuZCh7IGhpZ2hsaWdodFN0YXJ0LCBoaWdobGlnaHRFbmQsIE1hcmtlZFRl
eHQ6OkhpZ2hsaWdodCwgbnVsbHB0ciwgaGlnaGxpZ2h0LmtleSB9KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4IDQ2MjE4YjZmNmM0OTE2NzBhYjI5M2Y5ZjE4
YzZkMTUwNjRhOWFmNDAuLjQyZDc0NTVjODU2Y2ZiZjY1OTQwYzE2MmY2ODQxMTJhYTgzOTRiOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMTIxLDcgKzEy
MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxTZWxlY3Rpb25SZWN0
KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0OwogICAgIGJvb2wgaXNT
ZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29u
c3Q7CiAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRFbmQo
KSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBoaWdobGlnaHRTdGFy
dEVuZChTZWxlY3Rpb25SYW5nZURhdGEmKSBjb25zdDsKKyAgICBzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiBoaWdobGlnaHRTdGFydEVuZChIaWdobGlnaHREYXRhJikgY29uc3Q7CiAKIHBy
b3RlY3RlZDoKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50Jiwg
TGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwpAQCAt
MTM0LDExICsxMzQsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGV4dHJhY3RMaW5lKCkgZmluYWw7
CiAgICAgdm9pZCBhdHRhY2hMaW5lKCkgZmluYWw7CiAgICAgCi0gICAgUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSB2ZXJpZnlTZWxlY3Rpb25TdGF0ZShSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
blN0YXRlLCBTZWxlY3Rpb25SYW5nZURhdGEmKSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8dW5zaWdu
ZWQsIHVuc2lnbmVkPiBjbGFtcGVkU3RhcnRFbmRGb3JTdGF0ZSh1bnNpZ25lZCwgdW5zaWduZWQs
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUpIGNvbnN0OworICAgIFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGUgdmVyaWZ5U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZSwgSGlnaGxpZ2h0RGF0YSYpIGNvbnN0OworICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwg
dW5zaWduZWQ+IGNsYW1wZWRTdGFydEVuZEZvclN0YXRlKHVuc2lnbmVkLCB1bnNpZ25lZCwgUmVu
ZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSkgY29uc3Q7CiAKIHB1YmxpYzoKLSAgICBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgZmluYWw7CisgICAgUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGZpbmFsOwogCiBwcml2YXRl
OgogICAgIHZvaWQgY2xlYXJUcnVuY2F0aW9uKCkgZmluYWwgeyBtX3RydW5jYXRpb24gPSBjTm9U
cnVuY2F0aW9uOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRl
eCAyZjNmYTk1YjNlYzA0NDcxZWMxODNlNTE3NWY1ZDdhYWE2MTUwYWZkLi5jZWFjYjg1YzBiMmVi
OTNjYjJkYTNhMGEyYTg1YzUyOGYzY2VjNGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKQEAgLTE0MDAsNyArMTQwMCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnNo
b3VsZFBhaW50U2VsZWN0aW9uR2FwcygpIGNvbnN0CiAgICAgaWYgKHNldHRpbmdzKCkuc2VsZWN0
aW9uUGFpbnRpbmdXaXRob3V0U2VsZWN0aW9uR2Fwc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSAm
JiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlICYmIGlzU2VsZWN0
aW9uUm9vdCgpOworICAgIHJldHVybiBzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodFN0YXRl
OjpOb25lICYmIHN0eWxlKCkudmlzaWJpbGl0eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYg
aXNTZWxlY3Rpb25Sb290KCk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmlzU2VsZWN0aW9uUm9v
dCgpIGNvbnN0CkBAIC0xNTUwLDcgKzE1NTAsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2Vs
ZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcgog
ICAgICAgICByZXN1bHQgPSBibG9ja1NlbGVjdGlvbkdhcHMocm9vdEJsb2NrLCByb290QmxvY2tQ
aHlzaWNhbFBvc2l0aW9uLCBvZmZzZXRGcm9tUm9vdEJsb2NrLCBsYXN0TG9naWNhbFRvcCwgbGFz
dExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBjYWNoZSwgcGFpbnRJbmZvKTsKIAogICAg
IC8vIEZpbGwgdGhlIHZlcnRpY2FsIGdhcCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tIG9mIG91
ciBibG9jayBpZiB0aGUgc2VsZWN0aW9uIGV4dGVuZHMgcGFzdCBvdXIgYmxvY2suCi0gICAgaWYg
KCZyb290QmxvY2sgPT0gdGhpcyAmJiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Cb3Ro
ICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uRW5kKSAmJiAhaXNSdWJ5QmFzZSgpICYm
ICFpc1J1YnlUZXh0KCkpIHsKKyAgICBpZiAoJnJvb3RCbG9jayA9PSB0aGlzICYmIChzZWxlY3Rp
b25TdGF0ZSgpICE9IEhpZ2hsaWdodFN0YXRlOjpCb3RoICYmIHNlbGVjdGlvblN0YXRlKCkgIT0g
SGlnaGxpZ2h0U3RhdGU6OkVuZCkgJiYgIWlzUnVieUJhc2UoKSAmJiAhaXNSdWJ5VGV4dCgpKSB7
CiAgICAgICAgIHJlc3VsdC51bml0ZUNlbnRlcihibG9ja1NlbGVjdGlvbkdhcChyb290QmxvY2ss
IHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAg
ICAgICBsYXN0TG9naWNhbFRvcCwgbGFzdExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBs
b2dpY2FsSGVpZ2h0KCksIGNhY2hlLCBwYWludEluZm8pKTsKICAgICB9CkBAIC0xNTcxLDcgKzE1
NzEsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRlckJs
b2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaQogCiAgICAgLy8gSnVtcCByaWdodCB0byB0
aGUgZmlyc3QgYmxvY2sgY2hpbGQgdGhhdCBjb250YWlucyBzb21lIHNlbGVjdGVkIG9iamVjdHMu
CiAgICAgUmVuZGVyQm94KiBjdXJyOwotICAgIGZvciAoY3VyciA9IGZpcnN0Q2hpbGRCb3goKTsg
Y3VyciAmJiBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbk5vbmU7IGN1cnIgPSBj
dXJyLT5uZXh0U2libGluZ0JveCgpKSB7IH0KKyAgICBmb3IgKGN1cnIgPSBmaXJzdENoaWxkQm94
KCk7IGN1cnIgJiYgY3Vyci0+c2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRTdGF0ZTo6Tm9u
ZTsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nQm94KCkpIHsgfQogICAgIAogICAgIGlmICghY3Vy
cikKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE1NzksOCArMTU3OSw4IEBAIEdhcFJlY3Rz
IFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywg
Y29uc3QgTGF5b3V0UG9pCiAgICAgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyBjaGlsZENh
Y2hlKCp0aGlzLCBjYWNoZSk7CiAKICAgICBmb3IgKGJvb2wgc2F3U2VsZWN0aW9uRW5kID0gZmFs
c2U7IGN1cnIgJiYgIXNhd1NlbGVjdGlvbkVuZDsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nQm94
KCkpIHsKLSAgICAgICAgU2VsZWN0aW9uU3RhdGUgY2hpbGRTdGF0ZSA9IGN1cnItPnNlbGVjdGlv
blN0YXRlKCk7Ci0gICAgICAgIGlmIChjaGlsZFN0YXRlID09IFNlbGVjdGlvbkJvdGggfHwgY2hp
bGRTdGF0ZSA9PSBTZWxlY3Rpb25FbmQpCisgICAgICAgIEhpZ2hsaWdodFN0YXRlIGNoaWxkU3Rh
dGUgPSBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgpOworICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9PSBI
aWdobGlnaHRTdGF0ZTo6Qm90aCB8fCBjaGlsZFN0YXRlID09IEhpZ2hsaWdodFN0YXRlOjpFbmQp
CiAgICAgICAgICAgICBzYXdTZWxlY3Rpb25FbmQgPSB0cnVlOwogCiAgICAgICAgIGlmIChjdXJy
LT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3NpdGlvbmVkKCkpCkBAIC0xNTk1LDEwICsxNTk1LDEw
IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2sm
IHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pCiAgICAgICAgIH0KIAogICAgICAgICBib29sIHBh
aW50c093blNlbGVjdGlvbiA9IGN1cnItPnNob3VsZFBhaW50U2VsZWN0aW9uR2FwcygpIHx8IGN1
cnItPmlzVGFibGUoKTsgLy8gRklYTUU6IEV2ZW50dWFsbHkgd2Ugd29uJ3Qgc3BlY2lhbC1jYXNl
IHRhYmxlIGxpa2UgdGhpcy4KLSAgICAgICAgYm9vbCBmaWxsQmxvY2tHYXBzID0gKHBhaW50c093
blNlbGVjdGlvbiB8fCAoY3Vyci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgY2hpbGRTdGF0ZSAh
PSBTZWxlY3Rpb25Ob25lKSkgJiYgIWlzUnVieUJhc2UoKSAmJiAhaXNSdWJ5VGV4dCgpOworICAg
ICAgICBib29sIGZpbGxCbG9ja0dhcHMgPSAocGFpbnRzT3duU2VsZWN0aW9uIHx8IChjdXJyLT5j
YW5CZVNlbGVjdGlvbkxlYWYoKSAmJiBjaGlsZFN0YXRlICE9IEhpZ2hsaWdodFN0YXRlOjpOb25l
KSkgJiYgIWlzUnVieUJhc2UoKSAmJiAhaXNSdWJ5VGV4dCgpOwogICAgICAgICBpZiAoZmlsbEJs
b2NrR2FwcykgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBmaWxsIHRoZSB2ZXJ0aWNhbCBn
YXAgYWJvdmUgdGhpcyBvYmplY3QuCi0gICAgICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9PSBTZWxl
Y3Rpb25FbmQgfHwgY2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKKyAgICAgICAgICAg
IGlmIChjaGlsZFN0YXRlID09IEhpZ2hsaWdodFN0YXRlOjpFbmQgfHwgY2hpbGRTdGF0ZSA9PSBI
aWdobGlnaHRTdGF0ZTo6SW5zaWRlKSB7CiAgICAgICAgICAgICAgICAgLy8gRmlsbCB0aGUgZ2Fw
IGFib3ZlIHRoZSBvYmplY3QuCiAgICAgICAgICAgICAgICAgcmVzdWx0LnVuaXRlQ2VudGVyKGJs
b2NrU2VsZWN0aW9uR2FwKHJvb3RCbG9jaywgcm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zm
c2V0RnJvbVJvb3RCbG9jaywKICAgICAgICAgICAgICAgICAgICAgbGFzdExvZ2ljYWxUb3AsIGxh
c3RMb2dpY2FsTGVmdCwgbGFzdExvZ2ljYWxSaWdodCwgY3Vyci0+bG9naWNhbFRvcCgpLCBjYWNo
ZSwgcGFpbnRJbmZvKSk7CkBAIC0xNjA2LDggKzE2MDYsOCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9j
azo6YmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91
dFBvaQogCiAgICAgICAgICAgICAvLyBPbmx5IGZpbGwgc2lkZSBnYXBzIGZvciBvYmplY3RzIHRo
YXQgcGFpbnQgdGhlaXIgb3duIHNlbGVjdGlvbiBpZiB3ZSBrbm93IGZvciBzdXJlIHRoZSBzZWxl
Y3Rpb24gaXMgZ29pbmcgdG8gZXh0ZW5kIGFsbCB0aGUgd2F5ICpwYXN0KgogICAgICAgICAgICAg
Ly8gb3VyIG9iamVjdC4gIFdlIGtub3cgdGhpcyBpZiB0aGUgc2VsZWN0aW9uIGRpZCBub3QgZW5k
IGluc2lkZSBvdXIgb2JqZWN0LgotICAgICAgICAgICAgaWYgKHBhaW50c093blNlbGVjdGlvbiAm
JiAoY2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25TdGFydCB8fCBzYXdTZWxlY3Rpb25FbmQpKQotICAg
ICAgICAgICAgICAgIGNoaWxkU3RhdGUgPSBTZWxlY3Rpb25Ob25lOworICAgICAgICAgICAgaWYg
KHBhaW50c093blNlbGVjdGlvbiAmJiAoY2hpbGRTdGF0ZSA9PSBIaWdobGlnaHRTdGF0ZTo6U3Rh
cnQgfHwgc2F3U2VsZWN0aW9uRW5kKSkKKyAgICAgICAgICAgICAgICBjaGlsZFN0YXRlID0gSGln
aGxpZ2h0U3RhdGU6Ok5vbmU7CiAKICAgICAgICAgICAgIC8vIEZpbGwgc2lkZSBnYXBzIG9uIHRo
aXMgb2JqZWN0IGJhc2VkIG9mZiBpdHMgc3RhdGUuCiAgICAgICAgICAgICBib29sIGxlZnRHYXAs
IHJpZ2h0R2FwOwpAQCAtMTYyNCw3ICsxNjI0LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJs
b2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kK
ICAgICAgICAgICAgIGxhc3RMb2dpY2FsVG9wID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJs
b2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSArIGN1cnItPmxvZ2ljYWxCb3R0b20oKTsKICAgICAg
ICAgICAgIGxhc3RMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RC
bG9jaywgY3Vyci0+bG9naWNhbEJvdHRvbSgpLCBjYWNoZSk7CiAgICAgICAgICAgICBsYXN0TG9n
aWNhbFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+
bG9naWNhbEJvdHRvbSgpLCBjYWNoZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoY2hpbGRTdGF0ZSAh
PSBTZWxlY3Rpb25Ob25lICYmIGlzPFJlbmRlckJsb2NrPigqY3VycikpIHsKKyAgICAgICAgfSBl
bHNlIGlmIChjaGlsZFN0YXRlICE9IEhpZ2hsaWdodFN0YXRlOjpOb25lICYmIGlzPFJlbmRlckJs
b2NrPigqY3VycikpIHsKICAgICAgICAgICAgIC8vIFdlIG11c3QgYmUgYSBibG9jayB0aGF0IGhh
cyBzb21lIHNlbGVjdGVkIG9iamVjdCBpbnNpZGUgaXQsIHNvIHJlY3VyLgogICAgICAgICAgICAg
cmVzdWx0LnVuaXRlKGRvd25jYXN0PFJlbmRlckJsb2NrPigqY3Vycikuc2VsZWN0aW9uR2Fwcyhy
b290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIExheW91dFNpemUob2Zmc2V0RnJv
bVJvb3RCbG9jay53aWR0aCgpICsgY3Vyci0+eCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdo
dCgpICsgY3Vyci0+eSgpKSwKICAgICAgICAgICAgICAgICBsYXN0TG9naWNhbFRvcCwgbGFzdExv
Z2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBjaGlsZENhY2hlLCBwYWludEluZm8pKTsKQEAg
LTE2ODgsMTUgKzE2ODgsMTEgQEAgTGF5b3V0UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0
U2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IEwKICAgICByZXR1cm4g
Z2FwUmVjdDsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6Z2V0U2VsZWN0aW9uR2FwSW5mbyhTZWxl
Y3Rpb25TdGF0ZSBzdGF0ZSwgYm9vbCYgbGVmdEdhcCwgYm9vbCYgcmlnaHRHYXApCit2b2lkIFJl
bmRlckJsb2NrOjpnZXRTZWxlY3Rpb25HYXBJbmZvKEhpZ2hsaWdodFN0YXRlIHN0YXRlLCBib29s
JiBsZWZ0R2FwLCBib29sJiByaWdodEdhcCkKIHsKICAgICBib29sIGx0ciA9IHN0eWxlKCkuaXNM
ZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAgIGxlZnRHYXAgPSAoc3RhdGUgPT0gUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25JbnNpZGUpIHx8Ci0gICAgICAgICAgICAgIChzdGF0ZSA9PSBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvbkVuZCAmJiBsdHIpIHx8Ci0gICAgICAgICAgICAgIChzdGF0ZSA9PSBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0ICYmICFsdHIpOwotICAgIHJpZ2h0R2FwID0gKHN0
YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKSB8fAotICAgICAgICAgICAgICAg
KHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQgJiYgbHRyKSB8fAotICAgICAg
ICAgICAgICAgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kICYmICFsdHIpOwor
ICAgIGxlZnRHYXAgPSAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5z
aWRlKSB8fCAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kICYmIGx0
cikgfHwgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0ICYmICFs
dHIpOworICAgIHJpZ2h0R2FwID0gKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3Rh
dGU6Okluc2lkZSkgfHwgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0
YXJ0ICYmIGx0cikgfHwgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVu
ZCAmJiAhbHRyKTsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxl
Y3Rpb25PZmZzZXQoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwg
Y29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYgY2FjaGUpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4IGEwNTE1MTcyNDJiNzZmNzViYzJjMWYxMDUxMjBk
ZjFhZGU2M2M3OGUuLmRmMDE5Zjc2NDVjOTkxMTVhZjFiMTFlYTBjNjFjZmIyYTNkN2RiZWMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCkBAIC0xNzcsNyArMTc3LDcgQEAg
cHVibGljOgogICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogc2VsT2JqLCBMYXlvdXRVbml0
IGxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhl
aWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNldENhY2hlcyYsIGNvbnN0IFBhaW50SW5m
byopOwogICAgIExheW91dFJlY3QgbG9naWNhbFJpZ2h0U2VsZWN0aW9uR2FwKFJlbmRlckJsb2Nr
JiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9u
LCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgICAgICBSZW5kZXJC
b3hNb2RlbE9iamVjdCogc2VsT2JqLCBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodCwgTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIGNvbnN0IExvZ2ljYWxTZWxl
Y3Rpb25PZmZzZXRDYWNoZXMmLCBjb25zdCBQYWludEluZm8qKTsKLSAgICB2b2lkIGdldFNlbGVj
dGlvbkdhcEluZm8oU2VsZWN0aW9uU3RhdGUsIGJvb2wmIGxlZnRHYXAsIGJvb2wmIHJpZ2h0R2Fw
KTsKKyAgICB2b2lkIGdldFNlbGVjdGlvbkdhcEluZm8oSGlnaGxpZ2h0U3RhdGUsIGJvb2wmIGxl
ZnRHYXAsIGJvb2wmIHJpZ2h0R2FwKTsKICAgICBib29sIGlzU2VsZWN0aW9uUm9vdCgpIGNvbnN0
OwogCiAgICAgTGF5b3V0UmVjdCBsb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KGNvbnN0IExheW91
dFBvaW50JiBwaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRSZWN0JiBsb2dpY2FsUmVjdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGI4
MjBhYTdlNjFmMzk2NmZjODM3NmFmZWJhMTI2YmFlMWI2Njc3NDEuLmE3YjljMzlkY2JhN2E3Mjk3
MjJhZTY2NjI0MzNlM2QzZGQwODU0ZDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0zMTc0LDkgKzMxNzQsOSBAQCBPcHRpb25hbDxpbnQ+IFJl
bmRlckJsb2NrRmxvdzo6aW5saW5lQmxvY2tCYXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSBsaW5l
RGlyZWN0aQogICAgIHJldHVybiBzdHlsZSgpLm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpWaXNp
YmxlID8gbGFzdEJhc2VsaW5lIDogc3RkOjptaW4oYm94SGVpZ2h0LCBsYXN0QmFzZWxpbmUpOwog
fQogCi12b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3Rh
dGUgc3RhdGUpCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxp
Z2h0U3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYgKHN0YXRlICE9IFNlbGVjdGlvbk5vbmUpCisgICAg
aWYgKHN0YXRlICE9IEhpZ2hsaWdodFN0YXRlOjpOb25lKQogICAgICAgICBlbnN1cmVMaW5lQm94
ZXMoKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUp
OwogfQpAQCAtMzE4OCw3ICszMTg4LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2tGbG93Ojppbmxp
bmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW8KIAogICAg
IEdhcFJlY3RzIHJlc3VsdDsKIAotICAgIGJvb2wgY29udGFpbnNTdGFydCA9IHNlbGVjdGlvblN0
YXRlKCkgPT0gU2VsZWN0aW9uU3RhcnQgfHwgc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25C
b3RoOworICAgIGJvb2wgY29udGFpbnNTdGFydCA9IHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxp
Z2h0U3RhdGU6OlN0YXJ0IHx8IHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhdGU6OkJv
dGg7CiAKICAgICBpZiAoIWhhc0xpbmVzKCkpIHsKICAgICAgICAgaWYgKGNvbnRhaW5zU3RhcnQp
IHsKQEAgLTMyMTAsNyArMzIxMCw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrRmxvdzo6aW5saW5l
U2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvCiAgICAgICAg
IExheW91dFVuaXQgc2VsSGVpZ2h0ID0gY3Vyci0+c2VsZWN0aW9uSGVpZ2h0QWRqdXN0ZWRGb3JQ
cmVjZWRpbmdCbG9jaygpOwogCiAgICAgICAgIGlmICghY29udGFpbnNTdGFydCAmJiAhbGFzdFNl
bGVjdGVkTGluZSAmJgotICAgICAgICAgICAgc2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25T
dGFydCAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbkJvdGggJiYgIWlzUnVieUJhc2Uo
KSkKKyAgICAgICAgICAgIHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0U3RhdGU6OlN0YXJ0
ICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0U3RhdGU6OkJvdGggJiYgIWlzUnVieUJh
c2UoKSkKICAgICAgICAgICAgIHJlc3VsdC51bml0ZUNlbnRlcihibG9ja1NlbGVjdGlvbkdhcChy
b290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIG9mZnNldEZyb21Sb290QmxvY2ss
IGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9naWNhbExlZnQsIGxhc3RMb2dpY2FsUmlnaHQsIHNlbFRv
cCwgY2FjaGUsIHBhaW50SW5mbykpOwogICAgICAgICAKICAgICAgICAgTGF5b3V0UmVjdCBsb2dp
Y2FsUmVjdCB7IExheW91dFVuaXQoY3Vyci0+bG9naWNhbExlZnQoKSksIHNlbFRvcCwgTGF5b3V0
VW5pdChjdXJyLT5sb2dpY2FsV2lkdGgoKSksIHNlbFRvcCArIHNlbEhlaWdodCB9OwpAQCAtMzIy
Nyw3ICszMjI3LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2tGbG93OjppbmxpbmVTZWxlY3Rpb25H
YXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW8KICAgICAgICAgLy8gVmlzaWJs
ZVNlbGVjdGlvbiBtdXN0IHN0YXJ0IGp1c3QgYWZ0ZXIgb3VyIGxhc3QgbGluZS4KICAgICAgICAg
bGFzdFNlbGVjdGVkTGluZSA9IGxhc3RSb290Qm94KCk7CiAKLSAgICBpZiAobGFzdFNlbGVjdGVk
TGluZSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbkVuZCAmJiBzZWxlY3Rpb25TdGF0
ZSgpICE9IFNlbGVjdGlvbkJvdGgpIHsKKyAgICBpZiAobGFzdFNlbGVjdGVkTGluZSAmJiBzZWxl
Y3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodFN0YXRlOjpFbmQgJiYgc2VsZWN0aW9uU3RhdGUoKSAh
PSBIaWdobGlnaHRTdGF0ZTo6Qm90aCkgewogICAgICAgICAvLyBVcGRhdGUgb3VyIGxhc3RZIHRv
IGJlIHRoZSBib3R0b20gb2YgdGhlIGxhc3Qgc2VsZWN0ZWQgbGluZS4KICAgICAgICAgbGFzdExv
Z2ljYWxUb3AgPSBibG9ja0RpcmVjdGlvbk9mZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290
QmxvY2spICsgbGFzdFNlbGVjdGVkTGluZS0+c2VsZWN0aW9uQm90dG9tKCk7CiAgICAgICAgIGxh
c3RMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbGFz
dFNlbGVjdGVkTGluZS0+c2VsZWN0aW9uQm90dG9tKCksIGNhY2hlKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAppbmRleCAyNzc3NjdkZTJkOTdkMzU4NDJlMDY1
YTliMzExM2MyYjUzZjlhMmI3Li5iNDI5Yjc2OTIxYjc4Y2EyM2IyNDU4YjA0MjhjOGE5YmIyYjgz
ODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC01
NTksNyArNTU5LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgbV93aWR0aEZvclRleHRBdXRvc2l6aW5n
OwogICAgIHVuc2lnbmVkIG1fbGluZUNvdW50Rm9yVGV4dEF1dG9zaXppbmcgOiAyOwogI2VuZGlm
Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSkgZmluYWw7CisgICAg
dm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkgZmluYWw7CiAKIHB1YmxpYzoK
ICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRoZXNlIGNhbiBiZSBtYWRlIHByb3RlY3RlZCBhZ2Fp
biBvbmNlIGFsbCBjYWxsZXJzIGhhdmUgYmVlbiBtb3ZlZCBoZXJlLgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHAKaW5kZXggNGRiYTA3Zjcz
NTIwODM2OGY3MjkyOWUzMmIyMDk5YTRkZTI3MmUwYi4uMzFlZmE1YTQwNWE4ZjUwZDhiOWY4OGFm
NDNmNDYzMGI4MmIyZjBmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0xMjksMTQgKzEyOSwxNCBAQCBzdGF0aWMgRmlyc3RM
ZXR0ZXJSZW1haW5pbmdUZXh0TWFwJiBmaXJzdExldHRlclJlbWFpbmluZ1RleHRNYXAoKQogICAg
IHJldHVybiBtYXA7CiB9CiAKLXZvaWQgUmVuZGVyQm94TW9kZWxPYmplY3Q6OnNldFNlbGVjdGlv
blN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQordm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6
c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYgKHN0YXRl
ID09IFNlbGVjdGlvbkluc2lkZSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUp
CisgICAgaWYgKHN0YXRlID09IEhpZ2hsaWdodFN0YXRlOjpJbnNpZGUgJiYgc2VsZWN0aW9uU3Rh
dGUoKSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KChzdGF0ZSA9PSBTZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlv
bkVuZCkKLSAgICAgICAgfHwgKHN0YXRlID09IFNlbGVjdGlvbkVuZCAmJiBzZWxlY3Rpb25TdGF0
ZSgpID09IFNlbGVjdGlvblN0YXJ0KSkKLSAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uQm90aCk7CisgICAgaWYgKChzdGF0ZSA9PSBIaWdo
bGlnaHRTdGF0ZTo6U3RhcnQgJiYgc2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRTdGF0ZTo6
RW5kKQorICAgICAgICB8fCAoc3RhdGUgPT0gSGlnaGxpZ2h0U3RhdGU6OkVuZCAmJiBzZWxlY3Rp
b25TdGF0ZSgpID09IEhpZ2hsaWdodFN0YXRlOjpTdGFydCkpCisgICAgICAgIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlOjpCb3RoKTsKICAg
ICBlbHNlCiAgICAgICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRl
KHN0YXRlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJv
eE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxP
YmplY3QuaAppbmRleCBlNjBkM2MyYjM2ZTVhZTg1MmNiMzIwZDdkYjJlMTU5NWE5MTE5ZTlmLi5h
YzU5M2NhZjEzOWYxMWY4N2JjODU5NTViZDVkYWFhZDUwZGExYjY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaApAQCAtMjE1LDcgKzIxNSw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFwQWJzb2x1dGVUb0xvY2FsUG9pbnQoTWFwQ29vcmRp
bmF0ZXNGbGFncywgVHJhbnNmb3JtU3RhdGUmKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQg
c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBjYW5I
YXZlQm94SW5mb0luRnJhZ21lbnQoKSBjb25zdCB7IHJldHVybiAhaXNGbG9hdGluZygpICYmICFp
c1JlcGxhY2VkKCkgJiYgIWlzSW5saW5lKCkgJiYgIWlzVGFibGVDZWxsKCkgJiYgaXNSZW5kZXJC
bG9jaygpICYmICFpc1JlbmRlclNWR0Jsb2NrKCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAppbmRleCA3NDA5MGFlN2NhNTg2MjM4MTExMGY1ZDc1
NjkzYmY0Y2E3NTU0ZDljLi40ZmQ0NzZiYTA2NTE5ZGE1MWM4YjBkZTU2OTIwM2M4NjM1OTg5OTYz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApAQCAt
MTQ3LDE0ICsxNDcsMTQgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckxpbmVCcmVhazo6cG9zaXRp
b25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmQKICAgICByZXR1cm4gY3Jl
YXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwogfQogCi12b2lkIFJlbmRlckxpbmVC
cmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCit2b2lkIFJlbmRl
ckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiB7Ci0g
ICAgaWYgKHN0YXRlICE9IFNlbGVjdGlvbk5vbmUpCisgICAgaWYgKHN0YXRlICE9IEhpZ2hsaWdo
dFN0YXRlOjpOb25lKQogICAgICAgICBlbnN1cmVMaW5lQm94ZXMoKTsKICAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwogICAgIGlmICghbV9pbmxpbmVC
b3hXcmFwcGVyKQogICAgICAgICByZXR1cm47Ci0gICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290
KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBTZWxlY3Rpb25Ob25lKTsKKyAgICBt
X2lubGluZUJveFdyYXBwZXItPnJvb3QoKS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlICE9
IEhpZ2hsaWdodFN0YXRlOjpOb25lKTsKIH0KIAogTGF5b3V0UmVjdCBSZW5kZXJMaW5lQnJlYWs6
OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCogaW5saW5lQm94LCB1bnNpZ25lZCBjYXJldE9mZnNl
dCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCmluZGV4IGVkZmVmZjU1M2IzZjc0ZDg0ZDRkZTg5MDc3
NGZmZWUyNGVlM2IzY2IuLjI0MjlmNThmODM5NTNmZmI1ODY5NGI3NGNhOWU0MTk0NDJkNTljODkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmgKQEAgLTY4LDcg
KzY4LDcgQEAgcHJpdmF0ZToKICAgICBpbnQgY2FyZXRNYXhPZmZzZXQoKSBjb25zdCBvdmVycmlk
ZTsKICAgICBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IG92ZXJyaWRlOwogICAgIExh
eW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQs
IExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBz
ZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRT
ZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSkgb3ZlcnJpZGU7CiAKICAgICBMYXlvdXRVbml0
IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRp
b25Nb2RlKSBjb25zdCBvdmVycmlkZTsKICAgICBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFz
ZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9k
ZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dE1hcmtlci5jcHAKaW5kZXggY2UwMTliYWEzYmQ1NWExNmVlMjRmYWVlNmU5NzY2MjZiY2JlYWVk
NC4uNmNiNjI4MDZkNGVmMWMwOWY1NTljNWY5NmZmMjgwYTM2N2M5NmIwMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcApAQCAtMTE0Nyw3ICsxMTQ3
LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKICAgICBpZiAoaXNJbWFnZSgpKSB7CiAgICAg
ICAgIGlmIChSZWZQdHI8SW1hZ2U+IG1hcmtlckltYWdlID0gbV9pbWFnZS0+aW1hZ2UodGhpcywg
bWFya2VyUmVjdC5zaXplKCkpKQogICAgICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKm1hcmtl
ckltYWdlLCBtYXJrZXJSZWN0KTsKLSAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2Vs
ZWN0aW9uTm9uZSkgeworICAgICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBIaWdobGlnaHRT
dGF0ZTo6Tm9uZSkgewogICAgICAgICAgICAgTGF5b3V0UmVjdCBzZWxSZWN0ID0gbG9jYWxTZWxl
Y3Rpb25SZWN0KCk7CiAgICAgICAgICAgICBzZWxSZWN0Lm1vdmVCeShib3hPcmlnaW4pOwogICAg
ICAgICAgICAgY29udGV4dC5maWxsUmVjdChzbmFwcGVkSW50UmVjdChzZWxSZWN0KSwgbV9saXN0
SXRlbS0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwpAQCAtMTE1NSw3ICsxMTU1LDcgQEAg
dm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
IChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpIHsKKyAgICBpZiAoc2VsZWN0aW9u
U3RhdGUoKSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSkgewogICAgICAgICBMYXlvdXRSZWN0IHNl
bFJlY3QgPSBsb2NhbFNlbGVjdGlvblJlY3QoKTsKICAgICAgICAgc2VsUmVjdC5tb3ZlQnkoYm94
T3JpZ2luKTsKICAgICAgICAgY29udGV4dC5maWxsUmVjdChzbmFwcGVkSW50UmVjdChzZWxSZWN0
KSwgbV9saXN0SXRlbS0+c2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkpOwpAQCAtMTgzMywyMCAr
MTgzMywyMCBAQCBGbG9hdFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXJrZXJS
ZWN0KCkKICAgICByZXR1cm4gcmVsYXRpdmVSZWN0OwogfQogCi12b2lkIFJlbmRlckxpc3RNYXJr
ZXI6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQordm9pZCBSZW5kZXJM
aXN0TWFya2VyOjpzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSBzdGF0ZSkKIHsKICAg
ICAvLyBUaGUgc2VsZWN0aW9uIHN0YXRlIGZvciBvdXIgY29udGFpbmluZyBibG9jayBoaWVyYXJj
aHkgaXMgdXBkYXRlZCBieSB0aGUgYmFzZSBjbGFzcyBjYWxsLgogICAgIFJlbmRlckJveDo6c2V0
U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwogCiAgICAgaWYgKG1faW5saW5lQm94V3JhcHBlciAmJiBj
YW5VcGRhdGVTZWxlY3Rpb25PblJvb3RMaW5lQm94ZXMoKSkKLSAgICAgICAgbV9pbmxpbmVCb3hX
cmFwcGVyLT5yb290KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBTZWxlY3Rpb25O
b25lKTsKKyAgICAgICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFzU2VsZWN0ZWRD
aGlsZHJlbihzdGF0ZSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSk7CiB9CiAKIExheW91dFJlY3Qg
UmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVu
dCkKIHsKICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwogCi0gICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSB8fCAhaW5saW5lQm94V3JhcHBlcigpKQorICAgIGlmIChz
ZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodFN0YXRlOjpOb25lIHx8ICFpbmxpbmVCb3hXcmFw
cGVyKCkpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAKICAgICBSb290SW5saW5lQm94
JiByb290Qm94ID0gaW5saW5lQm94V3JhcHBlcigpLT5yb290KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAppbmRleCAxNDMwNGFlNWQ4YTJiNTVhMTgzZjMy
M2IxMzlhZDMzNzI1YTljZWUxLi42OTYxOGMxNGQwMTY0OWY2MzA1ZDk4MDE0MmYxYWQ2MTVjZDhh
YmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgKQEAg
LTcyLDcgKzcyLDcgQEAgcHJpdmF0ZToKICAgICBib29sIGlzSW1hZ2UoKSBjb25zdCBvdmVycmlk
ZTsKICAgICBib29sIGlzVGV4dCgpIGNvbnN0IHsgcmV0dXJuICFpc0ltYWdlKCk7IH0KIAotICAg
IHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIG92ZXJyaWRlOworICAgIHZv
aWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIG92ZXJyaWRlOwogICAgIExheW91
dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIG92
ZXJyaWRlOwogICAgIGJvb2wgY2FuQmVTZWxlY3Rpb25MZWFmKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
CmluZGV4IDk4Y2RkOGJlZmRiYTFiYTc4MmMwM2U2YjI1MjFkY2E4MDc1ZmNkYWIuLjRjYWViN2My
NWZmOThjOGNjZDlkZWI1NDkyMTFjYTVjZjQwNzUwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0xNDUwLDEwICsxNDUwLDEwIEBAIFJlbmRlckVsZW1l
bnQqIFJlbmRlck9iamVjdDo6Y29udGFpbmVyKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3Qq
IHJlcGFpbnRDb250CiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojppc1NlbGVjdGlvbkJvcmRlcigpIGNv
bnN0CiB7Ci0gICAgU2VsZWN0aW9uU3RhdGUgc3QgPSBzZWxlY3Rpb25TdGF0ZSgpOwotICAgIHJl
dHVybiBzdCA9PSBTZWxlY3Rpb25TdGFydAotICAgICAgICB8fCBzdCA9PSBTZWxlY3Rpb25FbmQK
LSAgICAgICAgfHwgc3QgPT0gU2VsZWN0aW9uQm90aAorICAgIEhpZ2hsaWdodFN0YXRlIHN0ID0g
c2VsZWN0aW9uU3RhdGUoKTsKKyAgICByZXR1cm4gc3QgPT0gSGlnaGxpZ2h0U3RhdGU6OlN0YXJ0
CisgICAgICAgIHx8IHN0ID09IEhpZ2hsaWdodFN0YXRlOjpFbmQKKyAgICAgICAgfHwgc3QgPT0g
SGlnaGxpZ2h0U3RhdGU6OkJvdGgKICAgICAgICAgfHwgdmlldygpLnNlbGVjdGlvbigpLnN0YXJ0
KCkgPT0gdGhpcwogICAgICAgICB8fCB2aWV3KCkuc2VsZWN0aW9uKCkuZW5kKCkgPT0gdGhpczsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCBmNWQ2OWU5M2I0
ODVlYmMyNDI2OTIyYzFkOTRlMjYxOGM5NDgxZjMzLi5kYzNjOWExNTI2YWE2YjNlYTkxYTVmZTJk
YzhkODZhZmM0MzBjOTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CkBAIC00Nyw2ICs0Nyw3IEBAIGNsYXNzIENvbG9yOwogY2xhc3MgQ3Vyc29yOwogY2xhc3MgRG9j
dW1lbnQ7CiBjbGFzcyBEb2N1bWVudFRpbWVsaW5lOworY2xhc3MgSGlnaGxpZ2h0RGF0YTsKIGNs
YXNzIEhpdFRlc3RMb2NhdGlvbjsKIGNsYXNzIEhpdFRlc3RSZXF1ZXN0OwogY2xhc3MgSGl0VGVz
dFJlc3VsdDsKQEAgLTY0LDcgKzY1LDYgQEAgY2xhc3MgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDsK
IGNsYXNzIFJlbmRlckZyYWdtZW50Q29udGFpbmVyOwogY2xhc3MgUmVuZGVyVGhlbWU7CiBjbGFz
cyBSZW5kZXJUcmVlQnVpbGRlcjsKLWNsYXNzIFNlbGVjdGlvblJhbmdlRGF0YTsKIGNsYXNzIFRy
YW5zZm9ybVN0YXRlOwogY2xhc3MgVmlzaWJsZVBvc2l0aW9uOwogCkBAIC02OTMsMTkgKzY5Mywx
OSBAQCBwdWJsaWM6CiAKICAgICBib29sIGlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQo
KSBjb25zdCB7IHJldHVybiAoaXNGbG9hdGluZygpIHx8IGlzT3V0T2ZGbG93UG9zaXRpb25lZCgp
KTsgfQogCi0gICAgZW51bSBTZWxlY3Rpb25TdGF0ZSB7Ci0gICAgICAgIFNlbGVjdGlvbk5vbmUs
IC8vIFRoZSBvYmplY3QgaXMgbm90IHNlbGVjdGVkLgotICAgICAgICBTZWxlY3Rpb25TdGFydCwg
Ly8gVGhlIG9iamVjdCBlaXRoZXIgY29udGFpbnMgdGhlIHN0YXJ0IG9mIGEgc2VsZWN0aW9uIHJ1
biBvciBpcyB0aGUgc3RhcnQgb2YgYSBydW4KLSAgICAgICAgU2VsZWN0aW9uSW5zaWRlLCAvLyBU
aGUgb2JqZWN0IGlzIGZ1bGx5IGVuY29tcGFzc2VkIGJ5IGEgc2VsZWN0aW9uIHJ1bgotICAgICAg
ICBTZWxlY3Rpb25FbmQsIC8vIFRoZSBvYmplY3QgZWl0aGVyIGNvbnRhaW5zIHRoZSBlbmQgb2Yg
YSBzZWxlY3Rpb24gcnVuIG9yIGlzIHRoZSBlbmQgb2YgYSBydW4KLSAgICAgICAgU2VsZWN0aW9u
Qm90aCAvLyBUaGUgb2JqZWN0IGNvbnRhaW5zIGFuIGVudGlyZSBydW4gb3IgaXMgdGhlIHNvbGUg
c2VsZWN0ZWQgb2JqZWN0IGluIHRoYXQgcnVuCisgICAgZW51bSBIaWdobGlnaHRTdGF0ZSB7Cisg
ICAgICAgIE5vbmUsIC8vIFRoZSBvYmplY3QgaXMgbm90IHNlbGVjdGVkLgorICAgICAgICBTdGFy
dCwgLy8gVGhlIG9iamVjdCBlaXRoZXIgY29udGFpbnMgdGhlIHN0YXJ0IG9mIGEgc2VsZWN0aW9u
IHJ1biBvciBpcyB0aGUgc3RhcnQgb2YgYSBydW4KKyAgICAgICAgSW5zaWRlLCAvLyBUaGUgb2Jq
ZWN0IGlzIGZ1bGx5IGVuY29tcGFzc2VkIGJ5IGEgc2VsZWN0aW9uIHJ1bgorICAgICAgICBFbmQs
IC8vIFRoZSBvYmplY3QgZWl0aGVyIGNvbnRhaW5zIHRoZSBlbmQgb2YgYSBzZWxlY3Rpb24gcnVu
IG9yIGlzIHRoZSBlbmQgb2YgYSBydW4KKyAgICAgICAgQm90aCAvLyBUaGUgb2JqZWN0IGNvbnRh
aW5zIGFuIGVudGlyZSBydW4gb3IgaXMgdGhlIHNvbGUgc2VsZWN0ZWQgb2JqZWN0IGluIHRoYXQg
cnVuCiAgICAgfTsKIAogICAgIC8vIFRoZSBjdXJyZW50IHNlbGVjdGlvbiBzdGF0ZSBmb3IgYW4g
b2JqZWN0LiAgRm9yIGJsb2NrcywgdGhlIHN0YXRlIHJlZmVycyB0byB0aGUgc3RhdGUgb2YgdGhl
IGxlYWYKLSAgICAvLyBkZXNjZW5kYW50cyAoYXMgZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBTZWxl
Y3Rpb25TdGF0ZSBlbnVtIGRlY2xhcmF0aW9uKS4KLSAgICBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rp
b25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0ZmllbGRzLnNlbGVjdGlvblN0YXRlKCk7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUp
IHsgbV9iaXRmaWVsZHMuc2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOyB9Ci0gICAgaW5saW5lIHZv
aWQgc2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChTZWxlY3Rpb25TdGF0ZSk7CisgICAgLy8gZGVz
Y2VuZGFudHMgKGFzIGRlc2NyaWJlZCBhYm92ZSBpbiB0aGUgSGlnaGxpZ2h0U3RhdGUgZW51bSBk
ZWNsYXJhdGlvbikuCisgICAgSGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7
IHJldHVybiBtX2JpdGZpZWxkcy5zZWxlY3Rpb25TdGF0ZSgpOyB9CisgICAgdmlydHVhbCB2b2lk
IHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlIHN0YXRlKSB7IG1fYml0ZmllbGRzLnNl
dFNlbGVjdGlvblN0YXRlKHN0YXRlKTsgfQorICAgIGlubGluZSB2b2lkIHNldFNlbGVjdGlvblN0
YXRlSWZOZWVkZWQoSGlnaGxpZ2h0U3RhdGUpOwogICAgIGJvb2wgY2FuVXBkYXRlU2VsZWN0aW9u
T25Sb290TGluZUJveGVzKCk7CiAKICAgICAvLyBBIHNpbmdsZSByZWN0YW5nbGUgdGhhdCBlbmNv
bXBhc3NlcyBhbGwgb2YgdGhlIHNlbGVjdGVkIG9iamVjdHMgd2l0aGluIHRoaXMgb2JqZWN0LiAg
VXNlZCB0byBkZXRlcm1pbmUgdGhlIHRpZ2h0ZXN0CkBAIC04OTUsNyArODk1LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICwgbV9jaGlsZHJlbklubGluZShmYWxzZSkKICAgICAgICAgICAgICwg
bV9pc0V4Y2x1ZGVkRnJvbU5vcm1hbExheW91dChmYWxzZSkKICAgICAgICAgICAgICwgbV9wb3Np
dGlvbmVkU3RhdGUoSXNTdGF0aWNhbGx5UG9zaXRpb25lZCkKLSAgICAgICAgICAgICwgbV9zZWxl
Y3Rpb25TdGF0ZShTZWxlY3Rpb25Ob25lKQorICAgICAgICAgICAgLCBtX3NlbGVjdGlvblN0YXRl
KEhpZ2hsaWdodFN0YXRlOjpOb25lKQogICAgICAgICAgICAgLCBtX2ZyYWdtZW50ZWRGbG93U3Rh
dGUoTm90SW5zaWRlRnJhZ21lbnRlZEZsb3cpCiAgICAgICAgICAgICAsIG1fYm94RGVjb3JhdGlv
blN0YXRlKE5vQm94RGVjb3JhdGlvbnMpCiAgICAgICAgIHsKQEAgLTk1MSw4ICs5NTEsOCBAQCBw
cml2YXRlOgogICAgICAgICB9CiAgICAgICAgIHZvaWQgY2xlYXJQb3NpdGlvbmVkU3RhdGUoKSB7
IG1fcG9zaXRpb25lZFN0YXRlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFBvc2l0aW9uVHlwZTo6
U3RhdGljKTsgfQogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgU2VsZWN0aW9uU3RhdGUgc2VsZWN0
aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxTZWxlY3Rpb25TdGF0ZT4obV9z
ZWxlY3Rpb25TdGF0ZSk7IH0KLSAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFNlbGVjdGlv
blN0YXRlKFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKSB7IG1fc2VsZWN0aW9uU3RhdGUg
PSBzZWxlY3Rpb25TdGF0ZTsgfQorICAgICAgICBBTFdBWVNfSU5MSU5FIEhpZ2hsaWdodFN0YXRl
IHNlbGVjdGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8SGlnaGxpZ2h0U3Rh
dGU+KG1fc2VsZWN0aW9uU3RhdGUpOyB9CisgICAgICAgIEFMV0FZU19JTkxJTkUgdm9pZCBzZXRT
ZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSkgeyBtX3NlbGVjdGlv
blN0YXRlID0gc2VsZWN0aW9uU3RhdGU7IH0KICAgICAgICAgCiAgICAgICAgIEFMV0FZU19JTkxJ
TkUgRnJhZ21lbnRlZEZsb3dTdGF0ZSBmcmFnbWVudGVkRmxvd1N0YXRlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8RnJhZ21lbnRlZEZsb3dTdGF0ZT4obV9mcmFnbWVudGVkRmxvd1N0YXRl
KTsgfQogICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0RnJhZ21lbnRlZEZsb3dTdGF0ZShG
cmFnbWVudGVkRmxvd1N0YXRlIGZyYWdtZW50ZWRGbG93U3RhdGUpIHsgbV9mcmFnbWVudGVkRmxv
d1N0YXRlID0gZnJhZ21lbnRlZEZsb3dTdGF0ZTsgfQpAQCAtMTA2Nyw3ICsxMDY3LDcgQEAgaW5s
aW5lIGJvb2wgUmVuZGVyT2JqZWN0OjpwcmVzZXJ2ZXNOZXdsaW5lKCkgY29uc3QKICAgICByZXR1
cm4gc3R5bGUoKS5wcmVzZXJ2ZU5ld2xpbmUoKTsKIH0KIAotaW5saW5lIHZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvblN0YXRlIHN0YXRlKQoraW5s
aW5lIHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKEhpZ2hsaWdo
dFN0YXRlIHN0YXRlKQogewogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IHN0YXRlKQogICAg
ICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
UmVwbGFjZWQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNw
cAppbmRleCBmNDcxOTAwYTI3NTA2ZTkzZmZhNGQ3MDFmNmNlNTdhMTdjYjMxZGU2Li4wN2RjMjIw
NDcwOGVjNzIxOWIwMDNiMDViMGUyMTEzMDNlNTdkMTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIFJlbmRl
clJlcGxhY2VkOjppbnRyaW5zaWNTaXplQ2hhbmdlZCgpCiAKIGJvb2wgUmVuZGVyUmVwbGFjZWQ6
OnNob3VsZERyYXdTZWxlY3Rpb25UaW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gc2VsZWN0aW9u
U3RhdGUoKSAhPSBTZWxlY3Rpb25Ob25lICYmICFkb2N1bWVudCgpLnByaW50aW5nKCk7CisgICAg
cmV0dXJuIHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0U3RhdGU6Ok5vbmUgJiYgIWRvY3Vt
ZW50KCkucHJpbnRpbmcoKTsKIH0KIAogaW5saW5lIHN0YXRpYyBib29sIGRyYWdnZWRDb250ZW50
Q29udGFpbnNSZXBsYWNlZEVsZW1lbnQoY29uc3QgVmVjdG9yPFJlbmRlcmVkRG9jdW1lbnRNYXJr
ZXIqPiYgbWFya2VycywgY29uc3QgRWxlbWVudCYgZWxlbWVudCkKQEAgLTIwNiw3ICsyMDYsNyBA
QCB2b2lkIFJlbmRlclJlcGxhY2VkOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0KQogICAgIAogICAgIGJvb2wgZHJhd1NlbGVjdGlvblRp
bnQgPSBzaG91bGREcmF3U2VsZWN0aW9uVGludCgpOwogICAgIGlmIChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgp
ID09IFNlbGVjdGlvbk5vbmUpCisgICAgICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hs
aWdodFN0YXRlOjpOb25lKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBkcmF3U2VsZWN0
aW9uVGludCA9IGZhbHNlOwogICAgIH0KQEAgLTY3MCw3ICs2NzAsNyBAQCBMYXlvdXRSZWN0IFJl
bmRlclJlcGxhY2VkOjpsb2NhbFNlbGVjdGlvblJlY3QoYm9vbCBjaGVja1doZXRoZXJTZWxlY3Rl
ZCkgY29uc3QKICAgICByZXR1cm4gTGF5b3V0UmVjdChuZXdMb2dpY2FsVG9wLCAwX2x1LCByb290
Qm94LnNlbGVjdGlvbkhlaWdodCgpLCBoZWlnaHQoKSk7CiB9CiAKLXZvaWQgUmVuZGVyUmVwbGFj
ZWQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQordm9pZCBSZW5kZXJS
ZXBsYWNlZDo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiB7CiAgICAg
Ly8gVGhlIHNlbGVjdGlvbiBzdGF0ZSBmb3Igb3VyIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5
IGlzIHVwZGF0ZWQgYnkgdGhlIGJhc2UgY2xhc3MgY2FsbC4KICAgICBSZW5kZXJCb3g6OnNldFNl
bGVjdGlvblN0YXRlKHN0YXRlKTsKQEAgLTY4MSwyMSArNjgxLDIxIEBAIHZvaWQgUmVuZGVyUmVw
bGFjZWQ6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQogCiBib29sIFJl
bmRlclJlcGxhY2VkOjppc1NlbGVjdGVkKCkgY29uc3QKIHsKLSAgICBTZWxlY3Rpb25TdGF0ZSBz
dGF0ZSA9IHNlbGVjdGlvblN0YXRlKCk7Ci0gICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbk5vbmUp
CisgICAgSGlnaGxpZ2h0U3RhdGUgc3RhdGUgPSBzZWxlY3Rpb25TdGF0ZSgpOworICAgIGlmIChz
dGF0ZSA9PSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmIChzdGF0ZSA9PSBTZWxlY3Rpb25JbnNpZGUpCisgICAgaWYgKHN0YXRlID09IEhpZ2hsaWdo
dFN0YXRlOjpJbnNpZGUpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgYXV0byBzZWxlY3Rp
b25TdGFydCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5zdGFydE9mZnNldCgpOwogICAgIGF1dG8gc2Vs
ZWN0aW9uRW5kID0gdmlldygpLnNlbGVjdGlvbigpLmVuZE9mZnNldCgpOwotICAgIGlmIChzdGF0
ZSA9PSBTZWxlY3Rpb25TdGFydCkKKyAgICBpZiAoc3RhdGUgPT0gSGlnaGxpZ2h0U3RhdGU6OlN0
YXJ0KQogICAgICAgICByZXR1cm4gIXNlbGVjdGlvblN0YXJ0OwogCiAgICAgdW5zaWduZWQgZW5k
ID0gZWxlbWVudCgpLT5oYXNDaGlsZE5vZGVzKCkgPyBlbGVtZW50KCktPmNvdW50Q2hpbGROb2Rl
cygpIDogMTsKLSAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uRW5kKQorICAgIGlmIChzdGF0ZSA9
PSBIaWdobGlnaHRTdGF0ZTo6RW5kKQogICAgICAgICByZXR1cm4gc2VsZWN0aW9uRW5kID09IGVu
ZDsKLSAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uQm90aCkKKyAgICBpZiAoc3RhdGUgPT0gSGln
aGxpZ2h0U3RhdGU6OkJvdGgpCiAgICAgICAgIHJldHVybiAhc2VsZWN0aW9uU3RhcnQgJiYgc2Vs
ZWN0aW9uRW5kID09IGVuZDsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4g
ZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFj
ZWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oCmluZGV4IDJj
ZjBiODdlMWNmYzNiYjc5NjE3ZjgxOTU3OTk4NTcyNWIxODQ2ZTAuLmZjNGMzMzIxMDU1OTZlNDdj
M2FmMjJiYmI0OTA3N2IzNmIzZjhmYzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJSZXBsYWNlZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJSZXBsYWNlZC5oCkBAIC01NSw3ICs1NSw3IEBAIHByb3RlY3RlZDoKIAogICAgIHZpcnR1YWwg
TGF5b3V0VW5pdCBtaW5pbXVtUmVwbGFjZWRIZWlnaHQoKSBjb25zdCB7IHJldHVybiAwX2x1OyB9
CiAKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSBvdmVycmlkZTsK
KyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBvdmVycmlkZTsKIAog
ICAgIGJvb2wgaXNTZWxlY3RlZCgpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5mby5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaAppbmRleCBjODhkZjVjOTZkNmMzMzIwYzAxYWQ0M2Mz
NTE4OTYwMTlhYTdmMTg3Li41MzZmMGU3OTUxYzIzZGMyYTFkM2ExYjExY2I5YTgzNmIyMmMzNzZm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2VsZWN0aW9uSW5m
by5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmgK
QEAgLTM1LDcgKzM1LDcgQEAgY2xhc3MgUmVuZGVyU2VsZWN0aW9uSW5mb0Jhc2UgewogcHVibGlj
OgogICAgIGV4cGxpY2l0IFJlbmRlclNlbGVjdGlvbkluZm9CYXNlKFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIpOwogICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIoKSBj
b25zdCB7IHJldHVybiBtX3JlcGFpbnRDb250YWluZXI7IH0KLSAgICBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQorICAgIFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9
CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHJlcGFpbnRSZWN0YW5nbGUoY29uc3QgTGF5b3V0UmVj
dCYgcmVwYWludFJlY3QpOwpAQCAtNDQsNyArNDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdCogbV9yZXBhaW50Q29udGFpbmVyOwogCiBwcml2YXRlOgotICAgIFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgbV9zdGF0ZTsKKyAgICBSZW5kZXJPYmplY3Q6Okhp
Z2hsaWdodFN0YXRlIG1fc3RhdGU7CiB9OwogCiAvLyBUaGlzIHN0cnVjdCBpcyB1c2VkIHdoZW4g
dGhlIHNlbGVjdGlvbiBjaGFuZ2VzIHRvIGNhY2hlIHRoZSBvbGQgYW5kIG5ldyBzdGF0ZSBvZiB0
aGUgc2VsZWN0aW9uIGZvciBlYWNoIFJlbmRlck9iamVjdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcAppbmRleCA0NDg5MDkwY2UwZjdmZWVlMGE3ZDZlNDQ5MDc0NTU2Mzcz
MDA4ZDg2Li40MjZlY2E0MTYzMjdlMzlmMzFiOWY0NDA5YTYzNDZkMGFmYWE1ZTE0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0xMDkyLDkgKzEwOTIsOSBAQCBJ
bnRQb2ludCBSZW5kZXJUZXh0OjpmaXJzdFJ1bkxvY2F0aW9uKCkgY29uc3QKICAgICByZXR1cm4g
SW50UG9pbnQoZmlyc3QtPnJlY3QoKS5sb2NhdGlvbigpKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0
OjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3ZvaWQgUmVuZGVyVGV4
dDo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYgKHN0
YXRlICE9IFNlbGVjdGlvbk5vbmUpCisgICAgaWYgKHN0YXRlICE9IEhpZ2hsaWdodFN0YXRlOjpO
b25lKQogICAgICAgICBlbnN1cmVMaW5lQm94ZXMoKTsKIAogICAgIFJlbmRlck9iamVjdDo6c2V0
U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwpAQCAtMTQ0Niw3ICsxNDQ2LDcgQEAgTGF5b3V0UmVjdCBS
ZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMoY29uc3QgUmVuZGVy
TGF5ZXJNb2RlbE8KICAgICBBU1NFUlQoIW5lZWRzTGF5b3V0KCkpOwogICAgIEFTU0VSVCghc2lt
cGxlTGluZUxheW91dCgpKTsKIAotICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlv
bk5vbmUpCisgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhdGU6Ok5vbmUp
CiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CiAgICAgaWYgKCFjb250YWluaW5nQmxvY2so
KSkKICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKQEAgLTE0NTUsMTYgKzE0NTUsMTYgQEAg
TGF5b3V0UmVjdCBSZW5kZXJUZXh0Ojpjb2xsZWN0U2VsZWN0aW9uUmVjdHNGb3JMaW5lQm94ZXMo
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE8KICAgICAvLyBXZSBpbmNsdWRlIGEgc2VsZWN0aW9uIHdo
aWxlIGVuZFBvcyA+IDAKICAgICB1bnNpZ25lZCBzdGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBl
bmRPZmZzZXQ7Ci0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uSW5zaWRlKSB7
CisgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhdGU6Okluc2lkZSkgewog
ICAgICAgICAvLyBXZSBhcmUgZnVsbHkgc2VsZWN0ZWQuCiAgICAgICAgIHN0YXJ0T2Zmc2V0ID0g
MDsKICAgICAgICAgZW5kT2Zmc2V0ID0gdGV4dCgpLmxlbmd0aCgpOwogICAgIH0gZWxzZSB7CiAg
ICAgICAgIHN0YXJ0T2Zmc2V0ID0gdmlldygpLnNlbGVjdGlvbigpLnN0YXJ0T2Zmc2V0KCk7CiAg
ICAgICAgIGVuZE9mZnNldCA9IHZpZXcoKS5zZWxlY3Rpb24oKS5lbmRPZmZzZXQoKTsKLSAgICAg
ICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uU3RhcnQpCisgICAgICAgIGlmIChz
ZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodFN0YXRlOjpTdGFydCkKICAgICAgICAgICAgIGVu
ZE9mZnNldCA9IHRleHQoKS5sZW5ndGgoKTsKLSAgICAgICAgZWxzZSBpZiAoc2VsZWN0aW9uU3Rh
dGUoKSA9PSBTZWxlY3Rpb25FbmQpCisgICAgICAgIGVsc2UgaWYgKHNlbGVjdGlvblN0YXRlKCkg
PT0gSGlnaGxpZ2h0U3RhdGU6OkVuZCkKICAgICAgICAgICAgIHN0YXJ0T2Zmc2V0ID0gMDsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IDdjN2ExZDc2Y2Yy
MWY3NjZiMTNlZjUzZWY2MGUwMTVjZTJlOTJlMDEuLmIwODA3MjRkNzgxZjM3YTk2YTE0NTgxNmYz
ZWYwNWJiMmE5YTAyZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAt
MjA3LDcgKzIwNyw3IEBAIHByaXZhdGU6CiAKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25G
b3JQb2ludChjb25zdCBMYXlvdXRQb2ludCYsIGNvbnN0IFJlbmRlckZyYWdtZW50Q29udGFpbmVy
Kikgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRl
KSBmaW5hbDsKKyAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBmaW5h
bDsKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxh
eWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGJvb2wgY2xpcFRvVmlzaWJsZUNvbnRl
bnQgPSB0cnVlKSBmaW5hbDsKICAgICBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJv
eCosIHVuc2lnbmVkIGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxp
bmUgPSBudWxscHRyKSBvdmVycmlkZTsKICAgICBMYXlvdXRSZWN0IGNsaXBwZWRPdmVyZmxvd1Jl
Y3RGb3JSZXBhaW50KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWlu
ZXIpIGNvbnN0IGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRMaW5lQm94ZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRMaW5lQm94ZXMuY3BwCmluZGV4IDIwNGRkNjQ4Zjg4OGQzNjNkMGYzYjJlNjdkOWYzNjVkYmIy
ZjhkOGEuLjVlZTU1OWMyNTIxNTE0Y2ZlZDI2YjMxNjFiZjQ0MzZiNWE0YzNjNjkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5jcHAKQEAgLTM0
MiwyMiArMzQyLDIyIEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJUZXh0TGluZUJveGVzOjpwb3Np
dGlvbkZvclBvaW50KGNvbnN0IFJlbmRlclRleHQmIHJlbmRlcmVyCiAgICAgcmV0dXJuIHJlbmRl
cmVyLmNyZWF0ZVZpc2libGVQb3NpdGlvbigwLCBET1dOU1RSRUFNKTsKIH0KIAotdm9pZCBSZW5k
ZXJUZXh0TGluZUJveGVzOjpzZXRTZWxlY3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwg
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3ZvaWQgUmVuZGVyVGV4dExpbmVC
b3hlczo6c2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyVGV4dCYgcmVuZGVyZXIsIFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uSW5zaWRlIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9u
ZSkgeworICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNp
ZGUgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSkgewogICAg
ICAgICBmb3IgKGF1dG8qIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0VGV4dEJv
eCgpKQotICAgICAgICAgICAgYm94LT5yb290KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSk7CisgICAgICAgICAgICBib3gtPnJv
b3QoKS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxp
Z2h0U3RhdGU6Okluc2lkZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIHN0
YXJ0ID0gcmVuZGVyZXIudmlldygpLnNlbGVjdGlvbigpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgYXV0
byBlbmQgPSByZW5kZXJlci52aWV3KCkuc2VsZWN0aW9uKCkuZW5kT2Zmc2V0KCk7Ci0gICAgaWYg
KHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQpIHsKKyAgICBpZiAoc3RhdGUg
PT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpIHsKICAgICAgICAgZW5kID0g
cmVuZGVyZXIudGV4dCgpLmxlbmd0aCgpOwogICAgICAgICAvLyB0byBoYW5kbGUgc2VsZWN0aW9u
IGZyb20gZW5kIG9mIHRleHQgdG8gZW5kIG9mIGxpbmUKICAgICAgICAgaWYgKHN0YXJ0ICYmIHN0
YXJ0ID09IGVuZCkKICAgICAgICAgICAgIHN0YXJ0ID0gZW5kIC0gMTsKLSAgICB9IGVsc2UgaWYg
KHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKQorICAgIH0gZWxzZSBpZiAoc3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKQogICAgICAgICBzdGFydCA9
IDA7CiAKICAgICBmb3IgKGF1dG8qIGJveCA9IG1fZmlyc3Q7IGJveDsgYm94ID0gYm94LT5uZXh0
VGV4dEJveCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dExpbmVCb3hlcy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5l
Qm94ZXMuaAppbmRleCBlOWE2NjA1NDlkMThlM2U3YzYzNTIwYzE1Y2UyMzMxNWI1ZjhlNjFhLi4y
ZWI1ZGQzNjBhNzQwZGYzZGM1ZTk3Yjc3OTFkNTJlNjc5ZDE4M2I1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgKQEAgLTU4LDcgKzU4LDcgQEAg
cHVibGljOgogCiAgICAgVmlzaWJsZVBvc2l0aW9uIHBvc2l0aW9uRm9yUG9pbnQoY29uc3QgUmVu
ZGVyVGV4dCYsIGNvbnN0IExheW91dFBvaW50JikgY29uc3Q7CiAKLSAgICB2b2lkIHNldFNlbGVj
dGlvblN0YXRlKFJlbmRlclRleHQmLCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlKTsKKyAg
ICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmLCBSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodFN0YXRlKTsKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3RGb3JSYW5nZSh1bnNpZ25l
ZCBzdGFydCwgdW5zaWduZWQgZW5kKTsKICAgICB2b2lkIGNvbGxlY3RTZWxlY3Rpb25SZWN0c0Zv
clJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNpZ25lZCBlbmQsIFZlY3RvcjxMYXlvdXRSZWN0PiYg
cmVjdHMpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0KaW5k
ZXggY2Q4YWY2ZTJhNzg1ZjAxNjkyNDdiMGQxZjJjYWE3N2M5M2M2MTQwZi4uYTBlMTc3NzYyYjhk
ZTkwODU0MzU0YzA3ZDYwMjFlMDY1NDJiMDhjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZU1hYy5tbQpAQCAtMjkwNyw3ICsyOTA3LDcgQEAgYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRBdHRhY2htZW50KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIGNvbnN0
IFBhaW50SW4KICAgICBjb25zdCBSZW5kZXJBdHRhY2htZW50JiBhdHRhY2htZW50ID0gZG93bmNh
c3Q8UmVuZGVyQXR0YWNobWVudD4ocmVuZGVyZXIpOwogCiAgICAgYXV0byBsYXlvdXRTdHlsZSA9
IEF0dGFjaG1lbnRMYXlvdXRTdHlsZTo6Tm9uU2VsZWN0ZWQ7Ci0gICAgaWYgKGF0dGFjaG1lbnQu
c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUgJiYgcGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbikKKyAgICBpZiAoYXR0YWNobWVudC5z
ZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUgJiYg
cGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlNlbGVjdGlvbikKICAgICAgICAgbGF5b3V0
U3R5bGUgPSBBdHRhY2htZW50TGF5b3V0U3R5bGU6OlNlbGVjdGVkOwogCiAgICAgQXR0YWNobWVu
dExheW91dCBsYXlvdXQoYXR0YWNobWVudCwgbGF5b3V0U3R5bGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmgKaW5kZXggMTg0MmIzMGZhMzM0ZDJmYzY2Zjk5NzFhZTYxMDZjMmZl
YzVkYjkyZi4uMWZiN2RmYmRkMWFlNDQ2MTdjYmE1ZjI3YWIwYWE1MjhjY2ExMzllYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCkBAIC0yMiwxMCArMjIsMTAgQEAKICNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiSGlnaGxpZ2h0RGF0
YS5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgog
I2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgotI2luY2x1ZGUgIlNlbGVjdGlvblJhbmdlRGF0YS5o
IgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUg
PHd0Zi9MaXN0SGFzaFNldC5oPgpAQCAtNzgsNyArNzgsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0
dXJuIHRoZSByZW5kZXJlciB3aG9zZSBiYWNrZ3JvdW5kIHN0eWxlIGlzIHVzZWQgdG8gcGFpbnQg
dGhlIHJvb3QgYmFja2dyb3VuZC4KICAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlckZvclJvb3RC
YWNrZ3JvdW5kKCkgY29uc3Q7CiAKLSAgICBTZWxlY3Rpb25SYW5nZURhdGEmIHNlbGVjdGlvbigp
IHsgcmV0dXJuIG1fc2VsZWN0aW9uOyB9CisgICAgSGlnaGxpZ2h0RGF0YSYgc2VsZWN0aW9uKCkg
eyByZXR1cm4gbV9zZWxlY3Rpb247IH0KIAogICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdDsKIApA
QCAtMjIwLDcgKzIyMCw3IEBAIHByaXZhdGU6CiAgICAgdWludDY0X3QgbV9yZW5kZXJlckNvdW50
IHsgMSB9OwogCiAgICAgbXV0YWJsZSBzdGQ6OnVuaXF1ZV9wdHI8UmVnaW9uPiBtX2FjY3VtdWxh
dGVkUmVwYWludFJlZ2lvbjsKLSAgICBTZWxlY3Rpb25SYW5nZURhdGEgbV9zZWxlY3Rpb247Cisg
ICAgSGlnaGxpZ2h0RGF0YSBtX3NlbGVjdGlvbjsKIAogICAgIFdlYWtQdHI8UmVuZGVyTGF5ZXI+
IG1fc3R5bGVDaGFuZ2VMYXllck11dGF0aW9uUm9vdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcAppbmRleCA3ZDc3NTM4MmUzMzI2MTNkYzZmNjdlMjNlODJhZTZk
NzE1NGFmNjA1Li4zZjZmMzNiNzUyYjViODYzNzk3YzRhMWE4MjI3ODVkMmMzNGQ4NWFhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcApAQCAtMzQ2LDcgKzM0Niw3
IEBAIEludFJlY3QgUmVuZGVyV2lkZ2V0Ojp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0CiAgICAgcmV0
dXJuIGludGVyc2VjdGlvbih2aWV3KCkuZnJhbWVWaWV3KCkuY29udGVudHNUb1dpbmRvdyhtX2Ns
aXBSZWN0KSwgdmlldygpLmZyYW1lVmlldygpLndpbmRvd0NsaXBSZWN0KCkpOwogfQogCi12b2lk
IFJlbmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCit2
b2lkIFJlbmRlcldpZGdldDo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUp
CiB7CiAgICAgLy8gVGhlIHNlbGVjdGlvbiBzdGF0ZSBmb3Igb3VyIGNvbnRhaW5pbmcgYmxvY2sg
aGllcmFyY2h5IGlzIHVwZGF0ZWQgYnkgdGhlIGJhc2UgY2xhc3MgY2FsbC4KICAgICBSZW5kZXJS
ZXBsYWNlZDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5oCmluZGV4IDhhZTNkMmM2NWIyZDQ0ZTUyNjAwYTAyYzdhNjNmNzM0NTQ5
ZDE5NmMuLjM3MDA5NmZmZGQ2MjAwMjEzMTg3OTA5YzJhZDkyYzg3MTRmOGViNTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKQEAgLTkzLDcgKzkzLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIG5lZWRzUHJlZmVycmVkV2lkdGhzUmVjYWxjdWxhdGlvbigpIGNvbnN0IGZp
bmFsOwogICAgIFJlbmRlckJveCogZW1iZWRkZWRDb250ZW50Qm94KCkgY29uc3QgZmluYWw7CiAK
LSAgICB2b2lkIHNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlKSBmaW5hbDsKKyAgICB2
b2lkIHNldFNlbGVjdGlvblN0YXRlKEhpZ2hsaWdodFN0YXRlKSBmaW5hbDsKICAgICB2b2lkIHNl
dE92ZXJsYXBUZXN0UmVzdWx0KGJvb2wpIGZpbmFsOwogCiAgICAgYm9vbCBzZXRXaWRnZXRHZW9t
ZXRyeShjb25zdCBMYXlvdXRSZWN0Jik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElu
bGluZUJveC5jcHAKaW5kZXggNzhjMWEwZWEwNGQ5NmNkNzhiNzA5MDhlYThhYmJkYzE4MTk4OTQx
Ni4uMzY0OTI2MzM4NTY5YTExYmZlZDM3NTkyMDI4NzkzODU4ZTg1NTlmZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApAQCAtNDIzLDcgKzQyMyw3IEBAIExh
eW91dFVuaXQgUm9vdElubGluZUJveDo6bGluZVNuYXBBZGp1c3RtZW50KExheW91dFVuaXQgZGVs
dGEpIGNvbnN0CiBHYXBSZWN0cyBSb290SW5saW5lQm94OjpsaW5lU2VsZWN0aW9uR2FwKFJlbmRl
ckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaW50JiByb290QmxvY2tQaHlzaWNhbFBv
c2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRGcm9tUm9vdEJsb2NrLAogICAgIExheW91
dFVuaXQgc2VsVG9wLCBMYXlvdXRVbml0IHNlbEhlaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlv
bk9mZnNldENhY2hlcyYgY2FjaGUsIGNvbnN0IFBhaW50SW5mbyogcGFpbnRJbmZvKQogewotICAg
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgbGluZVN0YXRlID0gc2VsZWN0aW9uU3RhdGUo
KTsKKyAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIGxpbmVTdGF0ZSA9IHNlbGVjdGlv
blN0YXRlKCk7CiAKICAgICBib29sIGxlZnRHYXAsIHJpZ2h0R2FwOwogICAgIGJsb2NrRmxvdygp
LmdldFNlbGVjdGlvbkdhcEluZm8obGluZVN0YXRlLCBsZWZ0R2FwLCByaWdodEdhcCk7CkBAIC00
NTEsOSArNDUxLDkgQEAgR2FwUmVjdHMgUm9vdElubGluZUJveDo6bGluZVNlbGVjdGlvbkdhcChS
ZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAgICBpZiAoZmlyc3RCb3gg
JiYgZmlyc3RCb3ggIT0gbGFzdEJveCkgewogICAgICAgICAvLyBOb3cgZmlsbCBpbiBhbnkgZ2Fw
cyBvbiB0aGUgbGluZSB0aGF0IG9jY3VycmVkIGJldHdlZW4gdHdvIHNlbGVjdGVkIGVsZW1lbnRz
LgogICAgICAgICBMYXlvdXRVbml0IGxhc3RMb2dpY2FsTGVmdCB7IGZpcnN0Qm94LT5sb2dpY2Fs
UmlnaHQoKSB9OwotICAgICAgICBib29sIGlzUHJldmlvdXNCb3hTZWxlY3RlZCA9IGZpcnN0Qm94
LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKyAgICAg
ICAgYm9vbCBpc1ByZXZpb3VzQm94U2VsZWN0ZWQgPSBmaXJzdEJveC0+c2VsZWN0aW9uU3RhdGUo
KSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogICAgICAgICBmb3IgKElu
bGluZUJveCogYm94ID0gZmlyc3RCb3gtPm5leHRMZWFmT25MaW5lKCk7IGJveDsgYm94ID0gYm94
LT5uZXh0TGVhZk9uTGluZSgpKSB7Ci0gICAgICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0
ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkgeworICAgICAgICAgICAgaWYgKGJv
eC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25l
KSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBsb2dpY2FsUmVjdCB7IGxhc3RMb2dpY2Fs
TGVmdCwgc2VsVG9wLCBMYXlvdXRVbml0KGJveC0+bG9naWNhbExlZnQoKSAtIGxhc3RMb2dpY2Fs
TGVmdCksIHNlbEhlaWdodCB9OwogICAgICAgICAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUocmVu
ZGVyZXIoKS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RnJvbVJvb3RCbG9jayA6
IExheW91dFNpemUob2Zmc2V0RnJvbVJvb3RCbG9jay5oZWlnaHQoKSwgb2Zmc2V0RnJvbVJvb3RC
bG9jay53aWR0aCgpKSk7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBnYXBSZWN0ID0gcm9v
dEJsb2NrLmxvZ2ljYWxSZWN0VG9QaHlzaWNhbFJlY3Qocm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlv
biwgbG9naWNhbFJlY3QpOwpAQCAtNDY3LDcgKzQ2Nyw3IEBAIEdhcFJlY3RzIFJvb3RJbmxpbmVC
b3g6OmxpbmVTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0
UG9pCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYm94ID09IGxhc3RCb3gpCiAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpc1ByZXZpb3VzQm94U2VsZWN0ZWQgPSBi
b3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOworICAg
ICAgICAgICAgaXNQcmV2aW91c0JveFNlbGVjdGVkID0gYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTUyNywyNCArNTI3LDIzIEBAIEludFJlY3QgUm9vdElubGluZUJveDo6Y29tcHV0ZUNhcmV0
UmVjdChmbG9hdCBsb2dpY2FsTGVmdFBvc2l0aW9uLCB1bnNpZ25lZCBjYXJlCiAgICAgcmV0dXJu
IGJsb2NrU3R5bGUuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEludFJlY3QobGVmdCwgdG9w
LCBjYXJldFdpZHRoLCBoZWlnaHQpIDogSW50UmVjdCh0b3AsIGxlZnQsIGhlaWdodCwgY2FyZXRX
aWR0aCk7CiB9CiAKLVJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgUm9vdElubGluZUJveDo6
c2VsZWN0aW9uU3RhdGUoKQorUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBSb290SW5saW5l
Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7CiAgICAgLy8gV2FsayBvdmVyIGFsbCBvZiB0aGUgc2Vs
ZWN0ZWQgYm94ZXMuCi0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSA9IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKKyAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKICAgICBmb3Ig
KElubGluZUJveCogYm94ID0gZmlyc3RMZWFmRGVzY2VuZGFudCgpOyBib3g7IGJveCA9IGJveC0+
bmV4dExlYWZPbkxpbmUoKSkgewotICAgICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRl
IGJveFN0YXRlID0gYm94LT5zZWxlY3Rpb25TdGF0ZSgpOwotICAgICAgICBpZiAoKGJveFN0YXRl
ID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQgJiYgc3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25FbmQpIHx8Ci0gICAgICAgICAgICAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25FbmQgJiYgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCkp
Ci0gICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aDsKLSAgICAg
ICAgZWxzZSBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lIHx8Ci0gICAg
ICAgICAgICAgICAgICgoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8
fCBib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkgJiYKLSAgICAgICAgICAg
ICAgICAgIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUgfHwgc3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpKSkKKyAgICAgICAgUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRTdGF0ZSBib3hTdGF0ZSA9IGJveC0+c2VsZWN0aW9uU3RhdGUoKTsKKyAgICAgICAg
aWYgKChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCAmJiBz
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpCisgICAgICAgICAgICB8
fCAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kICYmIHN0YXRl
ID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KSkKKyAgICAgICAgICAgIHN0
YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aDsKKyAgICAgICAgZWxzZSBp
ZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSB8fCAoKGJveFN0
YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0IHx8IGJveFN0YXRlID09
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZCkKKyAgICAgICAgICAgICYmIChzdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lIHx8IHN0YXRlID09IFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSkpKQogICAgICAgICAgICAgc3RhdGUgPSBi
b3hTdGF0ZTsKLSAgICAgICAgZWxzZSBpZiAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25Ob25lICYmIHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQpIHsKKyAg
ICAgICAgZWxzZSBpZiAoYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6
Tm9uZSAmJiBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCkgewog
ICAgICAgICAgICAgLy8gV2UgYXJlIHBhc3QgdGhlIGVuZCBvZiB0aGUgc2VsZWN0aW9uLgotICAg
ICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGg7CisgICAgICAgICAg
ICBzdGF0ZSA9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGg7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkKKyAgICAg
ICAgaWYgKHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkJvdGgpCiAgICAg
ICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTU1NCw3ICs1NTMsNyBAQCBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXRlIFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlvblN0YXRlKCkKIElubGluZUJv
eCogUm9vdElubGluZUJveDo6Zmlyc3RTZWxlY3RlZEJveCgpCiB7CiAgICAgZm9yIChhdXRvKiBi
b3ggPSBmaXJzdExlYWZEZXNjZW5kYW50KCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGVhZk9uTGlu
ZSgpKSB7Ci0gICAgICAgIGlmIChib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25Ob25lKQorICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gYm94
OwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU2Myw3ICs1NjIsNyBAQCBJbmxpbmVC
b3gqIFJvb3RJbmxpbmVCb3g6OmZpcnN0U2VsZWN0ZWRCb3goKQogSW5saW5lQm94KiBSb290SW5s
aW5lQm94OjpsYXN0U2VsZWN0ZWRCb3goKQogewogICAgIGZvciAoYXV0byogYm94ID0gbGFzdExl
YWZEZXNjZW5kYW50KCk7IGJveDsgYm94ID0gYm94LT5wcmV2aW91c0xlYWZPbkxpbmUoKSkgewot
ICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uTm9uZSkKKyAgICAgICAgaWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQogICAgICAgICAgICAgcmV0dXJuIGJveDsKICAgICB9
CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC02NjQsNyArNjYzLDcgQEAgTGF5b3V0VW5pdCBSb290
SW5saW5lQm94OjpzZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkgY29uc3QK
ICAgICBMYXlvdXRVbml0IHRvcCA9IHNlbGVjdGlvblRvcCgpOwogCiAgICAgYXV0byBibG9ja1Nl
bGVjdGlvblN0YXRlID0gcm9vdEJveC5ibG9ja0Zsb3coKS5zZWxlY3Rpb25TdGF0ZSgpOwotICAg
IGlmIChibG9ja1NlbGVjdGlvblN0YXRlICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRl
ICYmIGJsb2NrU2VsZWN0aW9uU3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpCisg
ICAgaWYgKGJsb2NrU2VsZWN0aW9uU3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZTo6SW5zaWRlICYmIGJsb2NrU2VsZWN0aW9uU3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGln
aHRTdGF0ZTo6RW5kKQogICAgICAgICByZXR1cm4gdG9wOwogCiAgICAgTGF5b3V0U2l6ZSBvZmZz
ZXRUb0Jsb2NrQmVmb3JlOwpAQCAtNjc3LDggKzY3Niw4IEBAIExheW91dFVuaXQgUm9vdElubGlu
ZUJveDo6c2VsZWN0aW9uVG9wQWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpIGNvbnN0CiAgICAg
ICAgIHJldHVybiB0b3A7CiAKICAgICBpZiAoYXV0byogbGFzdExpbmUgPSBkb3duY2FzdDxSZW5k
ZXJCbG9ja0Zsb3c+KCpibG9ja0JlZm9yZSkubGFzdFJvb3RCb3goKSkgewotICAgICAgICBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUgPSBsYXN0TGlu
ZS0+c2VsZWN0aW9uU3RhdGUoKTsKLSAgICAgICAgaWYgKGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUg
IT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUgJiYgbGFzdExpbmVTZWxlY3Rpb25TdGF0
ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KQorICAgICAgICBSZW5kZXJPYmplY3Q6
OkhpZ2hsaWdodFN0YXRlIGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUgPSBsYXN0TGluZS0+c2VsZWN0
aW9uU3RhdGUoKTsKKyAgICAgICAgaWYgKGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUgIT0gUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlICYmIGxhc3RMaW5lU2VsZWN0aW9uU3RhdGUg
IT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpCiAgICAgICAgICAgICByZXR1
cm4gdG9wOwogCiAgICAgICAgIExheW91dFVuaXQgbGFzdExpbmVTZWxlY3Rpb25Cb3R0b20gPSBs
YXN0TGluZS0+c2VsZWN0aW9uQm90dG9tKCkgKyBvZmZzZXRUb0Jsb2NrQmVmb3JlLmhlaWdodCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKaW5kZXggMjQ3ZTU1YzA2
OWU5ZmU4ODFjYWY0YmZiYzJiNGFlZjE5ZTM2MTdhMy4uZjg5NzZjNmE3ZDRhNjk3MzQ4NzQ5OTNm
MzlkZjM2ZjQ3ODdhZTk1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jv
b3RJbmxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJv
eC5oCkBAIC0xMjYsNyArMTI2LDcgQEAgcHVibGljOgogICAgIHVzaW5nIElubGluZUJveDo6aGFz
U2VsZWN0ZWRDaGlsZHJlbjsKICAgICB1c2luZyBJbmxpbmVCb3g6OnNldEhhc1NlbGVjdGVkQ2hp
bGRyZW47CiAKLSAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRl
KCkgZmluYWw7CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0
ZSgpIGZpbmFsOwogICAgIElubGluZUJveCogZmlyc3RTZWxlY3RlZEJveCgpOwogICAgIElubGlu
ZUJveCogbGFzdFNlbGVjdGVkQm94KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NlbGVjdGlvblJhbmdlRGF0YS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQy
MTg4OTA1NzAzZmU3YzllOTc4NTRmZjMyNWFkMDRlMmM0ZWI2MjMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Nl
bGVjdGlvblJhbmdlRGF0YS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwzODUgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgotICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBIT0xERVIgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKLSAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IKLSAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRgotICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uUmFuZ2VEYXRhLmgiCi0KLSNpbmNs
dWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCi0jaW5jbHVkZSAi
UG9zaXRpb24uaCIKLSNpbmNsdWRlICJSYW5nZS5oIgotI2luY2x1ZGUgIlJlbmRlckxheWVyLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCIKLSNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAi
VmlzaWJsZVNlbGVjdGlvbi5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLW5hbWVzcGFjZSB7
IC8vIFNlZSBidWcgIzE3NzgwOC4KLQotc3RydWN0IFNlbGVjdGlvbkRhdGEgewotICAgIHVzaW5n
IFJlbmRlcmVyTWFwID0gSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU2VsZWN0aW9uSW5mbz4+OwotICAgIHVzaW5nIFJlbmRlckJsb2NrTWFwID0gSGFzaE1hcDxj
b25zdCBSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbklu
Zm8+PjsKLQotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldDsKLSAgICBPcHRpb25h
bDx1bnNpZ25lZD4gZW5kT2Zmc2V0OwotICAgIFJlbmRlcmVyTWFwIHJlbmRlcmVyczsKLSAgICBS
ZW5kZXJCbG9ja01hcCBibG9ja3M7Ci19OwotCi1jbGFzcyBTZWxlY3Rpb25JdGVyYXRvciB7Ci1w
dWJsaWM6Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBzdGFydCkKLSAgICAg
ICAgOiBtX2N1cnJlbnQoc3RhcnQpCi0gICAgewotICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsK
LSAgICB9Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50KCkgY29uc3QKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX2N1cnJlbnQ7Ci0gICAgfQotICAgIAotICAgIFJlbmRlck9iamVjdCog
bmV4dCgpCi0gICAgewotICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTcGFuID0gbV9zcGFu
bmVyU3RhY2suaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3QoKS0+c3Bh
bm5lcigpOwotICAgICAgICBtX2N1cnJlbnQgPSBtX2N1cnJlbnQtPm5leHRJblByZU9yZGVyKGN1
cnJlbnRTcGFuKTsKLSAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7Ci0gICAgICAgIGlmICghbV9j
dXJyZW50ICYmIGN1cnJlbnRTcGFuKSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBsYWNl
aG9sZGVyID0gbV9zcGFubmVyU3RhY2subGFzdCgpOwotICAgICAgICAgICAgbV9zcGFubmVyU3Rh
Y2sucmVtb3ZlTGFzdCgpOwotICAgICAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXItPm5l
eHRJblByZU9yZGVyKCk7Ci0gICAgICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gbV9jdXJyZW50OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB2b2lk
IGNoZWNrRm9yU3Bhbm5lcigpCi0gICAgewotICAgICAgICBpZiAoIWlzPFJlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyPihtX2N1cnJlbnQpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBhdXRvJiBwbGFjZWhvbGRlciA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29sdW1uU3Bh
bm5lclBsYWNlaG9sZGVyPigqbV9jdXJyZW50KTsKLSAgICAgICAgbV9zcGFubmVyU3RhY2suYXBw
ZW5kKCZwbGFjZWhvbGRlcik7Ci0gICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVyLnNwYW5u
ZXIoKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIG1fY3VycmVudCB7IG51bGxwdHIgfTsK
LSAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBtX3NwYW5u
ZXJTdGFjazsKLX07Ci0KLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQotCi1zdGF0aWMgUmVuZGVy
T2JqZWN0KiByZW5kZXJlckFmdGVyT2Zmc2V0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIs
IHVuc2lnbmVkIG9mZnNldCkKLXsKLSAgICBhdXRvKiBjaGlsZCA9IHJlbmRlcmVyLmNoaWxkQXQo
b2Zmc2V0KTsKLSAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IHJlbmRlcmVyLm5leHRJblByZU9y
ZGVyQWZ0ZXJDaGlsZHJlbigpOwotfQotCi1zdGF0aWMgYm9vbCBpc1ZhbGlkUmVuZGVyZXJGb3JT
ZWxlY3Rpb24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgU2VsZWN0aW9uUmFu
Z2VEYXRhOjpDb250ZXh0JiBzZWxlY3Rpb24pCi17Ci0gICAgcmV0dXJuIChyZW5kZXJlci5jYW5C
ZVNlbGVjdGlvbkxlYWYoKSB8fCAmcmVuZGVyZXIgPT0gc2VsZWN0aW9uLnN0YXJ0KCkgfHwgJnJl
bmRlcmVyID09IHNlbGVjdGlvbi5lbmQoKSkKLSAgICAgICAgJiYgcmVuZGVyZXIuc2VsZWN0aW9u
U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUKLSAgICAgICAgJiYgcmVuZGVy
ZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci19Ci0KLXN0YXRpYyBSZW5kZXJCbG9jayogY29udGFpbmlu
Z0Jsb2NrQmVsb3dWaWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgYXV0
byogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgcmV0
dXJuIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRyIDogY29udGFpbmlu
Z0Jsb2NrOwotfQotCi1zdGF0aWMgU2VsZWN0aW9uRGF0YSBjb2xsZWN0KGNvbnN0IFNlbGVjdGlv
blJhbmdlRGF0YTo6Q29udGV4dCYgc2VsZWN0aW9uLCBib29sIHJlcGFpbnREaWZmZXJlbmNlKQot
ewotICAgIFNlbGVjdGlvbkRhdGEgb2xkU2VsZWN0aW9uRGF0YSB7IHNlbGVjdGlvbi5zdGFydE9m
ZnNldCgpLCBzZWxlY3Rpb24uZW5kT2Zmc2V0KCksIHsgfSwgeyB9IH07Ci0gICAgLy8gQmxvY2tz
IGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmlsbCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0
aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgot
ICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWludCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRv
IGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQgcmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5j
ZSBvdGhlcndpc2UKLSAgICAvLyB0aGUgdW5pb24gb2YgdGhvc2UgcmVjdHMgbWlnaHQgcmVtYWlu
IHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUgb2NjdXJyZWQuCi0gICAgYXV0byogc3Rh
cnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKLSAgICBSZW5kZXJPYmplY3QqIHN0b3AgPSBudWxscHRy
OwotICAgIGlmIChzZWxlY3Rpb24uZW5kKCkpCi0gICAgICAgIHN0b3AgPSByZW5kZXJlckFmdGVy
T2Zmc2V0KCpzZWxlY3Rpb24uZW5kKCksIHNlbGVjdGlvbi5lbmRPZmZzZXQoKS52YWx1ZSgpKTsK
LSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzdGFydCk7Ci0gICAgd2hp
bGUgKHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJl
ckZvclNlbGVjdGlvbigqc3RhcnQsIHNlbGVjdGlvbikpIHsKLSAgICAgICAgICAgIC8vIEJsb2Nr
cyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMu
IFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgotICAgICAgICAgICAgb2xkU2VsZWN0aW9u
RGF0YS5yZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+
KCpzdGFydCwgdHJ1ZSkpOwotICAgICAgICAgICAgaWYgKHJlcGFpbnREaWZmZXJlbmNlKSB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChhdXRvKiBibG9jayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93Vmll
dygqc3RhcnQpOyBibG9jazsgYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKmJsb2Nr
KSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBibG9ja0luZm8gPSBvbGRTZWxlY3Rpb25E
YXRhLmJsb2Nrcy5hZGQoYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJlbmRlckJsb2Nr
U2VsZWN0aW9uSW5mbz4oKmJsb2NrKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCk7Ci0g
ICAgfQotICAgIHJldHVybiBvbGRTZWxlY3Rpb25EYXRhOwotfQotCi1TZWxlY3Rpb25SYW5nZURh
dGE6OlNlbGVjdGlvblJhbmdlRGF0YShSZW5kZXJWaWV3JiB2aWV3KQotICAgIDogbV9yZW5kZXJW
aWV3KHZpZXcpCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgLCBtX3NlbGVjdGlv
blJlY3RHYXRoZXJlcih2aWV3KQotI2VuZGlmCi17Ci19Ci0KLXZvaWQgU2VsZWN0aW9uUmFuZ2VE
YXRhOjpzZXRDb250ZXh0KGNvbnN0IENvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgQVNTRVJUKGNv
bnRleHQuc3RhcnQoKSAmJiBjb250ZXh0LmVuZCgpKTsKLSAgICBtX3NlbGVjdGlvbkNvbnRleHQg
PSBjb250ZXh0OwotfQotCi1SZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIFNlbGVjdGlvblJh
bmdlRGF0YTo6c2VsZWN0aW9uU3RhdGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QmIHJlbmRlcmVy
KQotewotICAgIC8vIEZJWE1FOiB3ZSBzaG91bGRsbid0IGhhdmUgdG8gY2hlY2sgdGhhdCBhIHJl
bmRlcmVyIGlzIGEgZGVzY2VuZGFudCBvZiB0aGUgcmVuZGVyIG5vZGUKLSAgICAvLyBmcm9tIHRo
ZSByYW5nZS4gVGhpcyBpcyBsaWtlbHkgYmVjYXVzZSB3ZSBhcmVuJ3QgdXNpbmcgVmlzaWJsZVBv
c2l0aW9ucyB5ZXQuCi0gICAgLy8gUGxhbm5lZCBmaXggaW4gYSBmb2xsb3d1cDogPHJkYXI6Ly9w
cm9ibGVtLzU4MDk1OTIzPgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMDU1MjkKLSAgICAKLSAgICBpZiAoJnJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29u
dGV4dC5zdGFydCgpKSB7Ci0gICAgICAgIGlmIChtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKSAm
JiBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkgJiYgbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkg
PT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uQm90aDsKLSAgICAgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFy
dCgpKQotICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhcnQ7Ci0g
ICAgfQotICAgIGlmICgmcmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpKQotICAg
ICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQ7Ci0KLSAgICBSZW5kZXJPYmpl
Y3QqIHNlbGVjdGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgYXV0byogc2VsZWN0aW9uRGF0YUVuZCA9
IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKTsKLSAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKLSAg
ICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqc2VsZWN0aW9uRGF0YUVu
ZCwgbV9zZWxlY3Rpb25Db250ZXh0LmVuZE9mZnNldCgpLnZhbHVlKCkpOwotICAgIFNlbGVjdGlv
bkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCgpKTsK
LSAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFy
dCgpOyBjdXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IG1fc2VsZWN0aW9uQ29u
dGV4dC5lbmQoKTsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7
Ci0gICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0
KCkgfHwgY3VycmVudFJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+Y2FuQmVTZWxl
Y3Rpb25MZWFmKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCZyZW5kZXJl
ciA9PSBjdXJyZW50UmVuZGVyZXIpCi0gICAgICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25JbnNpZGU7Ci0gICAgfQotICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OlNlbGVjdGlv
bk5vbmU7Ci0gICAgCi19Ci0KLXZvaWQgU2VsZWN0aW9uUmFuZ2VEYXRhOjpzZXQoY29uc3QgQ29u
dGV4dCYgc2VsZWN0aW9uLCBSZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQotewotICAgIGlm
ICgoc2VsZWN0aW9uLnN0YXJ0KCkgJiYgIXNlbGVjdGlvbi5lbmQoKSkgfHwgKHNlbGVjdGlvbi5l
bmQoKSAmJiAhc2VsZWN0aW9uLnN0YXJ0KCkpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gSnVz
dCByZXR1cm4gaWYgdGhlIHNlbGVjdGlvbiBoYXNuJ3QgY2hhbmdlZC4KLSAgICBhdXRvIGlzQ2Fy
ZXQgPSBtX3JlbmRlclZpZXcuZnJhbWUoKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7Ci0gICAgaWYg
KHNlbGVjdGlvbiA9PSBtX3NlbGVjdGlvbkNvbnRleHQgJiYgbV9zZWxlY3Rpb25XYXNDYXJldCA9
PSBpc0NhcmV0KQotICAgICAgICByZXR1cm47Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMp
Ci0gICAgLy8gQ2xlYXIgdGhlIGN1cnJlbnQgcmVjdHMgYW5kIGNyZWF0ZSBhIG5vdGlmaWVyIGZv
ciB0aGUgbmV3IHJlY3RzIHdlIGFyZSBhYm91dCB0byBnYXRoZXIuCi0gICAgLy8gVGhlIE5vdGlm
aWVyIHVwZGF0ZXMgdGhlIEVkaXRvciB3aGVuIGl0IGdvZXMgb3V0IG9mIHNjb3BlIGFuZCBpcyBk
ZXN0cm95ZWQuCi0gICAgYXV0byByZWN0Tm90aWZpZXIgPSBtX3NlbGVjdGlvblJlY3RHYXRoZXJl
ci5jbGVhckFuZENyZWF0ZU5vdGlmaWVyKCk7Ci0jZW5kaWYKLSAgICBtX3NlbGVjdGlvbldhc0Nh
cmV0ID0gaXNDYXJldDsKLSAgICBhcHBseShzZWxlY3Rpb24sIGJsb2NrUmVwYWludE1vZGUpOwot
fQotCi12b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6Y2xlYXIoKQotewotICAgIG1fcmVuZGVyVmll
dy5sYXllcigpLT5yZXBhaW50QmxvY2tTZWxlY3Rpb25HYXBzKCk7Ci0gICAgc2V0KHsgfSwgU2Vs
ZWN0aW9uUmFuZ2VEYXRhOjpSZXBhaW50TW9kZTo6TmV3TWludXNPbGQpOwotfQotCi12b2lkIFNl
bGVjdGlvblJhbmdlRGF0YTo6cmVwYWludCgpIGNvbnN0Ci17Ci0gICAgSGFzaFNldDxSZW5kZXJC
bG9jayo+IHByb2Nlc3NlZEJsb2NrczsKLSAgICBSZW5kZXJPYmplY3QqIGVuZCA9IG51bGxwdHI7
Ci0gICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgZW5kID0gcmVuZGVy
ZXJBZnRlck9mZnNldCgqbV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpLCBtX3NlbGVjdGlvbkNvbnRl
eHQuZW5kT2Zmc2V0KCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9u
SXRlcmF0b3IobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkpOwotICAgIGZvciAoYXV0byogcmVu
ZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5jdXJyZW50KCk7IHJlbmRlcmVyICYmIHJlbmRlcmVy
ICE9IGVuZDsgcmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKLSAgICAgICAg
aWYgKCFyZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYgcmVuZGVyZXIgIT0gbV9zZWxl
Y3Rpb25Db250ZXh0LnN0YXJ0KCkgJiYgcmVuZGVyZXIgIT0gbV9zZWxlY3Rpb25Db250ZXh0LmVu
ZCgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChyZW5kZXJlci0+c2VsZWN0
aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCi0gICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqcmVuZGVyZXIsIHRydWUpLnJl
cGFpbnQoKTsKLSAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcg
bGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwu
Ci0gICAgICAgIGZvciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKnJl
bmRlcmVyKTsgYmxvY2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpibG9jaykp
IHsKLSAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChibG9jaykuaXNOZXdFbnRy
eSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFJlbmRlclNlbGVjdGlvbklu
Zm8oKmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUludFJl
Y3QgU2VsZWN0aW9uUmFuZ2VEYXRhOjpjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50
IGNsaXBUb1Zpc2libGVDb250ZW50KSBjb25zdAotewotICAgIFNlbGVjdGlvbkRhdGE6OlJlbmRl
cmVyTWFwIHJlbmRlcmVyczsKLSAgICBhdXRvKiBzdGFydCA9IG1fc2VsZWN0aW9uQ29udGV4dC5z
dGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7Ci0gICAgaWYgKG1fc2Vs
ZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQo
Km1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSwgbV9zZWxlY3Rpb25Db250ZXh0LmVuZE9mZnNldCgp
LnZhbHVlKCkpOwotICAgIFNlbGVjdGlvbkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHN0YXJ0
KTsKLSAgICB3aGlsZSAoc3RhcnQgJiYgc3RhcnQgIT0gc3RvcCkgewotICAgICAgICBpZiAoKHN0
YXJ0LT5jYW5CZVNlbGVjdGlvbkxlYWYoKSB8fCBzdGFydCA9PSBtX3NlbGVjdGlvbkNvbnRleHQu
c3RhcnQoKSB8fCBzdGFydCA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkpCi0gICAgICAgICAg
ICAmJiBzdGFydC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5v
bmUpIHsKLSAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5n
IGxpbmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxs
LgotICAgICAgICAgICAgcmVuZGVyZXJzLnNldChzdGFydCwgbWFrZVVuaXF1ZTxSZW5kZXJTZWxl
Y3Rpb25JbmZvPigqc3RhcnQsIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zpc2libGVD
b250ZW50OjpZZXMpKTsKLSAgICAgICAgICAgIGF1dG8qIGJsb2NrID0gc3RhcnQtPmNvbnRhaW5p
bmdCbG9jaygpOwotICAgICAgICAgICAgd2hpbGUgKGJsb2NrICYmICFpczxSZW5kZXJWaWV3Pigq
YmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlv
bkluZm8+JiBibG9ja0luZm8gPSByZW5kZXJlcnMuYWRkKGJsb2NrLCBudWxscHRyKS5pdGVyYXRv
ci0+dmFsdWU7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKLSAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1ZTxSZW5k
ZXJTZWxlY3Rpb25JbmZvPigqYmxvY2ssIGNsaXBUb1Zpc2libGVDb250ZW50ID09IENsaXBUb1Zp
c2libGVDb250ZW50OjpZZXMpOwotICAgICAgICAgICAgICAgIGJsb2NrID0gYmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN0YXJ0ID0g
c2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpOwotICAgIH0KLQotICAgIC8vIE5vdyBjcmVhdGUgYSBz
aW5nbGUgYm91bmRpbmcgYm94IHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgd2hvbGUgc2VsZWN0aW9u
LgotICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdDsKLSAgICBmb3IgKGF1dG8mIGluZm8gOiBy
ZW5kZXJlcnMudmFsdWVzKCkpIHsKLSAgICAgICAgLy8gUmVuZGVyU2VsZWN0aW9uSW5mbzo6cmVj
dCgpIGlzIGluIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgcmVwYWludENvbnRhaW5lciwgc28gbWFw
IHRvIHBhZ2UgY29vcmRpbmF0ZXMuCi0gICAgICAgIExheW91dFJlY3QgY3VycmVudFJlY3QgPSBp
bmZvLT5yZWN0KCk7Ci0gICAgICAgIGlmIChhdXRvKiByZXBhaW50Q29udGFpbmVyID0gaW5mby0+
cmVwYWludENvbnRhaW5lcigpKSB7Ci0gICAgICAgICAgICBGbG9hdFF1YWQgYWJzUXVhZCA9IHJl
cGFpbnRDb250YWluZXItPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KGN1cnJlbnRSZWN0
KSk7Ci0gICAgICAgICAgICBjdXJyZW50UmVjdCA9IGFic1F1YWQuZW5jbG9zaW5nQm91bmRpbmdC
b3goKTsKLSAgICAgICAgfQotICAgICAgICBzZWxlY3Rpb25SZWN0LnVuaXRlKGN1cnJlbnRSZWN0
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHNuYXBwZWRJbnRSZWN0KHNlbGVjdGlvblJlY3QpOwotfQot
Ci12b2lkIFNlbGVjdGlvblJhbmdlRGF0YTo6YXBwbHkoY29uc3QgQ29udGV4dCYgbmV3U2VsZWN0
aW9uLCBSZXBhaW50TW9kZSBibG9ja1JlcGFpbnRNb2RlKQotewotICAgIGF1dG8gb2xkU2VsZWN0
aW9uRGF0YSA9IGNvbGxlY3QobV9zZWxlY3Rpb25Db250ZXh0LCBibG9ja1JlcGFpbnRNb2RlID09
IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOwotICAgIC8vIFJlbW92ZSBjdXJyZW50IHNlbGVjdGlv
bi4KLSAgICBmb3IgKGF1dG8qIHJlbmRlcmVyIDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMu
a2V5cygpKQotICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpOwotICAgIG1fc2VsZWN0aW9uQ29udGV4dCA9IG5ld1Nl
bGVjdGlvbjsKLSAgICBhdXRvKiBzZWxlY3Rpb25TdGFydCA9IG1fc2VsZWN0aW9uQ29udGV4dC5z
dGFydCgpOwotICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uIHN0YXR1cyBvZiBhbGwgb2JqZWN0
cyBiZXR3ZWVuIHNlbGVjdGlvblN0YXJ0IGFuZCBzZWxlY3Rpb25FbmQKLSAgICBpZiAoc2VsZWN0
aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpKQot
ICAgICAgICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvbkJvdGgpOwotICAgIGVsc2UgewotICAgICAgICBpZiAoc2VsZWN0aW9u
U3RhcnQpCi0gICAgICAgICAgICBzZWxlY3Rpb25TdGFydC0+c2V0U2VsZWN0aW9uU3RhdGVJZk5l
ZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KTsKLSAgICAgICAgaWYgKGF1dG8qIGVu
ZCA9IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgICAgIGVuZC0+c2V0U2VsZWN0
aW9uU3RhdGVJZk5lZWRlZChSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCk7Ci0gICAgfQotCi0g
ICAgUmVuZGVyT2JqZWN0KiBzZWxlY3Rpb25FbmQgPSBudWxscHRyOwotICAgIGF1dG8qIHNlbGVj
dGlvbkRhdGFFbmQgPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCk7Ci0gICAgaWYgKHNlbGVjdGlv
bkRhdGFFbmQpCi0gICAgICAgIHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKnNl
bGVjdGlvbkRhdGFFbmQsIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRPZmZzZXQoKS52YWx1ZSgpKTsK
LSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihzZWxlY3Rpb25TdGFydCk7
Ci0gICAgZm9yIChhdXRvKiBjdXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25TdGFydDsgY3VycmVu
dFJlbmRlcmVyICYmIGN1cnJlbnRSZW5kZXJlciAhPSBzZWxlY3Rpb25FbmQ7IGN1cnJlbnRSZW5k
ZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoY3VycmVudFJl
bmRlcmVyID09IHNlbGVjdGlvblN0YXJ0IHx8IGN1cnJlbnRSZW5kZXJlciA9PSBtX3NlbGVjdGlv
bkNvbnRleHQuZW5kKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCFjdXJy
ZW50UmVuZGVyZXItPmNhbkJlU2VsZWN0aW9uTGVhZigpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGN1cnJlbnRSZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lkZSk7Ci0gICAgfQotCi0gICAgaWYgKGJsb2NrUmVwYWlu
dE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpCi0gICAgICAgIG1fcmVuZGVyVmlldy5sYXll
cigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOwotCi0gICAgLy8gTm93IHRoYXQg
dGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVjdHMs
IHdhbGsgdGhlbSBhZ2FpbiBhbmQKLSAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVjdHMg
bGlzdC4KLSAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCBuZXdTZWxlY3RlZFJlbmRlcmVy
czsKLSAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJCbG9ja01hcCBuZXdTZWxlY3RlZEJsb2NrczsK
LSAgICBzZWxlY3Rpb25JdGVyYXRvciA9IFNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0
KTsKLSAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBjdXJy
ZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVudFJl
bmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmIChpc1ZhbGlk
UmVuZGVyZXJGb3JTZWxlY3Rpb24oKmN1cnJlbnRSZW5kZXJlciwgbV9zZWxlY3Rpb25Db250ZXh0
KSkgewotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclNlbGVjdGlvbkluZm8+IHNl
bGVjdGlvbkluZm8gPSBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpjdXJyZW50UmVu
ZGVyZXIsIHRydWUpOwotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgICAgICAgICAg
Zm9yIChhdXRvJiByZWN0IDogc2VsZWN0aW9uSW5mby0+Y29sbGVjdGVkU2VsZWN0aW9uUmVjdHMo
KSkKLSAgICAgICAgICAgICAgICBtX3NlbGVjdGlvblJlY3RHYXRoZXJlci5hZGRSZWN0KHNlbGVj
dGlvbkluZm8tPnJlcGFpbnRDb250YWluZXIoKSwgcmVjdCk7Ci0gICAgICAgICAgICBpZiAoIWN1
cnJlbnRSZW5kZXJlci0+aXNUZXh0T3JMaW5lQnJlYWsoKSkKLSAgICAgICAgICAgICAgICBtX3Nl
bGVjdGlvblJlY3RHYXRoZXJlci5zZXRUZXh0T25seShmYWxzZSk7Ci0jZW5kaWYKLSAgICAgICAg
ICAgIG5ld1NlbGVjdGVkUmVuZGVyZXJzLnNldChjdXJyZW50UmVuZGVyZXIsIFdURk1vdmUoc2Vs
ZWN0aW9uSW5mbykpOwotICAgICAgICAgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gY3VycmVu
dFJlbmRlcmVyLT5jb250YWluaW5nQmxvY2soKTsKLSAgICAgICAgICAgIHdoaWxlIChjb250YWlu
aW5nQmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpjb250YWluaW5nQmxvY2spKSB7Ci0gICAgICAg
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4mIGJsb2Nr
SW5mbyA9IG5ld1NlbGVjdGVkQmxvY2tzLmFkZChjb250YWluaW5nQmxvY2ssIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVl
PFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmNvbnRhaW5pbmdCbG9jayk7Ci0gICAgICAgICAg
ICAgICAgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2so
KTsKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAgICAgICAgICAgICBtX3NlbGVj
dGlvblJlY3RHYXRoZXJlci5hZGRHYXBSZWN0cyhibG9ja0luZm8tPnJlcGFpbnRDb250YWluZXIo
KSwgYmxvY2tJbmZvLT5yZWN0cygpKTsKLSNlbmRpZgotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE1vZGU6Ok5vdGhp
bmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgc2VsZWN0
ZWQgb2JqZWN0cyBjaGFuZ2VkIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uPwotICAgIGZv
ciAoYXV0byYgc2VsZWN0ZWRSZW5kZXJlckluZm8gOiBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVy
cykgewotICAgICAgICBhdXRvKiByZW5kZXJlciA9IHNlbGVjdGVkUmVuZGVyZXJJbmZvLmtleTsK
LSAgICAgICAgYXV0byogbmV3SW5mbyA9IG5ld1NlbGVjdGVkUmVuZGVyZXJzLmdldChyZW5kZXJl
cik7Ci0gICAgICAgIGF1dG8qIG9sZEluZm8gPSBzZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS5n
ZXQoKTsKLSAgICAgICAgaWYgKCFuZXdJbmZvIHx8IG9sZEluZm8tPnJlY3QoKSAhPSBuZXdJbmZv
LT5yZWN0KCkgfHwgb2xkSW5mby0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpCi0gICAgICAg
ICAgICB8fCAobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkgPT0gcmVuZGVyZXIgJiYgb2xkU2Vs
ZWN0aW9uRGF0YS5zdGFydE9mZnNldCAhPSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnRPZmZzZXQo
KSkKLSAgICAgICAgICAgIHx8IChtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkgPT0gcmVuZGVyZXIg
JiYgb2xkU2VsZWN0aW9uRGF0YS5lbmRPZmZzZXQgIT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZE9m
ZnNldCgpKSkgewotICAgICAgICAgICAgb2xkSW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAg
aWYgKG5ld0luZm8pIHsKLSAgICAgICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAg
ICAgICAgICAgICAgbmV3U2VsZWN0ZWRSZW5kZXJlcnMucmVtb3ZlKHJlbmRlcmVyKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIEFueSBuZXcgb2JqZWN0cyB0aGF0
IHJlbWFpbiB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgb2xkIG9iamVjdHMgZGljdCwgYW5kIHNvIHRo
ZXkgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGZvciAoYXV0byYgc2VsZWN0ZWRSZW5kZXJlcklu
Zm8gOiBuZXdTZWxlY3RlZFJlbmRlcmVycykKLSAgICAgICAgc2VsZWN0ZWRSZW5kZXJlckluZm8u
dmFsdWUtPnJlcGFpbnQoKTsKLQotICAgIC8vIEhhdmUgYW55IG9mIHRoZSBvbGQgYmxvY2tzIGNo
YW5nZWQ/Ci0gICAgZm9yIChhdXRvJiBzZWxlY3RlZEJsb2NrSW5mbyA6IG9sZFNlbGVjdGlvbkRh
dGEuYmxvY2tzKSB7Ci0gICAgICAgIGF1dG8qIGJsb2NrID0gc2VsZWN0ZWRCbG9ja0luZm8ua2V5
OwotICAgICAgICBhdXRvKiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRCbG9ja3MuZ2V0KGJsb2NrKTsK
LSAgICAgICAgYXV0byogb2xkSW5mbyA9IHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLmdldCgpOwot
ICAgICAgICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdHMoKSAhPSBuZXdJbmZvLT5yZWN0
cygpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKSkgewotICAgICAgICAg
ICAgb2xkSW5mby0+cmVwYWludCgpOwotICAgICAgICAgICAgaWYgKG5ld0luZm8pIHsKLSAgICAg
ICAgICAgICAgICBuZXdJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICAgICAgbmV3U2VsZWN0
ZWRCbG9ja3MucmVtb3ZlKGJsb2NrKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIEFueSBuZXcgYmxvY2tzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5kIGluIHRo
ZSBvbGQgYmxvY2tzIGRpY3QsIGFuZCBzbyB0aGV5IG5lZWQgdG8gYmUgdXBkYXRlZC4KLSAgICBm
b3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogbmV3U2VsZWN0ZWRCbG9ja3MpCi0gICAgICAg
IHNlbGVjdGVkQmxvY2tJbmZvLnZhbHVlLT5yZXBhaW50KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25S
YW5nZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2MTNkOTIyNDRhZjFhNGRhZjlhZjEw
ZTE2NGY0Mjg3NDc3YTNiYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQg
SWdhbGlhIFMuTC4KLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiAgICBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZwotICogICAg
ZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0g
KiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQotICogTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAotICog
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCi0gKiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YK
LSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiUmVuZGVy
U2VsZWN0aW9uSW5mby5oIgotCi0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0jaW5jbHVk
ZSAiU2VsZWN0aW9uUmVjdEdhdGhlcmVyLmgiCi0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1zdHJ1Y3QgT2xkU2VsZWN0aW9uRGF0YTsKLSAgICAKLWNsYXNzIFNlbGVjdGlvblJhbmdl
RGF0YSB7Ci1wdWJsaWM6Ci0gICAgU2VsZWN0aW9uUmFuZ2VEYXRhKFJlbmRlclZpZXcmKTsKLSAg
ICAKLSAgICBjbGFzcyBDb250ZXh0IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIENvbnRleHQoKSA9
IGRlZmF1bHQ7Ci0gICAgICAgIENvbnRleHQoUmVuZGVyT2JqZWN0KiBzdGFydCwgUmVuZGVyT2Jq
ZWN0KiBlbmQsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCi0gICAg
ICAgICAgICA6IG1fc3RhcnQobWFrZVdlYWtQdHIoc3RhcnQpKQotICAgICAgICAgICAgLCBtX2Vu
ZChtYWtlV2Vha1B0cihlbmQpKQotICAgICAgICAgICAgLCBtX3N0YXJ0T2Zmc2V0KHN0YXJ0T2Zm
c2V0KQotICAgICAgICAgICAgLCBtX2VuZE9mZnNldChlbmRPZmZzZXQpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIFJlbmRlck9iamVjdCogc3RhcnQoKSBjb25zdCB7IHJldHVybiBt
X3N0YXJ0LmdldCgpOyB9Ci0gICAgICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9lbmQuZ2V0KCk7IH0KLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0T2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQotICAgICAgICBPcHRpb25hbDx1bnNp
Z25lZD4gZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KLQotICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29udGV4dCYgb3RoZXIpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBtX3N0YXJ0ID09IG90aGVyLm1fc3RhcnQgJiYgbV9lbmQgPT0g
b3RoZXIubV9lbmQgJiYgbV9zdGFydE9mZnNldCA9PSBvdGhlci5tX3N0YXJ0T2Zmc2V0ICYmIG1f
ZW5kT2Zmc2V0ID09IG90aGVyLm1fZW5kT2Zmc2V0OwotICAgICAgICB9Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBXZWFrUHRyPFJlbmRlck9iamVjdD4gbV9zdGFydDsKLSAgICAgICAgV2Vha1B0
cjxSZW5kZXJPYmplY3Q+IG1fZW5kOwotICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9zdGFy
dE9mZnNldDsKLSAgICAgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1fZW5kT2Zmc2V0OwotICAgIH07
Ci0gICAgCi0gICAgdm9pZCBzZXRDb250ZXh0KGNvbnN0IENvbnRleHQmKTsKLSAgICAKLSAgICBl
bnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3WE9ST2xkLCBOZXdNaW51c09sZCwgTm90aGluZyB9
OwotICAgIHZvaWQgc2V0KGNvbnN0IENvbnRleHQmLCBSZXBhaW50TW9kZSA9IFJlcGFpbnRNb2Rl
OjpOZXdYT1JPbGQpOwotICAgIGNvbnN0IENvbnRleHQmIGdldCgpIGNvbnN0IHsgcmV0dXJuIG1f
c2VsZWN0aW9uQ29udGV4dDsgfQotCi0gICAgUmVuZGVyT2JqZWN0KiBzdGFydCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCgpOyB9Ci0gICAgUmVuZGVyT2JqZWN0KiBl
bmQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCk7IH0KLQotICAgIHVu
c2lnbmVkIHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyBBU1NFUlQobV9zZWxlY3Rpb25Db250ZXh0LnN0
YXJ0T2Zmc2V0KCkpOyByZXR1cm4gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0T2Zmc2V0KCkudmFs
dWVPcigwKTsgfQotICAgIHVuc2lnbmVkIGVuZE9mZnNldCgpIGNvbnN0IHsgQVNTRVJUKG1fc2Vs
ZWN0aW9uQ29udGV4dC5lbmRPZmZzZXQoKSk7IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQuZW5k
T2Zmc2V0KCkudmFsdWVPcigwKTsgfQotCi0gICAgdm9pZCBjbGVhcigpOwotICAgIEludFJlY3Qg
Ym91bmRzKCkgY29uc3QgeyByZXR1cm4gY29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVu
dDo6Tm8pOyB9Ci0gICAgSW50UmVjdCBib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29udGVudCgpIGNv
bnN0IHsgcmV0dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Olllcyk7IH0K
LSAgICB2b2lkIHJlcGFpbnQoKSBjb25zdDsKLSAgICAKLSAgICBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvblN0YXRlIHNlbGVjdGlvblN0YXRlRm9yUmVuZGVyZXIoUmVuZGVyT2JqZWN0Jik7Ci0KLXBy
aXZhdGU6Ci0gICAgZW51bSBjbGFzcyBDbGlwVG9WaXNpYmxlQ29udGVudCB7IFllcywgTm8gfTsK
LSAgICBJbnRSZWN0IGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQpIGNvbnN0Owot
ICAgIHZvaWQgYXBwbHkoY29uc3QgQ29udGV4dCYsIFJlcGFpbnRNb2RlKTsKLQotICAgIGNvbnN0
IFJlbmRlclZpZXcmIG1fcmVuZGVyVmlldzsKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykK
LSAgICBTZWxlY3Rpb25SZWN0R2F0aGVyZXIgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXI7Ci0jZW5k
aWYKLSAgICBDb250ZXh0IG1fc2VsZWN0aW9uQ29udGV4dDsKLSAgICBib29sIG1fc2VsZWN0aW9u
V2FzQ2FyZXQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCmluZGV4IGYxMGRjMGJj
Yzc5YWE0ZDU0NDIxNjlhODFmNzEwYzVlYmQwODAxYWQuLjdhZDRlMTliZGJiYWFjZTVjOTY2N2Qy
ZDUxYWFkMDI1YmI5ZjZiYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHAKQEAgLTMwNyw3ICszMDcsNyBAQCBBdm9pZGFuY2VSZWFzb25GbGFncyBj
YW5Vc2VGb3JXaXRoUmVhc29uKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgSW5jbHVkZVJl
YQogICAgIC8vIFRoaXMgY3VycmVudGx5IGNvdmVycyA8YmxvY2tmbG93PiN0ZXh0PC9ibG9ja2Zs
b3c+LCA8YmxvY2tmbG93PiN0ZXh0PGJyPjwvYmxvY2tmbG93PiBhbmQgbXV0aXBsZSAoc2libGlu
ZykgUmVuZGVyVGV4dCBjYXNlcy4KICAgICAvLyBUaGUgPGJsb2NrZmxvdz48aW5saW5lPiN0ZXh0
PC9pbmxpbmU+PC9ibG9ja2Zsb3c+IGNhc2UgaXMgYWxzbyBwb3B1bGFyIGFuZCBzaG91bGQgYmUg
cmVsYXRpdmVseSBlYXN5IHRvIGNvdmVyLgogICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBm
bG93LmZpcnN0Q2hpbGQoKTsgY2hpbGQ7KSB7Ci0gICAgICAgIGlmIChjaGlsZC0+c2VsZWN0aW9u
U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpCisgICAgICAgIGlmIChjaGls
ZC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25l
KQogICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93Q2hpbGRJ
c1NlbGVjdGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgICAgIGlmIChpczxSZW5k
ZXJUZXh0PigqY2hpbGQpKSB7CiAgICAgICAgICAgICBjb25zdCBhdXRvJiByZW5kZXJUZXh0ID0g
ZG93bmNhc3Q8UmVuZGVyVGV4dD4oKmNoaWxkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCmluZGV4IDU1YzJiNzk5OWIyNWExMTMwMTgz
MjVhZjc1NTZmOGY4MzYyNDdlYzEuLmZjZWRiM2JhNDVkMjc1YTQ1MzJlNDQxMTkyODg3YTBiNTJm
ZjBjMDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
VGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcApAQCAtMTg5LDcgKzE4OSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFp
bnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvKQogCiAgICAgLy8gRGV0
ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlJ3JlIHNlbGVjdGVkLgogICAgIGJvb2wgcGFpbnRTZWxl
Y3RlZFRleHRPbmx5ID0gcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlNlbGVjdGlvbjsK
LSAgICBib29sIGhhc1NlbGVjdGlvbiA9IHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25Ob25lOworICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gc2VsZWN0aW9uU3RhdGUo
KSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogICAgIGlmICghaGFzU2Vs
ZWN0aW9uIHx8IHBhaW50U2VsZWN0ZWRUZXh0T25seSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
NDcsNyArMjQ3LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBh
aW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKIAogICAgIGJvb2wgcGFpbnRT
ZWxlY3RlZFRleHRPbmx5ID0gcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlNlbGVjdGlv
bjsKICAgICBib29sIHNob3VsZFBhaW50U2VsZWN0aW9uSGlnaGxpZ2h0ID0gIShwYWludEluZm8u
cGFpbnRCZWhhdmlvci5jb250YWlucyhQYWludEJlaGF2aW9yOjpTa2lwU2VsZWN0aW9uSGlnaGxp
Z2h0KSk7Ci0gICAgYm9vbCBoYXNTZWxlY3Rpb24gPSAhcGFyZW50UmVuZGVyZXIuZG9jdW1lbnQo
KS5wcmludGluZygpICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25Ob25lOworICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIXBhcmVudFJlbmRlcmVyLmRvY3VtZW50
KCkucHJpbnRpbmcoKSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxp
Z2h0U3RhdGU6Ok5vbmU7CiAgICAgaWYgKCFoYXNTZWxlY3Rpb24gJiYgcGFpbnRTZWxlY3RlZFRl
eHRPbmx5KQogICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHUm9vdElubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCmluZGV4IGJmNWYzYWRmYjM2ZDg4NDExZTI2M2Vi
YWExOGE1N2IzYTgyNWMxOTQuLmZmMjE5ZTk5NzgwMGVkMjI5ZDg1NWJiYzlkYzRlOTNkMWRiNmEz
ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9vdElubGlu
ZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5l
Qm94LmNwcApAQCAtNTUsNyArNTUsNyBAQCB2b2lkIFNWR1Jvb3RJbmxpbmVCb3g6OnBhaW50KFBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZQogICAgIEFT
U0VSVCghcGFpbnRJbmZvLmNvbnRleHQoKS5wYWludGluZ0Rpc2FibGVkKCkpOwogCiAgICAgYm9v
bCBpc1ByaW50aW5nID0gcmVuZGVyU1ZHVGV4dCgpLmRvY3VtZW50KCkucHJpbnRpbmcoKTsKLSAg
ICBib29sIGhhc1NlbGVjdGlvbiA9ICFpc1ByaW50aW5nICYmIHNlbGVjdGlvblN0YXRlKCkgIT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOworICAgIGJvb2wgaGFzU2VsZWN0aW9uID0gIWlz
UHJpbnRpbmcgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlOjpOb25lOwogICAgIGJvb2wgc2hvdWxkUGFpbnRTZWxlY3Rpb25IaWdobGlnaHQgPSAhKHBh
aW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OlNraXBTZWxlY3Rp
b25IaWdobGlnaHQpKTsKIAogICAgIFBhaW50SW5mbyBjaGlsZFBhaW50SW5mbyhwYWludEluZm8p
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>390261</attachid>
            <date>2020-02-10 10:35:23 -0800</date>
            <delta_ts>2020-02-10 11:32:24 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-206340-20200210103522.patch</filename>
            <type>text/plain</type>
            <size>125047</size>
            <attacher name="Megan Gardner">megan_gardner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0OTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjExNjhlNWVlOTA0MzU5
MmUyNGYyZGFlZTNiZWQ0ZGZiMmUzMDNhMS4uZGJiYzFlYTc4MTBlNzU1YjgwYTUzYzU5ZTU1ODUw
ZjA0MWI5NDUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNCBAQAorMjAyMC0wMS0xNiAgTWVn
YW4gR2FyZG5lciAgPG1lZ2FuX2dhcmRuZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBT
ZWxlY3Rpb25EYXRhIGNsYXNzZXMgYW5kIHN0cnVjdHVyZXMgSGlnaGxpZ2h0RGF0YSwgZXRjIHRv
IGJlIG1vcmUgaW5jbHVzaXZlIGZvciB0aGVpciBuZXcgdXNlIGNhc2VzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDYzNDAKKworICAgICAgICBSZXZp
ZXdlZCBieSBSeW9zdWtlIE5pd2EuCisKKyAgICAgICAgUmVuYW1lIG9ubHksIG5vIGJlaGF2aW91
ciBjaGFuZ2UuCisKKyAgICAgICAgV2l0aCB0aGUgbmV3IEhpZ2hsaWdodCBBUEksIHdlIHdpbGwg
YmUgdXNpbmcgdGhlc2UgZGF0YSBzdHJ1Y3R1cmVzIHRvIHN1cHBvcnQgSGlnaGxpZ2h0cyBhcyB3
ZWxsIGFzIFNlbGVjdGlvbiwgCisgICAgICAgIHJlbmFtZSB0byBIaWdobGlnaHQsIGFzIGEgU2Vs
ZWN0aW9uIGlzIGEgdHlwZSBvZiBIaWdobGlnaHQuCisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
cGxhdGZvcm0vRHJhZ0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjb3BlZEZyYW1lU2Vs
ZWN0aW9uU3RhdGU6On5TY29wZWRGcmFtZVNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZURyYWdJbWFnZUZvclJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvQ29tcGxl
eExpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleExpbmVMYXlvdXQ6OmNv
bnN0cnVjdExpbmUpOgorICAgICAgICAqIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9F
bGxpcHNpc0JveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuY3Bw
LgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbGxlY3QpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6
SGlnaGxpZ2h0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpzZXRSZW5k
ZXJSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpzZWxlY3Rpb25TdGF0
ZUZvclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnNldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpjbGVhcik6CisgICAgICAgIChXZWJDb3Jl
OjpIaWdobGlnaHREYXRhOjpyZXBhaW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hs
aWdodERhdGE6OmNvbGxlY3RCb3VuZHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxp
Z2h0RGF0YTo6YXBwbHkpOgorICAgICAgICAqIHJlbmRlcmluZy9IaWdobGlnaHREYXRhLmg6IFJl
bmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VEYXRhLmgu
CisgICAgICAgIChXZWJDb3JlOjpIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZTo6UmVuZGVyUmFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2U6Om9wZXJh
dG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SGlnaGxpZ2h0RGF0YTo6Z2V0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OnN0YXJ0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkhpZ2hsaWdodERhdGE6OmVuZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpIaWdobGlnaHREYXRhOjpzdGFydE9mZnNldCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpI
aWdobGlnaHREYXRhOjplbmRPZmZzZXQgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9Jbmxp
bmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0ZSk6
CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZUJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9J
bmxpbmVGbG93Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OnNlbGVj
dGlvblN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6OnZlcmlmeVNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNsYW1w
ZWRTdGFydEVuZEZvclN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRC
b3g6OmhpZ2hsaWdodFN0YXJ0RW5kIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRl
eHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMgY29uc3QpOgorICAgICAgICAq
IHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzaG91bGRQYWludFNlbGVj
dGlvbkdhcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnNlbGVjdGlv
bkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2Fw
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Z2V0U2VsZWN0aW9uR2FwSW5mbyk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6
OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6
aW5saW5lU2VsZWN0aW9uR2Fwcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3hNb2RlbE9iamVjdC5oOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlu
ZUJyZWFrOjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxp
bmVCcmVhay5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpc3RNYXJrZXI6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckxpc3RNYXJrZXI6OnNlbGVjdGlvblJlY3RGb3JSZXBhaW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojppc1NlbGVjdGlv
bkJvcmRlciBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZWxlY3Rpb25TdGF0ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck9iamVjdDo6UmVuZGVyT2JqZWN0Qml0ZmllbGRzOjpSZW5kZXJPYmpl
Y3RCaXRmaWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpSZW5kZXJPYmpl
Y3RCaXRmaWVsZHM6OnNlbGVjdGlvblN0YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6UmVuZGVyT2JqZWN0Qml0ZmllbGRzOjpzZXRTZWxlY3Rpb25TdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJSZXBsYWNlZDo6c2hvdWxkRHJhd1NlbGVjdGlvblRpbnQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUmVwbGFjZWQ6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclJlcGxhY2VkOjpzZXRTZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJSZXBsYWNlZDo6aXNTZWxlY3RlZCBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclJlcGxhY2VkLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8u
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNlbGVjdGlvbkluZm9CYXNlOjpzdGF0ZSBjb25z
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dDo6c2V0U2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGV4dDo6Y29sbGVjdFNlbGVjdGlvblJlY3RzRm9yTGluZUJveGVzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0TGlu
ZUJveGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRMaW5lQm94ZXM6OnNldFNl
bGVjdGlvblN0YXRlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lTWFjOjpwYWludEF0dGFjaG1lbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OnNldFNlbGVjdGlvblN0YXRlKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJ
bmxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6Um9vdElubGluZUJveDo6bGluZVNlbGVj
dGlvbkdhcCk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpmaXJzdFNlbGVjdGVkQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlJvb3RJbmxpbmVCb3g6Omxhc3RTZWxlY3RlZEJveCk6CisgICAg
ICAgIChXZWJDb3JlOjpSb290SW5saW5lQm94OjpzZWxlY3Rpb25Ub3BBZGp1c3RlZEZvclByZWNl
ZGluZ0Jsb2NrIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUm9vdElubGluZUJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvcldpdGhSZWFzb24pOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
Um9vdElubGluZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSb290SW5saW5lQm94Ojpw
YWludCk6CisKIDIwMjAtMDEtMjIgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXSBEbyBub3QgY3JlYXRlIGEgRm9ybWF0dGluZ0NvbnRleHQgdG8gY29tcHV0
ZSBpbnRyaW5zaWMgd2lkdGggdW5sZXNzIHRoZXJlJ3Mgc29tZSBjb250ZW50LgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMu
Y21ha2UKaW5kZXggZjI0YWZhOWQxMTIxNmQ5ZTIyNGI5OWNhZGI4NTNlODAzY2I1OTAzZC4uMjZl
MDJjMmFkMGI3ZmM0YjA3ZWQ0MjhhNjhiZjU2ZTNlYjY2NjBiNyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtl
CkBAIC0xMjg3LDYgKzEyODcsNyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCiAgICAgcmVuZGVyaW5nL0V2ZW50UmVnaW9uLmgKICAgICByZW5kZXJpbmcvRmxvYXRpbmdP
YmplY3RzLmgKICAgICByZW5kZXJpbmcvR2FwUmVjdHMuaAorICAgIHJlbmRlcmluZy9IaWdobGln
aHREYXRhLmgKICAgICByZW5kZXJpbmcvSGl0VGVzdExvY2F0aW9uLmgKICAgICByZW5kZXJpbmcv
SGl0VGVzdFJlcXVlc3QuaAogICAgIHJlbmRlcmluZy9IaXRUZXN0UmVzdWx0LmgKQEAgLTEzNDIs
NyArMTM0Myw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBy
ZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmgKICAgICByZW5kZXJpbmcvUm9vdElubGluZUJveC5oCiAg
ICAgcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5oCi0gICAgcmVuZGVyaW5nL1NlbGVjdGlvblJh
bmdlRGF0YS5oCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuaAogICAgIHJlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuaAogICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0Rmxvd0NvbnRlbnRzLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggZjY3NTgwMTRhYjcyNjdiM2RjODFl
MmVmM2RhMjE4ZWU3ZDczMGYyZC4uMTNhYzJhMTA0OWMxMjgxNzAwZDAzY2JjOTc5OTc0ZjQwNWI2
ZDI0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIxOTgsNyArMjE5OCw3IEBAIHJlbmRlcmluZy9SZW5k
ZXJWaWV3LmNwcAogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAKIHJlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcAogcmVuZGVyaW5nL1Njcm9sbEFsaWdubWVudC5jcHAKLXJlbmRlcmluZy9TZWxl
Y3Rpb25SYW5nZURhdGEuY3BwCityZW5kZXJpbmcvSGlnaGxpZ2h0RGF0YS5jcHAKIHJlbmRlcmlu
Zy9TaW1wbGVMaW5lTGF5b3V0LmNwcAogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRDb3ZlcmFn
ZS5jcHAKIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0Rmxvd0NvbnRlbnRzLmNwcApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGMz
ODZmNzMyNWQ2MWQzNjM2NDkzMzQwYjY1MmY0YTJmMTM5ZjVlMmMuLmExNDQxYmMyZWZlNTcyMTVk
NjYxMTMzYjk3Mjk5MmYwYjI4N2JkOTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQxNjgsNyArNDE2OCw3IEBACiAJCUNEQ0M5
QkNGMjIzODdFOUEwMEZGQjUxQyAvKiBNZWRpYUNhcGFiaWxpdGllc0RlY29kaW5nSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQzlCQ0UyMjM4
N0U5QTAwRkZCNTFDIC8qIE1lZGlhQ2FwYWJpbGl0aWVzRGVjb2RpbmdJbmZvLmggKi87IH07CiAJ
CUNEQ0M5QkQxMjIzODdFQUEwMEZGQjUxQyAvKiBNZWRpYUNhcGFiaWxpdGllc0VuY29kaW5nSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RDQzlC
RDAyMjM4N0VBQTAwRkZCNTFDIC8qIE1lZGlhQ2FwYWJpbGl0aWVzRW5jb2RpbmdJbmZvLmggKi87
IH07CiAJCUNEQ0Q0MUU4MUMzRERCMEEwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0Q0MUU2MUMz
RERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50UmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlDRENGQUJCRDE4QzBBRjc4MDA2Rjg0NTAg
LyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBDRENGQUJCQjE4QzBBRTMxMDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VE
YXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
Q0RDRkFCQkQxOEMwQUY3ODAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1
MCAvKiBIaWdobGlnaHREYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJQ0RENzA4OTcxODM1OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0RENzA4OTUxODM1
OUY2RjAwMkIzREM2IC8qIFNhbXBsZU1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCUNEREMxRTdBMThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IENEREMxRTc5MThBOTUyRjMwMDI3QTlENCAvKiBNZWRpYVNvdXJjZVByaXZhdGVD
bGllbnQuaCAqLzsgfTsKIAkJQ0RERTAyRUQxOEIzRUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25B
VkZvdW5kYXRpb25PYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQ0RERTAyRUIxOEIzRUQ2RDAwQ0Y3RkYxIC8qIENETVNlc3Npb25BVkZvdW5kYXRp
b25PYmpDLm1tICovOyB9OwpAQCAtMTQwNjUsOCArMTQwNjUsOCBAQAogCQlDRENENDFFNTFDM0RE
QjA5MDA5NjVEOTkgLyogUGFyc2VkQ29udGVudFJhbmdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFBhcnNlZENvbnRlbnRSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNEQ0Q0MUU2MUMzRERCMDkwMDk2NUQ5OSAvKiBQYXJzZWRDb250ZW50
UmFuZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyc2VkQ29udGVudFJh
bmdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUNEQ0U1Q0QwMTQ2MzNCQzkwMEQ0
N0NDQSAvKiBFdmVudFRhcmdldEZhY3RvcnkuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRXZl
bnRUYXJnZXRGYWN0b3J5LmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlDRENGQUJC
QjE4QzBBRTMxMDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VEYXRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNlbGVjdGlvblJhbmdlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlDRENGQUJCQzE4QzBBRjE5MDA2Rjg0NTAgLyogU2VsZWN0aW9uUmFuZ2VE
YXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNlbGVjdGlvblJh
bmdlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUNEQ0ZBQkJCMThDMEFF
MzEwMDZGODQ1MCAvKiBIaWdobGlnaHREYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEhpZ2hsaWdodERhdGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQ0RD
RkFCQkMxOEMwQUYxOTAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGlnaGxpZ2h0RGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUNERDFFNTI1MTY3QkE1NjQwMENFODIwQiAvKiBUZXh0VHJhY2tSZXBy
ZXNlbnRhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VHJhY2tS
ZXByZXNlbnRhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlDREQ3MDg5NDE4
MzU5RjZFMDAyQjNEQzYgLyogU2FtcGxlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFNhbXBsZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUNERDcwODk1MTgzNTlGNkYwMDJCM0RDNiAvKiBTYW1wbGVNYXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU2FtcGxlTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0yNzc3MCw2ICsyNzc3MCw4IEBACiAJCQkJRTExMkY0NkYxRTNBODVEODAwRDZDREZEIC8q
IEdyaWQuaCAqLywKIAkJCQlFMTJERTcxNTFFNEI3NDg3MDBGOUFDQ0YgLyogR3JpZFRyYWNrU2l6
aW5nQWxnb3JpdGhtLmNwcCAqLywKIAkJCQlFMTJERTcxNjFFNEI3NDg3MDBGOUFDQ0YgLyogR3Jp
ZFRyYWNrU2l6aW5nQWxnb3JpdGhtLmggKi8sCisJCQkJQ0RDRkFCQkMxOEMwQUYxOTAwNkY4NDUw
IC8qIEhpZ2hsaWdodERhdGEuY3BwICovLAorCQkJCUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1MCAv
KiBIaWdobGlnaHREYXRhLmggKi8sCiAJCQkJNDk2OUIwRjAxM0QwQjMzRjAwREYzNTIxIC8qIEhp
dFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5jcHAgKi8sCiAJCQkJNDk2OUIwRjExM0QwQjMzRjAwREYz
NTIxIC8qIEhpdFRlc3RpbmdUcmFuc2Zvcm1TdGF0ZS5oICovLAogCQkJCTJEODI4N0Y0MTZFNEEw
MzgwMDg2QkQwMCAvKiBIaXRUZXN0TG9jYXRpb24uY3BwICovLApAQCAtMjc5OTIsOCArMjc5OTQs
NiBAQAogCQkJCUE4Q0ZGNURBMEExNTVBMDUwMDBBNDIzNCAvKiBSb290SW5saW5lQm94LmggKi8s
CiAJCQkJNUQ5MjVCNjUwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEFsaWdubWVudC5jcHAgKi8s
CiAJCQkJNUQ5MjVCNjYwRjY0RDRERDAwQjg0N0YwIC8qIFNjcm9sbEFsaWdubWVudC5oICovLAot
CQkJCUNEQ0ZBQkJDMThDMEFGMTkwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuY3BwICov
LAotCQkJCUNEQ0ZBQkJCMThDMEFFMzEwMDZGODQ1MCAvKiBTZWxlY3Rpb25SYW5nZURhdGEuaCAq
LywKIAkJCQlFNDg5NDRBMDE4MEI1N0Q4MDBGMTY1RDggLyogU2ltcGxlTGluZUxheW91dC5jcHAg
Ki8sCiAJCQkJRTQ4OTQ0QTExODBCNTdEODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAq
LywKIAkJCQkxMUUwNjdFQjFFNjI0NjEzMDAxNjJEMTYgLyogU2ltcGxlTGluZUxheW91dENvdmVy
YWdlLmNwcCAqLywKQEAgLTMwMTU2LDYgKzMwMTU2LDcgQEAKIAkJCQlGNTVCM0RDMDEyNTFGMTJE
MDAzRUYyNjkgLyogSGlkZGVuSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MTVCRTE5
QzFENTRGNkMxMDBERDdDNjggLyogSElER2FtZXBhZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTE1
QkUxOUUxRDU0RjZDMTAwREQ3QzY4IC8qIEhJREdhbWVwYWRQcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQ0RDRkFCQkQxOEMwQUY3ODAwNkY4NDUwIC8qIEhpZ2hsaWdodERhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDOTREMTU0MEMyNzVDOEIwMDZCQzYxNyAvKiBIaXN0b3J5LmggaW4g
SGVhZGVycyAqLywKIAkJCQk5N0RDRTIwMjEwODA3Qzc1MDA1N0QzOTQgLyogSGlzdG9yeUNvbnRy
b2xsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxNzQxRDExMEIwNzI1OUEwMEVENDQyQyAvKiBI
aXN0b3J5SXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjM0MSw3ICszMjM0Miw2IEBACiAJCQkJ
OTc0RDJEQTUxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkyRDVCQzQyNzE2Rjg4MkVFMDA3MDQ4RDAgLyogU2VjdXJpdHlQb2xpY3lWaW9sYXRp
b25FdmVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMkYwRDAwNkMxRDAwRUY2RjI2IC8q
IFNlZ21lbnRlZFN0cmluZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQ0RDRkFCQkQxOEMwQUY3ODAw
NkY4NDUwIC8qIFNlbGVjdGlvblJhbmdlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkVBODA3
QzkwRjcxNEEwMzAwNTI0MTk5IC8qIFNlbGVjdGlvblJlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUxNDA1Qzg5MTkwQjAxNDQwMDc1NEY5NCAvKiBTZWxlY3Rpb25SZWN0R2F0aGVyZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUU0NEI0QkI0MTQxNjUwRDcwMDJCMUQ4QiAvKiBTZWxlY3RvckNoZWNr
ZXIuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9G
cmFtZVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9u
LmNwcAppbmRleCBmMWU5YTBkMGQzZmEzMmNjNzEzMTdiMGZhZWZiZDViYjI1YmFjMDliLi4yZDQx
YjczMmYwZGZhOTc2NjAyOTRlYTBlZGViYjE1Yzk4YzY2ZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcApAQCAtNDM2LDcgKzQzNiw3IEBAIHZvaWQgRnJhbWVT
ZWxlY3Rpb246OnNldE5lZWRzU2VsZWN0aW9uVXBkYXRlKFJldmVhbFNlbGVjdGlvbkFmdGVyVXBk
YXRlIHJldmVhbE1vCiAgICAgICAgIG1fc2VsZWN0aW9uUmV2ZWFsTW9kZSA9IFNlbGVjdGlvblJl
dmVhbE1vZGU6OlJldmVhbDsKICAgICBtX3BlbmRpbmdTZWxlY3Rpb25VcGRhdGUgPSB0cnVlOwog
ICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpCi0g
ICAgICAgIHZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CisgICAgICAgIHZpZXctPnNlbGVjdGlv
bigpLmNsZWFyU2VsZWN0aW9uKCk7CiB9CiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFu
ZFJldmVhbFNlbGVjdGlvbihjb25zdCBBWFRleHRTdGF0ZUNoYW5nZUludGVudCYgaW50ZW50KQpA
QCAtNDkyLDcgKzQ5Miw3IEBAIHZvaWQgRHJhZ0NhcmV0Q29udHJvbGxlcjo6bm9kZVdpbGxCZVJl
bW92ZWQoTm9kZSYgbm9kZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKFJlbmRlclZpZXcq
IHZpZXcgPSBub2RlLmRvY3VtZW50KCkucmVuZGVyVmlldygpKQotICAgICAgICB2aWV3LT5zZWxl
Y3Rpb24oKS5jbGVhcigpOworICAgICAgICB2aWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlv
bigpOwogCiAgICAgY2xlYXIoKTsKIH0KQEAgLTU1Nyw3ICs1NTcsNyBAQCB2b2lkIEZyYW1lU2Vs
ZWN0aW9uOjpyZXNwb25kVG9Ob2RlTW9kaWZpY2F0aW9uKE5vZGUmIG5vZGUsIGJvb2wgYmFzZVJl
bW92ZWQsIGJvbwogCiAgICAgaWYgKGNsZWFyUmVuZGVyVHJlZVNlbGVjdGlvbikgewogICAgICAg
ICBpZiAoYXV0byogcmVuZGVyVmlldyA9IG5vZGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkpIHsK
LSAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVjdGlvbigpLmNsZWFyKCk7CisgICAgICAgICAg
ICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5jbGVhclNlbGVjdGlvbigpOwogCiAgICAgICAgICAg
ICAvLyBUcmlnZ2VyIGEgc2VsZWN0aW9uIHVwZGF0ZSBzbyB0aGUgc2VsZWN0aW9uIHdpbGwgYmUg
c2V0IGFnYWluLgogICAgICAgICAgICAgbV9zZWxlY3Rpb25SZXZlYWxJbnRlbnQgPSBBWFRleHRT
dGF0ZUNoYW5nZUludGVudCgpOwpAQCAtMTU3MCw3ICsxNTcwLDcgQEAgdm9pZCBGcmFtZVNlbGVj
dGlvbjo6cHJlcGFyZUZvckRlc3RydWN0aW9uKCkKICNlbmRpZgogCiAgICAgaWYgKGF1dG8qIHZp
ZXcgPSBtX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgdmlldy0+c2VsZWN0aW9u
KCkuY2xlYXIoKTsKKyAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsK
IAogICAgIHNldFNlbGVjdGlvbldpdGhvdXRVcGRhdGluZ0FwcGVhcmFuY2UoVmlzaWJsZVNlbGVj
dGlvbigpLCBkZWZhdWx0U2V0U2VsZWN0aW9uT3B0aW9ucygpLCBBbGlnbkN1cnNvck9uU2Nyb2xs
SWZOZWVkZWQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICBtX3ByZXZpb3VzQ2FyZXROb2Rl
ID0gbnVsbHB0cjsKQEAgLTIxNTQsNyArMjE1NCw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVw
ZGF0ZUFwcGVhcmFuY2UoKQogI2VuZGlmCiAKICAgICBpZiAoIXNlbGVjdGlvbi5pc1JhbmdlKCkp
IHsKLSAgICAgICAgdmlldy0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKKyAgICAgICAgdmlldy0+c2Vs
ZWN0aW9uKCkuY2xlYXJTZWxlY3Rpb24oKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MjE3OSw3ICsyMTc5LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRlQXBwZWFyYW5jZSgp
CiAgICAgICAgIFJlbmRlck9iamVjdCogZW5kUmVuZGVyZXIgPSBlbmRQb3MuZGVwcmVjYXRlZE5v
ZGUoKS0+cmVuZGVyZXIoKTsKICAgICAgICAgaW50IGVuZE9mZnNldCA9IGVuZFBvcy5kZXByZWNh
dGVkRWRpdGluZ09mZnNldCgpOwogICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPj0gMCAmJiBl
bmRPZmZzZXQgPj0gMCk7Ci0gICAgICAgIHZpZXctPnNlbGVjdGlvbigpLnNldCh7IHN0YXJ0UmVu
ZGVyZXIsIGVuZFJlbmRlcmVyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnRPZmZzZXQpLCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZW5kT2Zmc2V0KSB9KTsKKyAgICAgICAgdmlldy0+c2VsZWN0
aW9uKCkuc2V0U2VsZWN0aW9uKHsgc3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZz
ZXQpIH0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFt
ZVZpZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDIyNWE1
ZGFlYTU1ZmMwM2ZkMGUxOGE1Mjc4NzQyMTM5ZGViZjIwODguLmQ5OGVkMjA2Y2Q1NDVkNWE2ZGFh
Yjk5NmYzYzZiNzIwMTU3YzhmZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTQy
NDcsNyArNDI0Nyw3IEBAIHZvaWQgRnJhbWVWaWV3OjpwYWludENvbnRlbnRzRm9yU25hcHNob3Qo
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0CiAgICAgaWYgKHNob3VsZFBh
aW50U2VsZWN0aW9uID09IEV4Y2x1ZGVTZWxlY3Rpb24pIHsKICAgICAgICAgZm9yIChhdXRvKiBm
cmFtZSA9IG1fZnJhbWUucHRyKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVy
c2VOZXh0KG1fZnJhbWUucHRyKCkpKSB7CiAgICAgICAgICAgICBpZiAoYXV0byogcmVuZGVyVmll
dyA9IGZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICByZW5kZXJWaWV3
LT5zZWxlY3Rpb24oKS5jbGVhcigpOworICAgICAgICAgICAgICAgIHJlbmRlclZpZXctPnNlbGVj
dGlvbigpLmNsZWFyU2VsZWN0aW9uKCk7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9EcmFnSW1hZ2UuY3BwCmluZGV4IDAwYWM5OGZlMTY4Y2RmMzMwM2MxZjk3YmViODM4
YzRhMWQ2ZmU0YjQuLjhiOTA1ZjQyYmQyYzg3MTEwZTE1ZThiNzUxMGRhZDUxN2FhMzkxMmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdJbWFnZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0ltYWdlLmNwcApAQCAtMTQ1LDEyICsxNDUsMTIgQEAg
c3RydWN0IFNjb3BlZEZyYW1lU2VsZWN0aW9uU3RhdGUgewogICAgIHsKICAgICAgICAgaWYgKGF1
dG8qIHJlbmRlclZpZXcgPSBmcmFtZS5jb250ZW50UmVuZGVyZXIoKSkgewogICAgICAgICAgICAg
QVNTRVJUKHNlbGVjdGlvbik7Ci0gICAgICAgICAgICByZW5kZXJWaWV3LT5zZWxlY3Rpb24oKS5z
ZXQoc2VsZWN0aW9uLnZhbHVlKCksIFNlbGVjdGlvblJhbmdlRGF0YTo6UmVwYWludE1vZGU6Ok5v
dGhpbmcpOworICAgICAgICAgICAgcmVuZGVyVmlldy0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KHNlbGVjdGlvbi52YWx1ZSgpLCBIaWdobGlnaHREYXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7
CiAgICAgICAgIH0KICAgICB9CiAKICAgICBjb25zdCBGcmFtZSYgZnJhbWU7Ci0gICAgT3B0aW9u
YWw8U2VsZWN0aW9uUmFuZ2VEYXRhOjpDb250ZXh0PiBzZWxlY3Rpb247CisgICAgT3B0aW9uYWw8
SGlnaGxpZ2h0RGF0YTo6UmVuZGVyUmFuZ2U+IHNlbGVjdGlvbjsKIH07CiAKICNpZiAhUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKQEAgLTE4Nyw3ICsxODcsNyBAQCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJh
Z0ltYWdlRm9yUmFuZ2UoRnJhbWUmIGZyYW1lLCBSYW5nZSYgcmFuZ2UsIGJvb2wgZm9yY2VCbGFj
awogICAgIGludCBzdGFydE9mZnNldCA9IHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7
CiAgICAgaW50IGVuZE9mZnNldCA9IGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwogICAg
IEFTU0VSVChzdGFydE9mZnNldCA+PSAwICYmIGVuZE9mZnNldCA+PSAwKTsKLSAgICB2aWV3LT5z
ZWxlY3Rpb24oKS5zZXQoeyBzdGFydFJlbmRlcmVyLCBlbmRSZW5kZXJlciwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHN0YXJ0T2Zmc2V0KSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZE9mZnNldCkg
fSwgU2VsZWN0aW9uUmFuZ2VEYXRhOjpSZXBhaW50TW9kZTo6Tm90aGluZyk7CisgICAgdmlldy0+
c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKHsgc3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihl
bmRPZmZzZXQpIH0sIEhpZ2hsaWdodERhdGE6OlJlcGFpbnRNb2RlOjpOb3RoaW5nKTsKICAgICAv
LyBXZSBjYXB0dXJlIHVzaW5nIHNuYXBzaG90RnJhbWVSZWN0KCkgYmVjYXVzZSB3ZSBmYWtlIHVw
IHRoZSBzZWxlY3Rpb24gdXNpbmcKICAgICAvLyBGcmFtZVZpZXcgYnV0IHNuYXBzaG90U2VsZWN0
aW9uKCkgdXNlcyB0aGUgc2VsZWN0aW9uIGZyb20gdGhlIEZyYW1lIGl0c2VsZi4KICAgICByZXR1
cm4gY3JlYXRlRHJhZ0ltYWdlRnJvbVNuYXBzaG90KHNuYXBzaG90RnJhbWVSZWN0KGZyYW1lLCB2
aWV3LT5zZWxlY3Rpb24oKS5ib3VuZHNDbGlwcGVkVG9WaXNpYmxlQ29udGVudCgpLCBvcHRpb25z
KSwgbnVsbHB0cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxl
eExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0NvbXBsZXhMaW5lTGF5
b3V0LmNwcAppbmRleCBmNmZkMTZiNTQ5ZjFhNzQ4MDRkNmZmNjMxYzkzMzE3MTg2MDI1MDVjLi4y
OWViZTU2YWYwOTExMmIzMWU1MzY5ZmU4OWVhNzg5NzRiZjc3ZTAwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvQ29tcGxleExpbmVMYXlvdXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9Db21wbGV4TGluZUxheW91dC5jcHAKQEAgLTMxMCw3ICszMTAsNyBA
QCBSb290SW5saW5lQm94KiBDb21wbGV4TGluZUxheW91dDo6Y29uc3RydWN0TGluZShCaWRpUnVu
TGlzdDxCaWRpUnVuPiYgYmlkaVJ1bnMsCiAgICAgICAgIElubGluZUJveCogYm94ID0gY3JlYXRl
SW5saW5lQm94Rm9yUmVuZGVyZXIoJnItPnJlbmRlcmVyKCksIGlzT25seVJ1bik7CiAgICAgICAg
IHItPnNldEJveChib3gpOwogCi0gICAgICAgIGlmICghcm9vdEhhc1NlbGVjdGVkQ2hpbGRyZW4g
JiYgYm94LT5yZW5kZXJlcigpLnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxl
Y3Rpb25Ob25lKQorICAgICAgICBpZiAoIXJvb3RIYXNTZWxlY3RlZENoaWxkcmVuICYmIGJveC0+
cmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3Rh
dGU6Ok5vbmUpCiAgICAgICAgICAgICByb290SGFzU2VsZWN0ZWRDaGlsZHJlbiA9IHRydWU7CiAg
ICAgICAgIAogICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIHBhcmVudCBib3ggeWV0LCBvciBpZiB0
aGUgcnVuIGlzIG5vdCBzaW1wbHkgYSBzaWJsaW5nLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAKaW5kZXggMjI3NGU3YjRiZmE2ZjExZWVlNzRlNDNlNTRhZDAyNWFhN2Jm
MWI2MC4uYjU4NDkxOWQ0ZmQ3MDFmZTBjZTIwY2Y2ZDJhZDNkMTVmNGVlNDNlNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQg
RWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2lu
dCYgcGFpbnRPZmZzZXQsIExhCiAgICAgfQogCiAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQg
PSBsaW5lU3R5bGUuZm9udENhc2NhZGUoKTsKLSAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKKyAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAh
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKSB7CiAgICAgICAgIHBhaW50U2Vs
ZWN0aW9uKGNvbnRleHQsIHBhaW50T2Zmc2V0LCBsaW5lU3R5bGUsIGZvbnQpOwogCiAgICAgICAg
IC8vIFNlbGVjdCB0aGUgY29ycmVjdCBjb2xvciBmb3IgcGFpbnRpbmcgdGhlIHRleHQuCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCmluZGV4IDNmOThiN2Q4N2ZlMjJkNTI5MzI4
NzczMGM4NmJjMjI4OGNhNDA2YTYuLjRmYTJkNTBmNzI0NzVmMTcyM2M0MWY5NmE5MDBiY2ViNmY0
ODA4ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCkBAIC0zMyw3ICsz
Myw3IEBAIHB1YmxpYzoKICAgICBFbGxpcHNpc0JveChSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBB
dG9tU3RyaW5nJiBlbGxpcHNpc1N0ciwgSW5saW5lRmxvd0JveCogcGFyZW50LCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCB5LCBib29sIGZpcnN0TGluZSwgYm9vbCBpc0hvcml6b250YWwsIElu
bGluZUJveCogbWFya3VwQm94KTsKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92
ZXJyaWRlOwogICAgIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSGl0VGVzdExvY2F0aW9uJiBsb2NhdGlvbkluQ29udGFpbmVyLCBj
b25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwg
TGF5b3V0VW5pdCBsaW5lQm90dG9tLCBIaXRUZXN0QWN0aW9uKSBmaW5hbDsKLSAgICB2b2lkIHNl
dFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgcykgeyBtX3NlbGVj
dGlvblN0YXRlID0gczsgfQorICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZSBzKSB7IG1fc2VsZWN0aW9uU3RhdGUgPSBzOyB9CiAgICAgSW50UmVj
dCBzZWxlY3Rpb25SZWN0KCk7CiAKICAgICBSZW5kZXJCbG9ja0Zsb3cmIGJsb2NrRmxvdygpIGNv
bnN0IHsgcmV0dXJuIGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4oSW5saW5lQm94OjpyZW5kZXJl
cigpKTsgfQpAQCAtNDEsMTIgKzQxLDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgdm9pZCBw
YWludE1hcmt1cEJveChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
IExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tLCBjb25zdCBSZW5kZXJT
dHlsZSYpOwogICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2hlaWdodDsgfQotICAg
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBvdmVycmlkZSB7
IHJldHVybiBtX3NlbGVjdGlvblN0YXRlOyB9CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRT
dGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIG92ZXJyaWRlIHsgcmV0dXJuIG1fc2VsZWN0aW9uU3RhdGU7
IH0KICAgICB2b2lkIHBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IExheW91
dFBvaW50JiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Q2FzY2FkZSYpOwogICAgIElu
bGluZUJveCogbWFya3VwQm94KCkgY29uc3Q7CiAKICAgICBib29sIG1fc2hvdWxkUGFpbnRNYXJr
dXBCb3g7Ci0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBtX3NlbGVjdGlvblN0YXRl
IHsgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lIH07CisgICAgUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZSBtX3NlbGVjdGlvblN0YXRlIHsgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0
ZTo6Tm9uZSB9OwogICAgIGludCBtX2hlaWdodDsKICAgICBBdG9tU3RyaW5nIG1fc3RyOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
NWE0ZTU3ZDk1NTU2NWE4NGIzZmJhYWFjYWM4YjJlY2JiMmVlYTk5Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuY3BwCkBAIC0wLDAgKzEs
Mzc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAq
ICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlzY2xhaW1lciBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJIaWdobGlnaHREYXRhLmgiCisK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lU2VsZWN0aW9uLmgiCisjaW5j
bHVkZSAiUG9zaXRpb24uaCIKKyNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCisjaW5jbHVkZSAiUmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIuaCIK
KyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5j
bHVkZSAiVmlzaWJsZVNlbGVjdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25hbWVz
cGFjZSB7IC8vIFNlZSBidWcgIzE3NzgwOC4KKworc3RydWN0IFNlbGVjdGlvbkRhdGEgeworICAg
IHVzaW5nIFJlbmRlcmVyTWFwID0gSGFzaE1hcDxSZW5kZXJPYmplY3QqLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4+OworICAgIHVzaW5nIFJlbmRlckJsb2NrTWFwID0gSGFz
aE1hcDxjb25zdCBSZW5kZXJCbG9jayosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVj
dGlvbkluZm8+PjsKKworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBzdGFydE9mZnNldDsKKyAgICBP
cHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0OworICAgIFJlbmRlcmVyTWFwIHJlbmRlcmVyczsK
KyAgICBSZW5kZXJCbG9ja01hcCBibG9ja3M7Cit9OworCitjbGFzcyBIaWdobGlnaHRJdGVyYXRv
ciB7CitwdWJsaWM6CisgICAgSGlnaGxpZ2h0SXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBzdGFydCkK
KyAgICAgICAgOiBtX2N1cnJlbnQoc3RhcnQpCisgICAgeworICAgICAgICBjaGVja0ZvclNwYW5u
ZXIoKTsKKyAgICB9CisgICAgCisgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnQ7CisgICAgfQorICAgIAorICAgIFJlbmRlck9i
amVjdCogbmV4dCgpCisgICAgeworICAgICAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnRTcGFuID0g
bV9zcGFubmVyU3RhY2suaXNFbXB0eSgpID8gbnVsbHB0ciA6IG1fc3Bhbm5lclN0YWNrLmxhc3Qo
KS0+c3Bhbm5lcigpOworICAgICAgICBtX2N1cnJlbnQgPSBtX2N1cnJlbnQtPm5leHRJblByZU9y
ZGVyKGN1cnJlbnRTcGFuKTsKKyAgICAgICAgY2hlY2tGb3JTcGFubmVyKCk7CisgICAgICAgIGlm
ICghbV9jdXJyZW50ICYmIGN1cnJlbnRTcGFuKSB7CisgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IHBsYWNlaG9sZGVyID0gbV9zcGFubmVyU3RhY2subGFzdCgpOworICAgICAgICAgICAgbV9zcGFu
bmVyU3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xk
ZXItPm5leHRJblByZU9yZGVyKCk7CisgICAgICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gbV9jdXJyZW50OworICAgIH0KKworcHJpdmF0ZToKKyAg
ICB2b2lkIGNoZWNrRm9yU3Bhbm5lcigpCisgICAgeworICAgICAgICBpZiAoIWlzPFJlbmRlck11
bHRpQ29sdW1uU3Bhbm5lclBsYWNlaG9sZGVyPihtX2N1cnJlbnQpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBhdXRvJiBwbGFjZWhvbGRlciA9IGRvd25jYXN0PFJlbmRlck11bHRpQ29s
dW1uU3Bhbm5lclBsYWNlaG9sZGVyPigqbV9jdXJyZW50KTsKKyAgICAgICAgbV9zcGFubmVyU3Rh
Y2suYXBwZW5kKCZwbGFjZWhvbGRlcik7CisgICAgICAgIG1fY3VycmVudCA9IHBsYWNlaG9sZGVy
LnNwYW5uZXIoKTsKKyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIG1fY3VycmVudCB7IG51bGxw
dHIgfTsKKyAgICBWZWN0b3I8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xkZXIqPiBt
X3NwYW5uZXJTdGFjazsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitzdGF0aWMg
UmVuZGVyT2JqZWN0KiByZW5kZXJlckFmdGVyT2Zmc2V0KGNvbnN0IFJlbmRlck9iamVjdCYgcmVu
ZGVyZXIsIHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBhdXRvKiBjaGlsZCA9IHJlbmRlcmVyLmNo
aWxkQXQob2Zmc2V0KTsKKyAgICByZXR1cm4gY2hpbGQgPyBjaGlsZCA6IHJlbmRlcmVyLm5leHRJ
blByZU9yZGVyQWZ0ZXJDaGlsZHJlbigpOworfQorCitzdGF0aWMgYm9vbCBpc1ZhbGlkUmVuZGVy
ZXJGb3JTZWxlY3Rpb24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgSGlnaGxp
Z2h0RGF0YTo6UmVuZGVyUmFuZ2UmIHNlbGVjdGlvbikKK3sKKyAgICByZXR1cm4gKHJlbmRlcmVy
LmNhbkJlU2VsZWN0aW9uTGVhZigpIHx8ICZyZW5kZXJlciA9PSBzZWxlY3Rpb24uc3RhcnQoKSB8
fCAmcmVuZGVyZXIgPT0gc2VsZWN0aW9uLmVuZCgpKQorICAgICAgICAmJiByZW5kZXJlci5zZWxl
Y3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUKKyAgICAg
ICAgJiYgcmVuZGVyZXIuY29udGFpbmluZ0Jsb2NrKCk7Cit9CisKK3N0YXRpYyBSZW5kZXJCbG9j
ayogY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIp
Cit7CisgICAgYXV0byogY29udGFpbmluZ0Jsb2NrID0gcmVuZGVyZXIuY29udGFpbmluZ0Jsb2Nr
KCk7CisgICAgcmV0dXJuIGlzPFJlbmRlclZpZXc+KGNvbnRhaW5pbmdCbG9jaykgPyBudWxscHRy
IDogY29udGFpbmluZ0Jsb2NrOworfQorCitzdGF0aWMgU2VsZWN0aW9uRGF0YSBjb2xsZWN0U2Vs
ZWN0aW9uRGF0YShjb25zdCBIaWdobGlnaHREYXRhOjpSZW5kZXJSYW5nZSYgc2VsZWN0aW9uLCBi
b29sIHJlcGFpbnREaWZmZXJlbmNlKQoreworICAgIFNlbGVjdGlvbkRhdGEgb2xkU2VsZWN0aW9u
RGF0YSB7IHNlbGVjdGlvbi5zdGFydE9mZnNldCgpLCBzZWxlY3Rpb24uZW5kT2Zmc2V0KCksIHsg
fSwgeyB9IH07CisgICAgLy8gQmxvY2tzIGNvbnRhaW4gc2VsZWN0ZWQgb2JqZWN0cyBhbmQgZmls
bCBnYXBzIGJldHdlZW4gdGhlbSwgZWl0aGVyIG9uIHRoZSBsZWZ0LCByaWdodCwgb3IgaW4gYmV0
d2VlbiBsaW5lcyBhbmQgYmxvY2tzLgorICAgIC8vIEluIG9yZGVyIHRvIGdldCB0aGUgcmVwYWlu
dCByZWN0IHJpZ2h0LCB3ZSBoYXZlIHRvIGV4YW1pbmUgbGVmdCwgbWlkZGxlLCBhbmQgcmlnaHQg
cmVjdHMgaW5kaXZpZHVhbGx5LCBzaW5jZSBvdGhlcndpc2UKKyAgICAvLyB0aGUgdW5pb24gb2Yg
dGhvc2UgcmVjdHMgbWlnaHQgcmVtYWluIHRoZSBzYW1lIGV2ZW4gd2hlbiBjaGFuZ2VzIGhhdmUg
b2NjdXJyZWQuCisgICAgYXV0byogc3RhcnQgPSBzZWxlY3Rpb24uc3RhcnQoKTsKKyAgICBSZW5k
ZXJPYmplY3QqIHN0b3AgPSBudWxscHRyOworICAgIGlmIChzZWxlY3Rpb24uZW5kKCkpCisgICAg
ICAgIHN0b3AgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxlY3Rpb24uZW5kKCksIHNlbGVjdGlv
bi5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBIaWdobGlnaHRJdGVyYXRvciBzZWxlY3Rpb25J
dGVyYXRvcihzdGFydCk7CisgICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0ICE9IHN0b3ApIHsKKyAg
ICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbigqc3RhcnQsIHNlbGVjdGlvbikp
IHsKKyAgICAgICAgICAgIC8vIEJsb2NrcyBhcmUgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIGxp
bmUgZ2FwcyBhbmQgbWFyZ2luIGdhcHMuIFRoZXkgbXVzdCBiZSBleGFtaW5lZCBhcyB3ZWxsLgor
ICAgICAgICAgICAgb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5p
cXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpzdGFydCwgdHJ1ZSkpOworICAgICAgICAgICAgaWYg
KHJlcGFpbnREaWZmZXJlbmNlKSB7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvKiBibG9jayA9
IGNvbnRhaW5pbmdCbG9ja0JlbG93Vmlldygqc3RhcnQpOyBibG9jazsgYmxvY2sgPSBjb250YWlu
aW5nQmxvY2tCZWxvd1ZpZXcoKmJsb2NrKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBi
bG9ja0luZm8gPSBvbGRTZWxlY3Rpb25EYXRhLmJsb2Nrcy5hZGQoYmxvY2ssIG51bGxwdHIpLml0
ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBibG9ja0luZm8g
PSBtYWtlVW5pcXVlPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4oKmJsb2NrKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhcnQgPSBzZWxl
Y3Rpb25JdGVyYXRvci5uZXh0KCk7CisgICAgfQorICAgIHJldHVybiBvbGRTZWxlY3Rpb25EYXRh
OworfQorCitIaWdobGlnaHREYXRhOjpIaWdobGlnaHREYXRhKFJlbmRlclZpZXcmIHZpZXcpCisg
ICAgOiBtX3JlbmRlclZpZXcodmlldykKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAg
ICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyKHZpZXcpCisjZW5kaWYKK3sKK30KKwordm9pZCBI
aWdobGlnaHREYXRhOjpzZXRSZW5kZXJSYW5nZShjb25zdCBSZW5kZXJSYW5nZSYgcmVuZGVyUmFu
Z2UpCit7CisgICAgQVNTRVJUKHJlbmRlclJhbmdlLnN0YXJ0KCkgJiYgcmVuZGVyUmFuZ2UuZW5k
KCkpOworICAgIG1fcmVuZGVyUmFuZ2UgPSByZW5kZXJSYW5nZTsKK30KKworUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZSBIaWdobGlnaHREYXRhOjpoaWdobGlnaHRTdGF0ZUZvclJlbmRlcmVy
KFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgaWYgKCZyZW5kZXJlciA9PSBtX3JlbmRl
clJhbmdlLnN0YXJ0KCkpIHsKKyAgICAgICAgaWYgKG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSAmJiBt
X3JlbmRlclJhbmdlLmVuZCgpICYmIG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSA9PSBtX3JlbmRlclJh
bmdlLmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3Rh
dGU6OkJvdGg7CisgICAgICAgIGlmIChtX3JlbmRlclJhbmdlLnN0YXJ0KCkpCisgICAgICAgICAg
ICByZXR1cm4gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQ7CisgICAgfQorICAg
IGlmICgmcmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgcmV0dXJuIFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZDsKKworICAgIFJlbmRlck9iamVjdCogaGln
aGxpZ2h0RW5kID0gbnVsbHB0cjsKKyAgICBhdXRvKiBoaWdobGlnaHREYXRhRW5kID0gbV9yZW5k
ZXJSYW5nZS5lbmQoKTsKKyAgICBpZiAoaGlnaGxpZ2h0RGF0YUVuZCkKKyAgICAgICAgaGlnaGxp
Z2h0RW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqaGlnaGxpZ2h0RGF0YUVuZCwgbV9yZW5kZXJS
YW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBIaWdobGlnaHRJdGVyYXRvciBoaWdobGln
aHRJdGVyYXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOworICAgIGZvciAoYXV0byogY3VycmVu
dFJlbmRlcmVyID0gbV9yZW5kZXJSYW5nZS5zdGFydCgpOyBjdXJyZW50UmVuZGVyZXIgJiYgY3Vy
cmVudFJlbmRlcmVyICE9IG1fcmVuZGVyUmFuZ2UuZW5kKCk7IGN1cnJlbnRSZW5kZXJlciA9IGhp
Z2hsaWdodEl0ZXJhdG9yLm5leHQoKSkgeworICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09
IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSB8fCBjdXJyZW50UmVuZGVyZXIgPT0gbV9yZW5kZXJSYW5n
ZS5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWN1cnJlbnRSZW5k
ZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKCZyZW5kZXJlciA9PSBjdXJyZW50UmVuZGVyZXIpCisgICAgICAgICAgICByZXR1cm4g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlOworICAgIH0KKyAgICByZXR1cm4g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKK30KKwordm9pZCBIaWdobGlnaHRE
YXRhOjpzZXRTZWxlY3Rpb24oY29uc3QgUmVuZGVyUmFuZ2UmIHNlbGVjdGlvbiwgUmVwYWludE1v
ZGUgYmxvY2tSZXBhaW50TW9kZSkKK3sKKyAgICBpZiAoKHNlbGVjdGlvbi5zdGFydCgpICYmICFz
ZWxlY3Rpb24uZW5kKCkpIHx8IChzZWxlY3Rpb24uZW5kKCkgJiYgIXNlbGVjdGlvbi5zdGFydCgp
KSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEp1c3QgcmV0dXJuIGlmIHRoZSBzZWxlY3Rpb24g
aGFzbid0IGNoYW5nZWQuCisgICAgYXV0byBpc0NhcmV0ID0gbV9yZW5kZXJWaWV3LmZyYW1lKCku
c2VsZWN0aW9uKCkuaXNDYXJldCgpOworICAgIGlmIChzZWxlY3Rpb24gPT0gbV9yZW5kZXJSYW5n
ZSAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09IGlzQ2FyZXQpCisgICAgICAgIHJldHVybjsKKyNp
ZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAvLyBDbGVhciB0aGUgY3VycmVudCByZWN0
cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBuZXcgcmVjdHMgd2UgYXJlIGFib3V0IHRv
IGdhdGhlci4KKyAgICAvLyBUaGUgTm90aWZpZXIgdXBkYXRlcyB0aGUgRWRpdG9yIHdoZW4gaXQg
Z29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3llZC4KKyAgICBhdXRvIHJlY3ROb3RpZmll
ciA9IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNsZWFyQW5kQ3JlYXRlTm90aWZpZXIoKTsKKyNl
bmRpZgorICAgIG1fc2VsZWN0aW9uV2FzQ2FyZXQgPSBpc0NhcmV0OworICAgIGFwcGx5U2VsZWN0
aW9uKHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50TW9kZSk7Cit9CisKK3ZvaWQgSGlnaGxpZ2h0RGF0
YTo6Y2xlYXJTZWxlY3Rpb24oKQoreworICAgIG1fcmVuZGVyVmlldy5sYXllcigpLT5yZXBhaW50
QmxvY2tTZWxlY3Rpb25HYXBzKCk7CisgICAgc2V0U2VsZWN0aW9uKHsgfSwgSGlnaGxpZ2h0RGF0
YTo6UmVwYWludE1vZGU6Ok5ld01pbnVzT2xkKTsKK30KKwordm9pZCBIaWdobGlnaHREYXRhOjpy
ZXBhaW50KCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4gcHJvY2Vzc2VkQmxv
Y2tzOworICAgIFJlbmRlck9iamVjdCogZW5kID0gbnVsbHB0cjsKKyAgICBpZiAobV9yZW5kZXJS
YW5nZS5lbmQoKSkKKyAgICAgICAgZW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqbV9yZW5kZXJS
YW5nZS5lbmQoKSwgbV9yZW5kZXJSYW5nZS5lbmRPZmZzZXQoKS52YWx1ZSgpKTsKKyAgICBIaWdo
bGlnaHRJdGVyYXRvciBoaWdobGlnaHRJdGVyYXRvcihtX3JlbmRlclJhbmdlLnN0YXJ0KCkpOwor
ICAgIGZvciAoYXV0byogcmVuZGVyZXIgPSBoaWdobGlnaHRJdGVyYXRvci5jdXJyZW50KCk7IHJl
bmRlcmVyICYmIHJlbmRlcmVyICE9IGVuZDsgcmVuZGVyZXIgPSBoaWdobGlnaHRJdGVyYXRvci5u
ZXh0KCkpIHsKKyAgICAgICAgaWYgKCFyZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkgJiYg
cmVuZGVyZXIgIT0gbV9yZW5kZXJSYW5nZS5zdGFydCgpICYmIHJlbmRlcmVyICE9IG1fcmVuZGVy
UmFuZ2UuZW5kKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHJlbmRlcmVy
LT5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqcmVu
ZGVyZXIsIHRydWUpLnJlcGFpbnQoKTsKKyAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJs
ZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4
YW1pbmVkIGFzIHdlbGwuCisgICAgICAgIGZvciAoYXV0byogYmxvY2sgPSBjb250YWluaW5nQmxv
Y2tCZWxvd1ZpZXcoKnJlbmRlcmVyKTsgYmxvY2s7IGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVs
b3dWaWV3KCpibG9jaykpIHsKKyAgICAgICAgICAgIGlmICghcHJvY2Vzc2VkQmxvY2tzLmFkZChi
bG9jaykuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFJl
bmRlclNlbGVjdGlvbkluZm8oKmJsb2NrLCB0cnVlKS5yZXBhaW50KCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK0ludFJlY3QgSGlnaGxpZ2h0RGF0YTo6Y29sbGVjdEJvdW5kcyhDbGlwVG9WaXNp
YmxlQ29udGVudCBjbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3QKK3sKKyAgICBTZWxlY3Rpb25E
YXRhOjpSZW5kZXJlck1hcCByZW5kZXJlcnM7CisgICAgYXV0byogc3RhcnQgPSBtX3JlbmRlclJh
bmdlLnN0YXJ0KCk7CisgICAgUmVuZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKKyAgICBpZiAo
bV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQo
Km1fcmVuZGVyUmFuZ2UuZW5kKCksIG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWUoKSk7
CisgICAgSGlnaGxpZ2h0SXRlcmF0b3IgaGlnaGxpZ2h0SXRlcmF0b3Ioc3RhcnQpOworICAgIHdo
aWxlIChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7CisgICAgICAgIGlmICgoc3RhcnQtPmNhbkJl
U2VsZWN0aW9uTGVhZigpIHx8IHN0YXJ0ID09IG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSB8fCBzdGFy
dCA9PSBtX3JlbmRlclJhbmdlLmVuZCgpKQorICAgICAgICAgICAgJiYgc3RhcnQtPnNlbGVjdGlv
blN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSkgeworICAgICAg
ICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFu
ZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCisgICAgICAgICAg
ICByZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpz
dGFydCwgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPT0gQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Olllcykp
OworICAgICAgICAgICAgYXV0byogYmxvY2sgPSBzdGFydC0+Y29udGFpbmluZ0Jsb2NrKCk7Cisg
ICAgICAgICAgICB3aGlsZSAoYmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpibG9jaykpIHsKKyAg
ICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2Nr
SW5mbyA9IHJlbmRlcmVycy5hZGQoYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKKyAg
ICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbklu
Zm8+KCpibG9jaywgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPT0gQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6
Olllcyk7CisgICAgICAgICAgICAgICAgYmxvY2sgPSBibG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RhcnQgPSBoaWdobGlnaHRJdGVy
YXRvci5uZXh0KCk7CisgICAgfQorCisgICAgLy8gTm93IGNyZWF0ZSBhIHNpbmdsZSBib3VuZGlu
ZyBib3ggcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSB3aG9sZSBzZWxlY3Rpb24uCisgICAgTGF5b3V0
UmVjdCBzZWxlY3Rpb25SZWN0OworICAgIGZvciAoYXV0byYgaW5mbyA6IHJlbmRlcmVycy52YWx1
ZXMoKSkgeworICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhl
IGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29y
ZGluYXRlcy4KKyAgICAgICAgTGF5b3V0UmVjdCBjdXJyZW50UmVjdCA9IGluZm8tPnJlY3QoKTsK
KyAgICAgICAgaWYgKGF1dG8qIHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFp
bmVyKCkpIHsKKyAgICAgICAgICAgIEZsb2F0UXVhZCBhYnNRdWFkID0gcmVwYWludENvbnRhaW5l
ci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY3VycmVudFJlY3QpKTsKKyAgICAgICAg
ICAgIGN1cnJlbnRSZWN0ID0gYWJzUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOworICAgICAg
ICB9CisgICAgICAgIHNlbGVjdGlvblJlY3QudW5pdGUoY3VycmVudFJlY3QpOworICAgIH0KKyAg
ICByZXR1cm4gc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCk7Cit9CisKK3ZvaWQgSGlnaGxp
Z2h0RGF0YTo6YXBwbHlTZWxlY3Rpb24oY29uc3QgUmVuZGVyUmFuZ2UmIG5ld1NlbGVjdGlvbiwg
UmVwYWludE1vZGUgYmxvY2tSZXBhaW50TW9kZSkKK3sKKyAgICBhdXRvIG9sZFNlbGVjdGlvbkRh
dGEgPSBjb2xsZWN0U2VsZWN0aW9uRGF0YShtX3JlbmRlclJhbmdlLCBibG9ja1JlcGFpbnRNb2Rl
ID09IFJlcGFpbnRNb2RlOjpOZXdYT1JPbGQpOworICAgIC8vIFJlbW92ZSBjdXJyZW50IHNlbGVj
dGlvbi4KKyAgICBmb3IgKGF1dG8qIHJlbmRlcmVyIDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJl
cnMua2V5cygpKQorICAgICAgICByZW5kZXJlci0+c2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKTsKKyAgICBtX3JlbmRlclJhbmdlID0g
bmV3U2VsZWN0aW9uOworICAgIGF1dG8qIHNlbGVjdGlvblN0YXJ0ID0gbV9yZW5kZXJSYW5nZS5z
dGFydCgpOworICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uIHN0YXR1cyBvZiBhbGwgb2JqZWN0
cyBiZXR3ZWVuIHNlbGVjdGlvblN0YXJ0IGFuZCBzZWxlY3Rpb25FbmQKKyAgICBpZiAoc2VsZWN0
aW9uU3RhcnQgJiYgc2VsZWN0aW9uU3RhcnQgPT0gbV9yZW5kZXJSYW5nZS5lbmQoKSkKKyAgICAg
ICAgc2VsZWN0aW9uU3RhcnQtPnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZTo6Qm90aCk7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChzZWxlY3Rp
b25TdGFydCkKKyAgICAgICAgICAgIHNlbGVjdGlvblN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0ZUlm
TmVlZGVkKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KTsKKyAgICAgICAgaWYg
KGF1dG8qIGVuZCA9IG1fcmVuZGVyUmFuZ2UuZW5kKCkpCisgICAgICAgICAgICBlbmQtPnNldFNl
bGVjdGlvblN0YXRlSWZOZWVkZWQoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kKTsK
KyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIHNlbGVjdGlvbkVuZCA9IG51bGxwdHI7CisgICAg
YXV0byogc2VsZWN0aW9uRGF0YUVuZCA9IG1fcmVuZGVyUmFuZ2UuZW5kKCk7CisgICAgaWYgKHNl
bGVjdGlvbkRhdGFFbmQpCisgICAgICAgIHNlbGVjdGlvbkVuZCA9IHJlbmRlcmVyQWZ0ZXJPZmZz
ZXQoKnNlbGVjdGlvbkRhdGFFbmQsIG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWUoKSk7
CisgICAgSGlnaGxpZ2h0SXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQp
OworICAgIGZvciAoYXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJl
bnRSZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVu
ZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgaWYgKGN1cnJlbnRS
ZW5kZXJlciA9PSBzZWxlY3Rpb25TdGFydCB8fCBjdXJyZW50UmVuZGVyZXIgPT0gbV9yZW5kZXJS
YW5nZS5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoIWN1cnJlbnRS
ZW5kZXJlci0+Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgY3VycmVudFJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSk7CisgICAgfQorCisgICAgaWYgKGJsb2NrUmVw
YWludE1vZGUgIT0gUmVwYWludE1vZGU6Ok5vdGhpbmcpCisgICAgICAgIG1fcmVuZGVyVmlldy5s
YXllcigpLT5jbGVhckJsb2NrU2VsZWN0aW9uR2Fwc0JvdW5kcygpOworCisgICAgLy8gTm93IHRo
YXQgdGhlIHNlbGVjdGlvbiBzdGF0ZSBoYXMgYmVlbiB1cGRhdGVkIGZvciB0aGUgbmV3IG9iamVj
dHMsIHdhbGsgdGhlbSBhZ2FpbiBhbmQKKyAgICAvLyBwdXQgdGhlbSBpbiB0aGUgbmV3IG9iamVj
dHMgbGlzdC4KKyAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJlck1hcCBuZXdTZWxlY3RlZFJlbmRl
cmVyczsKKyAgICBTZWxlY3Rpb25EYXRhOjpSZW5kZXJCbG9ja01hcCBuZXdTZWxlY3RlZEJsb2Nr
czsKKyAgICBzZWxlY3Rpb25JdGVyYXRvciA9IEhpZ2hsaWdodEl0ZXJhdG9yKHNlbGVjdGlvblN0
YXJ0KTsKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBj
dXJyZW50UmVuZGVyZXIgJiYgY3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVu
dFJlbmRlcmVyID0gc2VsZWN0aW9uSXRlcmF0b3IubmV4dCgpKSB7CisgICAgICAgIGlmIChpc1Zh
bGlkUmVuZGVyZXJGb3JTZWxlY3Rpb24oKmN1cnJlbnRSZW5kZXJlciwgbV9yZW5kZXJSYW5nZSkp
IHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25JbmZvPiBzZWxl
Y3Rpb25JbmZvID0gbWFrZVVuaXF1ZTxSZW5kZXJTZWxlY3Rpb25JbmZvPigqY3VycmVudFJlbmRl
cmVyLCB0cnVlKTsKKyNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKKyAgICAgICAgICAgIGZv
ciAoYXV0byYgcmVjdCA6IHNlbGVjdGlvbkluZm8tPmNvbGxlY3RlZFNlbGVjdGlvblJlY3RzKCkp
CisgICAgICAgICAgICAgICAgbV9zZWxlY3Rpb25SZWN0R2F0aGVyZXIuYWRkUmVjdChzZWxlY3Rp
b25JbmZvLT5yZXBhaW50Q29udGFpbmVyKCksIHJlY3QpOworICAgICAgICAgICAgaWYgKCFjdXJy
ZW50UmVuZGVyZXItPmlzVGV4dE9yTGluZUJyZWFrKCkpCisgICAgICAgICAgICAgICAgbV9zZWxl
Y3Rpb25SZWN0R2F0aGVyZXIuc2V0VGV4dE9ubHkoZmFsc2UpOworI2VuZGlmCisgICAgICAgICAg
ICBuZXdTZWxlY3RlZFJlbmRlcmVycy5zZXQoY3VycmVudFJlbmRlcmVyLCBXVEZNb3ZlKHNlbGVj
dGlvbkluZm8pKTsKKyAgICAgICAgICAgIGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9IGN1cnJlbnRS
ZW5kZXJlci0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgICAgICAgICB3aGlsZSAoY29udGFpbmlu
Z0Jsb2NrICYmICFpczxSZW5kZXJWaWV3PigqY29udGFpbmluZ0Jsb2NrKSkgeworICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+JiBibG9ja0lu
Zm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5hZGQoY29udGFpbmluZ0Jsb2NrLCBudWxscHRyKS5pdGVy
YXRvci0+dmFsdWU7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrSW5mbykKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgYmxvY2tJbmZvID0gbWFrZVVuaXF1ZTxS
ZW5kZXJCbG9ja1NlbGVjdGlvbkluZm8+KCpjb250YWluaW5nQmxvY2spOworICAgICAgICAgICAg
ICAgIGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7
CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgICAgICAgICAgICAgbV9zZWxlY3Rp
b25SZWN0R2F0aGVyZXIuYWRkR2FwUmVjdHMoYmxvY2tJbmZvLT5yZXBhaW50Q29udGFpbmVyKCks
IGJsb2NrSW5mby0+cmVjdHMoKSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIGlmIChibG9ja1JlcGFpbnRNb2RlID09IFJlcGFpbnRNb2RlOjpOb3RoaW5n
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBIYXZlIGFueSBvZiB0aGUgb2xkIHNlbGVjdGVk
IG9iamVjdHMgY2hhbmdlZCBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbj8KKyAgICBmb3Ig
KGF1dG8mIHNlbGVjdGVkUmVuZGVyZXJJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5yZW5kZXJlcnMp
IHsKKyAgICAgICAgYXV0byogcmVuZGVyZXIgPSBzZWxlY3RlZFJlbmRlcmVySW5mby5rZXk7Cisg
ICAgICAgIGF1dG8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZFJlbmRlcmVycy5nZXQocmVuZGVyZXIp
OworICAgICAgICBhdXRvKiBvbGRJbmZvID0gc2VsZWN0ZWRSZW5kZXJlckluZm8udmFsdWUuZ2V0
KCk7CisgICAgICAgIGlmICghbmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0KCkgIT0gbmV3SW5mby0+
cmVjdCgpIHx8IG9sZEluZm8tPnN0YXRlKCkgIT0gbmV3SW5mby0+c3RhdGUoKQorICAgICAgICAg
ICAgfHwgKG1fcmVuZGVyUmFuZ2Uuc3RhcnQoKSA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25E
YXRhLnN0YXJ0T2Zmc2V0ICE9IG1fcmVuZGVyUmFuZ2Uuc3RhcnRPZmZzZXQoKSkKKyAgICAgICAg
ICAgIHx8IChtX3JlbmRlclJhbmdlLmVuZCgpID09IHJlbmRlcmVyICYmIG9sZFNlbGVjdGlvbkRh
dGEuZW5kT2Zmc2V0ICE9IG1fcmVuZGVyUmFuZ2UuZW5kT2Zmc2V0KCkpKSB7CisgICAgICAgICAg
ICBvbGRJbmZvLT5yZXBhaW50KCk7CisgICAgICAgICAgICBpZiAobmV3SW5mbykgeworICAgICAg
ICAgICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3Rl
ZFJlbmRlcmVycy5yZW1vdmUocmVuZGVyZXIpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUgbm90IGZvdW5k
IGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJlIHVwZGF0ZWQu
CisgICAgZm9yIChhdXRvJiBzZWxlY3RlZFJlbmRlcmVySW5mbyA6IG5ld1NlbGVjdGVkUmVuZGVy
ZXJzKQorICAgICAgICBzZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS0+cmVwYWludCgpOworCisg
ICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KKyAgICBmb3IgKGF1dG8m
IHNlbGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5ibG9ja3MpIHsKKyAgICAgICAg
YXV0byogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5mby5rZXk7CisgICAgICAgIGF1dG8qIG5ld0lu
Zm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOworICAgICAgICBhdXRvKiBvbGRJbmZv
ID0gc2VsZWN0ZWRCbG9ja0luZm8udmFsdWUuZ2V0KCk7CisgICAgICAgIGlmICghbmV3SW5mbyB8
fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5mby0+c3RhdGUo
KSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7CisgICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7
CisgICAgICAgICAgICBpZiAobmV3SW5mbykgeworICAgICAgICAgICAgICAgIG5ld0luZm8tPnJl
cGFpbnQoKTsKKyAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZEJsb2Nrcy5yZW1vdmUoYmxvY2sp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQW55IG5ldyBibG9j
a3MgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3MgZGljdCwgYW5k
IHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgorICAgIGZvciAoYXV0byYgc2VsZWN0ZWRCbG9j
a0luZm8gOiBuZXdTZWxlY3RlZEJsb2NrcykKKyAgICAgICAgc2VsZWN0ZWRCbG9ja0luZm8udmFs
dWUtPnJlcGFpbnQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0hpZ2hsaWdodERhdGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTdlODQ5NGRmYmQ0M2FhYzY4
NTkxYjA2ZGNmZDk0YTNlNzM5NDI1MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9IaWdobGlnaHREYXRhLmgKQEAgLTAsMCArMSwxMDcgQEAKKyAvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCc
QVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
KyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIlJlbmRlclNlbGVjdGlvbkluZm8uaCIKKworI2lmIEVOQUJMRShTRVJWSUNFX0NP
TlRST0xTKQorI2luY2x1ZGUgIlNlbGVjdGlvblJlY3RHYXRoZXJlci5oIgorI2VuZGlmCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IE9sZFNlbGVjdGlvbkRhdGE7CisgICAgCitjbGFz
cyBIaWdobGlnaHREYXRhIHsKK3B1YmxpYzoKKyAgICBIaWdobGlnaHREYXRhKFJlbmRlclZpZXcm
KTsKKyAgICAKKyAgICBjbGFzcyBSZW5kZXJSYW5nZSB7CisgICAgcHVibGljOgorICAgICAgICBS
ZW5kZXJSYW5nZSgpID0gZGVmYXVsdDsKKyAgICAgICAgUmVuZGVyUmFuZ2UoUmVuZGVyT2JqZWN0
KiBzdGFydCwgUmVuZGVyT2JqZWN0KiBlbmQsIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25l
ZCBlbmRPZmZzZXQpCisgICAgICAgICAgICA6IG1fc3RhcnQobWFrZVdlYWtQdHIoc3RhcnQpKQor
ICAgICAgICAgICAgLCBtX2VuZChtYWtlV2Vha1B0cihlbmQpKQorICAgICAgICAgICAgLCBtX3N0
YXJ0T2Zmc2V0KHN0YXJ0T2Zmc2V0KQorICAgICAgICAgICAgLCBtX2VuZE9mZnNldChlbmRPZmZz
ZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFJlbmRlck9iamVjdCogc3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LmdldCgpOyB9CisgICAgICAgIFJlbmRlck9iamVjdCog
ZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQuZ2V0KCk7IH0KKyAgICAgICAgT3B0aW9uYWw8dW5z
aWduZWQ+IHN0YXJ0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGFydE9mZnNldDsgfQorICAg
ICAgICBPcHRpb25hbDx1bnNpZ25lZD4gZW5kT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9lbmRP
ZmZzZXQ7IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVuZGVyUmFuZ2UmIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zdGFydCA9PSBvdGhl
ci5tX3N0YXJ0ICYmIG1fZW5kID09IG90aGVyLm1fZW5kICYmIG1fc3RhcnRPZmZzZXQgPT0gb3Ro
ZXIubV9zdGFydE9mZnNldCAmJiBtX2VuZE9mZnNldCA9PSBvdGhlci5tX2VuZE9mZnNldDsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgV2Vha1B0cjxSZW5kZXJPYmplY3Q+IG1f
c3RhcnQ7CisgICAgICAgIFdlYWtQdHI8UmVuZGVyT2JqZWN0PiBtX2VuZDsKKyAgICAgICAgT3B0
aW9uYWw8dW5zaWduZWQ+IG1fc3RhcnRPZmZzZXQ7CisgICAgICAgIE9wdGlvbmFsPHVuc2lnbmVk
PiBtX2VuZE9mZnNldDsKKyAgICB9OworICAgIAorICAgIHZvaWQgc2V0UmVuZGVyUmFuZ2UoY29u
c3QgUmVuZGVyUmFuZ2UmKTsKKyAgICAKKyAgICBlbnVtIGNsYXNzIFJlcGFpbnRNb2RlIHsgTmV3
WE9ST2xkLCBOZXdNaW51c09sZCwgTm90aGluZyB9OworICAgIHZvaWQgc2V0U2VsZWN0aW9uKGNv
bnN0IFJlbmRlclJhbmdlJiwgUmVwYWludE1vZGUgPSBSZXBhaW50TW9kZTo6TmV3WE9ST2xkKTsK
KyAgICBjb25zdCBSZW5kZXJSYW5nZSYgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJSYW5n
ZTsgfQorCisgICAgUmVuZGVyT2JqZWN0KiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVy
UmFuZ2Uuc3RhcnQoKTsgfQorICAgIFJlbmRlck9iamVjdCogZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9yZW5kZXJSYW5nZS5lbmQoKTsgfQorCisgICAgdW5zaWduZWQgc3RhcnRPZmZzZXQoKSBjb25z
dCB7IEFTU0VSVChtX3JlbmRlclJhbmdlLnN0YXJ0T2Zmc2V0KCkpOyByZXR1cm4gbV9yZW5kZXJS
YW5nZS5zdGFydE9mZnNldCgpLnZhbHVlT3IoMCk7IH0KKyAgICB1bnNpZ25lZCBlbmRPZmZzZXQo
KSBjb25zdCB7IEFTU0VSVChtX3JlbmRlclJhbmdlLmVuZE9mZnNldCgpKTsgcmV0dXJuIG1fcmVu
ZGVyUmFuZ2UuZW5kT2Zmc2V0KCkudmFsdWVPcigwKTsgfQorCisgICAgdm9pZCBjbGVhclNlbGVj
dGlvbigpOworICAgIEludFJlY3QgYm91bmRzKCkgY29uc3QgeyByZXR1cm4gY29sbGVjdEJvdW5k
cyhDbGlwVG9WaXNpYmxlQ29udGVudDo6Tm8pOyB9CisgICAgSW50UmVjdCBib3VuZHNDbGlwcGVk
VG9WaXNpYmxlQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlz
aWJsZUNvbnRlbnQ6Olllcyk7IH0KKyAgICB2b2lkIHJlcGFpbnQoKSBjb25zdDsKKyAgICAKKyAg
ICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIGhpZ2hsaWdodFN0YXRlRm9yUmVuZGVyZXIo
UmVuZGVyT2JqZWN0Jik7CisKK3ByaXZhdGU6CisgICAgZW51bSBjbGFzcyBDbGlwVG9WaXNpYmxl
Q29udGVudCB7IFllcywgTm8gfTsKKyAgICBJbnRSZWN0IGNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlz
aWJsZUNvbnRlbnQpIGNvbnN0OworICAgIHZvaWQgYXBwbHlTZWxlY3Rpb24oY29uc3QgUmVuZGVy
UmFuZ2UmLCBSZXBhaW50TW9kZSk7CisKKyAgICBjb25zdCBSZW5kZXJWaWV3JiBtX3JlbmRlclZp
ZXc7CisjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCisgICAgU2VsZWN0aW9uUmVjdEdhdGhl
cmVyIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyOworI2VuZGlmCisgICAgUmVuZGVyUmFuZ2UgbV9y
ZW5kZXJSYW5nZTsKKyAgICBib29sIG1fc2VsZWN0aW9uV2FzQ2FyZXQgeyBmYWxzZSB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94
LmNwcAppbmRleCA4Nzk3NzRhMGI4MDEzMGNjMDU3N2UyMmVjZmFhNDAyM2QxMjVhNDUzLi4xYTQ1
NzliMjkyNDQwZWRkNGY2ZWRjM2Q2MzYwMDQ3MmFkZmQ4MTQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvSW5saW5lQm94LmNwcApAQCAtMjU3LDcgKzI1Nyw3IEBAIElubGluZUJveCogSW5saW5l
Qm94OjpwcmV2aW91c0xlYWZPbkxpbmVJZ25vcmluZ0xpbmVCcmVhaygpIGNvbnN0CiAgICAgcmV0
dXJuIGxlYWY7CiB9CiAKLVJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lQm94Ojpz
ZWxlY3Rpb25TdGF0ZSgpCitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIElubGluZUJveDo6
c2VsZWN0aW9uU3RhdGUoKQogewogICAgIHJldHVybiBtX3JlbmRlcmVyLnNlbGVjdGlvblN0YXRl
KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lQm94LmgKaW5kZXggMmFiMTEyNWI2ZGFk
YmRjYjZiYjMyMjEzM2Q3ODI1MTRkMzM4ZWFiYy4uNTlhMTFkNmE0OGE4MzM4ZDdlMGJhNWU2NDQx
NzI5YjFmNDc5OWViNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVCb3guaApAQCAtMjMw
LDcgKzIzMCw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBk
aXJ0eUxpbmVCb3hlcygpOwogICAgIAotICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpOworICAgIFdFQkNPUkVfRVhQ
T1JUIHZpcnR1YWwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgp
OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBib29sIGNhbkFjY29tbW9kYXRlRWxsaXBz
aXMoYm9vbCBsdHIsIGludCBibG9ja0VkZ2UsIGludCBlbGxpcHNpc1dpZHRoKSBjb25zdDsKICAg
ICAvLyB2aXNpYmxlTGVmdEVkZ2UsIHZpc2libGVSaWdodEVkZ2UgYXJlIGluIHRoZSBwYXJlbnQn
cyBjb29yZGluYXRlIHN5c3RlbS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVGbG93Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmNwcAppbmRleCBjMzE2NDk0YmRiMzZkOTE3YmFkZDdiNjUwZTBiZWI5ZDlmYmViODIyLi4z
YWIxYTk1YjdjNTAxMmQwMGViYWUzZGNmNWJkNDIyZmY1MWIxZjUxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCkBAIC0xNTA1LDkgKzE1MDUsOSBAQCBJbmxp
bmVCb3gqIElubGluZUZsb3dCb3g6Omxhc3RMZWFmRGVzY2VuZGFudCgpIGNvbnN0CiAgICAgcmV0
dXJuIGxlYWY7CiB9CiAKLVJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lRmxvd0Jv
eDo6c2VsZWN0aW9uU3RhdGUoKQorUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBJbmxpbmVG
bG93Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiB7Ci0gICAgcmV0dXJuIFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uTm9uZTsKKyAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9u
ZTsKIH0KIAogYm9vbCBJbmxpbmVGbG93Qm94OjpjYW5BY2NvbW1vZGF0ZUVsbGlwc2lzKGJvb2wg
bHRyLCBpbnQgYmxvY2tFZGdlLCBpbnQgZWxsaXBzaXNXaWR0aCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCmluZGV4IGQzNmExNWI3NDk3ZDZjYTRlMDJkOTg4
NTgzOWViNGQ0N2FhYzZlN2YuLjQwNTU1ZmY1NGUwMzEwZmY3OWRkOWNlOTMyMWRiYTJmMGFhNzk5
NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaApAQCAtMjAxLDcg
KzIwMSw3IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIHJlbW92ZUNoaWxkKElubGluZUJveCog
Y2hpbGQpOwogCi0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0
ZSgpIG92ZXJyaWRlOworICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9u
U3RhdGUoKSBvdmVycmlkZTsKIAogICAgIGJvb2wgY2FuQWNjb21tb2RhdGVFbGxpcHNpcyhib29s
IGx0ciwgaW50IGJsb2NrRWRnZSwgaW50IGVsbGlwc2lzV2lkdGgpIGNvbnN0IGZpbmFsOwogICAg
IGZsb2F0IHBsYWNlRWxsaXBzaXNCb3goYm9vbCBsdHIsIGZsb2F0IGJsb2NrTGVmdEVkZ2UsIGZs
b2F0IGJsb2NrUmlnaHRFZGdlLCBmbG9hdCBlbGxpcHNpc1dpZHRoLCBmbG9hdCAmdHJ1bmNhdGVk
V2lkdGgsIGJvb2wmKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmNwcAppbmRleCA3M2Y4YzVlMDNkOTZjZTRiZmMwZGM5ZTM2ZDQzODc1NWI4Y2E5M2Y2
Li5hNGFiNThhMzRmYzg5MmVmYjVhZWRhYTBiMmUzNWM2ZTJjOWY2ZWRkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiRXZlbnRSZWdpb24uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhpZ2hsaWdodERhdGEuaCIKICNpbmNsdWRlICJIaWdo
bGlnaHRNYXAuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKQEAgLTQ5LDcgKzUwLDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVk
RmVhdHVyZXMuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dERlY29yYXRpb25QYWludGVyLmgiCiAjaW5jbHVkZSAiVGV4
dFBhaW50U3R5bGUuaCIKQEAgLTE1NCw1NCArMTU0LDU0IEBAIGJvb2wgSW5saW5lVGV4dEJveDo6
aXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikg
Y29uCiAgICAgcmV0dXJuIGNsYW1wZWRPZmZzZXQoc3RhcnRQb3NpdGlvbikgPCBjbGFtcGVkT2Zm
c2V0KGVuZFBvc2l0aW9uKTsKIH0KIAotUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxp
bmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRl
IElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICBhdXRvIHN0YXRlID0gdmVy
aWZ5U2VsZWN0aW9uU3RhdGUocmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpLCByZW5kZXJlcigp
LnZpZXcoKS5zZWxlY3Rpb24oKSk7CiAgICAgCiAgICAgLy8gRklYTUU6IHRoaXMgY29kZSBtdXRh
dGVzIHNlbGVjdGlvbiBzdGF0ZSwgYnV0IGl0J3MgdXNlZCBhdCBhIHNpbXBsZSBnZXR0ZXIgZWxz
ZXdoZXJlCi0gICAgLy8gaW4gdGhpcyBmaWxlLiBUaGlzIGNvZGUgc2hvdWxkIGxpa2VseSBsaXZl
IGluIFNlbGVjdGlvblJhbmdlRGF0YSwgb3Igc29tZXdoZXJlIGVsc2UuCisgICAgLy8gaW4gdGhp
cyBmaWxlLiBUaGlzIGNvZGUgc2hvdWxkIGxpa2VseSBsaXZlIGluIEhpZ2hsaWdodERhdGEsIG9y
IHNvbWV3aGVyZSBlbHNlLgogICAgIC8vIDxyZGFyOi8vcHJvYmxlbS81ODEyNTk3OD4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA1NTI4CiAgICAgLy8g
SWYgdGhlcmUgYXJlIGVsbGlwc2lzIGZvbGxvd2luZywgbWFrZSBzdXJlIHRoZWlyIHNlbGVjdGlv
biBpcyB1cGRhdGVkLgogICAgIGlmIChtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiAmJiBy
b290KCkuZWxsaXBzaXNCb3goKSkgewogICAgICAgICBFbGxpcHNpc0JveCogZWxsaXBzaXMgPSBy
b290KCkuZWxsaXBzaXNCb3goKTsKLSAgICAgICAgaWYgKHN0YXRlICE9IFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uTm9uZSkgeworICAgICAgICBpZiAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZTo6Tm9uZSkgewogICAgICAgICAgICAgYXV0byBbc2VsZWN0aW9uU3RhcnQsIHNl
bGVjdGlvbkVuZF0gPSBzZWxlY3Rpb25TdGFydEVuZCgpOwogICAgICAgICAgICAgLy8gVGhlIGVs
bGlwc2lzIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHNlbGVjdGVkIGlmIHRoZSBlbmQgb2YK
ICAgICAgICAgICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSB0cnVuY2F0aW9uIGFuZCB0aGUKICAgICAgICAgICAgIC8vIGJlZ2lubmluZyBvZiB0aGUgc2Vs
ZWN0aW9uIGlzIGJlZm9yZSBvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQogICAgICAgICAgICAg
Ly8gdHJ1bmNhdGlvbi4KICAgICAgICAgICAgIGVsbGlwc2lzLT5zZXRTZWxlY3Rpb25TdGF0ZShz
ZWxlY3Rpb25FbmQgPj0gbV90cnVuY2F0aW9uICYmIHNlbGVjdGlvblN0YXJ0IDw9IG1fdHJ1bmNh
dGlvbiA/Ci0gICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUgOiBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpOworICAgICAgICAgICAgICAgIFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSA6IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6
Ok5vbmUpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGVsbGlwc2lzLT5zZXRTZWxlY3Rp
b25TdGF0ZShSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpOworICAgICAgICAgICAgZWxsaXBz
aXMtPnNldFNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUp
OwogICAgIH0KICAgICAKICAgICByZXR1cm4gc3RhdGU7CiB9CiAKLVJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJveDo6dmVyaWZ5U2VsZWN0aW9uU3RhdGUoUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25TdGF0ZSBzdGF0ZSwgU2VsZWN0aW9uUmFuZ2VEYXRhJiBzZWxlY3Rpb24p
IGNvbnN0CitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIElubGluZVRleHRCb3g6OnZlcmlm
eVNlbGVjdGlvblN0YXRlKFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc3RhdGUsIEhpZ2hs
aWdodERhdGEmIHNlbGVjdGlvbikgY29uc3QKIHsKLSAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25TdGFydCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVu
ZCB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpIHsKKyAgICBpZiAoc3Rh
dGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQgfHwgc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6
SGlnaGxpZ2h0U3RhdGU6OkJvdGgpIHsKICAgICAgICAgYXV0byBzdGFydE9mZnNldCA9IHNlbGVj
dGlvbi5zdGFydE9mZnNldCgpOwogICAgICAgICBhdXRvIGVuZE9mZnNldCA9IHNlbGVjdGlvbi5l
bmRPZmZzZXQoKTsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5lIGJy
ZWFrIGlzIGNvbnNpZGVyZWQgdG8gYmUgcGFzdCBpdHMgZW5kLgogICAgICAgICBBU1NFUlQoc3Rh
cnQoKSArIGxlbigpID49IChpc0xpbmVCcmVhaygpID8gMSA6IDApKTsKICAgICAgICAgdW5zaWdu
ZWQgbGFzdFNlbGVjdGFibGUgPSBzdGFydCgpICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEg
OiAwKTsKIAotICAgICAgICBib29sIHN0YXJ0ID0gKHN0YXRlICE9IFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uRW5kICYmIHN0YXJ0T2Zmc2V0ID49IG1fc3RhcnQgJiYgc3RhcnRPZmZzZXQgPCBtX3N0
YXJ0ICsgbV9sZW4pOwotICAgICAgICBib29sIGVuZCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXJ0ICYmIGVuZE9mZnNldCA+IG1fc3RhcnQgJiYgZW5kT2Zmc2V0IDw9IGxh
c3RTZWxlY3RhYmxlKTsKKyAgICAgICAgYm9vbCBzdGFydCA9IChzdGF0ZSAhPSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQgJiYgc3RhcnRPZmZzZXQgPj0gbV9zdGFydCAmJiBzdGFy
dE9mZnNldCA8IG1fc3RhcnQgKyBtX2xlbik7CisgICAgICAgIGJvb2wgZW5kID0gKHN0YXRlICE9
IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0ICYmIGVuZE9mZnNldCA+IG1fc3Rh
cnQgJiYgZW5kT2Zmc2V0IDw9IGxhc3RTZWxlY3RhYmxlKTsKICAgICAgICAgaWYgKHN0YXJ0ICYm
IGVuZCkKLSAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoOwor
ICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpCb3RoOwog
ICAgICAgICBlbHNlIGlmIChzdGFydCkKLSAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25TdGFydDsKKyAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZTo6U3RhcnQ7CiAgICAgICAgIGVsc2UgaWYgKGVuZCkKLSAgICAgICAgICAgIHN0
YXRlID0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQ7Ci0gICAgICAgIGVsc2UgaWYgKChzdGF0
ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCB8fCBzdGFydE9mZnNldCA8IG1fc3RhcnQp
Ci0gICAgICAgICAgICAmJiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCB8
fCBlbmRPZmZzZXQgPiBsYXN0U2VsZWN0YWJsZSkpCi0gICAgICAgICAgICBzdGF0ZSA9IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlOwotICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvbkJvdGgpCi0gICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uTm9uZTsKKyAgICAgICAgICAgIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZTo6RW5kOworICAgICAgICBlbHNlIGlmICgoc3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZTo6RW5kIHx8IHN0YXJ0T2Zmc2V0IDwgbV9zdGFydCkKKyAgICAgICAg
ICAgICYmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCB8fCBl
bmRPZmZzZXQgPiBsYXN0U2VsZWN0YWJsZSkpCisgICAgICAgICAgICBzdGF0ZSA9IFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aCkKKyAgICAgICAgICAgIHN0YXRlID0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKICAgICB9CiAKICAgICByZXR1cm4g
c3RhdGU7CkBAIC00OTIsNyArNDkyLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIGJv
b2wgaXNQcmludGluZyA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5wcmludGluZygpOwogICAgIAog
ICAgIC8vIERldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSdyZSBzZWxlY3RlZC4KLSAgICBib29s
IGhhdmVTZWxlY3Rpb24gPSAhaXNQcmludGluZyAmJiBwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQ
aGFzZTo6VGV4dENsaXAgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvbk5vbmU7CisgICAgYm9vbCBoYXZlU2VsZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgcGFpbnRJ
bmZvLnBoYXNlICE9IFBhaW50UGhhc2U6OlRleHRDbGlwICYmIHNlbGVjdGlvblN0YXRlKCkgIT0g
UmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKICAgICBpZiAoIWhhdmVTZWxlY3Rp
b24gJiYgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhhc2U6OlNlbGVjdGlvbikgewogICAgICAg
ICAvLyBXaGVuIG9ubHkgcGFpbnRpbmcgdGhlIHNlbGVjdGlvbiwgZG9uJ3QgYm90aGVyIHRvIHBh
aW50IGlmIHRoZXJlIGlzIG5vbmUuCiAgICAgICAgIHJldHVybjsKQEAgLTY4NCwxNCArNjg0LDE0
IEBAIHVuc2lnbmVkIElubGluZVRleHRCb3g6OmNsYW1wZWRPZmZzZXQodW5zaWduZWQgeCkgY29u
c3QKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCi1zdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVk
PiBJbmxpbmVUZXh0Qm94OjpjbGFtcGVkU3RhcnRFbmRGb3JTdGF0ZSh1bnNpZ25lZCBzdGFydCwg
dW5zaWduZWQgZW5kLCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRl
KSBjb25zdAorc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gSW5saW5lVGV4dEJveDo6Y2xh
bXBlZFN0YXJ0RW5kRm9yU3RhdGUodW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSkgY29uc3QKIHsKLSAgICBpZiAo
c2VsZWN0aW9uU3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpCisgICAgaWYg
KHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSkK
ICAgICAgICAgcmV0dXJuIHsgMCwgY2xhbXBlZE9mZnNldChtX3N0YXJ0ICsgbV9sZW4pIH07CiAg
ICAgCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
cnQpCisgICAgaWYgKHNlbGVjdGlvblN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3Rh
dGU6OlN0YXJ0KQogICAgICAgICBlbmQgPSByZW5kZXJlcigpLnRleHQoKS5sZW5ndGgoKTsKLSAg
ICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkK
KyAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0
YXRlOjpFbmQpCiAgICAgICAgIHN0YXJ0ID0gMDsKICAgICByZXR1cm4geyBjbGFtcGVkT2Zmc2V0
KHN0YXJ0KSwgY2xhbXBlZE9mZnNldChlbmQpIH07CiB9CkBAIC03MDMsMTIgKzcwMywxMiBAQCBz
dGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFy
dEVuZCgpIGNvbnN0CiAgICAgcmV0dXJuIGNsYW1wZWRTdGFydEVuZEZvclN0YXRlKHJlbmRlcmVy
KCkudmlldygpLnNlbGVjdGlvbigpLnN0YXJ0T2Zmc2V0KCksIHJlbmRlcmVyKCkudmlldygpLnNl
bGVjdGlvbigpLmVuZE9mZnNldCgpLCBzZWxlY3Rpb25TdGF0ZSk7CiB9CiAKLXN0ZDo6cGFpcjx1
bnNpZ25lZCwgdW5zaWduZWQ+IElubGluZVRleHRCb3g6OmhpZ2hsaWdodFN0YXJ0RW5kKFNlbGVj
dGlvblJhbmdlRGF0YSAmcmFuZ2VEYXRhKSBjb25zdAorc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4gSW5saW5lVGV4dEJveDo6aGlnaGxpZ2h0U3RhcnRFbmQoSGlnaGxpZ2h0RGF0YSAmcmFu
Z2VEYXRhKSBjb25zdAogewotICAgIGF1dG8gc3RhdGUgPSByYW5nZURhdGEuc2VsZWN0aW9uU3Rh
dGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAgICBhdXRvIHN0YXRlID0gcmFuZ2VEYXRhLmhp
Z2hsaWdodFN0YXRlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CiAgICAgc3RhdGUgPSB2ZXJpZnlT
ZWxlY3Rpb25TdGF0ZShzdGF0ZSwgcmFuZ2VEYXRhKTsKICAgICAKLSAgICBpZiAoc3RhdGUgPT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKQorICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKQogICAgICAgICByZXR1cm4gezAsIDB9OwogICAgIAog
ICAgIHJldHVybiBjbGFtcGVkU3RhcnRFbmRGb3JTdGF0ZShyYW5nZURhdGEuc3RhcnRPZmZzZXQo
KSwgcmFuZ2VEYXRhLmVuZE9mZnNldCgpLCBzdGF0ZSk7CkBAIC0xMDU0LDggKzEwNTQsOCBAQCBW
ZWN0b3I8TWFya2VkVGV4dD4gSW5saW5lVGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRzRm9ySGln
aGxpZ2h0cyhUZXh0UGFpbnRQaGFzZQogICAgICAgICAgICAgICAgIEFTU0VSVChzdGFydE9mZnNl
dCA+PSAwICYmIGVuZE9mZnNldCA+PSAwKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0YXJ0UmVu
ZGVyZXIgfHwgIWVuZFJlbmRlcmVyKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICBhdXRvIGhpZ2hsaWdodERhdGEgPSBTZWxlY3Rpb25SYW5nZURhdGEocmVu
ZGVyZXIoKS52aWV3KCkpOwotICAgICAgICAgICAgICAgIGhpZ2hsaWdodERhdGEuc2V0Q29udGV4
dCh7c3RhcnRSZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFy
dE9mZnNldCksIHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpfSk7CisgICAgICAgICAg
ICAgICAgYXV0byBoaWdobGlnaHREYXRhID0gSGlnaGxpZ2h0RGF0YShyZW5kZXJlcigpLnZpZXco
KSk7CisgICAgICAgICAgICAgICAgaGlnaGxpZ2h0RGF0YS5zZXRSZW5kZXJSYW5nZSh7c3RhcnRS
ZW5kZXJlciwgZW5kUmVuZGVyZXIsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGFydE9mZnNldCks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihlbmRPZmZzZXQpfSk7CiAgICAgICAgICAgICAgICAgYXV0
byBbaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZF0gPSBoaWdobGlnaHRTdGFydEVuZChoaWdo
bGlnaHREYXRhKTsKICAgICAgICAgICAgICAgICBpZiAoaGlnaGxpZ2h0U3RhcnQgPCBoaWdobGln
aHRFbmQpCiAgICAgICAgICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZCh7IGhpZ2hsaWdo
dFN0YXJ0LCBoaWdobGlnaHRFbmQsIE1hcmtlZFRleHQ6OkhpZ2hsaWdodCwgbnVsbHB0ciwgaGln
aGxpZ2h0LmtleSB9KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Jbmxp
bmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCmlu
ZGV4IDQ2MjE4YjZmNmM0OTE2NzBhYjI5M2Y5ZjE4YzZkMTUwNjRhOWFmNDAuLjQyZDc0NTVjODU2
Y2ZiZjY1OTQwYzE2MmY2ODQxMTJhYTgzOTRiOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0lubGluZVRleHRCb3guaApAQCAtMTIxLDcgKzEyMSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IExheW91dFJlY3QgbG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25l
ZCBlbmRQb3MpIGNvbnN0OwogICAgIGJvb2wgaXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvc2l0
aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3Q7CiAgICAgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRFbmQoKSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8dW5z
aWduZWQsIHVuc2lnbmVkPiBoaWdobGlnaHRTdGFydEVuZChTZWxlY3Rpb25SYW5nZURhdGEmKSBj
b25zdDsKKyAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBoaWdobGlnaHRTdGFydEVu
ZChIaWdobGlnaHREYXRhJikgY29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRV
bml0IGxpbmVCb3R0b20pIG92ZXJyaWRlOwpAQCAtMTM0LDExICsxMzQsMTEgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGV4dHJhY3RMaW5lKCkgZmluYWw7CiAgICAgdm9pZCBhdHRhY2hMaW5lKCkgZmlu
YWw7CiAgICAgCi0gICAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSB2ZXJpZnlTZWxlY3Rp
b25TdGF0ZShSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlLCBTZWxlY3Rpb25SYW5nZURhdGEm
KSBjb25zdDsKLSAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBjbGFtcGVkU3RhcnRF
bmRGb3JTdGF0ZSh1bnNpZ25lZCwgdW5zaWduZWQsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
dGUpIGNvbnN0OworICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgdmVyaWZ5U2VsZWN0
aW9uU3RhdGUoUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSwgSGlnaGxpZ2h0RGF0YSYpIGNv
bnN0OworICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IGNsYW1wZWRTdGFydEVuZEZv
clN0YXRlKHVuc2lnbmVkLCB1bnNpZ25lZCwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSkg
Y29uc3Q7CiAKIHB1YmxpYzoKLSAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHNlbGVj
dGlvblN0YXRlKCkgZmluYWw7CisgICAgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZSBzZWxl
Y3Rpb25TdGF0ZSgpIGZpbmFsOwogCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJUcnVuY2F0aW9u
KCkgZmluYWwgeyBtX3RydW5jYXRpb24gPSBjTm9UcnVuY2F0aW9uOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAppbmRleCAyZjNmYTk1YjNlYzA0NDcxZWMxODNlNTE3
NWY1ZDdhYWE2MTUwYWZkLi5jZWFjYjg1YzBiMmViOTNjYjJkYTNhMGEyYTg1YzUyOGYzY2VjNGNh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTE0MDAsNyAr
MTQwMCw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OnNob3VsZFBhaW50U2VsZWN0aW9uR2FwcygpIGNv
bnN0CiAgICAgaWYgKHNldHRpbmdzKCkuc2VsZWN0aW9uUGFpbnRpbmdXaXRob3V0U2VsZWN0aW9u
R2Fwc0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHNlbGVj
dGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSAmJiBzdHlsZSgpLnZpc2liaWxpdHkoKSA9PSBW
aXNpYmlsaXR5OjpWaXNpYmxlICYmIGlzU2VsZWN0aW9uUm9vdCgpOworICAgIHJldHVybiBzZWxl
Y3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodFN0YXRlOjpOb25lICYmIHN0eWxlKCkudmlzaWJpbGl0
eSgpID09IFZpc2liaWxpdHk6OlZpc2libGUgJiYgaXNTZWxlY3Rpb25Sb290KCk7CiB9CiAKIGJv
b2wgUmVuZGVyQmxvY2s6OmlzU2VsZWN0aW9uUm9vdCgpIGNvbnN0CkBAIC0xNTUwLDcgKzE1NTAs
NyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYgcm9v
dEJsb2NrLCBjb25zdCBMYXlvdXRQb2ludCYgcgogICAgICAgICByZXN1bHQgPSBibG9ja1NlbGVj
dGlvbkdhcHMocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBvZmZzZXRGcm9t
Um9vdEJsb2NrLCBsYXN0TG9naWNhbFRvcCwgbGFzdExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJp
Z2h0LCBjYWNoZSwgcGFpbnRJbmZvKTsKIAogICAgIC8vIEZpbGwgdGhlIHZlcnRpY2FsIGdhcCBh
bGwgdGhlIHdheSB0byB0aGUgYm90dG9tIG9mIG91ciBibG9jayBpZiB0aGUgc2VsZWN0aW9uIGV4
dGVuZHMgcGFzdCBvdXIgYmxvY2suCi0gICAgaWYgKCZyb290QmxvY2sgPT0gdGhpcyAmJiAoc2Vs
ZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25Cb3RoICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gU2Vs
ZWN0aW9uRW5kKSAmJiAhaXNSdWJ5QmFzZSgpICYmICFpc1J1YnlUZXh0KCkpIHsKKyAgICBpZiAo
JnJvb3RCbG9jayA9PSB0aGlzICYmIChzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodFN0YXRl
OjpCb3RoICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gSGlnaGxpZ2h0U3RhdGU6OkVuZCkgJiYgIWlz
UnVieUJhc2UoKSAmJiAhaXNSdWJ5VGV4dCgpKSB7CiAgICAgICAgIHJlc3VsdC51bml0ZUNlbnRl
cihibG9ja1NlbGVjdGlvbkdhcChyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24s
IG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgICAgICAgICBsYXN0TG9naWNhbFRvcCwgbGFzdExv
Z2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0LCBsb2dpY2FsSGVpZ2h0KCksIGNhY2hlLCBwYWlu
dEluZm8pKTsKICAgICB9CkBAIC0xNTcxLDcgKzE1NzEsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9j
azo6YmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91
dFBvaQogCiAgICAgLy8gSnVtcCByaWdodCB0byB0aGUgZmlyc3QgYmxvY2sgY2hpbGQgdGhhdCBj
b250YWlucyBzb21lIHNlbGVjdGVkIG9iamVjdHMuCiAgICAgUmVuZGVyQm94KiBjdXJyOwotICAg
IGZvciAoY3VyciA9IGZpcnN0Q2hpbGRCb3goKTsgY3VyciAmJiBjdXJyLT5zZWxlY3Rpb25TdGF0
ZSgpID09IFNlbGVjdGlvbk5vbmU7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZ0JveCgpKSB7IH0K
KyAgICBmb3IgKGN1cnIgPSBmaXJzdENoaWxkQm94KCk7IGN1cnIgJiYgY3Vyci0+c2VsZWN0aW9u
U3RhdGUoKSA9PSBIaWdobGlnaHRTdGF0ZTo6Tm9uZTsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5n
Qm94KCkpIHsgfQogICAgIAogICAgIGlmICghY3VycikKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
QEAgLTE1NzksOCArMTU3OSw4IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpibG9ja1NlbGVjdGlv
bkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9pCiAgICAgTG9naWNh
bFNlbGVjdGlvbk9mZnNldENhY2hlcyBjaGlsZENhY2hlKCp0aGlzLCBjYWNoZSk7CiAKICAgICBm
b3IgKGJvb2wgc2F3U2VsZWN0aW9uRW5kID0gZmFsc2U7IGN1cnIgJiYgIXNhd1NlbGVjdGlvbkVu
ZDsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgU2VsZWN0aW9uU3Rh
dGUgY2hpbGRTdGF0ZSA9IGN1cnItPnNlbGVjdGlvblN0YXRlKCk7Ci0gICAgICAgIGlmIChjaGls
ZFN0YXRlID09IFNlbGVjdGlvbkJvdGggfHwgY2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25FbmQpCisg
ICAgICAgIEhpZ2hsaWdodFN0YXRlIGNoaWxkU3RhdGUgPSBjdXJyLT5zZWxlY3Rpb25TdGF0ZSgp
OworICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9PSBIaWdobGlnaHRTdGF0ZTo6Qm90aCB8fCBjaGls
ZFN0YXRlID09IEhpZ2hsaWdodFN0YXRlOjpFbmQpCiAgICAgICAgICAgICBzYXdTZWxlY3Rpb25F
bmQgPSB0cnVlOwogCiAgICAgICAgIGlmIChjdXJyLT5pc0Zsb2F0aW5nT3JPdXRPZkZsb3dQb3Np
dGlvbmVkKCkpCkBAIC0xNTk1LDEwICsxNTk1LDEwIEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpi
bG9ja1NlbGVjdGlvbkdhcHMoUmVuZGVyQmxvY2smIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0UG9p
CiAgICAgICAgIH0KIAogICAgICAgICBib29sIHBhaW50c093blNlbGVjdGlvbiA9IGN1cnItPnNo
b3VsZFBhaW50U2VsZWN0aW9uR2FwcygpIHx8IGN1cnItPmlzVGFibGUoKTsgLy8gRklYTUU6IEV2
ZW50dWFsbHkgd2Ugd29uJ3Qgc3BlY2lhbC1jYXNlIHRhYmxlIGxpa2UgdGhpcy4KLSAgICAgICAg
Ym9vbCBmaWxsQmxvY2tHYXBzID0gKHBhaW50c093blNlbGVjdGlvbiB8fCAoY3Vyci0+Y2FuQmVT
ZWxlY3Rpb25MZWFmKCkgJiYgY2hpbGRTdGF0ZSAhPSBTZWxlY3Rpb25Ob25lKSkgJiYgIWlzUnVi
eUJhc2UoKSAmJiAhaXNSdWJ5VGV4dCgpOworICAgICAgICBib29sIGZpbGxCbG9ja0dhcHMgPSAo
cGFpbnRzT3duU2VsZWN0aW9uIHx8IChjdXJyLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSAmJiBjaGls
ZFN0YXRlICE9IEhpZ2hsaWdodFN0YXRlOjpOb25lKSkgJiYgIWlzUnVieUJhc2UoKSAmJiAhaXNS
dWJ5VGV4dCgpOwogICAgICAgICBpZiAoZmlsbEJsb2NrR2FwcykgewogICAgICAgICAgICAgLy8g
V2UgbmVlZCB0byBmaWxsIHRoZSB2ZXJ0aWNhbCBnYXAgYWJvdmUgdGhpcyBvYmplY3QuCi0gICAg
ICAgICAgICBpZiAoY2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25FbmQgfHwgY2hpbGRTdGF0ZSA9PSBT
ZWxlY3Rpb25JbnNpZGUpIHsKKyAgICAgICAgICAgIGlmIChjaGlsZFN0YXRlID09IEhpZ2hsaWdo
dFN0YXRlOjpFbmQgfHwgY2hpbGRTdGF0ZSA9PSBIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKSB7CiAg
ICAgICAgICAgICAgICAgLy8gRmlsbCB0aGUgZ2FwIGFib3ZlIHRoZSBvYmplY3QuCiAgICAgICAg
ICAgICAgICAgcmVzdWx0LnVuaXRlQ2VudGVyKGJsb2NrU2VsZWN0aW9uR2FwKHJvb3RCbG9jaywg
cm9vdEJsb2NrUGh5c2ljYWxQb3NpdGlvbiwgb2Zmc2V0RnJvbVJvb3RCbG9jaywKICAgICAgICAg
ICAgICAgICAgICAgbGFzdExvZ2ljYWxUb3AsIGxhc3RMb2dpY2FsTGVmdCwgbGFzdExvZ2ljYWxS
aWdodCwgY3Vyci0+bG9naWNhbFRvcCgpLCBjYWNoZSwgcGFpbnRJbmZvKSk7CkBAIC0xNjA2LDgg
KzE2MDYsOCBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6YmxvY2tTZWxlY3Rpb25HYXBzKFJlbmRl
ckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBvaQogCiAgICAgICAgICAgICAvLyBPbmx5
IGZpbGwgc2lkZSBnYXBzIGZvciBvYmplY3RzIHRoYXQgcGFpbnQgdGhlaXIgb3duIHNlbGVjdGlv
biBpZiB3ZSBrbm93IGZvciBzdXJlIHRoZSBzZWxlY3Rpb24gaXMgZ29pbmcgdG8gZXh0ZW5kIGFs
bCB0aGUgd2F5ICpwYXN0KgogICAgICAgICAgICAgLy8gb3VyIG9iamVjdC4gIFdlIGtub3cgdGhp
cyBpZiB0aGUgc2VsZWN0aW9uIGRpZCBub3QgZW5kIGluc2lkZSBvdXIgb2JqZWN0LgotICAgICAg
ICAgICAgaWYgKHBhaW50c093blNlbGVjdGlvbiAmJiAoY2hpbGRTdGF0ZSA9PSBTZWxlY3Rpb25T
dGFydCB8fCBzYXdTZWxlY3Rpb25FbmQpKQotICAgICAgICAgICAgICAgIGNoaWxkU3RhdGUgPSBT
ZWxlY3Rpb25Ob25lOworICAgICAgICAgICAgaWYgKHBhaW50c093blNlbGVjdGlvbiAmJiAoY2hp
bGRTdGF0ZSA9PSBIaWdobGlnaHRTdGF0ZTo6U3RhcnQgfHwgc2F3U2VsZWN0aW9uRW5kKSkKKyAg
ICAgICAgICAgICAgICBjaGlsZFN0YXRlID0gSGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CiAKICAgICAg
ICAgICAgIC8vIEZpbGwgc2lkZSBnYXBzIG9uIHRoaXMgb2JqZWN0IGJhc2VkIG9mZiBpdHMgc3Rh
dGUuCiAgICAgICAgICAgICBib29sIGxlZnRHYXAsIHJpZ2h0R2FwOwpAQCAtMTYyNCw3ICsxNjI0
LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmJsb2NrU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9j
ayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAgICAgICAgICAgIGxhc3RMb2dpY2FsVG9w
ID0gYmxvY2tEaXJlY3Rpb25PZmZzZXQocm9vdEJsb2NrLCBvZmZzZXRGcm9tUm9vdEJsb2NrKSAr
IGN1cnItPmxvZ2ljYWxCb3R0b20oKTsKICAgICAgICAgICAgIGxhc3RMb2dpY2FsTGVmdCA9IGxv
Z2ljYWxMZWZ0U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+bG9naWNhbEJvdHRvbSgp
LCBjYWNoZSk7CiAgICAgICAgICAgICBsYXN0TG9naWNhbFJpZ2h0ID0gbG9naWNhbFJpZ2h0U2Vs
ZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgY3Vyci0+bG9naWNhbEJvdHRvbSgpLCBjYWNoZSk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoY2hpbGRTdGF0ZSAhPSBTZWxlY3Rpb25Ob25lICYmIGlzPFJlbmRl
ckJsb2NrPigqY3VycikpIHsKKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZFN0YXRlICE9IEhpZ2hs
aWdodFN0YXRlOjpOb25lICYmIGlzPFJlbmRlckJsb2NrPigqY3VycikpIHsKICAgICAgICAgICAg
IC8vIFdlIG11c3QgYmUgYSBibG9jayB0aGF0IGhhcyBzb21lIHNlbGVjdGVkIG9iamVjdCBpbnNp
ZGUgaXQsIHNvIHJlY3VyLgogICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGRvd25jYXN0PFJlbmRl
ckJsb2NrPigqY3Vycikuc2VsZWN0aW9uR2Fwcyhyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2Fs
UG9zaXRpb24sIExheW91dFNpemUob2Zmc2V0RnJvbVJvb3RCbG9jay53aWR0aCgpICsgY3Vyci0+
eCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpICsgY3Vyci0+eSgpKSwKICAgICAgICAg
ICAgICAgICBsYXN0TG9naWNhbFRvcCwgbGFzdExvZ2ljYWxMZWZ0LCBsYXN0TG9naWNhbFJpZ2h0
LCBjaGlsZENhY2hlLCBwYWludEluZm8pKTsKQEAgLTE2ODgsMTUgKzE2ODgsMTEgQEAgTGF5b3V0
UmVjdCBSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0U2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiBy
b290QmxvY2ssIGNvbnN0IEwKICAgICByZXR1cm4gZ2FwUmVjdDsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6Z2V0U2VsZWN0aW9uR2FwSW5mbyhTZWxlY3Rpb25TdGF0ZSBzdGF0ZSwgYm9vbCYgbGVm
dEdhcCwgYm9vbCYgcmlnaHRHYXApCit2b2lkIFJlbmRlckJsb2NrOjpnZXRTZWxlY3Rpb25HYXBJ
bmZvKEhpZ2hsaWdodFN0YXRlIHN0YXRlLCBib29sJiBsZWZ0R2FwLCBib29sJiByaWdodEdhcCkK
IHsKICAgICBib29sIGx0ciA9IHN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwotICAg
IGxlZnRHYXAgPSAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpIHx8Ci0g
ICAgICAgICAgICAgIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAmJiBsdHIp
IHx8Ci0gICAgICAgICAgICAgIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0
ICYmICFsdHIpOwotICAgIHJpZ2h0R2FwID0gKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uSW5zaWRlKSB8fAotICAgICAgICAgICAgICAgKHN0YXRlID09IFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uU3RhcnQgJiYgbHRyKSB8fAotICAgICAgICAgICAgICAgKHN0YXRlID09IFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uRW5kICYmICFsdHIpOworICAgIGxlZnRHYXAgPSAoc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKSB8fCAoc3RhdGUgPT0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6RW5kICYmIGx0cikgfHwgKHN0YXRlID09IFJlbmRlck9iamVj
dDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0ICYmICFsdHIpOworICAgIHJpZ2h0R2FwID0gKHN0YXRl
ID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSkgfHwgKHN0YXRlID09IFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0ICYmIGx0cikgfHwgKHN0YXRlID09IFJl
bmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZCAmJiAhbHRyKTsKIH0KIAogTGF5b3V0VW5p
dCBSZW5kZXJCbG9jazo6bG9naWNhbExlZnRTZWxlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2smIHJv
b3RCbG9jaywgTGF5b3V0VW5pdCBwb3NpdGlvbiwgY29uc3QgTG9naWNhbFNlbGVjdGlvbk9mZnNl
dENhY2hlcyYgY2FjaGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCmluZGV4
IGEwNTE1MTcyNDJiNzZmNzViYzJjMWYxMDUxMjBkZjFhZGU2M2M3OGUuLmRmMDE5Zjc2NDVjOTkx
MTVhZjFiMTFlYTBjNjFjZmIyYTNkN2RiZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9jay5oCkBAIC0xNzcsNyArMTc3LDcgQEAgcHVibGljOgogICAgICAgICBSZW5kZXJCb3hN
b2RlbE9iamVjdCogc2VsT2JqLCBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBMYXlvdXRVbml0IGxv
Z2ljYWxUb3AsIExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgY29uc3QgTG9naWNhbFNlbGVjdGlv
bk9mZnNldENhY2hlcyYsIGNvbnN0IFBhaW50SW5mbyopOwogICAgIExheW91dFJlY3QgbG9naWNh
bFJpZ2h0U2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiByb290QmxvY2ssIGNvbnN0IExheW91dFBv
aW50JiByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBjb25zdCBMYXlvdXRTaXplJiBvZmZzZXRG
cm9tUm9vdEJsb2NrLAogICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCogc2VsT2JqLCBMYXlv
dXRVbml0IGxvZ2ljYWxSaWdodCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxv
Z2ljYWxIZWlnaHQsIGNvbnN0IExvZ2ljYWxTZWxlY3Rpb25PZmZzZXRDYWNoZXMmLCBjb25zdCBQ
YWludEluZm8qKTsKLSAgICB2b2lkIGdldFNlbGVjdGlvbkdhcEluZm8oU2VsZWN0aW9uU3RhdGUs
IGJvb2wmIGxlZnRHYXAsIGJvb2wmIHJpZ2h0R2FwKTsKKyAgICB2b2lkIGdldFNlbGVjdGlvbkdh
cEluZm8oSGlnaGxpZ2h0U3RhdGUsIGJvb2wmIGxlZnRHYXAsIGJvb2wmIHJpZ2h0R2FwKTsKICAg
ICBib29sIGlzU2VsZWN0aW9uUm9vdCgpIGNvbnN0OwogCiAgICAgTGF5b3V0UmVjdCBsb2dpY2Fs
UmVjdFRvUGh5c2ljYWxSZWN0KGNvbnN0IExheW91dFBvaW50JiBwaHlzaWNhbFBvc2l0aW9uLCBj
b25zdCBMYXlvdXRSZWN0JiBsb2dpY2FsUmVjdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwCmluZGV4IGI4MjBhYTdlNjFmMzk2NmZjODM3NmFmZWJhMTI2
YmFlMWI2Njc3NDEuLmE3YjljMzlkY2JhN2E3Mjk3MjJhZTY2NjI0MzNlM2QzZGQwODU0ZDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCkBAIC0zMTc0
LDkgKzMxNzQsOSBAQCBPcHRpb25hbDxpbnQ+IFJlbmRlckJsb2NrRmxvdzo6aW5saW5lQmxvY2tC
YXNlbGluZShMaW5lRGlyZWN0aW9uTW9kZSBsaW5lRGlyZWN0aQogICAgIHJldHVybiBzdHlsZSgp
Lm92ZXJmbG93WSgpID09IE92ZXJmbG93OjpWaXNpYmxlID8gbGFzdEJhc2VsaW5lIDogc3RkOjpt
aW4oYm94SGVpZ2h0LCBsYXN0QmFzZWxpbmUpOwogfQogCi12b2lkIFJlbmRlckJsb2NrRmxvdzo6
c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCit2b2lkIFJlbmRlckJsb2Nr
Rmxvdzo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYg
KHN0YXRlICE9IFNlbGVjdGlvbk5vbmUpCisgICAgaWYgKHN0YXRlICE9IEhpZ2hsaWdodFN0YXRl
OjpOb25lKQogICAgICAgICBlbnN1cmVMaW5lQm94ZXMoKTsKICAgICBSZW5kZXJCb3hNb2RlbE9i
amVjdDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwogfQpAQCAtMzE4OCw3ICszMTg4LDcgQEAg
R2FwUmVjdHMgUmVuZGVyQmxvY2tGbG93OjppbmxpbmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2Nr
JiByb290QmxvY2ssIGNvbnN0IExheW8KIAogICAgIEdhcFJlY3RzIHJlc3VsdDsKIAotICAgIGJv
b2wgY29udGFpbnNTdGFydCA9IHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uU3RhcnQgfHwg
c2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25Cb3RoOworICAgIGJvb2wgY29udGFpbnNTdGFy
dCA9IHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhdGU6OlN0YXJ0IHx8IHNlbGVjdGlv
blN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhdGU6OkJvdGg7CiAKICAgICBpZiAoIWhhc0xpbmVzKCkp
IHsKICAgICAgICAgaWYgKGNvbnRhaW5zU3RhcnQpIHsKQEAgLTMyMTAsNyArMzIxMCw3IEBAIEdh
cFJlY3RzIFJlbmRlckJsb2NrRmxvdzo6aW5saW5lU2VsZWN0aW9uR2FwcyhSZW5kZXJCbG9jayYg
cm9vdEJsb2NrLCBjb25zdCBMYXlvCiAgICAgICAgIExheW91dFVuaXQgc2VsSGVpZ2h0ID0gY3Vy
ci0+c2VsZWN0aW9uSGVpZ2h0QWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpOwogCiAgICAgICAg
IGlmICghY29udGFpbnNTdGFydCAmJiAhbGFzdFNlbGVjdGVkTGluZSAmJgotICAgICAgICAgICAg
c2VsZWN0aW9uU3RhdGUoKSAhPSBTZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9
IFNlbGVjdGlvbkJvdGggJiYgIWlzUnVieUJhc2UoKSkKKyAgICAgICAgICAgIHNlbGVjdGlvblN0
YXRlKCkgIT0gSGlnaGxpZ2h0U3RhdGU6OlN0YXJ0ICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gSGln
aGxpZ2h0U3RhdGU6OkJvdGggJiYgIWlzUnVieUJhc2UoKSkKICAgICAgICAgICAgIHJlc3VsdC51
bml0ZUNlbnRlcihibG9ja1NlbGVjdGlvbkdhcChyb290QmxvY2ssIHJvb3RCbG9ja1BoeXNpY2Fs
UG9zaXRpb24sIG9mZnNldEZyb21Sb290QmxvY2ssIGxhc3RMb2dpY2FsVG9wLCBsYXN0TG9naWNh
bExlZnQsIGxhc3RMb2dpY2FsUmlnaHQsIHNlbFRvcCwgY2FjaGUsIHBhaW50SW5mbykpOwogICAg
ICAgICAKICAgICAgICAgTGF5b3V0UmVjdCBsb2dpY2FsUmVjdCB7IExheW91dFVuaXQoY3Vyci0+
bG9naWNhbExlZnQoKSksIHNlbFRvcCwgTGF5b3V0VW5pdChjdXJyLT5sb2dpY2FsV2lkdGgoKSks
IHNlbFRvcCArIHNlbEhlaWdodCB9OwpAQCAtMzIyNyw3ICszMjI3LDcgQEAgR2FwUmVjdHMgUmVu
ZGVyQmxvY2tGbG93OjppbmxpbmVTZWxlY3Rpb25HYXBzKFJlbmRlckJsb2NrJiByb290QmxvY2ss
IGNvbnN0IExheW8KICAgICAgICAgLy8gVmlzaWJsZVNlbGVjdGlvbiBtdXN0IHN0YXJ0IGp1c3Qg
YWZ0ZXIgb3VyIGxhc3QgbGluZS4KICAgICAgICAgbGFzdFNlbGVjdGVkTGluZSA9IGxhc3RSb290
Qm94KCk7CiAKLSAgICBpZiAobGFzdFNlbGVjdGVkTGluZSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9
IFNlbGVjdGlvbkVuZCAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbkJvdGgpIHsKKyAg
ICBpZiAobGFzdFNlbGVjdGVkTGluZSAmJiBzZWxlY3Rpb25TdGF0ZSgpICE9IEhpZ2hsaWdodFN0
YXRlOjpFbmQgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBIaWdobGlnaHRTdGF0ZTo6Qm90aCkgewog
ICAgICAgICAvLyBVcGRhdGUgb3VyIGxhc3RZIHRvIGJlIHRoZSBib3R0b20gb2YgdGhlIGxhc3Qg
c2VsZWN0ZWQgbGluZS4KICAgICAgICAgbGFzdExvZ2ljYWxUb3AgPSBibG9ja0RpcmVjdGlvbk9m
ZnNldChyb290QmxvY2ssIG9mZnNldEZyb21Sb290QmxvY2spICsgbGFzdFNlbGVjdGVkTGluZS0+
c2VsZWN0aW9uQm90dG9tKCk7CiAgICAgICAgIGxhc3RMb2dpY2FsTGVmdCA9IGxvZ2ljYWxMZWZ0
U2VsZWN0aW9uT2Zmc2V0KHJvb3RCbG9jaywgbGFzdFNlbGVjdGVkTGluZS0+c2VsZWN0aW9uQm90
dG9tKCksIGNhY2hlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cu
aAppbmRleCAyNzc3NjdkZTJkOTdkMzU4NDJlMDY1YTliMzExM2MyYjUzZjlhMmI3Li5iNDI5Yjc2
OTIxYjc4Y2EyM2IyNDU4YjA0MjhjOGE5YmIyYjgzODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCkBAIC01NTksNyArNTU5LDcgQEAgcHJpdmF0ZToKICAg
ICBpbnQgbV93aWR0aEZvclRleHRBdXRvc2l6aW5nOwogICAgIHVuc2lnbmVkIG1fbGluZUNvdW50
Rm9yVGV4dEF1dG9zaXppbmcgOiAyOwogI2VuZGlmCi0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0
ZShTZWxlY3Rpb25TdGF0ZSkgZmluYWw7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdo
bGlnaHRTdGF0ZSkgZmluYWw7CiAKIHB1YmxpYzoKICAgICAvLyBGSVhNRS1CTE9DS0ZMT1c6IFRo
ZXNlIGNhbiBiZSBtYWRlIHByb3RlY3RlZCBhZ2FpbiBvbmNlIGFsbCBjYWxsZXJzIGhhdmUgYmVl
biBtb3ZlZCBoZXJlLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveE1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3hN
b2RlbE9iamVjdC5jcHAKaW5kZXggNGRiYTA3ZjczNTIwODM2OGY3MjkyOWUzMmIyMDk5YTRkZTI3
MmUwYi4uMzFlZmE1YTQwNWE4ZjUwZDhiOWY4OGFmNDNmNDYzMGI4MmIyZjBmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuY3BwCkBAIC0x
MjksMTQgKzEyOSwxNCBAQCBzdGF0aWMgRmlyc3RMZXR0ZXJSZW1haW5pbmdUZXh0TWFwJiBmaXJz
dExldHRlclJlbWFpbmluZ1RleHRNYXAoKQogICAgIHJldHVybiBtYXA7CiB9CiAKLXZvaWQgUmVu
ZGVyQm94TW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRl
KQordm9pZCBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0
U3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYgKHN0YXRlID09IFNlbGVjdGlvbkluc2lkZSAmJiBzZWxl
Y3Rpb25TdGF0ZSgpICE9IFNlbGVjdGlvbk5vbmUpCisgICAgaWYgKHN0YXRlID09IEhpZ2hsaWdo
dFN0YXRlOjpJbnNpZGUgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9u
ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKChzdGF0ZSA9PSBTZWxlY3Rpb25TdGFydCAm
JiBzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvbkVuZCkKLSAgICAgICAgfHwgKHN0YXRlID09
IFNlbGVjdGlvbkVuZCAmJiBzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVjdGlvblN0YXJ0KSkKLSAg
ICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9u
Qm90aCk7CisgICAgaWYgKChzdGF0ZSA9PSBIaWdobGlnaHRTdGF0ZTo6U3RhcnQgJiYgc2VsZWN0
aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRTdGF0ZTo6RW5kKQorICAgICAgICB8fCAoc3RhdGUgPT0g
SGlnaGxpZ2h0U3RhdGU6OkVuZCAmJiBzZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdodFN0YXRl
OjpTdGFydCkpCisgICAgICAgIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0
YXRlKEhpZ2hsaWdodFN0YXRlOjpCb3RoKTsKICAgICBlbHNlCiAgICAgICAgIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlKHN0YXRlKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJveE1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94TW9kZWxPYmplY3QuaAppbmRleCBlNjBkM2MyYjM2ZTVh
ZTg1MmNiMzIwZDdkYjJlMTU5NWE5MTE5ZTlmLi5hYzU5M2NhZjEzOWYxMWY4N2JjODU5NTViZDVk
YWFhZDUwZGExYjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94TW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
TW9kZWxPYmplY3QuaApAQCAtMjE1LDcgKzIxNSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFw
QWJzb2x1dGVUb0xvY2FsUG9pbnQoTWFwQ29vcmRpbmF0ZXNGbGFncywgVHJhbnNmb3JtU3RhdGUm
KSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9u
U3RhdGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3Rh
dGUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBjYW5IYXZlQm94SW5mb0luRnJhZ21lbnQoKSBjb25z
dCB7IHJldHVybiAhaXNGbG9hdGluZygpICYmICFpc1JlcGxhY2VkKCkgJiYgIWlzSW5saW5lKCkg
JiYgIWlzVGFibGVDZWxsKCkgJiYgaXNSZW5kZXJCbG9jaygpICYmICFpc1JlbmRlclNWR0Jsb2Nr
KCk7IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVC
cmVhay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApp
bmRleCA3NDA5MGFlN2NhNTg2MjM4MTExMGY1ZDc1NjkzYmY0Y2E3NTU0ZDljLi40ZmQ0NzZiYTA2
NTE5ZGE1MWM4YjBkZTU2OTIwM2M4NjM1OTg5OTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGluZUJyZWFrLmNwcApAQCAtMTQ3LDE0ICsxNDcsMTQgQEAgVmlzaWJsZVBv
c2l0aW9uIFJlbmRlckxpbmVCcmVhazo6cG9zaXRpb25Gb3JQb2ludChjb25zdCBMYXlvdXRQb2lu
dCYsIGNvbnN0IFJlbmQKICAgICByZXR1cm4gY3JlYXRlVmlzaWJsZVBvc2l0aW9uKDAsIERPV05T
VFJFQU0pOwogfQogCi12b2lkIFJlbmRlckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3RhdGUoU2Vs
ZWN0aW9uU3RhdGUgc3RhdGUpCit2b2lkIFJlbmRlckxpbmVCcmVhazo6c2V0U2VsZWN0aW9uU3Rh
dGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpCiB7Ci0gICAgaWYgKHN0YXRlICE9IFNlbGVjdGlvbk5v
bmUpCisgICAgaWYgKHN0YXRlICE9IEhpZ2hsaWdodFN0YXRlOjpOb25lKQogICAgICAgICBlbnN1
cmVMaW5lQm94ZXMoKTsKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdDo6c2V0U2VsZWN0aW9uU3Rh
dGUoc3RhdGUpOwogICAgIGlmICghbV9pbmxpbmVCb3hXcmFwcGVyKQogICAgICAgICByZXR1cm47
Ci0gICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihz
dGF0ZSAhPSBTZWxlY3Rpb25Ob25lKTsKKyAgICBtX2lubGluZUJveFdyYXBwZXItPnJvb3QoKS5z
ZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlICE9IEhpZ2hsaWdodFN0YXRlOjpOb25lKTsKIH0K
IAogTGF5b3V0UmVjdCBSZW5kZXJMaW5lQnJlYWs6OmxvY2FsQ2FyZXRSZWN0KElubGluZUJveCog
aW5saW5lQm94LCB1bnNpZ25lZCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRv
RW5kT2ZMaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
bmVCcmVhay5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpbmVCcmVhay5oCmlu
ZGV4IGVkZmVmZjU1M2IzZjc0ZDg0ZDRkZTg5MDc3NGZmZWUyNGVlM2IzY2IuLjI0MjlmNThmODM5
NTNmZmI1ODY5NGI3NGNhOWU0MTk0NDJkNTljODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaW5lQnJlYWsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGluZUJyZWFrLmgKQEAgLTY4LDcgKzY4LDcgQEAgcHJpdmF0ZToKICAgICBpbnQg
Y2FyZXRNYXhPZmZzZXQoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGNhbkJlU2VsZWN0aW9u
TGVhZigpIGNvbnN0IG92ZXJyaWRlOwogICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5s
aW5lQm94KiwgdW5zaWduZWQgY2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0Vu
ZE9mTGluZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25T
dGF0ZSkgb3ZlcnJpZGU7CisgICAgdm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0
ZSkgb3ZlcnJpZGU7CiAKICAgICBMYXlvdXRVbml0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUs
IExpbmVEaXJlY3Rpb25Nb2RlLCBMaW5lUG9zaXRpb25Nb2RlKSBjb25zdCBvdmVycmlkZTsKICAg
ICBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUsIGJvb2wgZmlyc3RMaW5lLCBMaW5l
RGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAKaW5kZXggY2UwMTliYWEz
YmQ1NWExNmVlMjRmYWVlNmU5NzY2MjZiY2JlYWVkNC4uNmNiNjI4MDZkNGVmMWMwOWY1NTljNWY5
NmZmMjgwYTM2N2M5NmIwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RNYXJrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0TWFya2VyLmNwcApAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2Vy
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zm
c2UKICAgICBpZiAoaXNJbWFnZSgpKSB7CiAgICAgICAgIGlmIChSZWZQdHI8SW1hZ2U+IG1hcmtl
ckltYWdlID0gbV9pbWFnZS0+aW1hZ2UodGhpcywgbWFya2VyUmVjdC5zaXplKCkpKQogICAgICAg
ICAgICAgY29udGV4dC5kcmF3SW1hZ2UoKm1hcmtlckltYWdlLCBtYXJrZXJSZWN0KTsKLSAgICAg
ICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gU2VsZWN0aW9uTm9uZSkgeworICAgICAgICBpZiAo
c2VsZWN0aW9uU3RhdGUoKSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSkgewogICAgICAgICAgICAg
TGF5b3V0UmVjdCBzZWxSZWN0ID0gbG9jYWxTZWxlY3Rpb25SZWN0KCk7CiAgICAgICAgICAgICBz
ZWxSZWN0Lm1vdmVCeShib3hPcmlnaW4pOwogICAgICAgICAgICAgY29udGV4dC5maWxsUmVjdChz
bmFwcGVkSW50UmVjdChzZWxSZWN0KSwgbV9saXN0SXRlbS0+c2VsZWN0aW9uQmFja2dyb3VuZENv
bG9yKCkpOwpAQCAtMTE1NSw3ICsxMTU1LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWlu
dChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2UKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9IFNlbGVj
dGlvbk5vbmUpIHsKKyAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBIaWdobGlnaHRTdGF0ZTo6
Tm9uZSkgewogICAgICAgICBMYXlvdXRSZWN0IHNlbFJlY3QgPSBsb2NhbFNlbGVjdGlvblJlY3Qo
KTsKICAgICAgICAgc2VsUmVjdC5tb3ZlQnkoYm94T3JpZ2luKTsKICAgICAgICAgY29udGV4dC5m
aWxsUmVjdChzbmFwcGVkSW50UmVjdChzZWxSZWN0KSwgbV9saXN0SXRlbS0+c2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkpOwpAQCAtMTgzMywyMCArMTgzMywyMCBAQCBGbG9hdFJlY3QgUmVuZGVy
TGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXJrZXJSZWN0KCkKICAgICByZXR1cm4gcmVsYXRpdmVS
ZWN0OwogfQogCi12b2lkIFJlbmRlckxpc3RNYXJrZXI6OnNldFNlbGVjdGlvblN0YXRlKFNlbGVj
dGlvblN0YXRlIHN0YXRlKQordm9pZCBSZW5kZXJMaXN0TWFya2VyOjpzZXRTZWxlY3Rpb25TdGF0
ZShIaWdobGlnaHRTdGF0ZSBzdGF0ZSkKIHsKICAgICAvLyBUaGUgc2VsZWN0aW9uIHN0YXRlIGZv
ciBvdXIgY29udGFpbmluZyBibG9jayBoaWVyYXJjaHkgaXMgdXBkYXRlZCBieSB0aGUgYmFzZSBj
bGFzcyBjYWxsLgogICAgIFJlbmRlckJveDo6c2V0U2VsZWN0aW9uU3RhdGUoc3RhdGUpOwogCiAg
ICAgaWYgKG1faW5saW5lQm94V3JhcHBlciAmJiBjYW5VcGRhdGVTZWxlY3Rpb25PblJvb3RMaW5l
Qm94ZXMoKSkKLSAgICAgICAgbV9pbmxpbmVCb3hXcmFwcGVyLT5yb290KCkuc2V0SGFzU2VsZWN0
ZWRDaGlsZHJlbihzdGF0ZSAhPSBTZWxlY3Rpb25Ob25lKTsKKyAgICAgICAgbV9pbmxpbmVCb3hX
cmFwcGVyLT5yb290KCkuc2V0SGFzU2VsZWN0ZWRDaGlsZHJlbihzdGF0ZSAhPSBIaWdobGlnaHRT
dGF0ZTo6Tm9uZSk7CiB9CiAKIExheW91dFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6c2VsZWN0aW9u
UmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRh
aW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCkKIHsKICAgICBBU1NFUlQoIW5lZWRzTGF5
b3V0KCkpOwogCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSB8fCAh
aW5saW5lQm94V3JhcHBlcigpKQorICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IEhpZ2hsaWdo
dFN0YXRlOjpOb25lIHx8ICFpbmxpbmVCb3hXcmFwcGVyKCkpCiAgICAgICAgIHJldHVybiBMYXlv
dXRSZWN0KCk7CiAKICAgICBSb290SW5saW5lQm94JiByb290Qm94ID0gaW5saW5lQm94V3JhcHBl
cigpLT5yb290KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIu
aAppbmRleCAxNDMwNGFlNWQ4YTJiNTVhMTgzZjMyM2IxMzlhZDMzNzI1YTljZWUxLi42OTYxOGMx
NGQwMTY0OWY2MzA1ZDk4MDE0MmYxYWQ2MTVjZDhhYmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgKQEAgLTcyLDcgKzcyLDcgQEAgcHJpdmF0ZToKICAg
ICBib29sIGlzSW1hZ2UoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIGlzVGV4dCgpIGNvbnN0
IHsgcmV0dXJuICFpc0ltYWdlKCk7IH0KIAotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2Vs
ZWN0aW9uU3RhdGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxp
Z2h0U3RhdGUpIG92ZXJyaWRlOwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFp
bnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lciwgYm9vbCBj
bGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIG92ZXJyaWRlOwogICAgIGJvb2wgY2FuQmVTZWxl
Y3Rpb25MZWFmKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCmluZGV4IDk4Y2RkOGJlZmRiYTFiYTc4MmMw
M2U2YjI1MjFkY2E4MDc1ZmNkYWIuLjRjYWViN2MyNWZmOThjOGNjZDlkZWI1NDkyMTFjYTVjZjQw
NzUwNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCkBAIC0x
NDUwLDEwICsxNDUwLDEwIEBAIFJlbmRlckVsZW1lbnQqIFJlbmRlck9iamVjdDo6Y29udGFpbmVy
KGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmplY3QqIHJlcGFpbnRDb250CiAKIGJvb2wgUmVuZGVy
T2JqZWN0Ojppc1NlbGVjdGlvbkJvcmRlcigpIGNvbnN0CiB7Ci0gICAgU2VsZWN0aW9uU3RhdGUg
c3QgPSBzZWxlY3Rpb25TdGF0ZSgpOwotICAgIHJldHVybiBzdCA9PSBTZWxlY3Rpb25TdGFydAot
ICAgICAgICB8fCBzdCA9PSBTZWxlY3Rpb25FbmQKLSAgICAgICAgfHwgc3QgPT0gU2VsZWN0aW9u
Qm90aAorICAgIEhpZ2hsaWdodFN0YXRlIHN0ID0gc2VsZWN0aW9uU3RhdGUoKTsKKyAgICByZXR1
cm4gc3QgPT0gSGlnaGxpZ2h0U3RhdGU6OlN0YXJ0CisgICAgICAgIHx8IHN0ID09IEhpZ2hsaWdo
dFN0YXRlOjpFbmQKKyAgICAgICAgfHwgc3QgPT0gSGlnaGxpZ2h0U3RhdGU6OkJvdGgKICAgICAg
ICAgfHwgdmlldygpLnNlbGVjdGlvbigpLnN0YXJ0KCkgPT0gdGhpcwogICAgICAgICB8fCB2aWV3
KCkuc2VsZWN0aW9uKCkuZW5kKCkgPT0gdGhpczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAppbmRleCBmNWQ2OWU5M2I0ODVlYmMyNDI2OTIyYzFkOTRlMjYxOGM5NDgx
ZjMzLi4yOGZhMmNhODBlZjVjNzQwNDI2ZjFiMTk4MmVhODAzNTk5NjNhNDkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC02NCw3ICs2NCw3IEBAIGNsYXNzIFJl
bmRlckxheWVyTW9kZWxPYmplY3Q7CiBjbGFzcyBSZW5kZXJGcmFnbWVudENvbnRhaW5lcjsKIGNs
YXNzIFJlbmRlclRoZW1lOwogY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXI7Ci1jbGFzcyBTZWxlY3Rp
b25SYW5nZURhdGE7CitjbGFzcyBIaWdobGlnaHREYXRhOwogY2xhc3MgVHJhbnNmb3JtU3RhdGU7
CiBjbGFzcyBWaXNpYmxlUG9zaXRpb247CiAKQEAgLTY5MywxOSArNjkzLDE5IEBAIHB1YmxpYzoK
IAogICAgIGJvb2wgaXNGbG9hdGluZ09yT3V0T2ZGbG93UG9zaXRpb25lZCgpIGNvbnN0IHsgcmV0
dXJuIChpc0Zsb2F0aW5nKCkgfHwgaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpOyB9CiAKLSAgICBl
bnVtIFNlbGVjdGlvblN0YXRlIHsKLSAgICAgICAgU2VsZWN0aW9uTm9uZSwgLy8gVGhlIG9iamVj
dCBpcyBub3Qgc2VsZWN0ZWQuCi0gICAgICAgIFNlbGVjdGlvblN0YXJ0LCAvLyBUaGUgb2JqZWN0
IGVpdGhlciBjb250YWlucyB0aGUgc3RhcnQgb2YgYSBzZWxlY3Rpb24gcnVuIG9yIGlzIHRoZSBz
dGFydCBvZiBhIHJ1bgotICAgICAgICBTZWxlY3Rpb25JbnNpZGUsIC8vIFRoZSBvYmplY3QgaXMg
ZnVsbHkgZW5jb21wYXNzZWQgYnkgYSBzZWxlY3Rpb24gcnVuCi0gICAgICAgIFNlbGVjdGlvbkVu
ZCwgLy8gVGhlIG9iamVjdCBlaXRoZXIgY29udGFpbnMgdGhlIGVuZCBvZiBhIHNlbGVjdGlvbiBy
dW4gb3IgaXMgdGhlIGVuZCBvZiBhIHJ1bgotICAgICAgICBTZWxlY3Rpb25Cb3RoIC8vIFRoZSBv
YmplY3QgY29udGFpbnMgYW4gZW50aXJlIHJ1biBvciBpcyB0aGUgc29sZSBzZWxlY3RlZCBvYmpl
Y3QgaW4gdGhhdCBydW4KKyAgICBlbnVtIEhpZ2hsaWdodFN0YXRlIHsKKyAgICAgICAgTm9uZSwg
Ly8gVGhlIG9iamVjdCBpcyBub3Qgc2VsZWN0ZWQuCisgICAgICAgIFN0YXJ0LCAvLyBUaGUgb2Jq
ZWN0IGVpdGhlciBjb250YWlucyB0aGUgc3RhcnQgb2YgYSBzZWxlY3Rpb24gcnVuIG9yIGlzIHRo
ZSBzdGFydCBvZiBhIHJ1bgorICAgICAgICBJbnNpZGUsIC8vIFRoZSBvYmplY3QgaXMgZnVsbHkg
ZW5jb21wYXNzZWQgYnkgYSBzZWxlY3Rpb24gcnVuCisgICAgICAgIEVuZCwgLy8gVGhlIG9iamVj
dCBlaXRoZXIgY29udGFpbnMgdGhlIGVuZCBvZiBhIHNlbGVjdGlvbiBydW4gb3IgaXMgdGhlIGVu
ZCBvZiBhIHJ1bgorICAgICAgICBCb3RoIC8vIFRoZSBvYmplY3QgY29udGFpbnMgYW4gZW50aXJl
IHJ1biBvciBpcyB0aGUgc29sZSBzZWxlY3RlZCBvYmplY3QgaW4gdGhhdCBydW4KICAgICB9Owog
CiAgICAgLy8gVGhlIGN1cnJlbnQgc2VsZWN0aW9uIHN0YXRlIGZvciBhbiBvYmplY3QuICBGb3Ig
YmxvY2tzLCB0aGUgc3RhdGUgcmVmZXJzIHRvIHRoZSBzdGF0ZSBvZiB0aGUgbGVhZgotICAgIC8v
IGRlc2NlbmRhbnRzIChhcyBkZXNjcmliZWQgYWJvdmUgaW4gdGhlIFNlbGVjdGlvblN0YXRlIGVu
dW0gZGVjbGFyYXRpb24pLgotICAgIFNlbGVjdGlvblN0YXRlIHNlbGVjdGlvblN0YXRlKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuc2VsZWN0aW9uU3RhdGUoKTsgfQotICAgIHZpcnR1YWwg
dm9pZCBzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkgeyBtX2JpdGZpZWxk
cy5zZXRTZWxlY3Rpb25TdGF0ZShzdGF0ZSk7IH0KLSAgICBpbmxpbmUgdm9pZCBzZXRTZWxlY3Rp
b25TdGF0ZUlmTmVlZGVkKFNlbGVjdGlvblN0YXRlKTsKKyAgICAvLyBkZXNjZW5kYW50cyAoYXMg
ZGVzY3JpYmVkIGFib3ZlIGluIHRoZSBIaWdobGlnaHRTdGF0ZSBlbnVtIGRlY2xhcmF0aW9uKS4K
KyAgICBIaWdobGlnaHRTdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYml0
ZmllbGRzLnNlbGVjdGlvblN0YXRlKCk7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0aW9u
U3RhdGUoSGlnaGxpZ2h0U3RhdGUgc3RhdGUpIHsgbV9iaXRmaWVsZHMuc2V0U2VsZWN0aW9uU3Rh
dGUoc3RhdGUpOyB9CisgICAgaW5saW5lIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGVJZk5lZWRlZChI
aWdobGlnaHRTdGF0ZSk7CiAgICAgYm9vbCBjYW5VcGRhdGVTZWxlY3Rpb25PblJvb3RMaW5lQm94
ZXMoKTsKIAogICAgIC8vIEEgc2luZ2xlIHJlY3RhbmdsZSB0aGF0IGVuY29tcGFzc2VzIGFsbCBv
ZiB0aGUgc2VsZWN0ZWQgb2JqZWN0cyB3aXRoaW4gdGhpcyBvYmplY3QuICBVc2VkIHRvIGRldGVy
bWluZSB0aGUgdGlnaHRlc3QKQEAgLTg5NSw3ICs4OTUsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgLCBtX2NoaWxkcmVuSW5saW5lKGZhbHNlKQogICAgICAgICAgICAgLCBtX2lzRXhjbHVkZWRG
cm9tTm9ybWFsTGF5b3V0KGZhbHNlKQogICAgICAgICAgICAgLCBtX3Bvc2l0aW9uZWRTdGF0ZShJ
c1N0YXRpY2FsbHlQb3NpdGlvbmVkKQotICAgICAgICAgICAgLCBtX3NlbGVjdGlvblN0YXRlKFNl
bGVjdGlvbk5vbmUpCisgICAgICAgICAgICAsIG1fc2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3Rh
dGU6Ok5vbmUpCiAgICAgICAgICAgICAsIG1fZnJhZ21lbnRlZEZsb3dTdGF0ZShOb3RJbnNpZGVG
cmFnbWVudGVkRmxvdykKICAgICAgICAgICAgICwgbV9ib3hEZWNvcmF0aW9uU3RhdGUoTm9Cb3hE
ZWNvcmF0aW9ucykKICAgICAgICAgewpAQCAtOTUxLDggKzk1MSw4IEBAIHByaXZhdGU6CiAgICAg
ICAgIH0KICAgICAgICAgdm9pZCBjbGVhclBvc2l0aW9uZWRTdGF0ZSgpIHsgbV9wb3NpdGlvbmVk
U3RhdGUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oUG9zaXRpb25UeXBlOjpTdGF0aWMpOyB9CiAK
LSAgICAgICAgQUxXQVlTX0lOTElORSBTZWxlY3Rpb25TdGF0ZSBzZWxlY3Rpb25TdGF0ZSgpIGNv
bnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFNlbGVjdGlvblN0YXRlPihtX3NlbGVjdGlvblN0YXRl
KTsgfQotICAgICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0
aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUpIHsgbV9zZWxlY3Rpb25TdGF0ZSA9IHNlbGVjdGlvblN0
YXRlOyB9CisgICAgICAgIEFMV0FZU19JTkxJTkUgSGlnaGxpZ2h0U3RhdGUgc2VsZWN0aW9uU3Rh
dGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxIaWdobGlnaHRTdGF0ZT4obV9zZWxlY3Rp
b25TdGF0ZSk7IH0KKyAgICAgICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFNlbGVjdGlvblN0YXRl
KEhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKSB7IG1fc2VsZWN0aW9uU3RhdGUgPSBzZWxl
Y3Rpb25TdGF0ZTsgfQogICAgICAgICAKICAgICAgICAgQUxXQVlTX0lOTElORSBGcmFnbWVudGVk
Rmxvd1N0YXRlIGZyYWdtZW50ZWRGbG93U3RhdGUoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2Fz
dDxGcmFnbWVudGVkRmxvd1N0YXRlPihtX2ZyYWdtZW50ZWRGbG93U3RhdGUpOyB9CiAgICAgICAg
IEFMV0FZU19JTkxJTkUgdm9pZCBzZXRGcmFnbWVudGVkRmxvd1N0YXRlKEZyYWdtZW50ZWRGbG93
U3RhdGUgZnJhZ21lbnRlZEZsb3dTdGF0ZSkgeyBtX2ZyYWdtZW50ZWRGbG93U3RhdGUgPSBmcmFn
bWVudGVkRmxvd1N0YXRlOyB9CkBAIC0xMDY3LDcgKzEwNjcsNyBAQCBpbmxpbmUgYm9vbCBSZW5k
ZXJPYmplY3Q6OnByZXNlcnZlc05ld2xpbmUoKSBjb25zdAogICAgIHJldHVybiBzdHlsZSgpLnBy
ZXNlcnZlTmV3bGluZSgpOwogfQogCi1pbmxpbmUgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFNlbGVj
dGlvblN0YXRlSWZOZWVkZWQoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCitpbmxpbmUgdm9pZCBSZW5k
ZXJPYmplY3Q6OnNldFNlbGVjdGlvblN0YXRlSWZOZWVkZWQoSGlnaGxpZ2h0U3RhdGUgc3RhdGUp
CiB7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gc3RhdGUpCiAgICAgICAgIHJldHVybjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCmluZGV4IGY0NzE5
MDBhMjc1MDZlOTNmZmE0ZDcwMWY2Y2U1N2ExN2NiMzFkZTYuLjA3ZGMyMjA0NzA4ZWM3MjE5YjAw
M2IwNWIwZTIxMTMwM2U1N2QxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJSZXBsYWNlZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clJlcGxhY2VkLmNwcApAQCAtMTM2LDcgKzEzNiw3IEBAIHZvaWQgUmVuZGVyUmVwbGFjZWQ6Omlu
dHJpbnNpY1NpemVDaGFuZ2VkKCkKIAogYm9vbCBSZW5kZXJSZXBsYWNlZDo6c2hvdWxkRHJhd1Nl
bGVjdGlvblRpbnQoKSBjb25zdAogewotICAgIHJldHVybiBzZWxlY3Rpb25TdGF0ZSgpICE9IFNl
bGVjdGlvbk5vbmUgJiYgIWRvY3VtZW50KCkucHJpbnRpbmcoKTsKKyAgICByZXR1cm4gc2VsZWN0
aW9uU3RhdGUoKSAhPSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSAmJiAhZG9jdW1lbnQoKS5wcmludGlu
ZygpOwogfQogCiBpbmxpbmUgc3RhdGljIGJvb2wgZHJhZ2dlZENvbnRlbnRDb250YWluc1JlcGxh
Y2VkRWxlbWVudChjb25zdCBWZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+JiBtYXJrZXJz
LCBjb25zdCBFbGVtZW50JiBlbGVtZW50KQpAQCAtMjA2LDcgKzIwNiw3IEBAIHZvaWQgUmVuZGVy
UmVwbGFjZWQ6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYg
cGFpbnRPZmZzZXQpCiAgICAgCiAgICAgYm9vbCBkcmF3U2VsZWN0aW9uVGludCA9IHNob3VsZERy
YXdTZWxlY3Rpb25UaW50KCk7CiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9PSBQYWludFBoYXNl
OjpTZWxlY3Rpb24pIHsKLSAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9u
Tm9uZSkKKyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gSGlnaGxpZ2h0U3RhdGU6Ok5v
bmUpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGRyYXdTZWxlY3Rpb25UaW50ID0gZmFs
c2U7CiAgICAgfQpAQCAtNjcwLDcgKzY3MCw3IEBAIExheW91dFJlY3QgUmVuZGVyUmVwbGFjZWQ6
OmxvY2FsU2VsZWN0aW9uUmVjdChib29sIGNoZWNrV2hldGhlclNlbGVjdGVkKSBjb25zdAogICAg
IHJldHVybiBMYXlvdXRSZWN0KG5ld0xvZ2ljYWxUb3AsIDBfbHUsIHJvb3RCb3guc2VsZWN0aW9u
SGVpZ2h0KCksIGhlaWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJSZXBsYWNlZDo6c2V0U2VsZWN0
aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCit2b2lkIFJlbmRlclJlcGxhY2VkOjpzZXRT
ZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSBzdGF0ZSkKIHsKICAgICAvLyBUaGUgc2VsZWN0
aW9uIHN0YXRlIGZvciBvdXIgY29udGFpbmluZyBibG9jayBoaWVyYXJjaHkgaXMgdXBkYXRlZCBi
eSB0aGUgYmFzZSBjbGFzcyBjYWxsLgogICAgIFJlbmRlckJveDo6c2V0U2VsZWN0aW9uU3RhdGUo
c3RhdGUpOwpAQCAtNjgxLDIxICs2ODEsMjEgQEAgdm9pZCBSZW5kZXJSZXBsYWNlZDo6c2V0U2Vs
ZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUgc3RhdGUpCiAKIGJvb2wgUmVuZGVyUmVwbGFjZWQ6
OmlzU2VsZWN0ZWQoKSBjb25zdAogewotICAgIFNlbGVjdGlvblN0YXRlIHN0YXRlID0gc2VsZWN0
aW9uU3RhdGUoKTsKLSAgICBpZiAoc3RhdGUgPT0gU2VsZWN0aW9uTm9uZSkKKyAgICBIaWdobGln
aHRTdGF0ZSBzdGF0ZSA9IHNlbGVjdGlvblN0YXRlKCk7CisgICAgaWYgKHN0YXRlID09IEhpZ2hs
aWdodFN0YXRlOjpOb25lKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKHN0YXRlID09
IFNlbGVjdGlvbkluc2lkZSkKKyAgICBpZiAoc3RhdGUgPT0gSGlnaGxpZ2h0U3RhdGU6Okluc2lk
ZSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gdmll
dygpLnNlbGVjdGlvbigpLnN0YXJ0T2Zmc2V0KCk7CiAgICAgYXV0byBzZWxlY3Rpb25FbmQgPSB2
aWV3KCkuc2VsZWN0aW9uKCkuZW5kT2Zmc2V0KCk7Ci0gICAgaWYgKHN0YXRlID09IFNlbGVjdGlv
blN0YXJ0KQorICAgIGlmIChzdGF0ZSA9PSBIaWdobGlnaHRTdGF0ZTo6U3RhcnQpCiAgICAgICAg
IHJldHVybiAhc2VsZWN0aW9uU3RhcnQ7CiAKICAgICB1bnNpZ25lZCBlbmQgPSBlbGVtZW50KCkt
Pmhhc0NoaWxkTm9kZXMoKSA/IGVsZW1lbnQoKS0+Y291bnRDaGlsZE5vZGVzKCkgOiAxOwotICAg
IGlmIChzdGF0ZSA9PSBTZWxlY3Rpb25FbmQpCisgICAgaWYgKHN0YXRlID09IEhpZ2hsaWdodFN0
YXRlOjpFbmQpCiAgICAgICAgIHJldHVybiBzZWxlY3Rpb25FbmQgPT0gZW5kOwotICAgIGlmIChz
dGF0ZSA9PSBTZWxlY3Rpb25Cb3RoKQorICAgIGlmIChzdGF0ZSA9PSBIaWdobGlnaHRTdGF0ZTo6
Qm90aCkKICAgICAgICAgcmV0dXJuICFzZWxlY3Rpb25TdGFydCAmJiBzZWxlY3Rpb25FbmQgPT0g
ZW5kOwogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBmYWxzZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKaW5kZXggMmNmMGI4N2UxY2ZjM2Ji
Nzk2MTdmODE5NTc5OTg1NzI1YjE4NDZlMC4uZmM0YzMzMjEwNTU5NmU0N2MzYWYyMmJiYjQ5MDc3
YjM2YjNmOGZjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJl
cGxhY2VkLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgK
QEAgLTU1LDcgKzU1LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCBMYXlvdXRVbml0IG1p
bmltdW1SZXBsYWNlZEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIDBfbHU7IH0KIAotICAgIHZvaWQg
c2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0
U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc1Nl
bGVjdGVkKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJTZWxlY3Rpb25JbmZvLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU2Vs
ZWN0aW9uSW5mby5oCmluZGV4IGM4OGRmNWM5NmQ2YzMzMjBjMDFhZDQzYzM1MTg5NjAxOWFhN2Yx
ODcuLjUzNmYwZTc5NTFjMjNkYzJhMWQzYTFiMTFjYjlhODM2YjIyYzM3NmYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTZWxlY3Rpb25JbmZvLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNlbGVjdGlvbkluZm8uaApAQCAtMzUsNyArMzUs
NyBAQCBjbGFzcyBSZW5kZXJTZWxlY3Rpb25JbmZvQmFzZSB7CiBwdWJsaWM6CiAgICAgZXhwbGlj
aXQgUmVuZGVyU2VsZWN0aW9uSW5mb0Jhc2UoUmVuZGVyT2JqZWN0JiByZW5kZXJlcik7CiAgICAg
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcigpIGNvbnN0IHsgcmV0dXJu
IG1fcmVwYWludENvbnRhaW5lcjsgfQotICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUg
c3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisgICAgUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KIAogcHJvdGVjdGVk
OgogICAgIHZvaWQgcmVwYWludFJlY3RhbmdsZShjb25zdCBMYXlvdXRSZWN0JiByZXBhaW50UmVj
dCk7CkBAIC00NCw3ICs0NCw3IEBAIHByb3RlY3RlZDoKICAgICBSZW5kZXJMYXllck1vZGVsT2Jq
ZWN0KiBtX3JlcGFpbnRDb250YWluZXI7CiAKIHByaXZhdGU6Ci0gICAgUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSBtX3N0YXRlOworICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUg
bV9zdGF0ZTsKIH07CiAKIC8vIFRoaXMgc3RydWN0IGlzIHVzZWQgd2hlbiB0aGUgc2VsZWN0aW9u
IGNoYW5nZXMgdG8gY2FjaGUgdGhlIG9sZCBhbmQgbmV3IHN0YXRlIG9mIHRoZSBzZWxlY3Rpb24g
Zm9yIGVhY2ggUmVuZGVyT2JqZWN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQu
Y3BwCmluZGV4IDQ0ODkwOTBjZTBmN2ZlZWUwYTdkNmU0NDkwNzQ1NTYzNzMwMDhkODYuLjQyNmVj
YTQxNjMyN2UzOWYzMWI5ZjQ0MDlhNjM0NmQwYWZhYTVlMTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTEwOTIsOSArMTA5Miw5IEBAIEludFBvaW50IFJlbmRl
clRleHQ6OmZpcnN0UnVuTG9jYXRpb24oKSBjb25zdAogICAgIHJldHVybiBJbnRQb2ludChmaXJz
dC0+cmVjdCgpLmxvY2F0aW9uKCkpOwogfQogCi12b2lkIFJlbmRlclRleHQ6OnNldFNlbGVjdGlv
blN0YXRlKFNlbGVjdGlvblN0YXRlIHN0YXRlKQordm9pZCBSZW5kZXJUZXh0OjpzZXRTZWxlY3Rp
b25TdGF0ZShIaWdobGlnaHRTdGF0ZSBzdGF0ZSkKIHsKLSAgICBpZiAoc3RhdGUgIT0gU2VsZWN0
aW9uTm9uZSkKKyAgICBpZiAoc3RhdGUgIT0gSGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCiAgICAgICAg
IGVuc3VyZUxpbmVCb3hlcygpOwogCiAgICAgUmVuZGVyT2JqZWN0OjpzZXRTZWxlY3Rpb25TdGF0
ZShzdGF0ZSk7CkBAIC0xNDQ2LDcgKzE0NDYsNyBAQCBMYXlvdXRSZWN0IFJlbmRlclRleHQ6OmNv
bGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJMYXllck1vZGVsTwog
ICAgIEFTU0VSVCghbmVlZHNMYXlvdXQoKSk7CiAgICAgQVNTRVJUKCFzaW1wbGVMaW5lTGF5b3V0
KCkpOwogCi0gICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgPT0gU2VsZWN0aW9uTm9uZSkKKyAgICBp
ZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRTdGF0ZTo6Tm9uZSkKICAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKICAgICBpZiAoIWNvbnRhaW5pbmdCbG9jaygpKQogICAgICAgICBy
ZXR1cm4gTGF5b3V0UmVjdCgpOwpAQCAtMTQ1NSwxNiArMTQ1NSwxNiBAQCBMYXlvdXRSZWN0IFJl
bmRlclRleHQ6OmNvbGxlY3RTZWxlY3Rpb25SZWN0c0ZvckxpbmVCb3hlcyhjb25zdCBSZW5kZXJM
YXllck1vZGVsTwogICAgIC8vIFdlIGluY2x1ZGUgYSBzZWxlY3Rpb24gd2hpbGUgZW5kUG9zID4g
MAogICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0OwogICAgIHVuc2lnbmVkIGVuZE9mZnNldDsKLSAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25JbnNpZGUpIHsKKyAgICBpZiAoc2Vs
ZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRTdGF0ZTo6SW5zaWRlKSB7CiAgICAgICAgIC8vIFdl
IGFyZSBmdWxseSBzZWxlY3RlZC4KICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgICAgICBl
bmRPZmZzZXQgPSB0ZXh0KCkubGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RhcnRP
ZmZzZXQgPSB2aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnRPZmZzZXQoKTsKICAgICAgICAgZW5kT2Zm
c2V0ID0gdmlldygpLnNlbGVjdGlvbigpLmVuZE9mZnNldCgpOwotICAgICAgICBpZiAoc2VsZWN0
aW9uU3RhdGUoKSA9PSBTZWxlY3Rpb25TdGFydCkKKyAgICAgICAgaWYgKHNlbGVjdGlvblN0YXRl
KCkgPT0gSGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KQogICAgICAgICAgICAgZW5kT2Zmc2V0ID0gdGV4
dCgpLmxlbmd0aCgpOwotICAgICAgICBlbHNlIGlmIChzZWxlY3Rpb25TdGF0ZSgpID09IFNlbGVj
dGlvbkVuZCkKKyAgICAgICAgZWxzZSBpZiAoc2VsZWN0aW9uU3RhdGUoKSA9PSBIaWdobGlnaHRT
dGF0ZTo6RW5kKQogICAgICAgICAgICAgc3RhcnRPZmZzZXQgPSAwOwogICAgIH0KIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggN2M3YTFkNzZjZjIxZjc2NmIxM2VmNTNl
ZjYwZTAxNWNlMmU5MmUwMS4uYjA4MDcyNGQ3ODFmMzdhOTZhMTQ1ODE2ZjNlZjA1YmIyYTlhMDJl
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC0yMDcsNyArMjA3LDcg
QEAgcHJpdmF0ZToKIAogICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBvaW50KGNvbnN0
IExheW91dFBvaW50JiwgY29uc3QgUmVuZGVyRnJhZ21lbnRDb250YWluZXIqKSBvdmVycmlkZTsK
IAotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIGZpbmFsOworICAg
IHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIGZpbmFsOwogICAgIExheW91
dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJlcGFpbnQoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dCogcmVwYWludENvbnRhaW5lciwgYm9vbCBjbGlwVG9WaXNpYmxlQ29udGVudCA9IHRydWUpIGZp
bmFsOwogICAgIExheW91dFJlY3QgbG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiwgdW5zaWduZWQg
Y2FyZXRPZmZzZXQsIExheW91dFVuaXQqIGV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IG51bGxwdHIp
IG92ZXJyaWRlOwogICAgIExheW91dFJlY3QgY2xpcHBlZE92ZXJmbG93UmVjdEZvclJlcGFpbnQo
Y29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCogcmVwYWludENvbnRhaW5lcikgY29uc3QgZmlu
YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVC
b3hlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5j
cHAKaW5kZXggMjA0ZGQ2NDhmODg4ZDM2M2QwZjNiMmU2N2Q5ZjM2NWRiYjJmOGQ4YS4uNWVlNTU5
YzI1MjE1MTRjZmVkMjZiMzE2MWJmNDQzNmI1YTRjM2M2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRMaW5lQm94ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmNwcApAQCAtMzQyLDIyICszNDIsMjIg
QEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlclRleHRMaW5lQm94ZXM6OnBvc2l0aW9uRm9yUG9pbnQo
Y29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZXIKICAgICByZXR1cm4gcmVuZGVyZXIuY3JlYXRlVmlz
aWJsZVBvc2l0aW9uKDAsIERPV05TVFJFQU0pOwogfQogCi12b2lkIFJlbmRlclRleHRMaW5lQm94
ZXM6OnNldFNlbGVjdGlvblN0YXRlKFJlbmRlclRleHQmIHJlbmRlcmVyLCBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvblN0YXRlIHN0YXRlKQordm9pZCBSZW5kZXJUZXh0TGluZUJveGVzOjpzZXRTZWxl
Y3Rpb25TdGF0ZShSZW5kZXJUZXh0JiByZW5kZXJlciwgUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRT
dGF0ZSBzdGF0ZSkKIHsKLSAgICBpZiAoc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25J
bnNpZGUgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CisgICAgaWYg
KHN0YXRlID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Okluc2lkZSB8fCBzdGF0ZSA9
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lKSB7CiAgICAgICAgIGZvciAoYXV0
byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpCi0gICAgICAg
ICAgICBib3gtPnJvb3QoKS5zZXRIYXNTZWxlY3RlZENoaWxkcmVuKHN0YXRlID09IFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uSW5zaWRlKTsKKyAgICAgICAgICAgIGJveC0+cm9vdCgpLnNldEhhc1Nl
bGVjdGVkQ2hpbGRyZW4oc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6SW5z
aWRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8gc3RhcnQgPSByZW5kZXJl
ci52aWV3KCkuc2VsZWN0aW9uKCkuc3RhcnRPZmZzZXQoKTsKICAgICBhdXRvIGVuZCA9IHJlbmRl
cmVyLnZpZXcoKS5zZWxlY3Rpb24oKS5lbmRPZmZzZXQoKTsKLSAgICBpZiAoc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCkgeworICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCkgewogICAgICAgICBlbmQgPSByZW5kZXJlci50ZXh0
KCkubGVuZ3RoKCk7CiAgICAgICAgIC8vIHRvIGhhbmRsZSBzZWxlY3Rpb24gZnJvbSBlbmQgb2Yg
dGV4dCB0byBlbmQgb2YgbGluZQogICAgICAgICBpZiAoc3RhcnQgJiYgc3RhcnQgPT0gZW5kKQog
ICAgICAgICAgICAgc3RhcnQgPSBlbmQgLSAxOwotICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25FbmQpCisgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQpCiAgICAgICAgIHN0YXJ0ID0gMDsKIAogICAgIGZv
ciAoYXV0byogYm94ID0gbV9maXJzdDsgYm94OyBib3ggPSBib3gtPm5leHRUZXh0Qm94KCkpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVz
LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dExpbmVCb3hlcy5oCmluZGV4
IGU5YTY2MDU0OWQxOGUzZTdjNjM1MjBjMTVjZTIzMzE1YjVmOGU2MWEuLjJlYjVkZDM2MGE3NDBk
ZjNkYzVlOTdiNzc5MWQ1MmU2NzlkMTgzYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0TGluZUJveGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRMaW5lQm94ZXMuaApAQCAtNTgsNyArNTgsNyBAQCBwdWJsaWM6CiAKICAg
ICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludChjb25zdCBSZW5kZXJUZXh0JiwgY29u
c3QgTGF5b3V0UG9pbnQmKSBjb25zdDsKIAotICAgIHZvaWQgc2V0U2VsZWN0aW9uU3RhdGUoUmVu
ZGVyVGV4dCYsIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUpOworICAgIHZvaWQgc2V0U2Vs
ZWN0aW9uU3RhdGUoUmVuZGVyVGV4dCYsIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUpOwog
ICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdEZvclJhbmdlKHVuc2lnbmVkIHN0YXJ0LCB1bnNp
Z25lZCBlbmQpOwogICAgIHZvaWQgY29sbGVjdFNlbGVjdGlvblJlY3RzRm9yUmFuZ2UodW5zaWdu
ZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwgVmVjdG9yPExheW91dFJlY3Q+JiByZWN0cyk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbSBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQppbmRleCBjZDhhZjZlMmE3
ODVmMDE2OTI0N2IwZDFmMmNhYTc3YzkzYzYxNDBmLi5hMGUxNzc3NjJiOGRlOTA4NTQzNTRjMDdk
NjAyMWUwNjU0MmIwOGM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCkBAIC0yOTA3LDcgKzI5MDcsNyBAQCBib29sIFJlbmRlclRoZW1lTWFjOjpwYWludEF0
dGFjaG1lbnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgY29uc3QgUGFpbnRJbgogICAg
IGNvbnN0IFJlbmRlckF0dGFjaG1lbnQmIGF0dGFjaG1lbnQgPSBkb3duY2FzdDxSZW5kZXJBdHRh
Y2htZW50PihyZW5kZXJlcik7CiAKICAgICBhdXRvIGxheW91dFN0eWxlID0gQXR0YWNobWVudExh
eW91dFN0eWxlOjpOb25TZWxlY3RlZDsKLSAgICBpZiAoYXR0YWNobWVudC5zZWxlY3Rpb25TdGF0
ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSAmJiBwYWludEluZm8ucGhhc2UgIT0g
UGFpbnRQaGFzZTo6U2VsZWN0aW9uKQorICAgIGlmIChhdHRhY2htZW50LnNlbGVjdGlvblN0YXRl
KCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZSAmJiBwYWludEluZm8ucGhh
c2UgIT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKQogICAgICAgICBsYXlvdXRTdHlsZSA9IEF0dGFj
aG1lbnRMYXlvdXRTdHlsZTo6U2VsZWN0ZWQ7CiAKICAgICBBdHRhY2htZW50TGF5b3V0IGxheW91
dChhdHRhY2htZW50LCBsYXlvdXRTdHlsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVmlldy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZp
ZXcuaAppbmRleCAxODQyYjMwZmEzMzRkMmZjNjZmOTk3MWFlNjEwNmMyZmVjNWRiOTJmLi4xZmI3
ZGZiZGQxYWU0NDYxN2NiYTVmMjdhYjBhYTUyOGNjYTEzOWVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVmlldy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJWaWV3LmgKQEAgLTIyLDEwICsyMiwxMCBAQAogI3ByYWdtYSBvbmNlCiAKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIaWdobGlnaHREYXRhLmgiCiAjaW5jbHVk
ZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVu
ZGVyV2lkZ2V0LmgiCi0jaW5jbHVkZSAiU2VsZWN0aW9uUmFuZ2VEYXRhLmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNo
U2V0Lmg+CkBAIC03OCw3ICs3OCw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm4gdGhlIHJlbmRl
cmVyIHdob3NlIGJhY2tncm91bmQgc3R5bGUgaXMgdXNlZCB0byBwYWludCB0aGUgcm9vdCBiYWNr
Z3JvdW5kLgogICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyRm9yUm9vdEJhY2tncm91bmQoKSBj
b25zdDsKIAotICAgIFNlbGVjdGlvblJhbmdlRGF0YSYgc2VsZWN0aW9uKCkgeyByZXR1cm4gbV9z
ZWxlY3Rpb247IH0KKyAgICBIaWdobGlnaHREYXRhJiBzZWxlY3Rpb24oKSB7IHJldHVybiBtX3Nl
bGVjdGlvbjsgfQogCiAgICAgYm9vbCBwcmludGluZygpIGNvbnN0OwogCkBAIC0yMjAsNyArMjIw
LDcgQEAgcHJpdmF0ZToKICAgICB1aW50NjRfdCBtX3JlbmRlcmVyQ291bnQgeyAxIH07CiAKICAg
ICBtdXRhYmxlIHN0ZDo6dW5pcXVlX3B0cjxSZWdpb24+IG1fYWNjdW11bGF0ZWRSZXBhaW50UmVn
aW9uOwotICAgIFNlbGVjdGlvblJhbmdlRGF0YSBtX3NlbGVjdGlvbjsKKyAgICBIaWdobGlnaHRE
YXRhIG1fc2VsZWN0aW9uOwogCiAgICAgV2Vha1B0cjxSZW5kZXJMYXllcj4gbV9zdHlsZUNoYW5n
ZUxheWVyTXV0YXRpb25Sb290OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRn
ZXQuY3BwCmluZGV4IDdkNzc1MzgyZTMzMjYxM2RjNmY2N2UyM2U4MmFlNmQ3MTU0YWY2MDUuLjNm
NmYzM2I3NTJiNWI4NjM3OTdjNGExYTgyMjc4NWQyYzM0ZDg1YWEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCkBAIC0zNDYsNyArMzQ2LDcgQEAgSW50UmVjdCBS
ZW5kZXJXaWRnZXQ6OndpbmRvd0NsaXBSZWN0KCkgY29uc3QKICAgICByZXR1cm4gaW50ZXJzZWN0
aW9uKHZpZXcoKS5mcmFtZVZpZXcoKS5jb250ZW50c1RvV2luZG93KG1fY2xpcFJlY3QpLCB2aWV3
KCkuZnJhbWVWaWV3KCkud2luZG93Q2xpcFJlY3QoKSk7CiB9CiAKLXZvaWQgUmVuZGVyV2lkZ2V0
OjpzZXRTZWxlY3Rpb25TdGF0ZShTZWxlY3Rpb25TdGF0ZSBzdGF0ZSkKK3ZvaWQgUmVuZGVyV2lk
Z2V0OjpzZXRTZWxlY3Rpb25TdGF0ZShIaWdobGlnaHRTdGF0ZSBzdGF0ZSkKIHsKICAgICAvLyBU
aGUgc2VsZWN0aW9uIHN0YXRlIGZvciBvdXIgY29udGFpbmluZyBibG9jayBoaWVyYXJjaHkgaXMg
dXBkYXRlZCBieSB0aGUgYmFzZSBjbGFzcyBjYWxsLgogICAgIFJlbmRlclJlcGxhY2VkOjpzZXRT
ZWxlY3Rpb25TdGF0ZShzdGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyV2lkZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmgKaW5kZXggOGFlM2QyYzY1YjJkNDRlNTI2MDBhMDJjN2E2M2Y3MzQ1NDlkMTk2Yy4uMzcwMDk2
ZmZkZDYyMDAyMTMxODc5MDljMmFkOTJjODcxNGY4ZWI1OSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlcldpZGdldC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJXaWRnZXQuaApAQCAtOTMsNyArOTMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bmVlZHNQcmVmZXJyZWRXaWR0aHNSZWNhbGN1bGF0aW9uKCkgY29uc3QgZmluYWw7CiAgICAgUmVu
ZGVyQm94KiBlbWJlZGRlZENvbnRlbnRCb3goKSBjb25zdCBmaW5hbDsKIAotICAgIHZvaWQgc2V0
U2VsZWN0aW9uU3RhdGUoU2VsZWN0aW9uU3RhdGUpIGZpbmFsOworICAgIHZvaWQgc2V0U2VsZWN0
aW9uU3RhdGUoSGlnaGxpZ2h0U3RhdGUpIGZpbmFsOwogICAgIHZvaWQgc2V0T3ZlcmxhcFRlc3RS
ZXN1bHQoYm9vbCkgZmluYWw7CiAKICAgICBib29sIHNldFdpZGdldEdlb21ldHJ5KGNvbnN0IExh
eW91dFJlY3QmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5s
aW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmNwcApp
bmRleCA3OGMxYTBlYTA0ZDk2Y2Q3OGI3MDkwOGVhOGFiYmRjMTgxOTg5NDE2Li4zNjQ5MjYzMzg1
NjlhMTFiZmVkMzc1OTIwMjg3OTM4NThlODU1OWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guY3BwCkBAIC00MjMsNyArNDIzLDcgQEAgTGF5b3V0VW5pdCBSb290
SW5saW5lQm94OjpsaW5lU25hcEFkanVzdG1lbnQoTGF5b3V0VW5pdCBkZWx0YSkgY29uc3QKIEdh
cFJlY3RzIFJvb3RJbmxpbmVCb3g6OmxpbmVTZWxlY3Rpb25HYXAoUmVuZGVyQmxvY2smIHJvb3RC
bG9jaywgY29uc3QgTGF5b3V0UG9pbnQmIHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGNvbnN0
IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2ssCiAgICAgTGF5b3V0VW5pdCBzZWxUb3As
IExheW91dFVuaXQgc2VsSGVpZ2h0LCBjb25zdCBMb2dpY2FsU2VsZWN0aW9uT2Zmc2V0Q2FjaGVz
JiBjYWNoZSwgY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8pCiB7Ci0gICAgUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25TdGF0ZSBsaW5lU3RhdGUgPSBzZWxlY3Rpb25TdGF0ZSgpOworICAgIFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgbGluZVN0YXRlID0gc2VsZWN0aW9uU3RhdGUoKTsKIAog
ICAgIGJvb2wgbGVmdEdhcCwgcmlnaHRHYXA7CiAgICAgYmxvY2tGbG93KCkuZ2V0U2VsZWN0aW9u
R2FwSW5mbyhsaW5lU3RhdGUsIGxlZnRHYXAsIHJpZ2h0R2FwKTsKQEAgLTQ1MSw5ICs0NTEsOSBA
QCBHYXBSZWN0cyBSb290SW5saW5lQm94OjpsaW5lU2VsZWN0aW9uR2FwKFJlbmRlckJsb2NrJiBy
b290QmxvY2ssIGNvbnN0IExheW91dFBvaQogICAgIGlmIChmaXJzdEJveCAmJiBmaXJzdEJveCAh
PSBsYXN0Qm94KSB7CiAgICAgICAgIC8vIE5vdyBmaWxsIGluIGFueSBnYXBzIG9uIHRoZSBsaW5l
IHRoYXQgb2NjdXJyZWQgYmV0d2VlbiB0d28gc2VsZWN0ZWQgZWxlbWVudHMuCiAgICAgICAgIExh
eW91dFVuaXQgbGFzdExvZ2ljYWxMZWZ0IHsgZmlyc3RCb3gtPmxvZ2ljYWxSaWdodCgpIH07Ci0g
ICAgICAgIGJvb2wgaXNQcmV2aW91c0JveFNlbGVjdGVkID0gZmlyc3RCb3gtPnNlbGVjdGlvblN0
YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lOworICAgICAgICBib29sIGlzUHJl
dmlvdXNCb3hTZWxlY3RlZCA9IGZpcnN0Qm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CiAgICAgICAgIGZvciAoSW5saW5lQm94KiBib3gg
PSBmaXJzdEJveC0+bmV4dExlYWZPbkxpbmUoKTsgYm94OyBib3ggPSBib3gtPm5leHRMZWFmT25M
aW5lKCkpIHsKLSAgICAgICAgICAgIGlmIChib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVy
T2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7CisgICAgICAgICAgICBpZiAoYm94LT5zZWxlY3Rpb25T
dGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpIHsKICAgICAgICAg
ICAgICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxSZWN0IHsgbGFzdExvZ2ljYWxMZWZ0LCBzZWxUb3As
IExheW91dFVuaXQoYm94LT5sb2dpY2FsTGVmdCgpIC0gbGFzdExvZ2ljYWxMZWZ0KSwgc2VsSGVp
Z2h0IH07CiAgICAgICAgICAgICAgICAgbG9naWNhbFJlY3QubW92ZShyZW5kZXJlcigpLmlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXRGcm9tUm9vdEJsb2NrIDogTGF5b3V0U2l6ZShv
ZmZzZXRGcm9tUm9vdEJsb2NrLmhlaWdodCgpLCBvZmZzZXRGcm9tUm9vdEJsb2NrLndpZHRoKCkp
KTsKICAgICAgICAgICAgICAgICBMYXlvdXRSZWN0IGdhcFJlY3QgPSByb290QmxvY2subG9naWNh
bFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBsb2dpY2FsUmVj
dCk7CkBAIC00NjcsNyArNDY3LDcgQEAgR2FwUmVjdHMgUm9vdElubGluZUJveDo6bGluZVNlbGVj
dGlvbkdhcChSZW5kZXJCbG9jayYgcm9vdEJsb2NrLCBjb25zdCBMYXlvdXRQb2kKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChib3ggPT0gbGFzdEJveCkKICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGlzUHJldmlvdXNCb3hTZWxlY3RlZCA9IGJveC0+c2VsZWN0aW9u
U3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAgICAgICAgICBpc1By
ZXZpb3VzQm94U2VsZWN0ZWQgPSBib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZTo6Tm9uZTsKICAgICAgICAgfQogICAgIH0KIApAQCAtNTI3LDI0ICs1
MjcsMjMgQEAgSW50UmVjdCBSb290SW5saW5lQm94Ojpjb21wdXRlQ2FyZXRSZWN0KGZsb2F0IGxv
Z2ljYWxMZWZ0UG9zaXRpb24sIHVuc2lnbmVkIGNhcmUKICAgICByZXR1cm4gYmxvY2tTdHlsZS5p
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gSW50UmVjdChsZWZ0LCB0b3AsIGNhcmV0V2lkdGgs
IGhlaWdodCkgOiBJbnRSZWN0KHRvcCwgbGVmdCwgaGVpZ2h0LCBjYXJldFdpZHRoKTsKIH0KIAot
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBSb290SW5saW5lQm94OjpzZWxlY3Rpb25TdGF0
ZSgpCitSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIFJvb3RJbmxpbmVCb3g6OnNlbGVjdGlv
blN0YXRlKCkKIHsKICAgICAvLyBXYWxrIG92ZXIgYWxsIG9mIHRoZSBzZWxlY3RlZCBib3hlcy4K
LSAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlID0gUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25Ob25lOworICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGUgc3RhdGUgPSBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lOwogICAgIGZvciAoSW5saW5lQm94KiBi
b3ggPSBmaXJzdExlYWZEZXNjZW5kYW50KCk7IGJveDsgYm94ID0gYm94LT5uZXh0TGVhZk9uTGlu
ZSgpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgYm94U3RhdGUgPSBi
b3gtPnNlbGVjdGlvblN0YXRlKCk7Ci0gICAgICAgIGlmICgoYm94U3RhdGUgPT0gUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25TdGFydCAmJiBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVu
ZCkgfHwKLSAgICAgICAgICAgIChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVu
ZCAmJiBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KSkKLSAgICAgICAgICAg
IHN0YXRlID0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoOwotICAgICAgICBlbHNlIGlmIChz
dGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUgfHwKLSAgICAgICAgICAgICAgICAg
KChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0IHx8IGJveFN0YXRlID09
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKSAmJgotICAgICAgICAgICAgICAgICAgKHN0YXRl
ID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSB8fCBzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbkluc2lkZSkpKQorICAgICAgICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRl
IGJveFN0YXRlID0gYm94LT5zZWxlY3Rpb25TdGF0ZSgpOworICAgICAgICBpZiAoKGJveFN0YXRl
ID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0ICYmIHN0YXRlID09IFJlbmRl
ck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OkVuZCkKKyAgICAgICAgICAgIHx8IChib3hTdGF0ZSA9
PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQgJiYgc3RhdGUgPT0gUmVuZGVyT2Jq
ZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQpKQorICAgICAgICAgICAgc3RhdGUgPSBSZW5kZXJP
YmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpCb3RoOworICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBS
ZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lIHx8ICgoYm94U3RhdGUgPT0gUmVuZGVy
T2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6U3RhcnQgfHwgYm94U3RhdGUgPT0gUmVuZGVyT2JqZWN0
OjpIaWdobGlnaHRTdGF0ZTo6RW5kKQorICAgICAgICAgICAgJiYgKHN0YXRlID09IFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpIaWdo
bGlnaHRTdGF0ZTo6SW5zaWRlKSkpCiAgICAgICAgICAgICBzdGF0ZSA9IGJveFN0YXRlOwotICAg
ICAgICBlbHNlIGlmIChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUgJiYg
c3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCkgeworICAgICAgICBlbHNlIGlm
IChib3hTdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpOb25lICYmIHN0YXRl
ID09IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6OlN0YXJ0KSB7CiAgICAgICAgICAgICAv
LyBXZSBhcmUgcGFzdCB0aGUgZW5kIG9mIHRoZSBzZWxlY3Rpb24uCi0gICAgICAgICAgICBzdGF0
ZSA9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aDsKKyAgICAgICAgICAgIHN0YXRlID0gUmVu
ZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aDsKICAgICAgICAgfQotICAgICAgICBpZiAo
c3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoKQorICAgICAgICBpZiAoc3RhdGUg
PT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Qm90aCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KIApAQCAtNTU0LDcgKzU1Myw3IEBAIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3Rh
dGUgUm9vdElubGluZUJveDo6c2VsZWN0aW9uU3RhdGUoKQogSW5saW5lQm94KiBSb290SW5saW5l
Qm94OjpmaXJzdFNlbGVjdGVkQm94KCkKIHsKICAgICBmb3IgKGF1dG8qIGJveCA9IGZpcnN0TGVh
ZkRlc2NlbmRhbnQoKTsgYm94OyBib3ggPSBib3gtPm5leHRMZWFmT25MaW5lKCkpIHsKLSAgICAg
ICAgaWYgKGJveC0+c2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5v
bmUpCisgICAgICAgIGlmIChib3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpI
aWdobGlnaHRTdGF0ZTo6Tm9uZSkKICAgICAgICAgICAgIHJldHVybiBib3g7CiAgICAgfQogICAg
IHJldHVybiBudWxscHRyOwpAQCAtNTYzLDcgKzU2Miw3IEBAIElubGluZUJveCogUm9vdElubGlu
ZUJveDo6Zmlyc3RTZWxlY3RlZEJveCgpCiBJbmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6Omxhc3RT
ZWxlY3RlZEJveCgpCiB7CiAgICAgZm9yIChhdXRvKiBib3ggPSBsYXN0TGVhZkRlc2NlbmRhbnQo
KTsgYm94OyBib3ggPSBib3gtPnByZXZpb3VzTGVhZk9uTGluZSgpKSB7Ci0gICAgICAgIGlmIChi
b3gtPnNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKQorICAg
ICAgICBpZiAoYm94LT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0
U3RhdGU6Ok5vbmUpCiAgICAgICAgICAgICByZXR1cm4gYm94OwogICAgIH0KICAgICByZXR1cm4g
bnVsbHB0cjsKQEAgLTY2NCw3ICs2NjMsNyBAQCBMYXlvdXRVbml0IFJvb3RJbmxpbmVCb3g6OnNl
bGVjdGlvblRvcEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSBjb25zdAogICAgIExheW91dFVu
aXQgdG9wID0gc2VsZWN0aW9uVG9wKCk7CiAKICAgICBhdXRvIGJsb2NrU2VsZWN0aW9uU3RhdGUg
PSByb290Qm94LmJsb2NrRmxvdygpLnNlbGVjdGlvblN0YXRlKCk7Ci0gICAgaWYgKGJsb2NrU2Vs
ZWN0aW9uU3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUgJiYgYmxvY2tTZWxl
Y3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKKyAgICBpZiAoYmxvY2tT
ZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpJbnNpZGUgJiYg
YmxvY2tTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlOjpFbmQp
CiAgICAgICAgIHJldHVybiB0b3A7CiAKICAgICBMYXlvdXRTaXplIG9mZnNldFRvQmxvY2tCZWZv
cmU7CkBAIC02NzcsOCArNjc2LDggQEAgTGF5b3V0VW5pdCBSb290SW5saW5lQm94OjpzZWxlY3Rp
b25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkgY29uc3QKICAgICAgICAgcmV0dXJuIHRv
cDsKIAogICAgIGlmIChhdXRvKiBsYXN0TGluZSA9IGRvd25jYXN0PFJlbmRlckJsb2NrRmxvdz4o
KmJsb2NrQmVmb3JlKS5sYXN0Um9vdEJveCgpKSB7Ci0gICAgICAgIFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uU3RhdGUgbGFzdExpbmVTZWxlY3Rpb25TdGF0ZSA9IGxhc3RMaW5lLT5zZWxlY3Rpb25T
dGF0ZSgpOwotICAgICAgICBpZiAobGFzdExpbmVTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmpl
Y3Q6OlNlbGVjdGlvbkluc2lkZSAmJiBsYXN0TGluZVNlbGVjdGlvblN0YXRlICE9IFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uU3RhcnQpCisgICAgICAgIFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3Rh
dGUgbGFzdExpbmVTZWxlY3Rpb25TdGF0ZSA9IGxhc3RMaW5lLT5zZWxlY3Rpb25TdGF0ZSgpOwor
ICAgICAgICBpZiAobGFzdExpbmVTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OkhpZ2hs
aWdodFN0YXRlOjpJbnNpZGUgJiYgbGFzdExpbmVTZWxlY3Rpb25TdGF0ZSAhPSBSZW5kZXJPYmpl
Y3Q6OkhpZ2hsaWdodFN0YXRlOjpTdGFydCkKICAgICAgICAgICAgIHJldHVybiB0b3A7CiAKICAg
ICAgICAgTGF5b3V0VW5pdCBsYXN0TGluZVNlbGVjdGlvbkJvdHRvbSA9IGxhc3RMaW5lLT5zZWxl
Y3Rpb25Cb3R0b20oKSArIG9mZnNldFRvQmxvY2tCZWZvcmUuaGVpZ2h0KCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guaAppbmRleCAyNDdlNTVjMDY5ZTlmZTg4MWNhZjRi
ZmJjMmI0YWVmMTllMzYxN2EzLi5mODk3NmM2YTdkNGE2OTczNDg3NDk5M2YzOWRmMzZmNDc4N2Fl
OTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUm9vdElubGluZUJveC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9Sb290SW5saW5lQm94LmgKQEAgLTEyNiw3
ICsxMjYsNyBAQCBwdWJsaWM6CiAgICAgdXNpbmcgSW5saW5lQm94OjpoYXNTZWxlY3RlZENoaWxk
cmVuOwogICAgIHVzaW5nIElubGluZUJveDo6c2V0SGFzU2VsZWN0ZWRDaGlsZHJlbjsKIAotICAg
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSBmaW5hbDsKKyAg
ICBSZW5kZXJPYmplY3Q6OkhpZ2hsaWdodFN0YXRlIHNlbGVjdGlvblN0YXRlKCkgZmluYWw7CiAg
ICAgSW5saW5lQm94KiBmaXJzdFNlbGVjdGVkQm94KCk7CiAgICAgSW5saW5lQm94KiBsYXN0U2Vs
ZWN0ZWRCb3goKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVj
dGlvblJhbmdlRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFu
Z2VEYXRhLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDIxODg5MDU3MDNmZTdj
OWU5Nzg1NGZmMzI1YWQwNGUyYzRlYjYyMy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2VsZWN0aW9uUmFuZ2VE
YXRhLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDM4NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE0IElnYWxpYSBTLkwuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKLSAqICAgIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZwotICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzCi0gKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxB
UyBJU+KAnSBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQot
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLAotICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgotICogVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GCi0gKiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJTZWxlY3Rpb25SYW5nZURhdGEuaCIKLQotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiRnJhbWVTZWxlY3Rpb24uaCIKLSNpbmNsdWRlICJQb3NpdGlvbi5oIgot
I2luY2x1ZGUgIlJhbmdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKLSNpbmNsdWRlICJS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlci5oIgotI2luY2x1ZGUgIlJlbmRlck9i
amVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJWaXNpYmxlU2VsZWN0
aW9uLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotbmFtZXNwYWNlIHsgLy8gU2VlIGJ1ZyAj
MTc3ODA4LgotCi1zdHJ1Y3QgU2VsZWN0aW9uRGF0YSB7Ci0gICAgdXNpbmcgUmVuZGVyZXJNYXAg
PSBIYXNoTWFwPFJlbmRlck9iamVjdCosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTZWxlY3Rpb25J
bmZvPj47Ci0gICAgdXNpbmcgUmVuZGVyQmxvY2tNYXAgPSBIYXNoTWFwPGNvbnN0IFJlbmRlckJs
b2NrKiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlckJsb2NrU2VsZWN0aW9uSW5mbz4+OwotCi0gICAg
T3B0aW9uYWw8dW5zaWduZWQ+IHN0YXJ0T2Zmc2V0OwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBl
bmRPZmZzZXQ7Ci0gICAgUmVuZGVyZXJNYXAgcmVuZGVyZXJzOwotICAgIFJlbmRlckJsb2NrTWFw
IGJsb2NrczsKLX07Ci0KLWNsYXNzIFNlbGVjdGlvbkl0ZXJhdG9yIHsKLXB1YmxpYzoKLSAgICBT
ZWxlY3Rpb25JdGVyYXRvcihSZW5kZXJPYmplY3QqIHN0YXJ0KQotICAgICAgICA6IG1fY3VycmVu
dChzdGFydCkKLSAgICB7Ci0gICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOwotICAgIH0KLSAgICAK
LSAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fY3VycmVudDsKLSAgICB9Ci0gICAgCi0gICAgUmVuZGVyT2JqZWN0KiBuZXh0KCkKLSAgICB7
Ci0gICAgICAgIFJlbmRlck9iamVjdCogY3VycmVudFNwYW4gPSBtX3NwYW5uZXJTdGFjay5pc0Vt
cHR5KCkgPyBudWxscHRyIDogbV9zcGFubmVyU3RhY2subGFzdCgpLT5zcGFubmVyKCk7Ci0gICAg
ICAgIG1fY3VycmVudCA9IG1fY3VycmVudC0+bmV4dEluUHJlT3JkZXIoY3VycmVudFNwYW4pOwot
ICAgICAgICBjaGVja0ZvclNwYW5uZXIoKTsKLSAgICAgICAgaWYgKCFtX2N1cnJlbnQgJiYgY3Vy
cmVudFNwYW4pIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGxhY2Vob2xkZXIgPSBtX3Nw
YW5uZXJTdGFjay5sYXN0KCk7Ci0gICAgICAgICAgICBtX3NwYW5uZXJTdGFjay5yZW1vdmVMYXN0
KCk7Ci0gICAgICAgICAgICBtX2N1cnJlbnQgPSBwbGFjZWhvbGRlci0+bmV4dEluUHJlT3JkZXIo
KTsKLSAgICAgICAgICAgIGNoZWNrRm9yU3Bhbm5lcigpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBtX2N1cnJlbnQ7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIHZvaWQgY2hlY2tGb3JTcGFu
bmVyKCkKLSAgICB7Ci0gICAgICAgIGlmICghaXM8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxh
Y2Vob2xkZXI+KG1fY3VycmVudCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGF1dG8m
IHBsYWNlaG9sZGVyID0gZG93bmNhc3Q8UmVuZGVyTXVsdGlDb2x1bW5TcGFubmVyUGxhY2Vob2xk
ZXI+KCptX2N1cnJlbnQpOwotICAgICAgICBtX3NwYW5uZXJTdGFjay5hcHBlbmQoJnBsYWNlaG9s
ZGVyKTsKLSAgICAgICAgbV9jdXJyZW50ID0gcGxhY2Vob2xkZXIuc3Bhbm5lcigpOwotICAgIH0K
LQotICAgIFJlbmRlck9iamVjdCogbV9jdXJyZW50IHsgbnVsbHB0ciB9OwotICAgIFZlY3RvcjxS
ZW5kZXJNdWx0aUNvbHVtblNwYW5uZXJQbGFjZWhvbGRlcio+IG1fc3Bhbm5lclN0YWNrOwotfTsK
LQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXN0YXRpYyBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyQWZ0ZXJPZmZzZXQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgdW5zaWduZWQgb2Zm
c2V0KQotewotICAgIGF1dG8qIGNoaWxkID0gcmVuZGVyZXIuY2hpbGRBdChvZmZzZXQpOwotICAg
IHJldHVybiBjaGlsZCA/IGNoaWxkIDogcmVuZGVyZXIubmV4dEluUHJlT3JkZXJBZnRlckNoaWxk
cmVuKCk7Ci19Ci0KLXN0YXRpYyBib29sIGlzVmFsaWRSZW5kZXJlckZvclNlbGVjdGlvbihjb25z
dCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBjb25zdCBTZWxlY3Rpb25SYW5nZURhdGE6OkNvbnRl
eHQmIHNlbGVjdGlvbikKLXsKLSAgICByZXR1cm4gKHJlbmRlcmVyLmNhbkJlU2VsZWN0aW9uTGVh
ZigpIHx8ICZyZW5kZXJlciA9PSBzZWxlY3Rpb24uc3RhcnQoKSB8fCAmcmVuZGVyZXIgPT0gc2Vs
ZWN0aW9uLmVuZCgpKQotICAgICAgICAmJiByZW5kZXJlci5zZWxlY3Rpb25TdGF0ZSgpICE9IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZQotICAgICAgICAmJiByZW5kZXJlci5jb250YWluaW5n
QmxvY2soKTsKLX0KLQotc3RhdGljIFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2tCZWxvd1Zp
ZXcoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlcikKLXsKLSAgICBhdXRvKiBjb250YWluaW5n
QmxvY2sgPSByZW5kZXJlci5jb250YWluaW5nQmxvY2soKTsKLSAgICByZXR1cm4gaXM8UmVuZGVy
Vmlldz4oY29udGFpbmluZ0Jsb2NrKSA/IG51bGxwdHIgOiBjb250YWluaW5nQmxvY2s7Ci19Ci0K
LXN0YXRpYyBTZWxlY3Rpb25EYXRhIGNvbGxlY3QoY29uc3QgU2VsZWN0aW9uUmFuZ2VEYXRhOjpD
b250ZXh0JiBzZWxlY3Rpb24sIGJvb2wgcmVwYWludERpZmZlcmVuY2UpCi17Ci0gICAgU2VsZWN0
aW9uRGF0YSBvbGRTZWxlY3Rpb25EYXRhIHsgc2VsZWN0aW9uLnN0YXJ0T2Zmc2V0KCksIHNlbGVj
dGlvbi5lbmRPZmZzZXQoKSwgeyB9LCB7IH0gfTsKLSAgICAvLyBCbG9ja3MgY29udGFpbiBzZWxl
Y3RlZCBvYmplY3RzIGFuZCBmaWxsIGdhcHMgYmV0d2VlbiB0aGVtLCBlaXRoZXIgb24gdGhlIGxl
ZnQsIHJpZ2h0LCBvciBpbiBiZXR3ZWVuIGxpbmVzIGFuZCBibG9ja3MuCi0gICAgLy8gSW4gb3Jk
ZXIgdG8gZ2V0IHRoZSByZXBhaW50IHJlY3QgcmlnaHQsIHdlIGhhdmUgdG8gZXhhbWluZSBsZWZ0
LCBtaWRkbGUsIGFuZCByaWdodCByZWN0cyBpbmRpdmlkdWFsbHksIHNpbmNlIG90aGVyd2lzZQot
ICAgIC8vIHRoZSB1bmlvbiBvZiB0aG9zZSByZWN0cyBtaWdodCByZW1haW4gdGhlIHNhbWUgZXZl
biB3aGVuIGNoYW5nZXMgaGF2ZSBvY2N1cnJlZC4KLSAgICBhdXRvKiBzdGFydCA9IHNlbGVjdGlv
bi5zdGFydCgpOwotICAgIFJlbmRlck9iamVjdCogc3RvcCA9IG51bGxwdHI7Ci0gICAgaWYgKHNl
bGVjdGlvbi5lbmQoKSkKLSAgICAgICAgc3RvcCA9IHJlbmRlcmVyQWZ0ZXJPZmZzZXQoKnNlbGVj
dGlvbi5lbmQoKSwgc2VsZWN0aW9uLmVuZE9mZnNldCgpLnZhbHVlKCkpOwotICAgIFNlbGVjdGlv
bkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHN0YXJ0KTsKLSAgICB3aGlsZSAoc3RhcnQgJiYg
c3RhcnQgIT0gc3RvcCkgewotICAgICAgICBpZiAoaXNWYWxpZFJlbmRlcmVyRm9yU2VsZWN0aW9u
KCpzdGFydCwgc2VsZWN0aW9uKSkgewotICAgICAgICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25z
aWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFuZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJl
IGV4YW1pbmVkIGFzIHdlbGwuCi0gICAgICAgICAgICBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVy
cy5zZXQoc3RhcnQsIG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKnN0YXJ0LCB0cnVl
KSk7Ci0gICAgICAgICAgICBpZiAocmVwYWludERpZmZlcmVuY2UpIHsKLSAgICAgICAgICAgICAg
ICBmb3IgKGF1dG8qIGJsb2NrID0gY29udGFpbmluZ0Jsb2NrQmVsb3dWaWV3KCpzdGFydCk7IGJs
b2NrOyBibG9jayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93VmlldygqYmxvY2spKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGF1dG8mIGJsb2NrSW5mbyA9IG9sZFNlbGVjdGlvbkRhdGEuYmxvY2tzLmFk
ZChibG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZv
PigqYmxvY2spOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICBzdGFydCA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIG9sZFNlbGVjdGlvbkRhdGE7Ci19Ci0KLVNlbGVjdGlvblJhbmdlRGF0YTo6U2VsZWN0aW9u
UmFuZ2VEYXRhKFJlbmRlclZpZXcmIHZpZXcpCi0gICAgOiBtX3JlbmRlclZpZXcodmlldykKLSNp
ZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAsIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVy
KHZpZXcpCi0jZW5kaWYKLXsKLX0KLQotdm9pZCBTZWxlY3Rpb25SYW5nZURhdGE6OnNldENvbnRl
eHQoY29uc3QgQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dC5zdGFydCgp
ICYmIGNvbnRleHQuZW5kKCkpOwotICAgIG1fc2VsZWN0aW9uQ29udGV4dCA9IGNvbnRleHQ7Ci19
Ci0KLVJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgU2VsZWN0aW9uUmFuZ2VEYXRhOjpzZWxl
Y3Rpb25TdGF0ZUZvclJlbmRlcmVyKFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCi17Ci0gICAgLy8g
RklYTUU6IHdlIHNob3VsZGxuJ3QgaGF2ZSB0byBjaGVjayB0aGF0IGEgcmVuZGVyZXIgaXMgYSBk
ZXNjZW5kYW50IG9mIHRoZSByZW5kZXIgbm9kZQotICAgIC8vIGZyb20gdGhlIHJhbmdlLiBUaGlz
IGlzIGxpa2VseSBiZWNhdXNlIHdlIGFyZW4ndCB1c2luZyBWaXNpYmxlUG9zaXRpb25zIHlldC4K
LSAgICAvLyBQbGFubmVkIGZpeCBpbiBhIGZvbGxvd3VwOiA8cmRhcjovL3Byb2JsZW0vNTgwOTU5
MjM+Ci0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTUy
OQotICAgIAotICAgIGlmICgmcmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkp
IHsKLSAgICAgICAgaWYgKG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCgpICYmIG1fc2VsZWN0aW9u
Q29udGV4dC5lbmQoKSAmJiBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKSA9PSBtX3NlbGVjdGlv
bkNvbnRleHQuZW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25Cb3RoOwotICAgICAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkpCi0gICAgICAg
ICAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydDsKLSAgICB9Ci0gICAgaWYg
KCZyZW5kZXJlciA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkpCi0gICAgICAgIHJldHVybiBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZDsKLQotICAgIFJlbmRlck9iamVjdCogc2VsZWN0aW9u
RW5kID0gbnVsbHB0cjsKLSAgICBhdXRvKiBzZWxlY3Rpb25EYXRhRW5kID0gbV9zZWxlY3Rpb25D
b250ZXh0LmVuZCgpOwotICAgIGlmIChzZWxlY3Rpb25EYXRhRW5kKQotICAgICAgICBzZWxlY3Rp
b25FbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0KCpzZWxlY3Rpb25EYXRhRW5kLCBtX3NlbGVjdGlv
bkNvbnRleHQuZW5kT2Zmc2V0KCkudmFsdWUoKSk7Ci0gICAgU2VsZWN0aW9uSXRlcmF0b3Igc2Vs
ZWN0aW9uSXRlcmF0b3IobV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCkpOwotICAgIGZvciAoYXV0
byogY3VycmVudFJlbmRlcmVyID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCk7IGN1cnJlbnRS
ZW5kZXJlciAmJiBjdXJyZW50UmVuZGVyZXIgIT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpOyBj
dXJyZW50UmVuZGVyZXIgPSBzZWxlY3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKLSAgICAgICAgaWYg
KGN1cnJlbnRSZW5kZXJlciA9PSBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnQoKSB8fCBjdXJyZW50
UmVuZGVyZXIgPT0gbV9zZWxlY3Rpb25Db250ZXh0LmVuZCgpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGlmICghY3VycmVudFJlbmRlcmVyLT5jYW5CZVNlbGVjdGlvbkxlYWYoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoJnJlbmRlcmVyID09IGN1cnJlbnRS
ZW5kZXJlcikKLSAgICAgICAgICAgIHJldHVybiBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkluc2lk
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZTsKLSAgICAK
LX0KLQotdm9pZCBTZWxlY3Rpb25SYW5nZURhdGE6OnNldChjb25zdCBDb250ZXh0JiBzZWxlY3Rp
b24sIFJlcGFpbnRNb2RlIGJsb2NrUmVwYWludE1vZGUpCi17Ci0gICAgaWYgKChzZWxlY3Rpb24u
c3RhcnQoKSAmJiAhc2VsZWN0aW9uLmVuZCgpKSB8fCAoc2VsZWN0aW9uLmVuZCgpICYmICFzZWxl
Y3Rpb24uc3RhcnQoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBKdXN0IHJldHVybiBpZiB0
aGUgc2VsZWN0aW9uIGhhc24ndCBjaGFuZ2VkLgotICAgIGF1dG8gaXNDYXJldCA9IG1fcmVuZGVy
Vmlldy5mcmFtZSgpLnNlbGVjdGlvbigpLmlzQ2FyZXQoKTsKLSAgICBpZiAoc2VsZWN0aW9uID09
IG1fc2VsZWN0aW9uQ29udGV4dCAmJiBtX3NlbGVjdGlvbldhc0NhcmV0ID09IGlzQ2FyZXQpCi0g
ICAgICAgIHJldHVybjsKLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSAgICAvLyBDbGVh
ciB0aGUgY3VycmVudCByZWN0cyBhbmQgY3JlYXRlIGEgbm90aWZpZXIgZm9yIHRoZSBuZXcgcmVj
dHMgd2UgYXJlIGFib3V0IHRvIGdhdGhlci4KLSAgICAvLyBUaGUgTm90aWZpZXIgdXBkYXRlcyB0
aGUgRWRpdG9yIHdoZW4gaXQgZ29lcyBvdXQgb2Ygc2NvcGUgYW5kIGlzIGRlc3Ryb3llZC4KLSAg
ICBhdXRvIHJlY3ROb3RpZmllciA9IG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmNsZWFyQW5kQ3Jl
YXRlTm90aWZpZXIoKTsKLSNlbmRpZgotICAgIG1fc2VsZWN0aW9uV2FzQ2FyZXQgPSBpc0NhcmV0
OwotICAgIGFwcGx5KHNlbGVjdGlvbiwgYmxvY2tSZXBhaW50TW9kZSk7Ci19Ci0KLXZvaWQgU2Vs
ZWN0aW9uUmFuZ2VEYXRhOjpjbGVhcigpCi17Ci0gICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPnJl
cGFpbnRCbG9ja1NlbGVjdGlvbkdhcHMoKTsKLSAgICBzZXQoeyB9LCBTZWxlY3Rpb25SYW5nZURh
dGE6OlJlcGFpbnRNb2RlOjpOZXdNaW51c09sZCk7Ci19Ci0KLXZvaWQgU2VsZWN0aW9uUmFuZ2VE
YXRhOjpyZXBhaW50KCkgY29uc3QKLXsKLSAgICBIYXNoU2V0PFJlbmRlckJsb2NrKj4gcHJvY2Vz
c2VkQmxvY2tzOwotICAgIFJlbmRlck9iamVjdCogZW5kID0gbnVsbHB0cjsKLSAgICBpZiAobV9z
ZWxlY3Rpb25Db250ZXh0LmVuZCgpKQotICAgICAgICBlbmQgPSByZW5kZXJlckFmdGVyT2Zmc2V0
KCptX3NlbGVjdGlvbkNvbnRleHQuZW5kKCksIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRPZmZzZXQo
KS52YWx1ZSgpKTsKLSAgICBTZWxlY3Rpb25JdGVyYXRvciBzZWxlY3Rpb25JdGVyYXRvcihtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnQoKSk7Ci0gICAgZm9yIChhdXRvKiByZW5kZXJlciA9IHNlbGVj
dGlvbkl0ZXJhdG9yLmN1cnJlbnQoKTsgcmVuZGVyZXIgJiYgcmVuZGVyZXIgIT0gZW5kOyByZW5k
ZXJlciA9IHNlbGVjdGlvbkl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBpZiAoIXJlbmRlcmVy
LT5jYW5CZVNlbGVjdGlvbkxlYWYoKSAmJiByZW5kZXJlciAhPSBtX3NlbGVjdGlvbkNvbnRleHQu
c3RhcnQoKSAmJiByZW5kZXJlciAhPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJlbmRlcmVyLT5zZWxlY3Rpb25TdGF0ZSgpID09
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBSZW5kZXJTZWxlY3Rpb25JbmZvKCpyZW5kZXJlciwgdHJ1ZSkucmVwYWludCgpOwotICAg
ICAgICAvLyBCbG9ja3MgYXJlIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyBsaW5lIGdhcHMgYW5k
IG1hcmdpbiBnYXBzLiBUaGV5IG11c3QgYmUgZXhhbWluZWQgYXMgd2VsbC4KLSAgICAgICAgZm9y
IChhdXRvKiBibG9jayA9IGNvbnRhaW5pbmdCbG9ja0JlbG93VmlldygqcmVuZGVyZXIpOyBibG9j
azsgYmxvY2sgPSBjb250YWluaW5nQmxvY2tCZWxvd1ZpZXcoKmJsb2NrKSkgewotICAgICAgICAg
ICAgaWYgKCFwcm9jZXNzZWRCbG9ja3MuYWRkKGJsb2NrKS5pc05ld0VudHJ5KQotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgUmVuZGVyU2VsZWN0aW9uSW5mbygqYmxvY2ssIHRy
dWUpLnJlcGFpbnQoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotSW50UmVjdCBTZWxlY3Rpb25S
YW5nZURhdGE6OmNvbGxlY3RCb3VuZHMoQ2xpcFRvVmlzaWJsZUNvbnRlbnQgY2xpcFRvVmlzaWJs
ZUNvbnRlbnQpIGNvbnN0Ci17Ci0gICAgU2VsZWN0aW9uRGF0YTo6UmVuZGVyZXJNYXAgcmVuZGVy
ZXJzOwotICAgIGF1dG8qIHN0YXJ0ID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCk7Ci0gICAg
UmVuZGVyT2JqZWN0KiBzdG9wID0gbnVsbHB0cjsKLSAgICBpZiAobV9zZWxlY3Rpb25Db250ZXh0
LmVuZCgpKQotICAgICAgICBzdG9wID0gcmVuZGVyZXJBZnRlck9mZnNldCgqbV9zZWxlY3Rpb25D
b250ZXh0LmVuZCgpLCBtX3NlbGVjdGlvbkNvbnRleHQuZW5kT2Zmc2V0KCkudmFsdWUoKSk7Ci0g
ICAgU2VsZWN0aW9uSXRlcmF0b3Igc2VsZWN0aW9uSXRlcmF0b3Ioc3RhcnQpOwotICAgIHdoaWxl
IChzdGFydCAmJiBzdGFydCAhPSBzdG9wKSB7Ci0gICAgICAgIGlmICgoc3RhcnQtPmNhbkJlU2Vs
ZWN0aW9uTGVhZigpIHx8IHN0YXJ0ID09IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydCgpIHx8IHN0
YXJ0ID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSkKLSAgICAgICAgICAgICYmIHN0YXJ0LT5z
ZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkgewotICAgICAg
ICAgICAgLy8gQmxvY2tzIGFyZSByZXNwb25zaWJsZSBmb3IgcGFpbnRpbmcgbGluZSBnYXBzIGFu
ZCBtYXJnaW4gZ2Fwcy4gVGhleSBtdXN0IGJlIGV4YW1pbmVkIGFzIHdlbGwuCi0gICAgICAgICAg
ICByZW5kZXJlcnMuc2V0KHN0YXJ0LCBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbkluZm8+KCpz
dGFydCwgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPT0gQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6Olllcykp
OwotICAgICAgICAgICAgYXV0byogYmxvY2sgPSBzdGFydC0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0g
ICAgICAgICAgICB3aGlsZSAoYmxvY2sgJiYgIWlzPFJlbmRlclZpZXc+KCpibG9jaykpIHsKLSAg
ICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4mIGJsb2Nr
SW5mbyA9IHJlbmRlcmVycy5hZGQoYmxvY2ssIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKLSAg
ICAgICAgICAgICAgICBpZiAoYmxvY2tJbmZvKQotICAgICAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgICAgICBibG9ja0luZm8gPSBtYWtlVW5pcXVlPFJlbmRlclNlbGVjdGlvbklu
Zm8+KCpibG9jaywgY2xpcFRvVmlzaWJsZUNvbnRlbnQgPT0gQ2xpcFRvVmlzaWJsZUNvbnRlbnQ6
Olllcyk7Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSBibG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3RhcnQgPSBzZWxlY3Rpb25JdGVy
YXRvci5uZXh0KCk7Ci0gICAgfQotCi0gICAgLy8gTm93IGNyZWF0ZSBhIHNpbmdsZSBib3VuZGlu
ZyBib3ggcmVjdCB0aGF0IGVuY2xvc2VzIHRoZSB3aG9sZSBzZWxlY3Rpb24uCi0gICAgTGF5b3V0
UmVjdCBzZWxlY3Rpb25SZWN0OwotICAgIGZvciAoYXV0byYgaW5mbyA6IHJlbmRlcmVycy52YWx1
ZXMoKSkgewotICAgICAgICAvLyBSZW5kZXJTZWxlY3Rpb25JbmZvOjpyZWN0KCkgaXMgaW4gdGhl
IGNvb3JkaW5hdGVzIG9mIHRoZSByZXBhaW50Q29udGFpbmVyLCBzbyBtYXAgdG8gcGFnZSBjb29y
ZGluYXRlcy4KLSAgICAgICAgTGF5b3V0UmVjdCBjdXJyZW50UmVjdCA9IGluZm8tPnJlY3QoKTsK
LSAgICAgICAgaWYgKGF1dG8qIHJlcGFpbnRDb250YWluZXIgPSBpbmZvLT5yZXBhaW50Q29udGFp
bmVyKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UXVhZCBhYnNRdWFkID0gcmVwYWludENvbnRhaW5l
ci0+bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoY3VycmVudFJlY3QpKTsKLSAgICAgICAg
ICAgIGN1cnJlbnRSZWN0ID0gYWJzUXVhZC5lbmNsb3NpbmdCb3VuZGluZ0JveCgpOwotICAgICAg
ICB9Ci0gICAgICAgIHNlbGVjdGlvblJlY3QudW5pdGUoY3VycmVudFJlY3QpOwotICAgIH0KLSAg
ICByZXR1cm4gc25hcHBlZEludFJlY3Qoc2VsZWN0aW9uUmVjdCk7Ci19Ci0KLXZvaWQgU2VsZWN0
aW9uUmFuZ2VEYXRhOjphcHBseShjb25zdCBDb250ZXh0JiBuZXdTZWxlY3Rpb24sIFJlcGFpbnRN
b2RlIGJsb2NrUmVwYWludE1vZGUpCi17Ci0gICAgYXV0byBvbGRTZWxlY3Rpb25EYXRhID0gY29s
bGVjdChtX3NlbGVjdGlvbkNvbnRleHQsIGJsb2NrUmVwYWludE1vZGUgPT0gUmVwYWludE1vZGU6
Ok5ld1hPUk9sZCk7Ci0gICAgLy8gUmVtb3ZlIGN1cnJlbnQgc2VsZWN0aW9uLgotICAgIGZvciAo
YXV0byogcmVuZGVyZXIgOiBvbGRTZWxlY3Rpb25EYXRhLnJlbmRlcmVycy5rZXlzKCkpCi0gICAg
ICAgIHJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uTm9uZSk7Ci0gICAgbV9zZWxlY3Rpb25Db250ZXh0ID0gbmV3U2VsZWN0aW9uOwotICAg
IGF1dG8qIHNlbGVjdGlvblN0YXJ0ID0gbV9zZWxlY3Rpb25Db250ZXh0LnN0YXJ0KCk7Ci0gICAg
Ly8gVXBkYXRlIHRoZSBzZWxlY3Rpb24gc3RhdHVzIG9mIGFsbCBvYmplY3RzIGJldHdlZW4gc2Vs
ZWN0aW9uU3RhcnQgYW5kIHNlbGVjdGlvbkVuZAotICAgIGlmIChzZWxlY3Rpb25TdGFydCAmJiBz
ZWxlY3Rpb25TdGFydCA9PSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kKCkpCi0gICAgICAgIHNlbGVj
dGlvblN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uQm90aCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChzZWxlY3Rpb25TdGFydCkKLSAgICAg
ICAgICAgIHNlbGVjdGlvblN0YXJ0LT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uU3RhcnQpOwotICAgICAgICBpZiAoYXV0byogZW5kID0gbV9zZWxlY3Rp
b25Db250ZXh0LmVuZCgpKQotICAgICAgICAgICAgZW5kLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVl
ZGVkKFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kKTsKLSAgICB9Ci0KLSAgICBSZW5kZXJPYmpl
Y3QqIHNlbGVjdGlvbkVuZCA9IG51bGxwdHI7Ci0gICAgYXV0byogc2VsZWN0aW9uRGF0YUVuZCA9
IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKTsKLSAgICBpZiAoc2VsZWN0aW9uRGF0YUVuZCkKLSAg
ICAgICAgc2VsZWN0aW9uRW5kID0gcmVuZGVyZXJBZnRlck9mZnNldCgqc2VsZWN0aW9uRGF0YUVu
ZCwgbV9zZWxlY3Rpb25Db250ZXh0LmVuZE9mZnNldCgpLnZhbHVlKCkpOwotICAgIFNlbGVjdGlv
bkl0ZXJhdG9yIHNlbGVjdGlvbkl0ZXJhdG9yKHNlbGVjdGlvblN0YXJ0KTsKLSAgICBmb3IgKGF1
dG8qIGN1cnJlbnRSZW5kZXJlciA9IHNlbGVjdGlvblN0YXJ0OyBjdXJyZW50UmVuZGVyZXIgJiYg
Y3VycmVudFJlbmRlcmVyICE9IHNlbGVjdGlvbkVuZDsgY3VycmVudFJlbmRlcmVyID0gc2VsZWN0
aW9uSXRlcmF0b3IubmV4dCgpKSB7Ci0gICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXIgPT0gc2Vs
ZWN0aW9uU3RhcnQgfHwgY3VycmVudFJlbmRlcmVyID09IG1fc2VsZWN0aW9uQ29udGV4dC5lbmQo
KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWN1cnJlbnRSZW5kZXJlci0+
Y2FuQmVTZWxlY3Rpb25MZWFmKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY3Vy
cmVudFJlbmRlcmVyLT5zZXRTZWxlY3Rpb25TdGF0ZUlmTmVlZGVkKFJlbmRlck9iamVjdDo6U2Vs
ZWN0aW9uSW5zaWRlKTsKLSAgICB9Ci0KLSAgICBpZiAoYmxvY2tSZXBhaW50TW9kZSAhPSBSZXBh
aW50TW9kZTo6Tm90aGluZykKLSAgICAgICAgbV9yZW5kZXJWaWV3LmxheWVyKCktPmNsZWFyQmxv
Y2tTZWxlY3Rpb25HYXBzQm91bmRzKCk7Ci0KLSAgICAvLyBOb3cgdGhhdCB0aGUgc2VsZWN0aW9u
IHN0YXRlIGhhcyBiZWVuIHVwZGF0ZWQgZm9yIHRoZSBuZXcgb2JqZWN0cywgd2FsayB0aGVtIGFn
YWluIGFuZAotICAgIC8vIHB1dCB0aGVtIGluIHRoZSBuZXcgb2JqZWN0cyBsaXN0LgotICAgIFNl
bGVjdGlvbkRhdGE6OlJlbmRlcmVyTWFwIG5ld1NlbGVjdGVkUmVuZGVyZXJzOwotICAgIFNlbGVj
dGlvbkRhdGE6OlJlbmRlckJsb2NrTWFwIG5ld1NlbGVjdGVkQmxvY2tzOwotICAgIHNlbGVjdGlv
bkl0ZXJhdG9yID0gU2VsZWN0aW9uSXRlcmF0b3Ioc2VsZWN0aW9uU3RhcnQpOwotICAgIGZvciAo
YXV0byogY3VycmVudFJlbmRlcmVyID0gc2VsZWN0aW9uU3RhcnQ7IGN1cnJlbnRSZW5kZXJlciAm
JiBjdXJyZW50UmVuZGVyZXIgIT0gc2VsZWN0aW9uRW5kOyBjdXJyZW50UmVuZGVyZXIgPSBzZWxl
Y3Rpb25JdGVyYXRvci5uZXh0KCkpIHsKLSAgICAgICAgaWYgKGlzVmFsaWRSZW5kZXJlckZvclNl
bGVjdGlvbigqY3VycmVudFJlbmRlcmVyLCBtX3NlbGVjdGlvbkNvbnRleHQpKSB7Ci0gICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU2VsZWN0aW9uSW5mbz4gc2VsZWN0aW9uSW5mbyA9
IG1ha2VVbmlxdWU8UmVuZGVyU2VsZWN0aW9uSW5mbz4oKmN1cnJlbnRSZW5kZXJlciwgdHJ1ZSk7
Ci0jaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCi0gICAgICAgICAgICBmb3IgKGF1dG8mIHJl
Y3QgOiBzZWxlY3Rpb25JbmZvLT5jb2xsZWN0ZWRTZWxlY3Rpb25SZWN0cygpKQotICAgICAgICAg
ICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhlcmVyLmFkZFJlY3Qoc2VsZWN0aW9uSW5mby0+cmVw
YWludENvbnRhaW5lcigpLCByZWN0KTsKLSAgICAgICAgICAgIGlmICghY3VycmVudFJlbmRlcmVy
LT5pc1RleHRPckxpbmVCcmVhaygpKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdh
dGhlcmVyLnNldFRleHRPbmx5KGZhbHNlKTsKLSNlbmRpZgotICAgICAgICAgICAgbmV3U2VsZWN0
ZWRSZW5kZXJlcnMuc2V0KGN1cnJlbnRSZW5kZXJlciwgV1RGTW92ZShzZWxlY3Rpb25JbmZvKSk7
Ci0gICAgICAgICAgICBhdXRvKiBjb250YWluaW5nQmxvY2sgPSBjdXJyZW50UmVuZGVyZXItPmNv
bnRhaW5pbmdCbG9jaygpOwotICAgICAgICAgICAgd2hpbGUgKGNvbnRhaW5pbmdCbG9jayAmJiAh
aXM8UmVuZGVyVmlldz4oKmNvbnRhaW5pbmdCbG9jaykpIHsKLSAgICAgICAgICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyQmxvY2tTZWxlY3Rpb25JbmZvPiYgYmxvY2tJbmZvID0gbmV3U2Vs
ZWN0ZWRCbG9ja3MuYWRkKGNvbnRhaW5pbmdCbG9jaywgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVl
OwotICAgICAgICAgICAgICAgIGlmIChibG9ja0luZm8pCi0gICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgICAgIGJsb2NrSW5mbyA9IG1ha2VVbmlxdWU8UmVuZGVyQmxvY2tT
ZWxlY3Rpb25JbmZvPigqY29udGFpbmluZ0Jsb2NrKTsKLSAgICAgICAgICAgICAgICBjb250YWlu
aW5nQmxvY2sgPSBjb250YWluaW5nQmxvY2stPmNvbnRhaW5pbmdCbG9jaygpOwotI2lmIEVOQUJM
RShTRVJWSUNFX0NPTlRST0xTKQotICAgICAgICAgICAgICAgIG1fc2VsZWN0aW9uUmVjdEdhdGhl
cmVyLmFkZEdhcFJlY3RzKGJsb2NrSW5mby0+cmVwYWludENvbnRhaW5lcigpLCBibG9ja0luZm8t
PnJlY3RzKCkpOwotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICBpZiAoYmxvY2tSZXBhaW50TW9kZSA9PSBSZXBhaW50TW9kZTo6Tm90aGluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBzZWxlY3RlZCBvYmplY3RzIGNo
YW5nZWQgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24/Ci0gICAgZm9yIChhdXRvJiBzZWxl
Y3RlZFJlbmRlcmVySW5mbyA6IG9sZFNlbGVjdGlvbkRhdGEucmVuZGVyZXJzKSB7Ci0gICAgICAg
IGF1dG8qIHJlbmRlcmVyID0gc2VsZWN0ZWRSZW5kZXJlckluZm8ua2V5OwotICAgICAgICBhdXRv
KiBuZXdJbmZvID0gbmV3U2VsZWN0ZWRSZW5kZXJlcnMuZ2V0KHJlbmRlcmVyKTsKLSAgICAgICAg
YXV0byogb2xkSW5mbyA9IHNlbGVjdGVkUmVuZGVyZXJJbmZvLnZhbHVlLmdldCgpOwotICAgICAg
ICBpZiAoIW5ld0luZm8gfHwgb2xkSW5mby0+cmVjdCgpICE9IG5ld0luZm8tPnJlY3QoKSB8fCBv
bGRJbmZvLT5zdGF0ZSgpICE9IG5ld0luZm8tPnN0YXRlKCkKLSAgICAgICAgICAgIHx8IChtX3Nl
bGVjdGlvbkNvbnRleHQuc3RhcnQoKSA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rpb25EYXRhLnN0
YXJ0T2Zmc2V0ICE9IG1fc2VsZWN0aW9uQ29udGV4dC5zdGFydE9mZnNldCgpKQotICAgICAgICAg
ICAgfHwgKG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKSA9PSByZW5kZXJlciAmJiBvbGRTZWxlY3Rp
b25EYXRhLmVuZE9mZnNldCAhPSBtX3NlbGVjdGlvbkNvbnRleHQuZW5kT2Zmc2V0KCkpKSB7Ci0g
ICAgICAgICAgICBvbGRJbmZvLT5yZXBhaW50KCk7Ci0gICAgICAgICAgICBpZiAobmV3SW5mbykg
ewotICAgICAgICAgICAgICAgIG5ld0luZm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgICAgICBu
ZXdTZWxlY3RlZFJlbmRlcmVycy5yZW1vdmUocmVuZGVyZXIpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgLy8gQW55IG5ldyBvYmplY3RzIHRoYXQgcmVtYWluIHdlcmUg
bm90IGZvdW5kIGluIHRoZSBvbGQgb2JqZWN0cyBkaWN0LCBhbmQgc28gdGhleSBuZWVkIHRvIGJl
IHVwZGF0ZWQuCi0gICAgZm9yIChhdXRvJiBzZWxlY3RlZFJlbmRlcmVySW5mbyA6IG5ld1NlbGVj
dGVkUmVuZGVyZXJzKQotICAgICAgICBzZWxlY3RlZFJlbmRlcmVySW5mby52YWx1ZS0+cmVwYWlu
dCgpOwotCi0gICAgLy8gSGF2ZSBhbnkgb2YgdGhlIG9sZCBibG9ja3MgY2hhbmdlZD8KLSAgICBm
b3IgKGF1dG8mIHNlbGVjdGVkQmxvY2tJbmZvIDogb2xkU2VsZWN0aW9uRGF0YS5ibG9ja3MpIHsK
LSAgICAgICAgYXV0byogYmxvY2sgPSBzZWxlY3RlZEJsb2NrSW5mby5rZXk7Ci0gICAgICAgIGF1
dG8qIG5ld0luZm8gPSBuZXdTZWxlY3RlZEJsb2Nrcy5nZXQoYmxvY2spOwotICAgICAgICBhdXRv
KiBvbGRJbmZvID0gc2VsZWN0ZWRCbG9ja0luZm8udmFsdWUuZ2V0KCk7Ci0gICAgICAgIGlmICgh
bmV3SW5mbyB8fCBvbGRJbmZvLT5yZWN0cygpICE9IG5ld0luZm8tPnJlY3RzKCkgfHwgb2xkSW5m
by0+c3RhdGUoKSAhPSBuZXdJbmZvLT5zdGF0ZSgpKSB7Ci0gICAgICAgICAgICBvbGRJbmZvLT5y
ZXBhaW50KCk7Ci0gICAgICAgICAgICBpZiAobmV3SW5mbykgewotICAgICAgICAgICAgICAgIG5l
d0luZm8tPnJlcGFpbnQoKTsKLSAgICAgICAgICAgICAgICBuZXdTZWxlY3RlZEJsb2Nrcy5yZW1v
dmUoYmxvY2spOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQW55
IG5ldyBibG9ja3MgdGhhdCByZW1haW4gd2VyZSBub3QgZm91bmQgaW4gdGhlIG9sZCBibG9ja3Mg
ZGljdCwgYW5kIHNvIHRoZXkgbmVlZCB0byBiZSB1cGRhdGVkLgotICAgIGZvciAoYXV0byYgc2Vs
ZWN0ZWRCbG9ja0luZm8gOiBuZXdTZWxlY3RlZEJsb2NrcykKLSAgICAgICAgc2VsZWN0ZWRCbG9j
a0luZm8udmFsdWUtPnJlcGFpbnQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NlbGVjdGlvblJhbmdlRGF0YS5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBhYzYxM2Q5MjI0NGFmMWE0ZGFmOWFmMTBlMTY0ZjQyODc0Nzdh
M2JiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9TZWxlY3Rpb25SYW5nZURhdGEuaAorKysgL2Rldi9udWxsCkBA
IC0xLDEwNyArMCwwIEBACi0gLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCi0gKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZwotICogICAgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICBkaXNjbGFpbWVyIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAqICAgIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCi0gKiBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SCi0gKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKLSAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJSZW5kZXJTZWxlY3Rpb25JbmZv
LmgiCi0KLSNpZiBFTkFCTEUoU0VSVklDRV9DT05UUk9MUykKLSNpbmNsdWRlICJTZWxlY3Rpb25S
ZWN0R2F0aGVyZXIuaCIKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0cnVjdCBP
bGRTZWxlY3Rpb25EYXRhOwotICAgIAotY2xhc3MgU2VsZWN0aW9uUmFuZ2VEYXRhIHsKLXB1Ymxp
YzoKLSAgICBTZWxlY3Rpb25SYW5nZURhdGEoUmVuZGVyVmlldyYpOwotICAgIAotICAgIGNsYXNz
IENvbnRleHQgewotICAgIHB1YmxpYzoKLSAgICAgICAgQ29udGV4dCgpID0gZGVmYXVsdDsKLSAg
ICAgICAgQ29udGV4dChSZW5kZXJPYmplY3QqIHN0YXJ0LCBSZW5kZXJPYmplY3QqIGVuZCwgdW5z
aWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCkKLSAgICAgICAgICAgIDogbV9z
dGFydChtYWtlV2Vha1B0cihzdGFydCkpCi0gICAgICAgICAgICAsIG1fZW5kKG1ha2VXZWFrUHRy
KGVuZCkpCi0gICAgICAgICAgICAsIG1fc3RhcnRPZmZzZXQoc3RhcnRPZmZzZXQpCi0gICAgICAg
ICAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAg
ICAgICAgUmVuZGVyT2JqZWN0KiBzdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQuZ2V0KCk7
IH0KLSAgICAgICAgUmVuZGVyT2JqZWN0KiBlbmQoKSBjb25zdCB7IHJldHVybiBtX2VuZC5nZXQo
KTsgfQotICAgICAgICBPcHRpb25hbDx1bnNpZ25lZD4gc3RhcnRPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX3N0YXJ0T2Zmc2V0OyB9Ci0gICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBlbmRPZmZz
ZXQoKSBjb25zdCB7IHJldHVybiBtX2VuZE9mZnNldDsgfQotCi0gICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb250ZXh0JiBvdGhlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIG1fc3RhcnQgPT0gb3RoZXIubV9zdGFydCAmJiBtX2VuZCA9PSBvdGhlci5tX2VuZCAm
JiBtX3N0YXJ0T2Zmc2V0ID09IG90aGVyLm1fc3RhcnRPZmZzZXQgJiYgbV9lbmRPZmZzZXQgPT0g
b3RoZXIubV9lbmRPZmZzZXQ7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFdl
YWtQdHI8UmVuZGVyT2JqZWN0PiBtX3N0YXJ0OwotICAgICAgICBXZWFrUHRyPFJlbmRlck9iamVj
dD4gbV9lbmQ7Ci0gICAgICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtX3N0YXJ0T2Zmc2V0OwotICAg
ICAgICBPcHRpb25hbDx1bnNpZ25lZD4gbV9lbmRPZmZzZXQ7Ci0gICAgfTsKLSAgICAKLSAgICB2
b2lkIHNldENvbnRleHQoY29uc3QgQ29udGV4dCYpOwotICAgIAotICAgIGVudW0gY2xhc3MgUmVw
YWludE1vZGUgeyBOZXdYT1JPbGQsIE5ld01pbnVzT2xkLCBOb3RoaW5nIH07Ci0gICAgdm9pZCBz
ZXQoY29uc3QgQ29udGV4dCYsIFJlcGFpbnRNb2RlID0gUmVwYWludE1vZGU6Ok5ld1hPUk9sZCk7
Ci0gICAgY29uc3QgQ29udGV4dCYgZ2V0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb25Db250
ZXh0OyB9Ci0KLSAgICBSZW5kZXJPYmplY3QqIHN0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxl
Y3Rpb25Db250ZXh0LnN0YXJ0KCk7IH0KLSAgICBSZW5kZXJPYmplY3QqIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5lbmQoKTsgfQotCi0gICAgdW5zaWduZWQgc3RhcnRP
ZmZzZXQoKSBjb25zdCB7IEFTU0VSVChtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnRPZmZzZXQoKSk7
IHJldHVybiBtX3NlbGVjdGlvbkNvbnRleHQuc3RhcnRPZmZzZXQoKS52YWx1ZU9yKDApOyB9Ci0g
ICAgdW5zaWduZWQgZW5kT2Zmc2V0KCkgY29uc3QgeyBBU1NFUlQobV9zZWxlY3Rpb25Db250ZXh0
LmVuZE9mZnNldCgpKTsgcmV0dXJuIG1fc2VsZWN0aW9uQ29udGV4dC5lbmRPZmZzZXQoKS52YWx1
ZU9yKDApOyB9Ci0KLSAgICB2b2lkIGNsZWFyKCk7Ci0gICAgSW50UmVjdCBib3VuZHMoKSBjb25z
dCB7IHJldHVybiBjb2xsZWN0Qm91bmRzKENsaXBUb1Zpc2libGVDb250ZW50OjpObyk7IH0KLSAg
ICBJbnRSZWN0IGJvdW5kc0NsaXBwZWRUb1Zpc2libGVDb250ZW50KCkgY29uc3QgeyByZXR1cm4g
Y29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudDo6WWVzKTsgfQotICAgIHZvaWQgcmVw
YWludCgpIGNvbnN0OwotICAgIAotICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc2Vs
ZWN0aW9uU3RhdGVGb3JSZW5kZXJlcihSZW5kZXJPYmplY3QmKTsKLQotcHJpdmF0ZToKLSAgICBl
bnVtIGNsYXNzIENsaXBUb1Zpc2libGVDb250ZW50IHsgWWVzLCBObyB9OwotICAgIEludFJlY3Qg
Y29sbGVjdEJvdW5kcyhDbGlwVG9WaXNpYmxlQ29udGVudCkgY29uc3Q7Ci0gICAgdm9pZCBhcHBs
eShjb25zdCBDb250ZXh0JiwgUmVwYWludE1vZGUpOwotCi0gICAgY29uc3QgUmVuZGVyVmlldyYg
bV9yZW5kZXJWaWV3OwotI2lmIEVOQUJMRShTRVJWSUNFX0NPTlRST0xTKQotICAgIFNlbGVjdGlv
blJlY3RHYXRoZXJlciBtX3NlbGVjdGlvblJlY3RHYXRoZXJlcjsKLSNlbmRpZgotICAgIENvbnRl
eHQgbV9zZWxlY3Rpb25Db250ZXh0OwotICAgIGJvb2wgbV9zZWxlY3Rpb25XYXNDYXJldCB7IGZh
bHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKaW5kZXggZjEwZGMwYmNjNzlhYTRkNTQ0MjE2
OWE4MWY3MTBjNWViZDA4MDFhZC4uN2FkNGUxOWJkYmJhYWNlNWM5NjY3ZDJkNTFhYWQwMjViYjlm
NmJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNw
cApAQCAtMzA3LDcgKzMwNyw3IEBAIEF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvcldpdGhS
ZWFzb24oY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBJbmNsdWRlUmVhCiAgICAgLy8gVGhp
cyBjdXJyZW50bHkgY292ZXJzIDxibG9ja2Zsb3c+I3RleHQ8L2Jsb2NrZmxvdz4sIDxibG9ja2Zs
b3c+I3RleHQ8YnI+PC9ibG9ja2Zsb3c+IGFuZCBtdXRpcGxlIChzaWJsaW5nKSBSZW5kZXJUZXh0
IGNhc2VzLgogICAgIC8vIFRoZSA8YmxvY2tmbG93PjxpbmxpbmU+I3RleHQ8L2lubGluZT48L2Js
b2NrZmxvdz4gY2FzZSBpcyBhbHNvIHBvcHVsYXIgYW5kIHNob3VsZCBiZSByZWxhdGl2ZWx5IGVh
c3kgdG8gY292ZXIuCiAgICAgZm9yIChjb25zdCBhdXRvKiBjaGlsZCA9IGZsb3cuZmlyc3RDaGls
ZCgpOyBjaGlsZDspIHsKLSAgICAgICAgaWYgKGNoaWxkLT5zZWxlY3Rpb25TdGF0ZSgpICE9IFJl
bmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkKKyAgICAgICAgaWYgKGNoaWxkLT5zZWxlY3Rpb25T
dGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmUpCiAgICAgICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dDaGlsZElzU2VsZWN0ZWQsIHJl
YXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICAgICAgaWYgKGlzPFJlbmRlclRleHQ+KCpjaGls
ZCkpIHsKICAgICAgICAgICAgIGNvbnN0IGF1dG8mIHJlbmRlclRleHQgPSBkb3duY2FzdDxSZW5k
ZXJUZXh0PigqY2hpbGQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAKaW5kZXggNTVjMmI3OTk5YjI1YTExMzAxODMyNWFmNzU1NmY4Zjgz
NjI0N2VjMS4uZmNlZGIzYmE0NWQyNzVhNDUzMmU0NDExOTI4ODdhMGI1MmZmMGMwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBA
IC0xODksNyArMTg5LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJh
Y2tncm91bmQoUGFpbnRJbmZvJiBwYWludEluZm8pCiAKICAgICAvLyBEZXRlcm1pbmUgd2hldGhl
ciBvciBub3Qgd2UncmUgc2VsZWN0ZWQuCiAgICAgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkg
PSBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uOwotICAgIGJvb2wgaGFz
U2VsZWN0aW9uID0gc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5v
bmU7CisgICAgYm9vbCBoYXNTZWxlY3Rpb24gPSBzZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9i
amVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CiAgICAgaWYgKCFoYXNTZWxlY3Rpb24gfHwgcGFp
bnRTZWxlY3RlZFRleHRPbmx5KQogICAgICAgICByZXR1cm47CiAKQEAgLTI0Nyw3ICsyNDcsNyBA
QCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25z
dCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZQogCiAgICAgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9u
bHkgPSBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uOwogICAgIGJvb2wg
c2hvdWxkUGFpbnRTZWxlY3Rpb25IaWdobGlnaHQgPSAhKHBhaW50SW5mby5wYWludEJlaGF2aW9y
LmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OlNraXBTZWxlY3Rpb25IaWdobGlnaHQpKTsKLSAgICBi
b29sIGhhc1NlbGVjdGlvbiA9ICFwYXJlbnRSZW5kZXJlci5kb2N1bWVudCgpLnByaW50aW5nKCkg
JiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmU7CisgICAg
Ym9vbCBoYXNTZWxlY3Rpb24gPSAhcGFyZW50UmVuZGVyZXIuZG9jdW1lbnQoKS5wcmludGluZygp
ICYmIHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpIaWdobGlnaHRTdGF0ZTo6Tm9u
ZTsKICAgICBpZiAoIWhhc1NlbGVjdGlvbiAmJiBwYWludFNlbGVjdGVkVGV4dE9ubHkpCiAgICAg
ICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdSb290SW5saW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHUm9v
dElubGluZUJveC5jcHAKaW5kZXggYmY1ZjNhZGZiMzZkODg0MTFlMjYzZWJhYTE4YTU3YjNhODI1
YzE5NC4uZmYyMTllOTk3ODAwZWQyMjlkODU1YmJjOWRjNGU5M2QxZGI2YTNkMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdSb290SW5saW5lQm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1Jvb3RJbmxpbmVCb3guY3BwCkBAIC01
NSw3ICs1NSw3IEBAIHZvaWQgU1ZHUm9vdElubGluZUJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWlu
dEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNlCiAgICAgQVNTRVJUKCFwYWludElu
Zm8uY29udGV4dCgpLnBhaW50aW5nRGlzYWJsZWQoKSk7CiAKICAgICBib29sIGlzUHJpbnRpbmcg
PSByZW5kZXJTVkdUZXh0KCkuZG9jdW1lbnQoKS5wcmludGluZygpOwotICAgIGJvb2wgaGFzU2Vs
ZWN0aW9uID0gIWlzUHJpbnRpbmcgJiYgc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbk5vbmU7CisgICAgYm9vbCBoYXNTZWxlY3Rpb24gPSAhaXNQcmludGluZyAmJiBz
ZWxlY3Rpb25TdGF0ZSgpICE9IFJlbmRlck9iamVjdDo6SGlnaGxpZ2h0U3RhdGU6Ok5vbmU7CiAg
ICAgYm9vbCBzaG91bGRQYWludFNlbGVjdGlvbkhpZ2hsaWdodCA9ICEocGFpbnRJbmZvLnBhaW50
QmVoYXZpb3IuY29udGFpbnMoUGFpbnRCZWhhdmlvcjo6U2tpcFNlbGVjdGlvbkhpZ2hsaWdodCkp
OwogCiAgICAgUGFpbnRJbmZvIGNoaWxkUGFpbnRJbmZvKHBhaW50SW5mbyk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>